C# SDK Samples - Bulk Write Operations
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using Com.Zoho.Crm.API;
using Com.Zoho.Crm.API.BulkWrite;
using Com.Zoho.Crm.API.Users;
using Com.Zoho.Crm.API.Util;
using Newtonsoft.Json;
using static Com.Zoho.Crm.API.BulkWrite.BulkWriteOperations;
using ActionResponse = Com.Zoho.Crm.API.BulkWrite.ActionResponse;
using APIException = Com.Zoho.Crm.API.BulkWrite.APIException;
using File = Com.Zoho.Crm.API.BulkWrite.File;
using RequestWrapper = Com.Zoho.Crm.API.BulkWrite.RequestWrapper;
using ResponseHandler = Com.Zoho.Crm.API.BulkWrite.ResponseHandler;
using ResponseWrapper = Com.Zoho.Crm.API.BulkWrite.ResponseWrapper;
using SuccessResponse = Com.Zoho.Crm.API.BulkWrite.SuccessResponse;
namespace Com.Zoho.Crm.Sample.BulkWrite
{
public class BulkWrite
{
///
/// This method is used to upload a CSV file in ZIP format for bulk write API. The response contains the file_id.
/// Use this ID while making the bulk write request.
///
/// The unique ID (zgid) of your organization obtained through the Organization API.
/// The absoluteFilePath of the zip file you want to upload.
public static void UploadFile(string orgID, string absoluteFilePath)
{
//example
//string absoluteFilePath = "/Users/user_name/Documents/Leads.zip";
//string orgID = "673573045";
//Get instance of BulkWriteOperations Class
BulkWriteOperations bulkWriteOperations = new BulkWriteOperations();
//Get instance of FileBodyWrapper class that will contain the request file
FileBodyWrapper fileBodyWrapper = new FileBodyWrapper();
//Get instance of StreamWrapper class that takes absolute path of the file to be attached as parameter
StreamWrapper streamWrapper = new StreamWrapper(absoluteFilePath);
//FileInfo fileInfo = new FileInfo(absoluteFilePath);
//Get instance of StreamWrapper class that takes file name and stream of the file to be attached as parameter
//StreamWrapper streamWrapper = new StreamWrapper(fileInfo.Name, fileInfo.OpenRead());
//Set file to the FileBodyWrapper instance
fileBodyWrapper.File = streamWrapper;
//Get instance of HeaderMap Class
HeaderMap headerInstance = new HeaderMap();
//To indicate that this a bulk write operation
headerInstance.Add(UploadFileHeader.FEATURE, "bulk-write");
headerInstance.Add(UploadFileHeader.X_CRM_ORG, orgID);
//Call uploadFile method that takes FileBodyWrapper instance and headerInstance as parameter
APIResponse<ActionResponse> response = bulkWriteOperations.UploadFile(fileBodyWrapper, headerInstance);
if(response != null)
{
//Get the status code from response
Console.WriteLine("Status Code: " + response.StatusCode);
//Check if expected response is received
if(response.IsExpected)
{
//Get object from response
ActionResponse actionResponse = response.Object;
//Check if the request is successful
if(actionResponse is SuccessResponse)
{
//Get the received SuccessResponse instance
SuccessResponse successResponse = (SuccessResponse)actionResponse;
//Get the Status
Console.WriteLine("Status: " + successResponse.Status.Value);
//Get the Code
Console.WriteLine("Code: " + successResponse.Code.Value);
Console.WriteLine("Details: " );
//Get the details map
foreach(KeyValuePair<string, object> entry in successResponse.Details)
{
//Get each value in the map
Console.WriteLine(entry.Key + " : " + JsonConvert.SerializeObject(entry.Value));
}
//Get the Message
Console.WriteLine("Message: " + successResponse.Message.Value);
}
//Check if the request returned an exception
else if(actionResponse is APIException)
{
//Get the received APIException instance
APIException exception = (APIException) actionResponse;
if(exception.Status != null)
{
//Get the Status
Console.WriteLine("Status: " + exception.Status.Value);
}
if(exception.Code != null)
{
//Get the Code
Console.WriteLine("Code: " + exception.Code.Value);
}
if(exception.Message != null)
{
//Get the Message
Console.WriteLine("Message: " + exception.Message.Value);
}
Console.WriteLine("Details: " );
if(exception.Details != null)
{
//Get the details map
foreach(KeyValuePair<string, object> entry in exception.Details)
{
//Get each value in the map
Console.WriteLine(entry.Key + ": " + JsonConvert.SerializeObject(entry.Value));
}
}
if(exception.ErrorMessage != null)
{
//Get the ErrorMessage
Console.WriteLine("ErrorMessage: " + exception.ErrorMessage.Value);
}
//Get the ErrorCode
Console.WriteLine("ErrorCode: " + exception.ErrorCode);
if(exception.XError != null)
{
//Get the XError
Console.WriteLine("XError: " + exception.XError.Value);
}
if(exception.Info != null)
{
//Get the Info
Console.WriteLine("Info: " + exception.Info.Value);
}
if(exception.XInfo != null)
{
//Get the XInfo
Console.WriteLine("XInfo: " + exception.XInfo.Value);
}
//Get the HttpStatus
Console.WriteLine("HttpStatus: " + exception.HttpStatus);
}
}
else
{ //If response is not as expected
//Get model object from response
Model responseObject = response.Model;
//Get the response object's class
Type type = responseObject.GetType();
//Get all declared fields of the response class
Console.WriteLine("Type is: {0}", type.Name);
PropertyInfo[] props = type.GetProperties();
Console.WriteLine("Properties (N = {0}):", props.Length);
foreach (var prop in props)
{
if (prop.GetIndexParameters().Length == 0)
{
Console.WriteLine("{0} ({1}) : {2}", prop.Name, prop.PropertyType.Name, prop.GetValue(responseObject));
}
else
{
Console.WriteLine("{0} ({1}) : <Indexed>", prop.Name, prop.PropertyType.Name);
}
}
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using Com.Zoho.Crm.API;
using Com.Zoho.Crm.API.BulkWrite;
using Com.Zoho.Crm.API.Users;
using Com.Zoho.Crm.API.Util;
using Newtonsoft.Json;
using static Com.Zoho.Crm.API.BulkWrite.BulkWriteOperations;
using ActionResponse = Com.Zoho.Crm.API.BulkWrite.ActionResponse;
using APIException = Com.Zoho.Crm.API.BulkWrite.APIException;
using File = Com.Zoho.Crm.API.BulkWrite.File;
using RequestWrapper = Com.Zoho.Crm.API.BulkWrite.RequestWrapper;
using ResponseHandler = Com.Zoho.Crm.API.BulkWrite.ResponseHandler;
using ResponseWrapper = Com.Zoho.Crm.API.BulkWrite.ResponseWrapper;
using SuccessResponse = Com.Zoho.Crm.API.BulkWrite.SuccessResponse;
namespace Com.Zoho.Crm.Sample.BulkWrite
{
public class BulkWrite
{
///
/// This method is used to get the details of a bulk write job performed previously.
///
/// The unique ID of the bulk write job.
public static void GetBulkWriteJobDetails(long jobId)
{
//example
//long jobId = 34770615615003;
//Get instance of BulkWriteOperations Class
BulkWriteOperations bulkWriteOperations = new BulkWriteOperations();
//Call GetBulkWriteJobDetails method that takes jobId as parameter
APIResponse<ResponseWrapper> response = bulkWriteOperations.GetBulkWriteJobDetails(jobId);
if(response != null)
{
//Get the status code from response
Console.WriteLine("Status Code: " + response.StatusCode);
if(new List<int>() { 204, 304 }.Contains(response.StatusCode))
{
Console.WriteLine(response.StatusCode == 204? "No Content" : "Not Modified");
return;
}
//Check if expected response is received
if(response.IsExpected)
{
//Get object from response
ResponseWrapper responseWrapper = response.Object;
if(responseWrapper is BulkWriteResponse)
{
//Get the received BulkWriteResponse instance
BulkWriteResponse bulkWriteResponse = (BulkWriteResponse) responseWrapper;
//Get the Job Status of each bulkWriteResponse
Console.WriteLine("Bulk write Job Status: " + bulkWriteResponse.Status);
//Get the CharacterEncoding of each bulkWriteResponse
Console.WriteLine("Bulk write CharacterEncoding: " + bulkWriteResponse.CharacterEncoding);
List<Resource> resources = bulkWriteResponse.Resource;
if(resources != null)
{
foreach(Resource resource in resources)
{
//Get the Status of each Resource
Console.WriteLine("Bulk write Resource Status: " + resource.Status.Value);
//Get the Type of each Resource
Console.WriteLine("Bulk write Resource Type: " + resource.Type.Value);
//Get the Module of each Resource
Console.WriteLine("Bulk write Resource Module: " + resource.Module);
List<FieldMapping> fieldMappings = resource.FieldMappings;
if(fieldMappings != null)
{
foreach(FieldMapping fieldMapping in fieldMappings)
{
//Get the APIName of each FieldMapping
Console.WriteLine("Bulk write Resource FieldMapping Module: " + fieldMapping.APIName);
if(fieldMapping.Index != null)
{
//Get the Index of each FieldMapping
Console.WriteLine("Bulk write Resource FieldMapping Index: " + fieldMapping.Index);
}
if(fieldMapping.Format != null)
{
//Get the Format of each FieldMapping
Console.WriteLine("Bulk write Resource FieldMapping Format: " + fieldMapping.Format);
}
if(fieldMapping.FindBy != null)
{
//Get the FindBy of each FieldMapping
Console.WriteLine("Bulk write Resource FieldMapping FindBy: " + fieldMapping.FindBy);
}
if(fieldMapping.DefaultValue != null)
{
//Get all entries from the keyValues map
foreach(KeyValuePair<string, object> entry in fieldMapping.DefaultValue)
{
//Get each value from the map
Console.WriteLine(entry.Key + " : " + JsonConvert.SerializeObject(entry.Value));
}
}
}
}
Com.Zoho.Crm.API.BulkWrite.File file = resource.File;
if(file != null)
{
//Get the Status of each File
Console.WriteLine("Bulk write Resource File Status: " + file.Status.Value);
//Get the Name of each File
Console.WriteLine("Bulk write Resource File Name: " + file.Name);
//Get the AddedCount of each File
Console.WriteLine("Bulk write Resource File AddedCount: " + file.AddedCount);
//Get the SkippedCount of each File
Console.WriteLine("Bulk write Resource File SkippedCount: " + file.SkippedCount);
//Get the UpdatedCount of each File
Console.WriteLine("Bulk write Resource File UpdatedCount: " + file.UpdatedCount);
//Get the TotalCount of each File
Console.WriteLine("Bulk write Resource File TotalCount: " + file.TotalCount);
}
Console.WriteLine("Bulk write Resource FindBy: " + resource.FindBy);
}
}
CallBack callback = bulkWriteResponse.Callback;
if(callback != null)
{
//Get the CallBack Url
Console.WriteLine("Bulk write CallBack Url: " + callback.Url);
//Get the CallBack Method
Console.WriteLine("Bulk write CallBack Method: " + callback.Method.Value);
}
//Get the ID of each BulkWriteResponse
Console.WriteLine("Bulk write ID: " + bulkWriteResponse.Id);
Result result = bulkWriteResponse.Result;
if(result != null)
{
//Get the DownloadUrl of the Result
Console.WriteLine("Bulk write DownloadUrl: " + result.DownloadUrl);
}
//Get the CreatedBy User instance of each BulkWriteResponse
User createdBy = bulkWriteResponse.CreatedBy;
//Check if createdBy is not null
if(createdBy != null)
{
//Get the ID of the CreatedBy User
Console.WriteLine("Bulkread Created By User-ID: " + createdBy.Id);
//Get the Name of the CreatedBy User
Console.WriteLine("Bulkread Created By user-Name: " + createdBy.Name);
}
//Get the Operation of each BulkWriteResponse
Console.WriteLine("Bulk write Operation: " + bulkWriteResponse.Operation);
//Get the CreatedTime of each BulkWriteResponse
Console.WriteLine("Bulk write File CreatedTime: " + bulkWriteResponse.CreatedTime);
}
//Check if the request returned an exception
else if(responseWrapper is APIException)
{
//Get the received APIException instance
APIException exception = (APIException) responseWrapper;
//Get the Status
Console.WriteLine("Status: " + exception.Status.Value);
//Get the Code
Console.WriteLine("Code: " + exception.Code.Value);
Console.WriteLine("Details: " );
//Get the details map
foreach(KeyValuePair<string, object> entry in exception.Details)
{
//Get each value in the map
Console.WriteLine(entry.Key + ": " + JsonConvert.SerializeObject(entry.Value));
}
//Get the Message
Console.WriteLine("Message: " + exception.Message.Value);
}
}
else
{ //If response is not as expected
//Get model object from response
Model responseObject = response.Model;
//Get the response object's class
Type type = responseObject.GetType();
//Get all declared fields of the response class
Console.WriteLine("Type is: {0}", type.Name);
PropertyInfo[] props = type.GetProperties();
Console.WriteLine("Properties (N = {0}):", props.Length);
foreach (var prop in props)
{
if (prop.GetIndexParameters().Length == 0)
{
Console.WriteLine("{0} ({1}) : {2}", prop.Name, prop.PropertyType.Name, prop.GetValue(responseObject));
}
else
{
Console.WriteLine("{0} ({1}) : <Indexed>", prop.Name, prop.PropertyType.Name);
}
}
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using Com.Zoho.Crm.API;
using Com.Zoho.Crm.API.BulkWrite;
using Com.Zoho.Crm.API.Users;
using Com.Zoho.Crm.API.Util;
using Newtonsoft.Json;
using static Com.Zoho.Crm.API.BulkWrite.BulkWriteOperations;
using ActionResponse = Com.Zoho.Crm.API.BulkWrite.ActionResponse;
using APIException = Com.Zoho.Crm.API.BulkWrite.APIException;
using File = Com.Zoho.Crm.API.BulkWrite.File;
using RequestWrapper = Com.Zoho.Crm.API.BulkWrite.RequestWrapper;
using ResponseHandler = Com.Zoho.Crm.API.BulkWrite.ResponseHandler;
using ResponseWrapper = Com.Zoho.Crm.API.BulkWrite.ResponseWrapper;
using SuccessResponse = Com.Zoho.Crm.API.BulkWrite.SuccessResponse;
namespace Com.Zoho.Crm.Sample.BulkWrite
{
public class BulkWrite
{
///
/// This method is used to download the result of the bulk write job as a CSV file.
///
/// The URL present in the download_url parameter in the response of Get Bulk Write Job Details.
/// The absolute path where downloaded file has to be stored.
public static void DownloadBulkWriteResult(string downloadUrl, string destinationFolder)
{
//example
//string downloadUrl = "https://download-accl.zoho.com/v2/crm/6735/bulk-write/347706122009/347706122009.zip";
//string destinationFolder = "/Users/user_name/Documents";
//Get instance of BulkWriteOperations Class
BulkWriteOperations bulkWriteOperations = new BulkWriteOperations();
//Call DownloadBulkWriteResult method that takes downloadUrl as parameter
APIResponse<ResponseHandler> response = bulkWriteOperations.DownloadBulkWriteResult(downloadUrl);
if(response != null)
{
//Get the status code from response
Console.WriteLine("Status Code: " + response.StatusCode);
if(new List<int>() { 204, 304 }.Contains(response.StatusCode))
{
Console.WriteLine(response.StatusCode == 204? "No Content" : "Not Modified");
return;
}
//Check if expected response is received
if(response.IsExpected)
{
//Get object from response
ResponseHandler responseHandler = response.Object;
if(responseHandler is FileBodyWrapper)
{
//Get object from response
FileBodyWrapper fileBodyWrapper = (FileBodyWrapper)responseHandler;
//Get StreamWrapper instance from the returned FileBodyWrapper instance
StreamWrapper streamWrapper = fileBodyWrapper.File;
Stream file = streamWrapper.Stream;
string fullFilePath = Path.Combine(destinationFolder, streamWrapper.Name);
using (FileStream outputFileStream = new FileStream(fullFilePath, FileMode.Create))
{
file.CopyTo(outputFileStream);
}
}
//Check if the request returned an exception
else if(responseHandler is APIException)
{
//Get the received APIException instance
APIException exception = (APIException) responseHandler;
if(exception.Status != null)
{
//Get the Status
Console.WriteLine("Status: " + exception.Status.Value);
}
if(exception.Code != null)
{
//Get the Code
Console.WriteLine("Code: " + exception.Code.Value);
}
if(exception.Details != null)
{
Console.WriteLine("Details: " );
//Get the details map
foreach(KeyValuePair<string, object> entry in exception.Details)
{
//Get each value in the map
Console.WriteLine(entry.Key + " : " + JsonConvert.SerializeObject(entry.Value));
}
}
if(exception.Message != null)
{
//Get the Message
Console.WriteLine("Message: " + exception.Message.Value);
}
if(exception.XError != null)
{
//Get the Message
Console.WriteLine("XError: " + exception.XError.Value);
}
if(exception.XInfo != null)
{
//Get the Message
Console.WriteLine("XInfo: " + exception.XInfo.Value);
}
if(exception.HttpStatus != null)
{
//Get the Message
Console.WriteLine("Message: " + exception.HttpStatus);
}
}
}
else
{ //If response is not as expected
//Get model object from response
Model responseObject = response.Model;
//Get the response object's class
Type type = responseObject.GetType();
//Get all declared fields of the response class
Console.WriteLine("Type is: {0}", type.Name);
PropertyInfo[] props = type.GetProperties();
Console.WriteLine("Properties (N = {0}):", props.Length);
foreach (var prop in props)
{
if (prop.GetIndexParameters().Length == 0)
{
Console.WriteLine("{0} ({1}) : {2}", prop.Name, prop.PropertyType.Name, prop.GetValue(responseObject));
}
else
{
Console.WriteLine("{0} ({1}) : <Indexed>", prop.Name, prop.PropertyType.Name);
}
}
}
}
}
}
}