Hello Everyone,
We recently fulfilled a specific customer requirement by leveraging the Schedule Functions within Zoho Projects. Sharing the details here so that others with similar needs can benefit too.
The schedule function allows you to execute custom functions based on a specified schedule such as hourly, daily, weekly, or monthly. Here is the help document for reference.
Requirement:-
The user wants to export the Timesheet report weekly on a particular day. While we do have plans to introduce a separate feature for scheduling reports, a temporary workaround is available using the Schedule function to facilitate regular Timesheet exports.
All you need to do is schedule the frequency for how often the below custom function should be executed.
Custom function code:-
// TODO: Please create a connection for the Zoho Projects service with the scopes "ZohoProjects.Timesheet.READ"
endPointV3 = "https://projects.zoho.com/api/v3/portal/";
currentDate = zoho.currenttime;
monthFirstDate = currentDate.toStartOfMonth();
monthLastDate = currentDate.eomonth(0);
timesheetParam = Map();
timesheetParam.put("startdate",toString(monthFirstDate,"MM/dd/yyyy"));
timesheetParam.put("enddate",toString(monthLastDate,"MM/dd/yyyy"));
timesheetParam.put("exportType","xlsx");
timesheetParam.put("projId","0");
timesheetParam.put("tsfor","org"); timesheetParam.put("selected_fields","LOGDATE,TIMELOGTITLE,TIMELOGPREFIX,PROJECTNAME,PROJECTID,DAILYLOG,ALLOWED_APPROVER,USER,APPROVAL,LOGCOST,BILLING,COST_RATE_PER_HOUR,APPROVALTIME,APPROVER,TIME_PERIOD,UDF_USER1,HOURSFORCALCULATION,RATEPERHOUR,OWNERMAIL,ROLENAME,TYPE,PROJECTGROUP,MLTITLE,TLTITLE,FROMTO,TIMERNOTES,REASON");
exportTimesheetResponse = invokeurl
[
url :endPointV3 + portalId + "/timesheetExportView"
type :POST
parameters:timesheetParam
connection:"xxxxxxxxx"
];info timesheetParam;
info exportTimesheetResponse;
Make sure to replace xxxxxxxxx with Zoho Projects connection name. Screenshot of the list of parameters to be mapped and sample weekly schedule setup is attached for reference.
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.