Skip to main content

Ruby SDK Samples - Bulk Write Operations

Upload File
              
              
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
 
Create a Bulk Write Job
              
              
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 
Get Bulk Write Job Details
Download Result
              
              
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