Custom Functions
Custom Functions are codes that you can write to perform automated actions to achieve any specialized requirements of your organization.These functions are mainly created to manipulate data, connect with a third party and internal applications and update responses in Zoho People. These user-defined functions that can be reused anywhere in Zoho People. You can maintain and edit custom functions and the script will be in one central location.
- Creating a Custom Function
- Mapping a Custom Function to Workflow
- Example scenario - Automatic travel expense update using custom functions
- Example scenario - Automatic change of employee status using custom functions
- Example scenario - Automatic check-out in attendance using custom functions
- Example scenario-Automatic conversion of any currency to USD
- Example scenario-Adding leave balance
- Example scenario - Send email if total hours for a week is less than 45 hours for an employee.
Creating a Custom Function
- From your home page, go to Settings > Automation > Actions.
- Go to the Custom Functions tab and select the form.
- Click + Add Custom Function.
- Provide Function Name and click Edit Params.
- Provide Method Name, under Method Argument, specify customer value or Show people field.
- Click Save.
- Provide the script and click Save & Execute Script.
The executed message will be displayed and if not, please click Execute Again to retry the execution.
Mapping a Custom Function to Workflow
- From your home page, go to Settings > Automation > Workflows > Add Workflow.
- Provide all the required details. Learn more to configure a workflow.
- Under Action, click Custom Functions and click either the add icon to add the custom function to the workflow or the folder icon to map the custom function
- Click Save.
Example scenario - 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 > Automation > Actions > Custom Functions.
- Select respective Form Name and click + Add Custom Function.
- Provide Function Name.
- Provide the script as given below.
- Click Save&Execute Script.
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;
Example scenario-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 > Automation > Actions > Custom Functions.
- Select respective Form Name and click + Add Custom Function.
- Provide Function Name.
- Provide the script as given below.
- Click Save&Execute Script.
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
[
url: "https://creator.zoho.com/api/karenjohn/json/custom-function/form/Custom_form/record/add/"
type: POST
parameters: params
connection : "cf"
];
info pushrecord;
Example scenario-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 > Automation > Actions > Custom Functions.
- Select respective Form Name and click + Add Custom Function.
- Provide Function Name as Auto-check Shift End Time.
- Provide the script as given below.
- Click Save&Execute Script.
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, go to Settings > Automation > Actions > Custom Functions.
- Select respective Form Name click + Add Custom Function.
- Provide function name as Auto-check on 8hrs from Checked in.
- Provide the script as given below.
- Click Save&Execute Script.
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;
}
Note:Automatic check-out custom functions can be used only when all employees in the organization belong to the same time zone.
Example scenario-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, go to Settings > Automation > Actions > Custom Functions.
- Select respective Form Name and click +Add Custom Function. (For example - Travel Claim form)
- Provide Function Name
- Provide the parameters as given below.
recordId = ZohoID(Travel Claim) here 'Travel Claim' is the respective form name.
- Provide the script as given below.
- Click Save&Execute Script.
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;
Tip : Refer here to know the form and field link names
Example scenario-Adding leave balance
If leave balance has to be given to an employee, the below code can be used. leavetypeid of a particular leave type can be obtained from this API one time and can be replaced in the code.
- From your home page, go to Settings > Automation > Actions > Custom Functions.
- Select respective Form Name click +Add Custom Function.(For example Leave Gifting form)
- Provide Function Name
- Provide the parameters as given below
erecno = ID(Employee ID)
count = count(Leave Gifting)
- Provide the script as given below.
- Click Save&Execute Script.
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;
Tip : Refer here to know the form and field link names
Example scenario- 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, go to Settings > Automation > Actions > Custom Functions.
- Click Custom Scheduler and then Add Scheduler.
- Provide a name for the Scheduler.
- Select the desired Start date and time, Frequency and Time zone.
- Provide the script as given below.
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>"
]
}
}
Tip : Refer here to know about form and field link names
Tip : The above scripts can also be edited and used to serve other similar scenarios.
Note: All APIs used in Custom Functions have threshhold limits. Refer the API guide for the limits under each module and customize the code accordingly.