An article to note something I didn't realize I needed: How to address the above error and how to update a Shipping Address for a specific Sales Order in Zoho Books.
Why?
You might think the following request to create a Sales Order in Zoho Books would be enough:
copyraw
However, if you try forcing the billing or shipping address in you should get the following error:
{
"date": "2021-09-08",
"zcrm_potential_id": "123456789012345678",
"currency_code": "GBP",
"reference_number": "Salespersons Test Reference",
"terms": "These are our test terms and conditions",
"customer_id": "234567890123456789",
"payment_terms": 30,
"salesperson_id": "345678901234567890",
"line_items": [
{
"item_id": "456789012345678901",
"discount": 0,
"quantity": 1,
"description": "A test product description"
}
],
"shipping_address": {
"address": "Test Street",
"street2": "Test Street 2",
"city": "Test City",
"state": "Test State",
"zip": "Test Postal Code",
"country": "Test Country"
}
}
- {
- "date": "2021-09-08",
- "zcrm_potential_id": "123456789012345678",
- "currency_code": "GBP",
- "reference_number": "Salespersons Test Reference",
- "terms": "These are our test terms and conditions",
- "customer_id": "234567890123456789",
- "payment_terms": 30,
- "salesperson_id": "345678901234567890",
- "line_items": [
- {
- "item_id": "456789012345678901",
- "discount": 0,
- "quantity": 1,
- "description": "A test product description"
- }
- ],
- "shipping_address": {
- "address": "Test Street",
- "street2": "Test Street 2",
- "city": "Test City",
- "state": "Test State",
- "zip": "Test Postal Code",
- "country": "Test Country"
- }
- }
Please ensure that the shipping_address has less than 100 characters.
How?
If you get the above error, the community forums will advise you to get the ID of the Shipping Address... But let's say I don't know how to create a shipping address and retrieve its ID then here's the method I use:
- Create the sales order in ZohoBooks (either in Zoho Deluge or however you're doing it), then
- Retrieve the ID of the created Sales Order (captured in response)
- Update the Shipping Address on the Sales Order in Zoho Books using the API
The following is the code template I use but you will need to adapt it for your own system:
copyraw
// init (specify your own organization ID for Zoho Books)
v_BooksOrgID = 20210922122;
m_BooksCreateSO = Map();
// get CRM record details
r_SoDetails = zoho.crm.getRecordById("Sales_Orders", 012345678901234567);
// build up your map to send to ZohoBooks to create the Sales Order
m_BooksCreateSO.put("date",zoho.currentdate);
//
// push to ZohoBooks
r_CreateSO = zoho.books.createRecord("salesorders",v_BooksOrgID,m_BooksCreateSO,"ab_books");
// output response
info r_CreateSO;
// read response
if(!isnull(r_CreateSO.get("salesorder")))
{
v_SalesOrderID = r_CreateSO.get("salesorder").get("salesorder_id");
//
v_AddressIndex = 0;
m_ShippingAddress = Map();
// set field api names that we will read from and write to
l_CrmShippingAddress = {"Shipping_Street","Shipping_Street_2","Shipping_City","Shipping_State","Shipping_Code","Shipping_Country"};
l_BooksShippingAddress = {"address","street2","city","state","zip","country"};
// loop through the CRM Sales Order address fields and build map of address to Books
for each v_AddressPart in l_CrmShippingAddress
{
m_ShippingAddress.put(l_BooksShippingAddress.get(v_AddressIndex),ifnull(r_SoDetails.get(v_AddressPart),""));
v_AddressIndex = v_AddressIndex + 1;
}
// check that there was something to actually update rather than wasting an API call
if(m_ShippingAddress.size() > 0)
{
// endpoint TLD is EU for Europe DC and COM for US DC
v_Endpoint = "https://www.zohoapis.eu/books/v3/salesorders/"+v_SalesOrderID+"/address/shipping?organization_id=" + v_BooksOrgID;
// saw this in the documentation example so will hopefully do what it says
m_ShippingAddress.put("is_one_off_address",true);
m_ShippingAddress.put("is_update_customer",false);
// send the request via API (change connection name to your own)
r_UpdateSO = invokeurl
[
url: v_Endpoint
type: PUT
parameters: m_ShippingAddress.toString()
connection: "joels_connector"
];
info r_UpdateSO;
}
}
- // init (specify your own organization ID for Zoho Books)
- v_BooksOrgID = 20210922122;
- m_BooksCreateSO = Map();
- // get CRM record details
- r_SoDetails = zoho.crm.getRecordById("Sales_Orders", 012345678901234567);
- // build up your map to send to ZohoBooks to create the Sales Order
- m_BooksCreateSO.put("date",zoho.currentdate);
- //
- // push to ZohoBooks
- r_CreateSO = zoho.books.createRecord("salesorders",v_BooksOrgID,m_BooksCreateSO,"ab_books");
- // output response
- info r_CreateSO;
- // read response
- if(!isnull(r_CreateSO.get("salesorder")))
- {
- v_SalesOrderID = r_CreateSO.get("salesorder").get("salesorder_id");
- //
- v_AddressIndex = 0;
- m_ShippingAddress = Map();
- // set field api names that we will read from and write to
- l_CrmShippingAddress = {"Shipping_Street","Shipping_Street_2","Shipping_City","Shipping_State","Shipping_Code","Shipping_Country"};
- l_BooksShippingAddress = {"address","street2","city","state","zip","country"};
- // loop through the CRM Sales Order address fields and build map of address to Books
- for each v_AddressPart in l_CrmShippingAddress
- {
- m_ShippingAddress.put(l_BooksShippingAddress.get(v_AddressIndex),ifnull(r_SoDetails.get(v_AddressPart),""));
- v_AddressIndex = v_AddressIndex + 1;
- }
- // check that there was something to actually update rather than wasting an API call
- if(m_ShippingAddress.size() > 0)
- {
- // endpoint TLD is EU for Europe DC and COM for US DC
- v_Endpoint = "https://www.zohoapis.eu/books/v3/salesorders/"+v_SalesOrderID+"/address/shipping?organization_id=" + v_BooksOrgID;
- // saw this in the documentation example so will hopefully do what it says
- m_ShippingAddress.put("is_one_off_address",true);
- m_ShippingAddress.put("is_update_customer",false);
- // send the request via API (change connection name to your own)
- r_UpdateSO = invokeUrl
- [
- url: v_Endpoint
- type: PUT
- parameters: m_ShippingAddress.toString()
- connection: "joels_connector"
- ];
- info r_UpdateSO;
- }
- }
Source(s):
- Zoho Community Forums - Zoho Inventory - Error: Please ensure that the billing_address has less than 100 characters
- Zoho Books API Documentation - Sales Order Update Shipping Address
Category: Zoho :: Article: 772



Add comment