Hello Everyone,
Today, I am pleased to showcase the capabilities of a custom function that is available in our Gallery. To explore the custom functions within the Gallery, please follow the steps below.
Click Setup in the top right corner > Developer space > Custom functions > Click on the module options and choose Tasks > Gallery custom function.
If you have previously created custom functions in your portal, please click on the dropdown arrow located next to the "Create Custom Function" option.
In general, a custom function is a user-written set of code to achieve a specific requirement. Set the required conditions needed as when to trigger using the Workflow rules (be it Tasks / Project) and associate the custom function to it.
Use case:-
For instance, if you have a distinct Final Task within a project, and when the status of that particular task is changed to "closed," you want the project's status to be automatically updated to "closed" as well, this custom function is designed precisely to fulfill that requirement. Not just closed, you have the flexibility to update the project to any desired status such as "on hold" , "in progress" etc.,
This custom function which is available in the gallery is named as "Update Project Status".
Custom function code:-
// TODO : Replace the Project Status's name.
updateStatusName = "zp.projstatus.completed";
projectDetails = invokeurl
[
url :projectsAPIEndPoint + "/portal/" + portalId + "/projects/" + projectId + "/"
type :GET
connection:"xxxxxxxxxx"
];
info projectDetails;
info "-------------------------------------";
statusMap = Map();
if(projectDetails != null && projectDetails.get("projects") != null)
{
projectDetail = projectDetails.get("projects").get(0);
layoutDetails = projectDetail.get("layout_details");
projectLayoutId = layoutDetails.get("project").get("id");
info "projectLayoutId: " + projectLayoutId;
projectLayoutDetail = invokeurl
[
url :projectsAPIEndPoint + "/portal/" + portalId + "/module/projects/layouts/" + projectLayoutId + "/"
type :GET
connection:"xxxxxxxxxx"
];
if(projectLayoutDetail != null && projectLayoutDetail.get("customstatus") != null)
{
projectStatus = projectLayoutDetail.get("customstatus");
for each status in projectStatus
{
statusMap.put(status.get("status_name"),status.get("status_id"));
}
}
info "statusMap : " + statusMap;
info "------------------------";
if(statusMap.containKey(updateStatusName))
{
updateProjectParamMap = Map();
updateProjectParamMap.put("custom_status",statusMap.get(updateStatusName));
projectDetail = invokeurl
[
url :projectsAPIEndPoint + "/portal/" + portalId + "/projects/" + projectId + "/"
type :POST
parameters:updateProjectParamMap
connection:"xxxxxxxxxx"
];
info projectDetail;
info "-------------------------------------";
}
}
return "success";
Once you click on create from Gallery, all the parameters will be mapped automatically. Replace "xxxxxxxxxx" in the above code with the connection name and "updateStatusName" with the required status.
We hope you found this post useful. If you have any questions or wondering whether your requirement could be fulfilled using custom functions, feel free to share them in the comments section below.