Ruby SDK Samples - Bulk Write Operations
require 'ZOHOCRMSDK2_0'
class Bulkwrite
def self.upload_file(org_id, absolute_file_path)
# """
# This method is used to upload a CSV file in ZIP format for bulk write API. The response contains the file_id.
# :param org_id: The unique ID (zgid) of your organization obtained through the Organization API.
# :param absolute_file_path: The absoluteFilePath of the zip file you want to upload.
# """
# """
# example
# org_id = "680387586"
# absolute_file_path = "/Users/user_name/Documents/Leads.zip"
# """
# Get instance of BulkWriteOperations Class
bwo = ZOHOCRMSDK::BulkWrite::BulkWriteOperations.new
# Get instance of FileBodyWrapper class that will contain the request file
file_body_wrapper = ZOHOCRMSDK::BulkWrite::FileBodyWrapper.new
# """
# StreamWrapper can be initialized in any of the following ways
# * param 1 -> fileName
# * param 2 -> Read Stream.
# * param 3 -> Absolute File Path of the file to be attached
# """
# stream_wrapper = StreamWrapper.new(name,stream,absolutefilepath)
sw = ZOHOCRMSDK::Util::StreamWrapper.new(nil, nil, absolute_file_path)
# Set file to the FileBodyWrapper instance
file_body_wrapper.file = sw
# Get instance of HeaderMap Class
header_instance = ZOHOCRMSDK::HeaderMap.new
# Possible headers for upload_file operation
header_instance.add(ZOHOCRMSDK::BulkWrite::BulkWriteOperations::UploadFileHeader.feature, 'bulk-write')
header_instance.add(ZOHOCRMSDK::BulkWrite::BulkWriteOperations::UploadFileHeader.X_crm_org, org_id)
# Call upload_file method that takes FileBodyWrapper instance and header_instance as parameter
response = bwo.upload_file(file_body_wrapper, header_instance)
unless response.nil?
status_code = response.status_code
# Get the status code from response
print "\n Status Code :" + status_code.to_s
# Check if expected instance is received.
if response.is_expected
# Get object from response
action_response = response.data_object
# Check if expected SuccessResponse instance is received
if action_response.is_a? ZOHOCRMSDK::BulkWrite::SuccessResponse
success_response = action_response
# Get the Code
print 'code:'
print success_response.code.value
# Get the Status
print "\n status:"
print success_response.status.value
# Get the Message
print "\n message:"
print success_response.message.value
# Get the details map
success_response.details.each do |k, v|
print "\n"
print k
print v
print "\n"
end
# Check if the request returned an exception
elsif action_response.is_a? ZOHOCRMSDK::BulkWrite::APIException
api_exception = action_response
# Get the Code
print 'code:'
print api_exception.code.value
# Get the Status
print "\n status:"
print api_exception.status.value
# Get the Message
print "\n message:"
print api_exception.message.value
# Get the ErrorMessage
if api_exception.error_message.nil?
print "\n ErrorMessage:"
print api_exception.error_message.value
end
# Get the ErrorCode
if api_exception.error_code.nil?
print "\n ErrorCode:"
print api_exception.error_code
end
# Get the XError
if api_exception.x_error.nil?
print "\n XError:"
print api_exception.x_error.value
end
# Get the Info
if api_exception.info.nil?
print "\n Infi:"
print api_exception.info.value
end
# Get the XInfo
if api_exception.x_info.nil?
print "\n XInfo:"
print api_exception.x_info.value
end
print "\n HttpStatus:"
print api_exception.http_status
# Get the details map
api_exception.details.each do |k, v|
print "\n"
print k
print v
print "\n"
end
print "\n"
end
else
response_object = response.data_object
response_object.instance_variables.each do |field|
print field
print "\n"
print response_object.instance_variable_get(field)
end
end
end
end
end
require 'ZOHOCRMSDK2_0'
class Bulkwrite
def self.create_bulk_write_job(module_api_name, file_id)
# """
# This method is used to create bulk write job with the uploaded file ID
# :param module_api_name: The API Name of the module.
# :param file_id: The ID of the uploaded file to create BulkWrite Job.
# """
cvid = '30087501'
# Get instance of BulkWriteOperations Class
bwo = ZOHOCRMSDK::BulkWrite::BulkWriteOperations.new
# Get instance of RequestWrapper Class that will contain the request body
request_wrapper = ZOHOCRMSDK::BulkWrite::RequestWrapper.new
# Get instance of CallBack Class
call_back = ZOHOCRMSDK::BulkWrite::CallBack.new
# Set valid callback URL
call_back.url = 'https://www.example.com/callback'
# Set the HTTP method of the callback URL. The allowed value is post.
call_back.method = ZOHOCRMSDK::Util::Choice.new('post')
# The Bulk Read Job's details is posted to this URL on successful completion / failure of the job.
request_wrapper.callback = call_back
# Set the charset of the uploaded file
request_wrapper.character_encoding = 'UTF-8'
# To set the type of operation you want to perform on the bulk write job.
request_wrapper.operation = ZOHOCRMSDK::Util::Choice.new('insert')
# Get instance of Resource Class
resource_ins = ZOHOCRMSDK::BulkWrite::Resource.new
# To set the type of module that you want to import. The value is data.
resource_ins.type = ZOHOCRMSDK::Util::Choice.new('data')
# To set API name of the module that you select for bulk write job.
resource_ins.module = module_api_name
# To set the fileId obtained from file upload API.
resource_ins.file_id = file_id
# True - Ignores the empty values.The default value is false.
resource_ins.ignore_empty = true
# Get instance of FieldMapping Class
field_mapping0 = ZOHOCRMSDK::BulkWrite::FieldMapping.new
# To set API name of the field present in Zoho module object that you want to import.
field_mapping0.api_name = 'Last_Name'
# To set the column index of the field you want to map to the CRM field.
field_mapping0.index = 0
field_mapping1 = ZOHOCRMSDK::BulkWrite::FieldMapping.new
field_mapping1.api_name = 'Email'
field_mapping1.index = 1
field_mapping2 = ZOHOCRMSDK::BulkWrite::FieldMapping.new
field_mapping2.api_name = 'Company'
field_mapping2.index = 2
field_mapping3 = ZOHOCRMSDK::BulkWrite::FieldMapping.new
field_mapping3.api_name = 'Phone'
field_mapping3.index = 3
field_mapping4 = ZOHOCRMSDK::BulkWrite::FieldMapping.new
field_mapping4.api_name = 'Website'
# To set the default value for an empty column in the uploaded file.
default_value = { 'value' => 'https://www.zohoapis.com' }
# To set the default value for an empty column in the uploaded file.
field_mapping4.default_value = default_value
field_mappings = [field_mapping0, field_mapping1, field_mapping2, field_mapping3, field_mapping4]
resource_ins.field_mappings = field_mappings
resource = [resource_ins]
# Set the list of resources to RequestWrapper instance
request_wrapper.resource = resource
# Call create_bulk_write_job method that takes RequestWrapper instance as parameter
response = bwo.create_bulk_write_job(request_wrapper)
unless response.nil?
status_code = response.status_code
# Get the status code from response
print "\n Status Code :" + status_code.to_s
# Check if expected instance is received.
if response.is_expected
# Get object from response
action_response = response.data_object
# Check if expected SuccessResponse instance is received
if action_response.is_a? ZOHOCRMSDK::BulkWrite::SuccessResponse
success_response = action_response
# Get the Code
print 'code:'
print success_response.code.value
# Get the Status
print "\n status:"
print success_response.status.value
# Get the Message
print "\n message:"
print success_response.message.value
# Get the details map
success_response.details.each do |k, v|
print "\n"
print k
print v
print "\n"
end
elsif action_response.is_a? ZOHOCRMSDK::BulkWrite::APIException
api_exception = action_response
# Get the Code
print 'code:'
print api_exception.code.value
# Get the Status
print "\n status:"
print api_exception.status.value
# Get the Message
print "\n message:"
print api_exception.message.value
# Get the details map
api_exception.details.each do |k, v|
print "\n"
print k
print v
print "\n"
end
print "\n"
end
else
response_object = response.data_object
response_object.instance_variables.each do |field|
print field
print "\n"
print response_object.instance_variable_get(field)
end
end
end
end
end
require 'ZOHOCRMSDK2_0'
class Bulkwrite
def self.download_bulk_write_result(download_url, destination_folder)
# """
# This method is used to download the result of bulk write job.
# :param download_url: The URL present in the download_url key in the response of Get Bulk Write Job Details.
# :param destination_folder: The absolute path where downloaded file has to be stored.
# """
# """
# example
# download_url = "https://download-accl.zoho.com/v2/crm/6735/bulk-write/347706122009/347706122009.zip"
# destination_folder = "/Users/user_name/Documents"
# """
# Get instance of BulkWriteOperations Class
bwo = ZOHOCRMSDK::BulkWrite::BulkWriteOperations.new
# Call download_bulk_write_result method that takes download_url as parameter
response = bwo.download_bulk_write_result(download_url)
unless response.nil?
status_code = response.status_code
# Get the status code from response
print "\n Status Code :" + status_code.to_s
if [204, 304].include? status_code
print(status_code == 204 ? 'No Content' : 'Not Modified')
return
end
# Check if expected instance is received.
if response.is_expected
# Get object from response
response_handler = response.data_object
# Check if expected FileBodyWrapper instance is received.
if response_handler.is_a? ZOHOCRMSDK::BulkWrite::FileBodyWrapper
file_body_wrapper = response_handler
# Get StreamWrapper instance from the returned FileBodyWrapper instance
stream_wrapper = file_body_wrapper.file
# Open the destination file where the file needs to be written in 'w' mode
File.open(destination_folder + '/' + stream_wrapper.name, 'w') do |f|
f.write(stream_wrapper.stream)
end
# Check if the request returned an exception
elsif response_handler.is_a? ZOHOCRMSDK::BulkWrite::APIException
exception = response_handler
# Get the Code
print "\n code:"
print exception.code.value
# Get the Status
print "\n status:"
print exception.status.value
# Get the Message
print "\n message:"
print exception.message.value
# Get the details map
exception.details.each do |k, v|
print "\n"
print k
print v
print "\n"
end
end
else
response_object = response.data_object
response_object.instance_variables.each do |field|
print field
print "\n"
print response_object.instance_variable_get(field)
end
end
end
end
end