Kaizen #119 - Updating related records upon parent record deletion using Workflow-Triggered Deluge Functions

Kaizen #119 - Updating related records upon parent record deletion using Workflow-Triggered Deluge Functions

Hey !
Happy New Year everyone, and welcome to the first Kaizen of 2024!

In this week's Kaizen, we will address this query raised in our developer community on how a workflow triggers a Deluge function to update the status of a field in related records after the associated parent record is deleted.

------------------------------------------------------------------------------------------------------------------------------------

Use Case

The user creates a function and associates it with a workflow, which will be triggered automatically when a record in the Purchase Orders module is deleted. The function updates the value of the Stock Status field in each related record i.e. the records in the Stock Records custom module that are associated with the Purchase Orders module. This eliminates the need for users to manually change the status of each stock associated with the deleted parent record from Occupied to Available. Consequently, this ensures that available stocks can be readily identified for other customers.

API Enhancement

From V6 onwards, you can fetch the related records of a deleted record using the Get Related Records of a Deleted Record API. It is important to note that this API allows the retrieval of related records associated via lookups. For more detailed information, please refer to the API help documentation.

Retrieving the related record of a deleted parent record using API

Sample




Create a custom function and associate with the workflow

To implement this automated workflow, a custom function can be executed.
n = 1000; //Upto 100,000 records can be fetched. In our case, we are fetching 100 records in a single call, so the code iterates 1,000 times.
counter = leftpad("1",n).replaceAll(" ","1,").toList();
i = 1;
for each  el in counter
{
reqUrl = "https://www.zohoapis.com/crm/v6/Purchase_Orders/deleted/" + poid.toString() + "/Stock_Records1?fields=Stock_Status&page=" + i.toString() + "&per_page=100";
response = invokeurl
[
url :reqUrl
type :GET
connection:"zohocrm"
];
lis = List();
i = i + 1;
for each  stockList in response.get("data")
{
idData = stockList.get("id");
mp = Map();
mp.put("Stock_Status","Available");
mp.put("id",idData);
lis.add(mp);
}
updRes = zoho.crm.bulkUpdate("Stock_Records",lis);
if(!response.get("info").get("more_records"))
{
break;
}
}


The script initiates an API call to retrieve the unique IDs of deleted records in the Purchase Orders module. The URL includes parameters for the page number and records per page, and the response is stored in the response variable. 

The script iteratively fetches stock records associated with the deleted purchase order, updating the Stock Status for each record to Available in bulk operations. The loop continues until the more_records value in the response is false, represents the completion of record retrieval. Note that you can fetch 100000 records using pagination.

Associating the function with a workflow

The Workflow updates the value of the Stock Status field in the related records when a record in the Purchase Orders module is deleted.

The below GIF shows how to associate the function with a newly created workflow.



For more details, refer to Configuring Workflow Rules

The GIF below illustrates the final output:
The GIF demonstrates the functionality and execution of the code.



We trust that this post meets your needs and is helpful. Let us know your thoughts in the comment section or reach out to us at support@zohocrm.com

Stay tuned for more insights in our upcoming Kaizen posts!

Happy Coding!

Previous Kaizen Post : Kaizen #118 - Mass Delete Records Across Modules 


Cheers!
------------------------------------------------------------------------------------------------------------------------------------

Additional Reading: