独自の関数

独自の関数

独自の関数とは

Zoho Peopleの独自の関数を使用すると、スクリプトを作成して実行することで、複雑な複数の処理を自動化できます。通知/タスク/Webhookといった標準の処理では実装できない手続き型の論理が必要なワークフローの自動化が可能です。かんたんなスクリプトを実行するだけで、関連するZoho Peopleや外部アプリのデータを自動的に更新できます。

独自の関数は、Zohoのスクリプト言語であるDelugeを使用して記述されます。これにより、効果的なデータの処理、外部アプリとの通信、レスポンスの更新が可能になります。スクリプトは、ワークフローで特定の操作が行われるたびに実行されます。
Info
Delugeスクリプト言語の詳細については、Delugeスクリプト言語の概要をご参照ください(英文)。
Idea
独自の関数を作成するには、[設定]→任意のサービス→[自動化]→[操作]→[独自の関数]の順に移動します。

独自の関数の設定

  1. サービス内のフォームに対して独自の関数を作成して、新規または既存のワークフローに関連付けます。
  2. ワークフローで特定の操作が行われると、独自の関数が実行され、コード内で定義された特定の処理が実行されます。

独自の関数の作成

独自の関数を作成するには
  1. [設定]→任意のサービス→[自動化]→[独自の関数]の順に移動します。

  2. [独自の関数を追加する]をクリックします。
  3. 独自の関数を作成する[フォーム名]を選択します。
  4. [独自の関数名]に関数の名前を入力します。
  5. [パラメーターを編集する]をクリックして、[メソッド名]を入力します。変数名と対応する項目の値を指定して必要な[メソッドの引数]を指定します。

  6. [保存する]をクリックします。
  7. [説明]を入力します。
  8. Delugeコードを入力します。詳細については、こちらをご参照ください(英文)。
    1. コードの自動補完を利用するには、[Syntax Builder](自動補完)を有効にします。
    2. 外部連携については、こちらをご参照ください(英文)。
  9. [保存する]をクリックします。
    Idea
    [保存して実行する]をクリックすると、スクリプトのテストと実行を即座に開始します。
Info
作成した独自の関数をワークフローに関連付けると、ワークフローで設定した特定の操作が行われるたびに関数を自動的に実行します。

独自の関数とワークフローの関連付け

独自の関数をワークフローに関連付けるには
  1. [設定]→任意のサービス→[自動化]→[ワークフロー]→[ワークフローを追加する]の順に移動します。
  2. すべての必須項目を入力します。
  3. [操作]で[独自の関数]欄にある[+](追加)アイコンをクリックして、ワークフローに独自の関数を追加するか、作成済みの独自の関数を選択します。

  4. [追加する]をクリックします。
    ワークフローが追加されます。特定の操作が行われると、独自の関数が実行され、コード内で定義された特定の処理が実行されます。

利用例

独自の関数を使用した出張経費の自動集計

従業員の出張経費を自動集計する例です。独自の関数を使用すると、出張経費のフォームに入力された明細の金額を自動で集計できます。また、従業員がセルフサービスのページから出張経費の集計結果を確認できるように表示できます。ただし、あらかじめ集計結果の表示用の項目を従業員のセルフサービスのフォームに追加しておく必要があります。
  1. [設定]→任意のサービス→[自動化]→[操作]→[独自の関数]の順に移動します。
  2. フォーム名を選択して、[独自の関数を追加する]をクリックします。
  3. [独自の関数名]と必要なパラメーターの詳細を入力します。
  4. 以下のスクリプトを入力します。
  5. [保存する]をクリックして、独自の関数を保存します。
    Idea
    [保存して実行する]をクリックすると、スクリプトのテストと実行を即座に開始します。
Quote
  1. travelExpenseMap = zoho.people.getRecordById('travelexpenses',travel_id);
  2. tabularList = travelExpenseMap.get('tabularSections').get('Expense');
  3. totalExp = 0;
  4. for each str in tabularList
  5. {
  6. 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();
  7. }
  8. updateemp = Map();
  9. updateemp.put('recordid',erecno);
  10. updateemp.put('Total_Expense',totalExp);
  11. updaterecord = zoho.people.update('employee',updateemp);
  12. info updaterecord;

独自の関数を使用した従業員のステータスの変更

従業員が退職することになった場合に、従業員フォームのステータスを退職日付で自動的に「退職」に変更する例です。独自の関数を使用して以下のスクリプトを使用すると、処理を自動化できます。従業員の退職に関する詳細を追加しておくと、ワークフローが自動的に開始され、独自の関数が実行されます。処理が完了すると、従業員のステータスが自動で「退職」に変更されます。ステータス変更後は、対象の従業員はZoho Peopleにログインできなくなります。
  1. [設定]→任意のサービス→[自動化]→[操作]→[独自の関数]の順に移動します。
  2. フォームを選択後、[独自の関数を追加する]をクリックします。
  3. [独自の関数名]と必要なパラメーターの詳細を入力します。
  4. 以下のスクリプトを入力します。
  5. [保存する]をクリックして、独自の関数を保存します。
    Idea
    [保存して実行する]をクリックすると、スクリプトのテストと実行を即座に開始します。
Quote
  1. getrecord = zoho.people.getRecordById('employee',erecno);
  2. params = Map();
  3. params.put('scope','creatorapi');
  4. params.put('Employee_ID',empid);
  5. params.put('First_Name',fname);
  6. params.put('Last_Name',lname);
  7. params.put('Email_ID',emailid);
  8. pushrecord = invokeurl
  9. [
  10.     type: POST
  11.     parameters: params
  12.     connection : 'cf'
  13. ];
  14. info pushrecord;

自動退勤

従業員が退勤の処理を忘れがちだとします。このような場合に、独自の関数を用いて退勤の自動処理を行うことが可能です。使用すると、出退勤の記録漏れを防げます。

以下のパラメーターを、下記の2つの手順で使用します。



方法1:退勤処理が行われていない場合、独自の関数を使用してシフトの終了時刻を退勤時刻として記録します。
手順:
  1. [設定]→任意のサービス→[自動化]→[操作]→[独自の関数]の順に移動します。
  2. フォームを選択後、[独自の関数を追加する]をクリックします。
  3. [独自の関数名]と必要なパラメーターの詳細を入力します。
  4. 以下のスクリプトを入力します。
  5. [保存する]をクリックして、独自の関数を保存します。
    Idea
    [保存して実行する]をクリックすると、スクリプトのテストと実行を即座に開始します。
Quote
  1. getUA = Collection();
  2. getUA.insert('erecno':erecno);
  3. get_Rec = invokeurl
  4. [
  5. url :'https://people.zoho.com/people/api/attendance/getUserAvailability'
  6. type :POST
  7. parameters:getUA.toMap()
  8. connection : 'peoplecf'
  9. ];
  10. isUserAvailable = get_Rec.get('isUserAvailable');
  11. if(isUserAvailable == true)
  12. {
  13. getdata = zoho.people.getRecordByID('P_AttendanceForm',recordid.toLong());
  14. expcheckout = getdata.get('ExpectedToTime');
  15. addrecord = Map();
  16. addrecord.put('empId',empid);
  17. addrecord.put('checkOut',expcheckout);
  18. updaterecord = invokeurl
  19. [
  20.     URL 'https://people.zoho.com/people/api/attendance'
  21.     type: POST
  22.     parameters: addrecord
  23.     connection : 'peoplecf'
  24. ];
  25. info updaterecord;
  26. }
方法2: 退勤処理が行われていない場合、独自の関数を使用して出勤時刻から8時間後を退勤時刻として記録します。
  1. [設定]→任意のサービス→[自動化]→[操作]→[独自の関数]の順に移動します。
  2. フォームを選択後、[独自の関数を追加する]をクリックします。
  3. [独自の関数名]と必要なパラメーターの詳細を入力します。
  4. 以下のスクリプトを入力します。
  5. [保存する]をクリックして、独自の関数を保存します。
    Idea
    [保存して実行する]をクリックすると、スクリプトのテストと実行を即座に開始します。
Quote
  1. getUA = Collection();
  2. getUA.insert('erecno':erecno);
  3. get_Rec = invokeurl
  4. [
  5. url :'https://people.zoho.com/people/api/attendance/getUserAvailability'
  6. type :POST
  7. parameters:getUA.toMap()
  8. connection : 'peoplecf'
  9. ];
  10. isUserAvailable = get_Rec.get('isUserAvailable');
  11. if(isUserAvailable == true)
  12. {
  13. getdata = zoho.people.getRecordByID('P_AttendanceForm',recordid.toLong());
  14. checkin = getdata.get('FromTime').toTime();
  15. addedhrs= checkin.addHour(8);
  16. addrecord = Map();
  17. addrecord.put('empId',empid);
  18. addrecord.put('checkOut',addedhrs);
  19. updaterecord = invokeurl
  20. [
  21.     URL'https://people.zoho.com/people/api/attendance'
  22.     type: POST
  23.     parameters: addrecord
  24.     connection : 'peoplecf'
  25. ];
  26. info updaterecord;
  27. }
Info
自動退勤の独自の関数は、組織内の全従業員が同じタイムゾーンにいる場合にのみ使用できます。

通貨の自動換算

出張旅費の通貨を米ドルに自動的に換算する例です。精算の申請が行われた日の為替レートに基づいて、自動的に換算します。
  1. [設定]→任意のサービス→[自動化]→[操作]→[独自の関数]の順に移動します。
  2. フォーム名を選択して、[独自の関数を追加する]をクリックします。 
  3. [独自の関数名]と必要なパラメーターの詳細を入力します。
    Info
    Parameters:
    recordId = ZohoID(Travel Claim) 
  4. 以下のスクリプトを入力します。
  5. [保存する]をクリックして、独自の関数を保存します。
    Idea
    [保存して実行する]をクリックすると、スクリプトのテストと実行を即座に開始します。
Quote
  1. getValues = zoho.people.getRecordById('Travel_Claim',recordId);
  2. tabularsec = getValues.get('tabularSections').get('Cost Details');
  3. result = 0;
  4. for each tabularsecvalues in tabularsec.toList()
  5. {
  6. cost = tabularsecvalues.get('');
  7. format = tabularsecvalues.get('');
  8. if(format != 'USD' && cost > 0.00 && format != '')
  9. {
  10. currencyvalues = getUrl('https://data.fixer.io/api/latest?access_key=YOUR_ACCESS_KEY&base=USD');
  11. formatvalues = currencyvalues.get('rates').get(format);
  12. totalval = cost.toDecimal() * formatvalues.toDecimal();
  13. total = totalval.round(2);
  14. result = total + result;
  15. }
  16. }
  17. addrecmap = Map();
  18. addrecmap.put('recordid',recordId);
  19. addrecmap.put('total',result.toString());
  20. addtotal = zoho.people.update('Travel_Claim',addrecmap);
  21. info addtotal;
Idea
フォームと項目のリンク名の詳細については、[設定]→[開発者向け情報]→[Zoho People API]の順に移動して、一覧をご参照ください。

休暇の残数の追加

従業員の休暇の残数を求めるには、以下のコードを実行します。特定の休暇の種類IDは、こちらのAPIから取得して、コード内で置き換えます。
  1. [設定]→任意のサービス→[自動化]→[操作]→[独自の関数]の順に移動します。
  2. フォームを選択後、[独自の関数を追加する]をクリックします。 
  3. [独自の関数名]と必要なパラメーターの詳細を入力します。
    Info
    Parameters:
    erecno = ID (Employee ID)
    count = count (Leave credit)
  4. 以下のスクリプトを入力します。
  5. [保存する]をクリックして、独自の関数を保存します。
    Idea
    [保存して実行する]をクリックすると、スクリプトのテストと実行を即座に開始します。
Quote
  1. param = Collection();
  2. leavetypeid = '494174000000515325';
  3. details = '{' + erecno + ':{' + leavetypeid + ':{'date':' + today.toString('dd-MMM-yyyy') + ','count':' + count + '}}}';
  4. param.insert('balanceData':details);
  5. getRecord = invokeurl
  6. [
  7.     url :'https://people.zoho.com/people/api/leave/addBalance'
  8.     type :POST
  9.     parameters:param.toMap()
  10.     connection:'people_cf'
  11. ];
  12. info getRecord;

週の所定労働時間を下回る従業員へのメール送信

週の総労働時間が45時間未満の従業員にメールを送信する例を挙げてみます。下記のスクリプトを使用すると、自動でメールを送信することが可能です。
  1. [設定]→任意のサービス→[自動化]→[操作]→[独自の関数]の順に移動します。
  2. フォームを選択後、[独自の関数を追加する]をクリックします。 
  3. [独自の関数名]と必要なパラメーターの詳細を入力します。
    Info
    Parameters:
    erecno = ID (Employee ID)
    count = count (Leave credit)
  4. 以下のスクリプトを入力します。
  5. [保存する]をクリックして、独自の関数を保存します。
    Idea
    [保存して実行する]をクリックすると、スクリプトのテストと実行を即座に開始します。
Quote
  1. start_date = today.toDate().subDay(7);
  2. end_date = today.toDate().subDay(1);
  3. getrec_Col = Collection();
  4. getrec_Col.insert('startDate':Start_Date);
  5. getrec_Col.insert('endDate':End_Date);
  6. getrec_Col.insert('dateFormat':'dd-MMM-yyyy');
  7. get_rec = invokeurl
  8. [
  9. url :'https://people.zoho.com/people/api/attendance/getSummaryReport'
  10. type :POST
  11. parameters:getrec_Col.toMap()
  12. connection : 'cf'
  13. ];
  14. summary_Reports = get_rec.get('summaryReport');
  15. for each  summary in summary_Reports
  16. {
  17. emailId = summary.get('emailId');
  18. totalWorkedDays = summary.get('totalHours');
  19. totalWorkedDays = totalWorkedDays.getPrefix(':').toNumber();
  20. if(totalWorkedDays < 45)
  21. {
  22.     sendmail
  23.     [
  24.         from : zoho.adminuserid
  25.         to : emailId
  26.         subject: 'Total Hours'
  27.         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>'
  28.     ]
  29. }
  30. }

Ideaフォームと項目のリンク名の詳細については、[設定]→[開発者向け情報]→[Zoho People API]の順に移動して、一覧をご参照ください。
Info
上記のスクリプトは、編集して類似の用途に使用することも可能です。
Info
独自の関数で使用されるすべてのAPIには、しきい値制限があります。各モジュールの制限についてはAPIガイドを参照して、必要に応じてコードをカスタマイズしてください。