A custom function is a software code that can be used to automate a process and this allows you to automate a notification, call a webhook, or perform logic immediately after a workflow rule is triggered. This feature helps to automate complex tasks and calculations.
Let’s check out this use case from a customer -
transitionAndProcess = Map();transitionAndProcess.put("Infrastructure",{"cf":"infrastrucure_approval_status","approver":"infrastructure_team_member"});transitionAndProcess.put("Infosec",{"cf":"infosec_approval_status","approver":"infosec_team_member"});transitionAndProcess.put("Privacy",{"cf":"privacy","approver":"privacy_team_member"});transitionAndProcess.put("Operations Risk",{"cf":"operational_risk_approval_status","approver":"operational_risk_team_member"});transitionAndProcess.put("Legal",{"cf":"legal_approval_status","approver":"legal_team_member"});transitionAndProcess.put("Technology",{"cf":"legal_approval_status","approver":"technology_team_member"});transitionAndProcess.put("Fraud Committee",{"cf":"fraud_committee_approval_status","approver":"fraud_committee_team_member"});transitionAndProcess.put("Data Architect",{"cf":"data_architect_approval_status","approver":"data_architect_team_member"});// transitionAndProcess.put("Data CoE", {"cf":"data_co_e_approval_status","approver":data_co_e_approver});// transitionAndProcess.put("Compliance", {"cf":"compliance_approval_status","approver":compliance_approver});transitionName = affectedFields.get("edits").get(0).get("transition_name");// transitionName = "Infrastructure";if(transitionAndProcess.containKey(transitionName)){getTaskDetails = invokeurl[url :endPointV3 + portalId + "/projects/" + projectId + "/tasks/" + taskIdtype :GETconnection:"*****"];info getTaskDetails;cf = transitionAndProcess.get(transitionName).get("cf");status = getTaskDetails.get(cf);info status;if(status.equalsIgnoreCase("Need more Document")){approver = transitionAndProcess.get(transitionName).get("approver");approverTeamMember = getTaskDetails.get(approver).get("zpuid");info approverTeamMember;params = Map();valueMap = List();valueMap.add({"zpuid":approverTeamMember});// if(getTaskDetails.containsKey("review_pending_committee_list"))// {// for each committee in getTaskDetails.get("review_pending_committee_list")// {// valueMap.add({"zpuid":committee.get("zpuid")});// }// }params.put("review_pending_committee_list",{{"add":valueMap}});info params;updateTask = invokeurl[url :endPointV3 + portalId + "/projects/" + projectId + "/tasks/" + taskIdtype :PATCHparameters:params.toString()connection:"******"];info updateTask;}}return "success";
Creating custom functions in Zoho Projects is straightforward and well-documented. Zoho provides a range of built-in functions that you can use as a starting point, and you can also easily define your own functions using Zoho's scripting language, Deluge. Give it a try and see how it can save your time and boost your productivity!
Watch this space for more such custom function codes.