Hello Everyone,
We received a specific requirement from one of our customers and decided to share it here so that others with similar needs can benefit from it.
Requirement
On a specific custom field update done in the Projects module, the user wanted to associate a custom Timesheet layout with the Project. We have utilized the Project level custom functions in Zoho Projects to automate this.
A Custom function is a user-written set of code to achieve a specific requirement. We should create a connection with required scopes. Then, set up work flow rules criteria and associate a custom function to that workflow rule.
.Custom function code:-
endPoint = "https://projects.zoho.com/restapi";
getAllTimesheet = invokeurl
[
url :endPoint + "/portal/" + portalId + "/tasktemplates/?moduleName=Timesheet"
type :GET
connection:"xxxxxxxxxx"
];
moduleID = getAllTimesheet.get("MODULE_ID");
for each templateDetail in getAllTimesheet.get("templateDetails") {
layoutName = templateDetail.get("LAYOUT_NAME");
if(picklistValue.equals("Value") && layoutName.equals("Timesheet layout")){
layoutId = templateDetail.get("LAYOUT_ID");
break;
}
}
associatetimesheetLayoutParam = Map();
associatetimesheetLayoutParam.put("moduleId",moduleID);
associatetimesheetLayoutParam.put("templateId",layoutId);
associatetimesheetLayoutParam.put("templateProjectDetails",{"tempIds":[""+layoutId+""],"projIds":[""+projectId+""]});
associatetimesheetLayout = invokeurl
[
url :endPoint + "/portal/" + portalId + "/layoutprojectsmap/"
type :POST
parameters :associatetimesheetLayoutParam
connection:"xxxxxxxxxx"
];
info associatetimesheetLayout;
return "success";
Make sure to replace "xxxxxxxxxx" in the above code with the connection link name.
Also, update the Timesheet layout name and custom field value to which it has to be updated.
Screenshot of the list of parameters to be mapped and sample workflow rule is attached for reference.
With the custom function code provided above, our customer effectively utilized custom functions in Zoho Projects. We hope you found this post useful. If you have any questions or wondering if your requirement could be met using custom functions, feel free to share them in the comments section below.