以下は、出退勤の時間の入力時に整合性のチェックを行う設定例です。
1. 画面右上の設定のアイコン(歯車のアイコン)をクリックしてください。
2. 左側のメニューから「自動化」→「ワークフロー」と選択し、
表示された画面で「ワークフローの追加」というボタンをクリックしてください。
.
3. ワークフローの詳細情報の入力画面で、フォーム名に「出退勤」を選択し、
ワークフロー名を入力してください。
また、必要に応じて、実行条件を選択してください(通常はそのままで設定不要です)。
4. 「処理」の「カスタム関数」の欄の「+」ボタンをクリックしてください。
※カスタム関数の機能は有料プランでのみ利用できます。
5. 関数名を入力し、「パラメーターの編集」をクリックしてください。
※関数名は内容を識別するためのもので、名前を自由に指定できます。
6. パラメーターの編集画面で以下の内容を設定してください。
メソッド名を入力してください(英数字で任意の内容を設定してください)。
メソッドの引数を設定してください。
日付:引数名に「emailId」と入力し、の印のアイコンをクリックし、
従業員の項目の中から「メールアドレス」を選択してください。
勤務日:「+新しく追加」のメニューをクリックし、
引数名に「workDate」と入力し、
上記と同様の手順で「勤務」を選択してください。
従業員データID:「+新しく追加」のメニューをクリックし、
引数名に「employeeRecordID」と入力し、
従業員の項目の中から「ID」(Zoho ID)を選択してください。
認証トークン:「+新しく追加」のメニューをクリックし、
引数名に「authToken」と入力し、
「独自の値の入力」を選択し、認証トークンを入力してください。
※認証トークンの取得方法についてはこちらを参照してください。
設定イメージ↓
入力完了後、「保存」をクリックしてください。
7. 関数の内容を設定してください。
以下の内容をコピーして貼り付けてください。
//■パラメーター設定
sdate = workDate;
edate = sdate;
dateFormat = "yyyy/MM/dd";
//■出退勤のAPIの呼び出し
u = "https://people.zoho.com/people/api/attendance/getUserReport";
p = Map();
p.put("authtoken",authToken);
p.put("sdate",sdate);
p.put("edate",edate);
p.put("dateFormat",dateFormat);
p.put("emailId",emailId);
response = postUrl(u,p);
responseMap = response.toMap();
//日付の一覧の取得
dateList = responseMap.keys();
dateList.sort();
totalWorkingHours = 0;
totalWorkingMinutes = 0;
totalHours = 0;
totalMinutes = 0;
for each d in dateList
{
//日付の処理
dateMap = responseMap.get(d).toMap();
dateValue = d.toDate();
firstInString = dateMap.get("FirstIn");
lastOutString = dateMap.get("LastOut");
//Total Hoursの集計
totalHoursString = dateMap.get("TotalHours");
totalHoursNumber = totalHoursString.toList(":").get(0).toLong();
totalMinutesNumber = totalHoursString.toList(":").get(1).toLong();
totalHours = totalHours + totalHoursNumber;
totalMinutes = totalMinutes + totalMinutesNumber;
}
//分の合計と集計
//Total Hours
totalMinutesToHours = floor(totalMinutes / 60);
leftTotalMinutes = totalMinutes % 60;
totalHours = totalHours + totalMinutesToHours;
totalTimeInMinutes = totalHours * 60 + leftTotalMinutes;
//■工数APIの呼び出し
u = "http://people.zoho.com/people/api/timetracker/gettimelogs?authtoken=" + authToken + "&fromDate=" + sdate + "&toDate=" + edate + "&billingStatus=all&jobId=all&user=" + emailId + "&dateFormat=" + dateFormat;
response = getUrl(u);
responseMap = response.toMap();
responseValue = responseMap.get("response");
responseValueMap = responseValue.toMap();
result = responseValueMap.get("result");
resultList = result.toJSONList();
aggregatedTotalTime = 0;
for each r in resultList
{
totaltime = r.get("totaltime");
aggregatedTotalTime = aggregatedTotalTime + totaltime;
}
timeLogTotalMinutes = aggregatedTotalTime / 60;
timeLogTotalHours = floor(timeLogTotalMinutes / 60);
timeLogLeftOverMinutes = timeLogTotalMinutes - timeLogTotalHours * 60;
//■整合性のチェック
resultText = "";
if(totalTimeInMinutes != timeLogTotalMinutes)
{
resultText = "一致していません!";
}
else
{
resultText = "一致しています";
}
//■データの追加
addMap = Map();
addMap.put("AttendanceTime",totalTimeInMinutes.toString());
addMap.put("TimeLog",timeLogTotalMinutes.toString());
addMap.put("Employee",employeeRecordID.toString());
addMap.put("Date",workDate);
addR = zoho.people.create("AttendanceTimeLogConsistencyCheck",addMap);
//■通知メールの送信
sendmail
[
from :zoho.loginuserid
to :zoho.loginuserid
subject :"出退勤と工数の整合性チェック"
message :"対象日:" + workDate + "<br>\n" + "<br>\n" + "出退勤の記録による時間合計(分):" + totalTimeInMinutes + "<br>\n" + "工数記録による時間合計(分):" + timeLogTotalMinutes + "<br>\n<br>\n" + resultText
]
上記の設定後、関数の「保存」ボタンをクリックしてください。
8. ワークフローの設定の「保存」をクリックしてください。
上記で設定は完了です!出退勤のデータを追加してみて、
整合性の確認結果のメールが送信されてくることを確認してください。
※出勤と退勤の時刻入力した場合のみ適切に動作します。