What is a Custom Function?
Custom functions in Zoho People help simplify complex, multi-step actions through program scripts that you can write and execute. Custom functions helps in workflow automation where procedural logic is required, which cannot be implemented with the default actions such as, Alerts/Tasks/WebHooks, etc. With custom functions, you can automatically update the data in the related Zoho People records or third-party applications by executing simple program scripts.
Custom functions are written using Zoho's Deluge scripting language to effectively manipulate data, communicate with third-party applications and update responses. The script will run whenever a Workflow trigger events occurs.
Custom Function for a service can be created in Settings > Select a Service > Automation > Actions > Custom Functions.
How Custom Function works in Zoho People
- Create a Custom Function for a form in a service and associate it with a new or existing Workflow.
- Whenever a Workflow trigger event occurs, the Custom Function executes, performing the specified actions as defined in your code.
Create Custom Function
To create a custom function:
- From you home page, navigate to Settings > Select a Service > Automation > Custom Functions.
- Click Add Custom Function.
- Select the form for which you would like to create Custom Function.
- Enter a name for the Custom Function.
- Click Edit Parameters, define the method name, and specify the required method arguments by specifying the variable name and the corresponding field values.
- Click Save.
- Enter the description of the Custom Function.
- Enter the Deluge code, for more information, refer to Zoho - Deluge Scripting Language
- For Syntax auto-suggestion, enable Syntax Builder.
- For Connections, refer to Connections.
Click Save.
Click Save and Execute to test and run the script immediately.
Map the created custom function to a workflow to automatically run the code whenever a trigger event defined in the workflow occurs.
Map a Custom Function to Workflow
To Map a Custom Function to a Workflow:
- From your home page, go to Settings > Select a Service > Workflows > Add Workflow.
- Provide all the required details, Learn more to configure Workflow.
- Under Actions, click Custom Functions and click the (+) add icon to add a new custom function to the workflow or you can select the existing custom function which are created for the form.
- Click Add.
A workflow is created and based on the trigger events the custom function executes, performing the specified actions as defined in your code.
Use Cases
Automatic travel expense update using custom functions
Consider a scenario of calculating an employee's travel expenses. All of the travel expenses gets automatically calculated using the below custom function in the travel expense form. Thus, the respective employee's self-service form will get the updated travel expense details. To achieve this, a custom field has to be created in the employee self-service form.
- From your home page, go to Settings > Select a Service (Travel) > Automation > Actions > Custom Functions.
- Select respective Form (Travel Expense) and click Add Custom Function.
- Provide a Custom Function Name and required parameter details
Provide the script as given below.
Click Save to save the Custom Function.
Click Save and Execute to test and run the script immediately.
- travelExpenseMap = zoho.people.getRecordById("travelexpenses",travel_id);
- tabularList = travelExpenseMap.get("tabularSections").get("Expense");
- totalExp = 0;
- for each str in tabularList
- {
- totalExp = totalExp + str.get("Ticket").toDecimal() + str.get("Lodging").toDecimal() + str.get("LocalConveyance").toDecimal() + str.get("Boarding").toDecimal() + str.get("Others").toDecimal() + str.get("Incidentals").toDecimal() +str.get("Phone").toDecimal();
- }
- updateemp = Map();
- updateemp.put("recordid",erecno);
- updateemp.put("Total_Expense",totalExp);
- updaterecord = zoho.people.update("employee",updateemp);
- info updaterecord;
Automatically change the employee status from active to resigned during an employee's date of exit using Custom Functions
An employee is resigning his job and you want to change the status to 'Resigned' in the employee form during the date of exit. You can do this action using the below script in our custom function. By adding exit details for an employee, a workflow will be triggered where the mapped custom function will get executed. Upon successful execution, the selected employee's employee status value will be changed to 'Resigned'. Thus, the employee cannot log in to the organization account anymore.
- From your home page, go to Settings > Select a Service > Automation > Actions > Custom Functions.
- Select respective Form and click Add Custom Function.
- Provide a Custom Function Name and required parameter details
- Provide the script as given below.
Click Save to save the Custom Function
Click Save and Execute to test and run the script immediately.
- getrecord = zoho.people.getRecordById("employee",erecno);
- params = Map();
- params.put("scope","creatorapi");
- params.put("Employee_ID",empid);
- params.put("First_Name",fname);
- params.put("Last_Name",lname);
- params.put("Email_ID",emailid);
- pushrecord = invokeurl
- [
- type: POST
- parameters: params
- connection : "cf"
- ];
- info pushrecord;
Automatic check out in Attendance module
Let us consider a scenario, where an employee forgets to do check out on the system at the end of the day. It is possible to use Custom Functions to do an Auto-check out on the system. This helps in tracking the exact working hours of an employee.
Use the following parameters for both the methods mentioned below.
Method 1: When the check out is not done, Custom Functions can be used to update the respective shift's end time as the check out time on the system.
Steps:
- From your home page, go to Settings > Select a Service > Automation > Actions > Custom Functions.
- Select respective Form and click Add Custom Function.
- Provide a Custom Function Name and required parameter details
- Provide the script as given below.
Click Save to save the Custom Function
Click Save and Execute to test and run the script immediately.
- getUA = Collection();
- getUA.insert("erecno":erecno);
- get_Rec = invokeurl
- [
- url :"https://people.zoho.com/people/api/attendance/getUserAvailability"
- type :POST
- parameters:getUA.toMap()
- connection : "peoplecf"
- ];
- isUserAvailable = get_Rec.get("isUserAvailable");
- if(isUserAvailable == true)
- {
- getdata = zoho.people.getRecordByID("P_AttendanceForm",recordid.toLong());
- expcheckout = getdata.get("ExpectedToTime");
- addrecord = Map();
- addrecord.put("empId",empid);
- addrecord.put("checkOut",expcheckout);
- updaterecord = invokeurl
- [
- url: "https://people.zoho.com/people/api/attendance"
- type: POST
- parameters: addrecord
- connection : "peoplecf"
- ];
- info updaterecord;
- }
Method 2: When the check out is not done,"08" hours from check-in time can be updated as check out time on the system using Custom Functions.
- From your home page, navigate to Settings > Select a Service > Automation > Actions > Custom Functions.
- Select respective Form and click Add Custom Function.
- Provide a Custom Function Name and required parameter details
- Provide the script as given below.
Click Save to save the Custom Function.
Click Save and Execute to test and run the script immediately.
- getUA = Collection();
- getUA.insert("erecno":erecno);
- get_Rec = invokeurl
- [
- url :"https://people.zoho.com/people/api/attendance/getUserAvailability"
- type :POST
- parameters:getUA.toMap()
- connection : "peoplecf"
- ];
- isUserAvailable = get_Rec.get("isUserAvailable");
- if(isUserAvailable == true)
- {
- getdata = zoho.people.getRecordByID("P_AttendanceForm",recordid.toLong());
- checkin = getdata.get("FromTime").toTime();
- addedhrs= checkin.addHour(8);
- addrecord = Map();
- addrecord.put("empId",empid);
- addrecord.put("checkOut",addedhrs);
- updaterecord = invokeurl
- [
- url: "https://people.zoho.com/people/api/attendance"
- type: POST
- parameters: addrecord
- connection : "peoplecf"
- ];
- info updaterecord;
- }
Automatic check-out custom functions can be used only when all employees in the organization belong to the same time zone.
Automatic conversion of any currency to USD
Irrespective of the amount in the travel claim form, the currency will be converted to USD based on the exchange rate of the day on which the claim is raised.
- From your home page, navigate to Settings > Select a Service (Travel) > Automation > Actions > Custom Functions.
- Select respective Form (Travel Claim Form) and click Add Custom Function.
Provide a Custom Function Name and required parameter details.
Parameters:
recordId = ZohoID(Travel Claim)
- Provide the script as given below.
Click Save to save the Custom Function.
Click Save and Execute to test and run the script immediately.
- getValues = zoho.people.getRecordById("Travel_Claim",recordId);
- tabularsec = getValues.get("tabularSections").get("Cost Details");
- result = 0;
- for each tabularsecvalues in tabularsec.toList()
- {
- cost = tabularsecvalues.get("");
- format = tabularsecvalues.get("");
- if(format != "USD" && cost > 0.00 && format != "")
- {
- currencyvalues = getUrl("https://data.fixer.io/api/latest?access_key=YOUR_ACCESS_KEY&base=USD");
- formatvalues = currencyvalues.get("rates").get(format);
- totalval = cost.toDecimal() * formatvalues.toDecimal();
- total = totalval.round(2);
- result = total + result;
- }
- }
- addrecmap = Map();
- addrecmap.put("recordid",recordId);
- addrecmap.put("total",result.toString());
- addtotal = zoho.people.update("Travel_Claim",addrecmap);
- info addtotal;
Navigate to Settings > Developer Space > Zoho People API tab to know more about form and field link names.
Adding leave balance
If leave balance has to be given to an employee, the below code can be used. leave type ID of a particular leave type can be obtained from this API and can be replaced in the code. From your home page, navigate to Settings > Select a Service (Leave) > Automation > Actions > Custom Functions.
- Select respective Form (Leave) and click Add Custom Function.
Provide a Custom Function Name and required parameter details.
Parameters:
erecno = ID (Employee ID)
count = count (Leave credit)
- Provide the script as given below.
Click Save to save the Custom Function.
Click Save and Execute to test and run the script immediately.
- param = Collection();
- leavetypeid = "494174000000515325";
- details = "{" + erecno + ":{" + leavetypeid + ":{'date':" + today.toString("dd-MMM-yyyy") + ",'count':" + count + "}}}";
- param.insert("balanceData":details);
- getRecord = invokeurl
- [
- url :"https://people.zoho.com/people/api/leave/addBalance"
- type :POST
- parameters:param.toMap()
- connection:"people_cf"
- ];
- info getRecord;
Send email if total hours for a week is less than 45 hours for an employee
By making use of the below script, if total hours of attendance is less than 45 hours for an employee, then an email can be sent.
- From your home page, navigate to Settings > Select a Service (Leave) > Automation > Actions > Custom Functions.
- Select respective Form (Leave) and click Add Custom Function.
Provide a Custom Function Name and required parameter details.
Parameters:
erecno = ID (Employee ID)
count = count (Leave credit)
- Provide the script as given below.
Click Save to save the Custom Function.
Click Save and Execute to test and run the script immediately.
- start_date = today.toDate().subDay(7);
- end_date = today.toDate().subDay(1);
- getrec_Col = Collection();
- getrec_Col.insert("startDate":Start_Date);
- getrec_Col.insert("endDate":End_Date);
- getrec_Col.insert("dateFormat":"dd-MMM-yyyy");
- get_rec = invokeurl
- [
- url :"https://people.zoho.com/people/api/attendance/getSummaryReport"
- type :POST
- parameters:getrec_Col.toMap()
- connection : "cf"
- ];
- summary_Reports = get_rec.get("summaryReport");
- for each summary in summary_Reports
- {
- emailId = summary.get("emailId");
- totalWorkedDays = summary.get("totalHours");
- totalWorkedDays = totalWorkedDays.getPrefix(":").toNumber();
- if(totalWorkedDays < 45)
- {
- sendmail
- [
- from : zoho.adminuserid
- to : emailId
- subject: "Total Hours"
- message : "<div>Hi,<br></div><div><br></div><div>You have not completed 45 hours for the previous week.<br></div><div><br></div><div>Thanks,<br></div><div>Admin Team</div>"
- ]
- }
- }
Navigate to Settings > Developer Space > Zoho People API tab to know more about form and field link names. The above scripts can also be edited and used to serve other similar scenarios.
All APIs used in Custom Functions have threshhold limits. Refer the
API guide for the limits under each module and customize the code accordingly.