C# SDK - Bulk Write API
Use the below code to upload a CSV file in ZIP format. The response contains the "file_id". Use this ID while making the bulk write request. For more details, refer to the Upload File page of our API guide.
public void UploadFile()
{
try
{
ZCRMBulkWrite writeIns = ZCRMRestClient.GetInstance().GetBulkWriteInstance();// To get ZCRMBulkWrite instance
Dictionary<string,string> headers = new Dictionary<string,string>();
headers.Add("X-CRM-ORG", "6045"); // The unique ID (zgid) of your organization obtained through the Organization API
headers.Add("feature", "bulk-write");// To indicate that this a bulk write operation
APIResponse resp = writeIns.UploadFile("/Users/Documents/filename.zip", headers); // To give the zip file and headers you want to upload.
Console.WriteLine(resp.Message);
Console.WriteLine(resp.Status);
Console.WriteLine(resp.ResponseJSON);
Console.WriteLine(resp.HttpStatusCode);
ZCRMAttachment attach = (ZCRMAttachment)resp.Data;
if(attach != null)
{
Console.WriteLine(attach.Id);// To get Id of the uploaded file.
Console.WriteLine(attach.CreatedTime);
}
}
catch(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
Use the below code to upload the zip containing the CSV file as a stream. The response contains the "file_id". Use this ID while making the bulk write request. For more details, refer to the Upload File page of our API guide.
public void UploadFile()
{
ZCRMBulkWrite write = ZCRMRestClient.GetInstance().GetBulkWriteInstance();// To get ZCRMBulkWrite instance
Dictionary<string,string> headers = new Dictionary<string,string>();
headers.Add("X-CRM-ORG", "6045"); // The unique ID (zgid) of your organization obtained through the Organization API
headers.Add("feature", "bulk-write"); // To indicate that this a bulk write operation
FileInfo fileInfo = new FileInfo("/Users/Documents/filename.zip");// To give the zip file and headers you want to upload.
FileStream fileStream = fileInfo.OpenRead();
APIResponse resp = write.UploadFile(fileStream, fileInfo.Name, headers);
Console.WriteLine(resp.Message);
Console.WriteLine(resp.Status);
Console.WriteLine(resp.ResponseJSON);
Console.WriteLine(resp.HttpStatusCode);
ZCRMAttachment attach = (ZCRMAttachment)resp.Data;
if (attach != null)
{
Console.WriteLine(attach.Id);// To get Id of the uploaded file.
Console.WriteLine(attach.CreatedTime);
}
}
Use the below code to create a bulk write job to insert records. The response contains the "job_id". Use this ID while making the bulk write request. For more details, refer to the Create a Bulk Write Job page of our API guide.
public void CreateBulkWriteJob()
{
try
{
ZCRMBulkWrite writeJob = ZCRMRestClient.GetInstance().GetBulkWriteInstance(); // To get ZCRMBulkWrite instance
writeJob.Operation = "insert"; //To set the type of operation you want to perform on the bulk write job.
writeJob.CharacterEncoding = "UTF-8";
ZCRMBulkCallBack callBack = ZCRMBulkCallBack.GetInstance();
callBack.Url = "https://www.zoho.com/";
callBack.Method = "post";
writeJob.Callback = callBack;
ZCRMBulkWriteResource resourceIns = ZCRMBulkWriteResource.GetInstance("ModuleAPIName", 432421441); //Specify the ModuleAPIName and the uploaded file Id.
resourceIns.Type = "data";// To set the type of module that you want to import. The value is data.
resourceIns.IgnoreEmpty = true;//True - Ignores the empty values.The default value is false.
ZCRMBulkWriteFieldMapping fieldMappings;
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Last_Name", 0);//To get ZCRMBulkWriteFieldMapping instance using Field APIName and column index of the field in the uploaded file.
resourceIns.SetFieldMapping(fieldMappings);// To set the ZCRMBulkWriteFieldMapping instance to ZCRMBulkWriteResource.
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Email", 1);
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Company", 2);
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Phone", 3);
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Website", null);
fieldMappings.SetDefaultValue("value", "https://www.zohoapis.com");//To set the default value for an empty column in the uploaded file.
resourceIns.SetFieldMapping(fieldMappings);
writeJob.SetResource(resourceIns);// To set ZCRMBulkWriteFieldMapping instance
APIResponse resp = writeJob.CreateBulkWriteJob();// To create bulk write job.
Console.WriteLine(resp.Message);
Console.WriteLine(resp.Status);
Console.WriteLine(resp.HttpStatusCode);
Console.WriteLine(resp.ResponseJSON);
ZCRMBulkWrite write = (ZCRMBulkWrite)resp.Data;// To get ZCRMBulkWrite instance.
Console.WriteLine(write.JobId);// To get bulk write job Id.
Console.WriteLine(write.CreatedBy.Id);
Console.WriteLine(write.CreatedBy.FullName);
}
catch(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
Use the below code to create a bulk write job to update records. The response contains the "job_id". Use this ID while making the bulk write request. This operation does not create new records when a match is not found in CRM. For more details, refer to the Create a Bulk Write Job page of our API guide.
public void UpdateBulkWriteJob()
{
try
{
ZCRMBulkWrite writeJob = ZCRMRestClient.GetInstance().GetBulkWriteInstance();
writeJob.CharacterEncoding = "UTF-8";
writeJob.Operation = "update";
ZCRMBulkCallBack callBackIns = ZCRMBulkCallBack.GetInstance("https://www.zoho.com", "post");
writeJob.Callback = callBackIns;
ZCRMBulkWriteResource resourceIns = ZCRMBulkWriteResource.GetInstance("ModuleAPIName", 432421441); //432421441 uploaded file id
resourceIns.IgnoreEmpty = true;
resourceIns.FindBy = "Email";// To set a field as a unique field or ID of a record.
resourceIns.Type = "data";
ZCRMBulkWriteFieldMapping fieldMappings;
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Last_Name", 0);
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Email", 1);
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Company", 2);
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Phone", 3);
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Website", null);
fieldMappings.SetDefaultValue("value", "https://www.zohoapis.com");
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Contacts", 4);
fieldMappings.FindBy = "Email";// To set a field as a unique field or ID of a record.
resourceIns.SetFieldMapping(fieldMappings);
writeJob.SetResource(resourceIns);
APIResponse resp = writeJob.CreateBulkWriteJob();
Console.WriteLine(resp.Message);
Console.WriteLine(resp.Status);
Console.WriteLine(resp.HttpStatusCode);
Console.WriteLine(resp.ResponseJSON);
ZCRMBulkWrite write = (ZCRMBulkWrite)resp.Data;
Console.WriteLine(write.JobId);
Console.WriteLine(write.CreatedBy.Id);
Console.WriteLine(write.CreatedBy.FullName);
}
catch(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
Use the below code to create a bulk write job to upsert records. The response contains the "job_id". Use this ID while making the bulk write request. This operation updates an existing record, and create new records, if it does not exist already. For more details, refer to the Create a Bulk Write Job page of our API guide.
public void UpsertBulkWriteJob()
{
try
{
ZCRMBulkWrite writeJob = ZCRMRestClient.GetInstance().GetBulkWriteInstance();
writeJob.CharacterEncoding = "UTF-8";
writeJob.Operation = "upsert";
ZCRMBulkCallBack callBackIns = ZCRMBulkCallBack.GetInstance("https://www.zoho.com", "post");
writeJob.Callback = callBackIns;
ZCRMBulkWriteResource resourceIns = ZCRMBulkWriteResource.GetInstance("ModuleAPIName", 432421441); //432421441 uploaded file id
resourceIns.IgnoreEmpty = true;
resourceIns.FindBy = "Email";
resourceIns.Type = "data";
ZCRMBulkWriteFieldMapping fieldMappings;
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Last_Name", 0);
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Email", 1);
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Company", 2);
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Phone", 3);
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Website", null);
fieldMappings.SetDefaultValue("value", "https://www.zoho.com");
resourceIns.SetFieldMapping(fieldMappings);
fieldMappings = ZCRMBulkWriteFieldMapping.GetInstance("Contacts", 4);
fieldMappings.FindBy = "Email";
resourceIns.SetFieldMapping(fieldMappings);
writeJob.SetResource(resourceIns);
APIResponse resp = writeJob.CreateBulkWriteJob();
Console.WriteLine(resp.Message);
Console.WriteLine(resp.Status);
Console.WriteLine(resp.HttpStatusCode);
Console.WriteLine(resp.ResponseJSON);
ZCRMBulkWrite write = (ZCRMBulkWrite)resp.Data;
Console.WriteLine(write.JobId);
Console.WriteLine(write.CreatedBy.Id);
Console.WriteLine(write.CreatedBy.FullName);
}
catch(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
Use the below code to know the status of the bulk write job scheduled previously. For more details, refer to Get Job Details page of our API guide.
public void GetBulkWriteJobDetails()
{
try
{
ZCRMBulkWrite writeJob = ZCRMRestClient.GetInstance().GetBulkWriteInstance(34770610); // To get ZCRMBulkWrite instance using bulk write job Id.
APIResponse response = writeJob.GetBulkWriteJobDetails();// To get bulk write job details
Console.WriteLine(response.Message);
Console.WriteLine(response.Status);
Console.WriteLine(response.HttpStatusCode);
Console.WriteLine(resresponsep.ResponseJSON);
ZCRMBulkWrite writeIns = (ZCRMBulkWrite)response.Data;// To get ZCRMBulkWrite instance
Console.WriteLine(writeIns.JobId);// To get bulk read job Id.
Console.WriteLine(writeIns.CreatedTime);
Console.WriteLine(writeIns.CreatedBy.Id);
Console.WriteLine(writeIns.CreatedBy.FullName);
Console.WriteLine(writeIns.Status);// To get bulk read job status.
Console.WriteLine(writeIns.CharacterEncoding);
Console.WriteLine(writeIns.Operation);
List<ZCRMBulkWriteResource> resources = writeIns.Resources;
foreach(ZCRMBulkWriteResource resource in resources)
{
Console.WriteLine(resource.Status);// To get the status of the bulk write job for that module.
Console.WriteLine(resource.Type);
Console.WriteLine(resource.ModuleAPIName);
List<ZCRMBulkWriteFieldMapping> fieldMappings = resource.FieldMapping;
foreach(ZCRMBulkWriteFieldMapping fieldMapping in fieldMappings)
{
Console.WriteLine(fieldMapping.FieldAPIName);
Console.WriteLine(fieldMapping.Index);
Console.WriteLine(fieldMapping.FindBy);
if(fieldMapping.DefaultValue != null )
{
foreach (KeyValuePair<string,object> defaultvalue in fieldMapping.DefaultValue)
{
Console.WriteLine(defaultvalue.Key+" : "+ defaultvalue.Value);
}
}
}
ZCRMBulkWriteFileStatus resourceFile = resource.FileStatus;// To get ZCRMBulkWriteFileStatus instance
Console.WriteLine(resourceFile.Status);
Console.WriteLine(resourceFile.FileName);// To get the name of the CSV file which will get downloaded.
Console.WriteLine(resourceFile.AddedCount);
Console.WriteLine(resourceFile.SkippedCount);
Console.WriteLine(resourceFile.UpdatedCount);
Console.WriteLine(resourceFile.TotalCount);
}
ZCRMBulkCallBack callBack = writeIns.Callback;// To get ZCRMBulkCallBack instance
Console.WriteLine(callBack.Url);
Console.WriteLine(callBack.Method);
ZCRMBulkResult result = writeIns.Result;// To get ZCRMBulkResult instance
Console.WriteLine(result.DownloadUrl);//To get the download URL from which you can download the result(CSV file) of the bulk write job.
}
catch(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
Use the below code to download the result of the bulk write job. The response contains a zip file. Extract it to get the CSV file. For more details, refer to the Download Result page of our API guide.
public void DownloadBulkWriteResult()
{
try
{
ZCRMBulkWrite writeIns = ZCRMBulkWrite.GetInstance();// To get ZCRMBulkWrite instance
FileAPIResponse respone = writeIns.DownloadBulkWriteResult("https://download-accl.zoho.com/v2/crm/573045/bulk-write/300002357002/300002357002.zip");// Download bulk write result
Stream file = respone.GetFileAsStream();// To get file stream.
CommonUtil.SaveStreamAsFile("/Users/Desktop/", file, respone.GetFileName());//To download stream as zip.
file.Close();
Console.WriteLine(respone.Status);
}
catch(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
Use the below code to download the zip file, extract the CSV file, and display the records as instances.
/** Download the zip and Get the records as instances*/
public void DownloadandGetRecords()
{
try
{
ZCRMBulkWrite readIns = ZCRMRestClient.GetInstance().GetBulkWriteInstance(0, "ModuleAPIName");
BulkResponse response = readIns.DownloadANDGetRecords("/Users/Desktop", "https://download-accl.zoho.com/v2/crm/573045/bulk-write/300002357002/300002357002.zip");// To download the zip and get list of record instances.
while (response.HasNext())
{
ZCRMRecord record = response.Next();
Console.WriteLine(record.EntityId);
Console.WriteLine(record.GetFieldValue("Company"));
Console.WriteLine(record.ModuleAPIName);
ZCRMUser owner = (record.Owner);
if (owner != null)
{
Console.WriteLine(owner.Id);
}
Console.WriteLine(record.RowNumber);
Console.WriteLine(record.Status);
Console.WriteLine(record.Error);
foreach (KeyValuePair<string,object> data in record.Data)
{
Console.WriteLine("key is: " + data.Key + " & Value is: " + data.Value);
}
// response.Close(); // use this method close the file reader
}
}
catch(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
Use the below code to fetch all the records from the file mentioned in the file path.
public void GetRecordsFromFile()
{
try
{
ZCRMBulkWrite readIns = ZCRMBulkWrite.GetInstance(0, "ModuleAPIName");
BulkResponse response = readIns.GetRecords("/Users/Desktop", "zip_file_name");
while (response.HasNext())
{
ZCRMRecord record = response.Next();
Console.WriteLine(record.EntityId);
Console.WriteLine(record.GetFieldValue("Company"));
Console.WriteLine(record.ModuleAPIName);
ZCRMUser owner = (record.Owner);
if (owner != null)
{
Console.WriteLine(owner.Id);
}
Console.WriteLine(record.RowNumber);
Console.WriteLine(record.Status);
Console.WriteLine(record.Error);
foreach (KeyValuePair<string,object> data in record.Data)
{
Console.WriteLine("key is: " + data.Key + " & Value is: " + data.Value);
}
// response.Close(); // use this method close the file reader
}
}
catch(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
Use the below code to download the CSV from the zip file and fetch only the instances of records that failed getting inserted/updated/upserted.
public void DownloadandGetFailedRecords()
{
try
{
ZCRMBulkWrite readIns = ZCRMRestClient.GetInstance().GetBulkWriteInstance(0, "ModuleAPIName");
BulkResponse response = readIns.DownloadANDGetFailedRecords("/Users/Desktop", "https://download-accl.zoho.com/v2/crm/573045/bulk-write/300002357002/300002357002.zip");
while (response.HasNext())
{
ZCRMRecord record = response.Next();
Console.WriteLine(record.EntityId);
Console.WriteLine(record.GetFieldValue("Company"));
Console.WriteLine(record.ModuleAPIName);
ZCRMUser owner = (record.Owner);
if (owner != null)
{
Console.WriteLine(owner.Id);
}
Console.WriteLine(record.RowNumber);
Console.WriteLine(record.Status);
Console.WriteLine(record.Error);
foreach (KeyValuePair<string,object> data in record.Data)
{
Console.WriteLine("key is: " + data.Key + " & Value is: " + data.Value);
}
// response.Close(); // use this method close the file reader
}
}
catch(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
Use the below code to fetch the list of records that failed getting inserted/updated/upserted from the specified file.
public void ListofFailedRecords()
{
try
{
ZCRMBulkWrite readIns = ZCRMBulkWrite.GetInstance(0, "ModuleAPIName");
BulkResponse response = readIns.GetFailedRecords("/Users/Desktop", "zip_file_name");
while (response.HasNext())
{
ZCRMRecord record = response.Next();
Console.WriteLine(record.EntityId);
Console.WriteLine(record.GetFieldValue("Company"));
Console.WriteLine(record.ModuleAPIName);
ZCRMUser owner = (record.Owner);
if (owner != null)
{
Console.WriteLine(owner.Id);
}
Console.WriteLine(record.RowNumber);
Console.WriteLine(record.Status);
Console.WriteLine(record.Error);
foreach (KeyValuePair<string, object> data in record.Data)
{
Console.WriteLine("key is: " + data.Key + " & Value is: " + data.Value);
}
// response.Close(); // use this method close the file reader
}
}
catch(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}