Update Records Using External ID
Purpose
To update existing records in a module through an external field.
Request Details
Request URL
https://www.zohoapis.com/crm/v2/{module_api_name}/{external_field_value}
Supported modules
Leads, Accounts, Contacts, Deals, Campaigns, Tasks, Cases, Events, Calls, Solutions, Products, Vendors, Price Books, Quotes, Sales Orders, Purchase Orders, Invoices, Custom, and Activities
Possible operation types
Header
Authorization: Zoho-oauthtoken d92d4xxxxxxxxxxxxx15f52
X-EXTERNAL: {module_API_name}.{external_field_API_name}
Scope
scope=ZohoCRM.modules.all
(or)
scope=ZohoCRM.modules.{module_name}.{operation_type}
Possible module names
leads, accounts, contacts, deals, campaigns, tasks, cases, events, calls, solutions, products, vendors, pricebooks, quotes, salesorders, purchaseorders, invoices, custom, and notes
Possible operation types
ALL - Full access to the record
WRITE - Edit records in the module
UPDATE - Update records in the module
Updating a record through the value of the external field in the module
Let us consider an example of updating a record in the Contacts module. Instead of passing the record ID of the contact in Zoho CRM, you can pass the external field's value in that module and update the record.
Sample Request
Copiedcurl "https://www.zohoapis.com/crm/v2/Contacts/extcont1234"
-X PUT
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
-H "X-EXTERNAL: Contacts.External_Contact_ID"
-d "@sample.json"
Copied//API Name of the module
String moduleAPIName = "Leads";
String recordId = "3477061000005177002";
//Get instance of RecordOperations Class
RecordOperations recordOperations = new RecordOperations();
//Get instance of BodyWrapper Class that will contain the request body
BodyWrapper request = new BodyWrapper();
//List of Record instances
List < com.zoho.crm.api.record.Record > records = new ArrayList < com.zoho.crm.api.record.Record > ();
//Get instance of Record Class
com.zoho.crm.api.record.Record record1 = new com.zoho.crm.api.record.Record();
/*
* Call addFieldValue method that takes two arguments
* 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
* 2 -> Value
*/
// record1.addFieldValue(Field.Leads.CITY, "City");
//
// record1.addFieldValue(Field.Leads.LAST_NAME, "Last Name");
//
// record1.addFieldValue(Field.Leads.FIRST_NAME, "First Name");
//
// record1.addFieldValue(Field.Leads.LAST_NAME, "Last Name");
//
// record1.addFieldValue(Field.Leads.COMPANY, "KKRNP");
/*
* Call addKeyValue method that takes two arguments
* 1 -> A string that is the Field's API Name
* 2 -> Value
*/
// record1.addKeyValue("Custom_field", "Value");
//
// record1.addKeyValue("Custom_field_2", "value");
//
// record1.addKeyValue("Date_1", LocalDate.of(2017, 1, 13));
List < FileDetails > fileDetails = new ArrayList < FileDetails > ();
FileDetails fileDetail1 = new FileDetails();
fileDetail1.setAttachmentId("3477061000006072005");
fileDetail1.setDelete(null);
fileDetails.add(fileDetail1);
FileDetails fileDetail2 = new FileDetails();
fileDetail2.setFileId("ae9c7cefa418aec1d6a5cc2d9ab35c321c2510105c108641ce7729a548afb8b7");
fileDetails.add(fileDetail2);
FileDetails fileDetail3 = new FileDetails();
fileDetail3.setFileId("ae9c7cefa418aec1d6a5cc2d9ab35c32feb62de8d0fce6a557bf29aa70123189");
fileDetails.add(fileDetail3);
record1.addKeyValue("File_Upload", fileDetails);
//Add Record instance to the list
records.add(record1);
//Set the list to Records in BodyWrapper instance
request.setData(records);
List < String > trigger = new ArrayList < String > ();
trigger.add("approval");
trigger.add("workflow");
trigger.add("blueprint");
request.setTrigger(trigger);
HeaderMap headerInstance = new HeaderMap();
//Call updateRecord method that takes recordId, ModuleAPIName and BodyWrapper instance as parameter.
APIResponse < ActionHandler > response = recordOperations.updateRecord(recordId, moduleAPIName, request,headerInstance);
Copied//API Name of the module to create records
//$moduleAPIName = "Leads";
//Get instance of RecordOperations Class
$recordOperations = new RecordOperations();
//Get instance of BodyWrapper Class that will contain the request body
$request = new BodyWrapper();
//List of Record instances
$records = array();
$recordClass = 'com\zoho\crm\api\record\Record';
//Get instance of Record Class
$record1 = new $recordClass();
$record1->setId("3477061000006606002");
/*
* Call addFieldValue method that takes two arguments
* 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
* 2 -> Value
*/
$field = new Field("");
$record1->addFieldValue(Leads::City(), "City");
$record1->addFieldValue(Leads::LastName(), "Last Name");
$record1->addFieldValue(Leads::FirstName(), "First Name");
$record1->addFieldValue(Leads::Company(), "KKRNP");
/*
* Call addKeyValue method that takes two arguments
* 1 -> A string that is the Field's API Name
* 2 -> Value
*/
$record1->addKeyValue("Custom_field", "Value");
$record1->addKeyValue("Custom_field_2", "value");
//Add Record instance to the list
// array_push($records, $record1);
//Get instance of Record Class
$record2 = new $recordClass();
$record2->setId("3477061000006603294");
/*
* Call addFieldValue method that takes two arguments
* 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
* 2 -> Value
*/
$record2->addFieldValue(Leads::City(), "City");
$record2->addFieldValue(Leads::LastName(), "Last Name");
$record2->addFieldValue(Leads::FirstName(), "First Name");
$record2->addFieldValue(Leads::Company(), "KKRNP");
/*
* Call addKeyValue method that takes two arguments
* 1 -> A string that is the Field's API Name
* 2 -> Value
*/
$record2->addKeyValue("Custom_field", "Value");
$record2->addKeyValue("Custom_field_2", "value");
//Add Record instance to the list
// array_push($records, $record2);
//Set the list to Records in BodyWrapper instance
$request->setData($records);
$trigger = array("approval", "workflow", "blueprint");
$request->setTrigger($trigger);
$headerInstance = new HeaderMap();
//Call createRecords method that takes BodyWrapper instance and moduleAPIName as parameter.
$response = $recordOperations->updateRecords($moduleAPIName, $request,$headerInstance);
Copied//Get instance of RecordOperations Class
RecordOperations recordOperations = new RecordOperations();
//Get instance of BodyWrapper Class that will contain the request body
BodyWrapper request = new BodyWrapper();
//List of Record instances
List<Com.Zoho.Crm.API.Record.Record> records = new List<Com.Zoho.Crm.API.Record.Record>();
//Get instance of Record Class
Com.Zoho.Crm.API.Record.Record record1 = new Com.Zoho.Crm.API.Record.Record();
record1.Id = 3477061000005844006;
/*
* Call addFieldValue method that takes two arguments
* 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
* 2 -> Value
*/
record1.AddFieldValue(Leads.CITY, "City");
record1.AddFieldValue(Leads.LAST_NAME, "Last Name");
record1.AddFieldValue(Leads.FIRST_NAME, "First Name");
record1.AddFieldValue(Leads.COMPANY, "KKRNP");
/*
* Call addKeyValue method that takes two arguments
* 1 -> A string that is the Field's API Name
* 2 -> Value
*/
record1.AddKeyValue("Custom_field", "Value");
record1.AddKeyValue("Custom_field_2", "value");
//Add Record instance to the list
records.Add(record1);
//Get instance of Record Class
Com.Zoho.Crm.API.Record.Record record2 = new Com.Zoho.Crm.API.Record.Record();
record2.Id = 3477061000005844005;
/*
* Call addFieldValue method that takes two arguments
* 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
* 2 -> Value
*/
record2.AddFieldValue(Leads.CITY, "City");
record2.AddFieldValue(Leads.LAST_NAME, "Last Name");
record2.AddFieldValue(Leads.FIRST_NAME, "First Name");
record2.AddFieldValue(Leads.COMPANY, "KKRNP");
/*
* Call addKeyValue method that takes two arguments
* 1 -> A string that is the Field's API Name
* 2 -> Value
*/
record2.AddKeyValue("Custom_field", "Value");
record2.AddKeyValue("Custom_field_2", "value");
//Add Record instance to the list
records.Add(record2);
//Set the list to Records in BodyWrapper instance
request.Data = records;
List<string> trigger = new List<string>();
trigger.Add("approval");
trigger.Add("workflow");
trigger.Add("blueprint");
request.Trigger = trigger;
HeaderMap headerInstance = new HeaderMap();
//Call UpdateRecords method that takes moduleAPIName annd BodyWrapper instance as parameter.
APIResponse<ActionHandler> response = recordOperations.UpdateRecords(moduleAPIName, request,headerInstance);
Copied# Get instance of RecordOperations Class
record_operations = RecordOperations()
# Get instance of BodyWrapper Class that will contain the request body
request = BodyWrapper()
# List to hold Record instances
records_list = []
# Get instance of Record Class
record1 = Record()
# ID of the record to be updated
record1.set_id(3409643000000986033)
# Value to Record's fields can be provided in any of the following ways
"""
Call add_field_value method that takes two arguments
Import the zcrmsdk.src.com.zoho.crm.api.record.field file
1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
2 -> Value
"""
record1.add_field_value(Field.Leads.last_name(), 'Python SDK')
record1.add_field_value(Field.Leads.company(), 'NNN')
record1.add_field_value(Field.Leads.city(), 'Hola')
"""
Call add_key_value method that takes two arguments
1 -> A string that is the Field's API Name
2 -> Value
"""
record1.add_key_value('Custom_field', 'Value')
record1.add_key_value('Custom_field_2', 90)
# Add Record instance to the list
records_list.append(record1)
# Get instance of Record Class
record2 = Record()
# ID of the record to be updated
record2.set_id(3409643000000986033)
# Value to Record's fields can be provided in any of the following ways
"""
Call add_field_value method that takes two arguments
Import the zcrmsdk.src.com.zoho.crm.api.record.field file
1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
2 -> Value
"""
record2.add_field_value(Field.Leads.last_name(), 'Edited Name')
record2.add_field_value(Field.Leads.city(), 'Hola')
"""
Call add_key_value method that takes two arguments
1 -> A string that is the Field's API Name
2 -> Value
"""
record2.add_key_value('Custom_field_2', 90)
record2.add_key_value('Discounted', 19.8)
# Used when GDPR is enabled
data_consent = Consent()
data_consent.set_consent_remarks("Approved.")
data_consent.set_consent_through('Email')
data_consent.set_contact_through_email(True)
data_consent.set_contact_through_social(False)
record2.add_field_value('Data_Processing_Basis_Details', data_consent)
# Add Record instance to the list
records_list.append(record2)
# Set the list to data in BodyWrapper instance
request.set_data(records_list)
trigger = []
trigger.append("approval")
trigger.append("workflow")
trigger.append("blueprint")
# Set the list containing the trigger operations to be run
request.set_trigger(trigger)
# Call update_records method that takes BodyWrapper instance and module_api_name as parameter.
response = record_operations.update_records(module_api_name, request)
# Get instance of RecordOperations Class
record_operations = RecordOperations()
# Get instance of BodyWrapper Class that will contain the request body
request = BodyWrapper()
# List to hold Record instances
records_list = []
# Get instance of Record Class
record = Record()
# Value to Record's fields can be provided in any of the following ways
"""
Call add_field_value method that takes two arguments
Import the zcrmsdk.src.com.zoho.crm.api.record.field file
1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
2 -> Value
"""
record.add_field_value(Field.Leads.last_name(), 'Python SDK')
record.add_field_value(Field.Leads.first_name(), 'New')
record.add_field_value(Field.Leads.company(), 'Zoho')
record.add_field_value(Field.Leads.city(), 'City')
"""
Call add_key_value method that takes two arguments
1 -> A string that is the Field's API Name
2 -> Value
"""
record.add_key_value('Custom_field', 'Value')
record.add_key_value('Custom_field_2', 12)
record.add_key_value('Date', date(2020, 4, 9))
record.add_key_value('Discounted', 23.34)
file_details = []
file_detail = FileDetails()
file_detail.set_file_id('479f0f5eebf0fb982f99e3832b35d23e29f67c2868ee4c789f22579895383c8')
file_details.append(file_detail)
record.add_key_value('File_Upload_1', file_details)
# Used when GDPR is enabled
data_consent = Consent()
data_consent.set_consent_remarks("Approved.")
data_consent.set_consent_through('Email')
data_consent.set_contact_through_email(True)
data_consent.set_contact_through_social(False)
record.add_field_value('Data_Processing_Basis_Details', data_consent)
# Add Record instance to the list
records_list.append(record)
# Set the list to data in BodyWrapper instance
request.set_data(records_list)
trigger = ["approval", "workflow", "blueprint"]
# Set the list containing the trigger operations to be run
request.set_trigger(trigger)
# Get instance of HeaderMap Class
header_instance = HeaderMap()
# Call updateRecord method that takes BodyWrapper instance, module_api_name and record_id as parameter.
response = record_operations.update_record(record_id, module_api_name, request,header_instance)
Copied//Get instance of RecordOperations Class
let recordOperations = new RecordOperations();
//Get instance of BodyWrapper Class that will contain the request body
let request = new BodyWrapper();
//Array to hold Record instances
let recordsArray = [];
let record1 = new Record();
//ID of the record to be updated
record1.setId(3409643000000986033n);
/*
* Call addFieldValue method that takes two arguments
* Import the "zcrmsdk/core/com/zoho/crm/api/record/field" file
* 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
* 2 -> Value
*/
record1.addFieldValue(Field.Leads.CITY, "City");
record1.addFieldValue(Field.Leads.LAST_NAME, "Last Name");
record1.addFieldValue(Field.Leads.FIRST_NAME, "First Name");
record1.addFieldValue(Field.Leads.COMPANY, "KKRNP");
/*
* Call addKeyValue method that takes two arguments
* 1 -> A string that is the Field's API Name
* 2 -> Value
*/
record1.addKeyValue("Custom_field", "Custom val");
record1.addKeyValue("Custom_field_2", 10);
//Used when GDPR is enabled
let dataConsent = new Consent();
dataConsent.setConsentRemarks("Approved.");
dataConsent.setConsentThrough("Email");
dataConsent.setContactThroughEmail(true);
dataConsent.setContactThroughSocial(false);
record1.addKeyValue("Data_Processing_Basis_Details", dataConsent);
recordsArray.push(record1);
let record2 = new Record();
//ID of the record to be updated
record2.addFieldValue(Field.Leads.ID, 3409643000001881002n);
/*
* Call addFieldValue method that takes two arguments
* 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
* 2 -> Value
*/
record2.addFieldValue(Field.Leads.CITY, "City");
record2.addFieldValue(Field.Leads.LAST_NAME, "Last Name");
record2.addFieldValue(Field.Leads.FIRST_NAME, "First Name");
record2.addFieldValue(Field.Leads.COMPANY, "KKRNP");
/*
* Call addKeyValue method that takes two arguments
* 1 -> A string that is the Field's API Name
* 2 -> Value
*/
record2.addKeyValue("Custom_field", "Value");
record2.addKeyValue("Custom_field_2", "value");
//Add Record instance to the array
recordsArray.push(record2);
//Set the array to data in BodyWrapper instance
request.setData(recordsArray);
let trigger = [];
trigger.push("approval");
trigger.push("workflow");
trigger.push("blueprint");
//Set the array containing the trigger operations to be run
request.setTrigger(trigger);
//Get instance of HeaderMap Class
let headerInstance = new HeaderMap();
//Call updateRecords method that takes BodyWrapper instance and moduleAPIName as parameter.
let response = await recordOperations.updateRecords(moduleAPIName, request,headerInstance);
Copied#Update Record
# List to hold Record instances
records = []
# Get instance of Record Class
record = Record::Record.new
# """
# Call add_field_value method that takes two arguments
# 1 -> Call Field "::" and choose the module from the displayed list and press "." and choose the field name from the displayed list.
# 2 -> Value
# """
if module_api_name.downcase == 'Leads'.downcase
record.add_field_value(Record::Field::Leads.Last_name, 'asdad')
record.add_field_value(Record::Field::Leads.City, 'City')
record.add_field_value(Record::Field::Leads.First_name, 'First Name')
record.add_field_value(Record::Field::Leads.Company, 'KKRNP')
end
# file = Record::FileDetails.new
# file.file_id = "f46166fa14ce16c6e2622b3ce82830759c6334275dc8a317539bbda39a6ca056"
# files = [file]
# """
# Call add_key_value method that takes two arguments
# 1 -> A string that is the Field's API Name
# 2 -> Value
# """
if module_api_name == 'Contacts'
file_details = []
file_detail = Record::FileDetails.new
file_detail.file_id = '479f0f5eebf0fb982f99e3832b35d23e29f67c2868ee4c789f22579895383c8'
file_details.push(file_detail)
record.add_key_value('File_Upload_1', file_details)
end
# """
# Following methods are being used only by Inventory modules
# """
if %w[Quotes Sales_Orders Purchase_Orders Invoices].include? module_api_name
line_item_product = Record::LineItemProduct.new
line_item_product.id = 3_477_061_000_005_356_009
inventory_line_item = Record::InventoryLineItems.new
inventory_line_item.product = line_item_product
inventory_line_item.list_price = 10.0
inventory_line_item.discount = '5.0'
inventory_line_item.quantity = 123.2
line_tax = Record::LineTax.new
line_tax.name = 'Tax1'
line_tax.percentage = 20.0
line_taxes = [line_tax]
inventory_line_item.line_tax = line_taxes
inventory_line_items = [inventory_line_item]
record.add_key_value('Product_Details', inventory_line_items)
record.add_key_value('Subject', 'asd')
end
# """
# Following methods are being used only by Activity modules
# """
if %w[Tasks Events Calls].include? module_api_name
remind_at = Record::RemindAt.new
remind_at.alarm = 'FREQ=NONE;ACTION=EMAILANDPOPUP;TRIGGER=DATE-TIME:2020-07-03T12:30:00+05:30'
who_id = Record::Record.new
who_id.id = 3_524_033_000_003_429_023
record.add_field_value(Record::Field::Tasks.Who_id, who_id)
participant_record = Record::Participants.new
participant_record.participant = 'asdasd@gmail.com'
participant_record.type = 'email'
record.add_field_value(Record::Field::Events.Event_title, 'New Automated Event')
endtime = DateTime.new(2019, 8, 10, 4, 11, 9, '+03:00')
record.add_field_value(Record::Field::Events.End_datetime, endtime)
starttime = DateTime.new(2019, 8, 10, 4, 10, 9, '+03:00')
record.add_field_value(Record::Field::Events.Start_datetime, starttime)
participants = [participant_record]
record.add_field_value(Record::Field::Events.Start_datetime, starttime)
recurring_activity = Record::RecurringActivity.new
recurring_activity.rrule = 'FREQ=DAILY;INTERVAL=10;UNTIL=2020-08-14;DTSTART=2020-07-03'
record.add_field_value(Record::Field::Events.Recurring_activity, recurring_activity)
end
if module_api_name == 'Price_Books'
pricing_detail_record = Record::PricingDetails.new
pricing_detail_record.from_range = 1.0
pricing_detail_record.to_range = 1.0
pricing_detail_record.discount = 1.0
pricing_detail_records = [pricing_detail_record]
record.add_key_value('Price_Book_Name', 'assd')
record.add_field_value(Record::Field::Price_Books.Pricing_details, pricing_detail_records)
record.add_field_value(Record::Field::Price_Books.Pricing_model, Util::Choice.new('Flat'))
end
# # Get instance of BodyWrapper Class that will contain the request body
records.push(record)
trigger = []
trigger.push('approval')
trigger.push('workflow')
trigger.push('blueprint')
# Get instance of BodyWrapper Class that will contain the request body
body_wrapper = Record::BodyWrapper.new
# Set the list to data in BodyWrapper instance
body_wrapper.data = records
# Set the lar_id in BodyWrapper instance
body_wrapper.lar_id = '213123131'
#set trigger
body_wrapper.trigger = trigger
process = ['review_process']
body_wrapper.process = process
# Get instance of RecordOperations Class
rr = Record::RecordOperations.new
# Call updateRecord method that takes BodyWrapper instance, module_api_name and record_id as parameter
response = rr.update_record(record_id , module_api_name,body_wrapper )
#Update Records
# List to hold Record instances
records = []
# Get instance of Record Class
record = Record::Record.new
# """
# Call add_field_value method that takes two arguments
# 1 -> Call Field "::" and choose the module from the displayed list and press "." and choose the field name from the displayed list.
# 2 -> Value
# """
if module_api_name.downcase == 'Leads'.downcase
record.add_field_value(Record::Field::Leads.Last_name, 'asdad')
record.add_field_value(Record::Field::Leads.City, 'City')
record.add_field_value(Record::Field::Leads.First_name, 'First Name')
record.add_field_value(Record::Field::Leads.Company, 'KKRNP')
end
#set id
record.id = 3_524_033_000_005_933_009
# file = Record::FileDetails.new
# file.file_id = "f46166fa14ce16c6e2622b3ce82830759c6334275dc8a317539bbda39a6ca056"
# files = [file]
# """
# Call add_key_value method that takes two arguments
# 1 -> A string that is the Field's API Name
# 2 -> Value
# """
if module_api_name == 'Contacts'
file_details = []
file_detail = Record::FileDetails.new
file_detail.file_id = '479f0f5eebf0fb982f99e3832b35d23e29f67c2868ee4c789f22579895383c8'
file_details.push(file_detail)
record.add_key_value('File_Upload_1', file_details)
end
# """
# Following methods are being used only by Inventory modules
# """
if %w[Quotes Sales_Orders Purchase_Orders Invoices].include? module_api_name
line_item_product = Record::LineItemProduct.new
line_item_product.id = 3_477_061_000_005_356_009
inventory_line_item = Record::InventoryLineItems.new
inventory_line_item.product = line_item_product
inventory_line_item.list_price = 10.0
inventory_line_item.discount = '5.0'
inventory_line_item.quantity = 123.2
line_tax = Record::LineTax.new
line_tax.name = 'Tax1'
line_tax.percentage = 20.0
line_taxes = [line_tax]
inventory_line_item.line_tax = line_taxes
inventory_line_items = [inventory_line_item]
record.add_key_value('Product_Details', inventory_line_items)
record.add_key_value('Subject', 'asd')
end
# """
# Following methods are being used only by Activity modules
# """
if %w[Tasks Events Calls].include? module_api_name
remind_at = Record::RemindAt.new
remind_at.alarm = 'FREQ=NONE;ACTION=EMAILANDPOPUP;TRIGGER=DATE-TIME:2020-07-03T12:30:00+05:30'
who_id = Record::Record.new
who_id.id = 3_524_033_000_003_429_023
record.add_field_value(Record::Field::Tasks.Who_id, who_id)
participant_record = Record::Participants.new
participant_record.participant = 'asdasd@gmail.com'
participant_record.type = 'email'
record.add_field_value(Record::Field::Events.Event_title, 'New Automated Event')
endtime = DateTime.new(2019, 8, 10, 4, 11, 9, '+03:00')
record.add_field_value(Record::Field::Events.End_datetime, endtime)
starttime = DateTime.new(2019, 8, 10, 4, 10, 9, '+03:00')
record.add_field_value(Record::Field::Events.Start_datetime, starttime)
participants = [participant_record]
record.add_field_value(Record::Field::Events.Start_datetime, starttime)
recurring_activity = Record::RecurringActivity.new
recurring_activity.rrule = 'FREQ=DAILY;INTERVAL=10;UNTIL=2020-08-14;DTSTART=2020-07-03'
record.add_field_value(Record::Field::Events.Recurring_activity, recurring_activity)
end
if module_api_name == 'Price_Books'
pricing_detail_record = Record::PricingDetails.new
pricing_detail_record.from_range = 1.0
pricing_detail_record.to_range = 1.0
pricing_detail_record.discount = 1.0
pricing_detail_records = [pricing_detail_record]
record.add_key_value('Price_Book_Name', 'assd')
record.add_field_value(Record::Field::Price_Books.Pricing_details, pricing_detail_records)
record.add_field_value(Record::Field::Price_Books.Pricing_model, Util::Choice.new('Flat'))
end
# # Get instance of BodyWrapper Class that will contain the request body
records.push(record)
trigger = []
trigger.push('approval')
trigger.push('workflow')
trigger.push('blueprint')
# Get instance of BodyWrapper Class that will contain the request body
body_wrapper = Record::BodyWrapper.new
# Set the list to data in BodyWrapper instance
body_wrapper.data = records
# Set the lar_id in BodyWrapper instance
body_wrapper.lar_id = '213123131'
#set trigger
body_wrapper.trigger = trigger
process = ['review_process']
body_wrapper.process = process
# Get instance of RecordOperations Class
rr = Record::RecordOperations.new
# Get instance of HeaderMap Class
hm = HeaderMap.new
# Call update_records method that takes BodyWrapper instance and module_api_name as parameter.
response = rr.update_records(module_api_name,body_wrapper,hm)
Copied//Get instance of RecordOperations Class
let recordOperations = new ZCRM.Record.Operations();
//Get instance of BodyWrapper Class that will contain the request body
let request = new ZCRM.Record.Model.BodyWrapper();
//Array to hold Record instances
let recordsArray = [];
let record1 = new ZCRM.Record.Model.Record();
//ID of the record to be updated
record1.setId(34770619074373n);
/*
* Call addFieldValue method that takes two arguments
* 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
* 2 -> Value
*/
record1.addFieldValue(ZCRM.Record.Model.Field.Leads.CITY, "City");
record1.addFieldValue(ZCRM.Record.Model.Field.Leads.LAST_NAME, "Last Name");
record1.addFieldValue(ZCRM.Record.Model.Field.Leads.FIRST_NAME, "First Name");
record1.addFieldValue(ZCRM.Record.Model.Field.Leads.COMPANY, "KKRNP");
/*
* Call addKeyValue method that takes two arguments
* 1 -> A string that is the Field's API Name
* 2 -> Value
*/
record1.addKeyValue("Custom_field", "Custom val");
record1.addKeyValue("Custom_field_2", 10);
//Used when GDPR is enabled
let dataConsent = new ZCRM.Record.Model.Consent();
dataConsent.setConsentRemarks("Approved.");
dataConsent.setConsentThrough("Email");
dataConsent.setContactThroughEmail(true);
dataConsent.setContactThroughSocial(false);
record1.addKeyValue("Data_Processing_Basis_Details", dataConsent);
recordsArray.push(record1);
let record2 = new ZCRM.Record.Model.Record();
//ID of the record to be updated
record2.addFieldValue(ZCRM.Record.Model.Field.Leads.ID, 34096431881002n);
/*
* Call addFieldValue method that takes two arguments
* 1 -> Call Field "." and choose the module from the displayed list and press "." and choose the field name from the displayed list.
* 2 -> Value
*/
record2.addFieldValue(ZCRM.Record.Model.Field.Leads.CITY, "City");
record2.addFieldValue(ZCRM.Record.Model.Field.Leads.LAST_NAME, "Last Name");
record2.addFieldValue(ZCRM.Record.Model.Field.Leads.FIRST_NAME, "First Name");
record2.addFieldValue(ZCRM.Record.Model.Field.Leads.COMPANY, "KKRNP");
/*
* Call addKeyValue method that takes two arguments
* 1 -> A string that is the Field's API Name
* 2 -> Value
*/
record2.addKeyValue("Custom_field", "Value");
record2.addKeyValue("Custom_field_2", "value");
//Add Record instance to the array
recordsArray.push(record2);
//Set the array to data in BodyWrapper instance
request.setData(recordsArray);
let trigger = [];
trigger.push("approval");
trigger.push("workflow");
trigger.push("blueprint");
//Set the array containing the trigger operations to be run
request.setTrigger(trigger);
//Call updateRecords method that takes BodyWrapper instance and moduleAPIName as parameter.
let response = await recordOperations.updateRecords(moduleAPIName, request);
Sample Input
Copied{
"data": [
{
"Last_Name": "Test Contact 1"
}
]
}
Sample Response
Copied{
"data": [
{
"code": "SUCCESS",
"details": {
"Modified_Time": "2019-12-19T19:06:00+05:30",
"Modified_By": {
"name": "Patricia Boyle",
"id": "111111000000044700"
},
"Created_Time": "2019-12-13T22:07:07+05:30",
"External_Contact_ID": "extcont1234",
"id": "111111000000138036",
"Created_By": {
"name": "Patricia Boyle",
"id": "111111000000044700"
}
},
"message": "record updated",
"status": "success"
}
]
}
Updating a record through the external value of a lookup record in that module
In this example, Contacts is the base module and contains an account lookup field Account_Name. To update a record in the Contacts module, you must specify the external field's API name and its value in the Accounts module, and the external field's API name and its value in the Contacts module.
Sample Request
Copiedcurl "https://www.zohoapis.com/crm/v2/Contacts"
-X PUT
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
-H "X-EXTERNAL: Contacts.External_Contact_ID, Contacts.Account_Name.External_Account_ID"
-d "@sample.json"
Sample Input
Copied{
"data": [
{
"External_Contact_ID": "extcontact1",
"Account_Name": {
"External_Account_ID": "extaccount1"
}
}
]
}
Sample Response
Copied{
"data": [
{
"code": "SUCCESS",
"details": {
"Modified_Time": "2019-12-19T19:09:48+05:30",
"Modified_By": {
"name": "Patricia Boyle",
"id": "111111000000044700"
},
"Created_Time": "2019-12-04T00:08:05+05:30",
"External_Contact_ID": "extcontact1",
"id": "111111000000101004",
"Created_By": {
"name": "Patricia Boyle",
"id": "111111000000044700"
}
},
"message": "record updated",
"status": "success"
}
]
}
Updating an inventory module's record with external fields in the line items
In this example, Quotes is the base module. To update the details in the Product_Details section, specify the external field's API name and the value in the product and book JSON objects.
Sample Request
Copiedcurl "https://www.zohoapis.com/crm/v2/Quotes/quote1"
-X PUT
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
-H "X-EXTERNAL: Quotes.Product_Details.product.External_Product_ID, Quotes.Product_Details.book.External_Price_book_ID"
-d "@sample.json"
Sample Input
Copied{
"data": [
{
"Product_Details": [
{
"id": "111111000000133071"
},
{
"product": {
"External_Product_ID": "12345678900"
},
"book": {
"External_Pricebook_ID": "pricebook2"
},
"quantity": 20
}
]
}
]
}
Sample Response
Copied{
"data": [
{
"code": "SUCCESS",
"details": {
"Modified_Time": "2019-12-20T12:29:49+05:30",
"Modified_By": {
"name": "Patricia Boyle",
"id": "111111000000044700"
},
"Created_Time": "2019-12-12T23:32:49+05:30",
"External_Quote_ID": "quote1",
"id": "111111000000133069",
"Created_By": {
"name": "Patricia Boyle",
"id": "111111000000044700"
}
},
"message": "record updated",
"status": "success"
}
]
}
Updating a subform lookup record through an external field in the associated module
Specify the external field's API name and its value in the lookup field JSON object of the Subform.
Possible Errors
- INVALID_DATAHTTP 400
The value of the external field is invalid.
Resolution: Specify the correct external value. - INVALID_DATAHTTP 400
The value of the external field is invalid for the lookup field.
Resolution: Specify the correct external value. - INVALID_DATAHTTP 400
The system expects product IDs in the input when you do not specify the external field header.
Resolution: Include the correct external header when you use external fields in your request. - NOT_ALLOWEDHTTP 400
You cannot update the external field using its own primary key in the request. For example, if extcontact1 is the value of the external field External_Contact_ID, then you cannot update the external field's value using itself (crm/v2/Contacts/extcontact1).
Resolution: Use another external field or CRM's primary key to update an external field.
Sample Request
Copiedcurl "https://www.zohoapis.com/crm/v2/Contacts/extcontact2"
-X PUT
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
-H "X-EXTERNAL: Contacts.External_Contact_ID,Contacts.Subform_External.Deal_Lookup.External_Deal_ID"
-d "@sample.json"
Sample Input
Copied{
"data": [
{
"Subform_External": [
{
"Deal_Lookup": {
"External_Deal_ID": "userdeal1"
}
}
]
}
]
}
Sample Response
Copied{
"data": [
{
"code": "SUCCESS",
"details": {
"Modified_Time": "2019-12-20T12:30:59+05:30",
"Modified_By": {
"name": "Patricia Boyle",
"id": "111111000000044700"
},
"Created_Time": "2019-12-13T22:07:07+05:30",
"External_Contact_ID": "extcontact2",
"id": "111111000000138036",
"Created_By": {
"name": "Patricia Boyle",
"id": "111111000000044700"
}
},
"message": "record updated",
"status": "success"
}
]
}