Zoho CRMのクライアントスクリプトによるサブフォーム日付重複防止検証

Zoho CRMのクライアントスクリプトによるサブフォーム日付重複防止検証

お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

要件の概要

Zoho CRM ユーザーは、サブフォーム内の日付項目に基づいてエラーポップアップによるバリデーションを行いたいと考えています。つまり、新しい「開始時刻」が、既存の訪問の開始時刻と終了時刻の間に入らないようにしたい、という要件です。

ユースケース

医療機関(例:病院)では、各患者の訪問予定はサブフォーム内の開始時刻と終了時刻で管理されます。サブフォームの各行が 1 件の訪問枠を表します。

ユーザーが次回の訪問予定を登録する際、誤って既に予約済みの枠の時間帯に重なる開始時刻を入力してしまう場合があります。

このリスクを軽減するため、CRM の操作画面でクライアントスクリプトを使用し、エラーポップアップの仕組みを実装します。これにより、CRM ユーザーはデータを保存する前に通知を受けられ、不正確なデータ(例:訪問予定の重複)を患者に対して登録してしまうことを防げます

このバリデーションにより、すべての訪問に対して、重複のない明確な時間枠が確保され、スムーズな業務運営、正確な請求処理、顧客満足度の向上につながります。
Alert
重要な理由:
  1. 二重予約を防止

  2. 正確な請求処理

  3. 適切なスケジューリング運用

  4. 患者体験の向上

  5. 患者満足度のさらなる向上

Info

権限と利用可能条件

-> 拡張機能の管理権限を持つユーザーは、クライアントスクリプトを設定・構成できます。
-> サンドボックスの管理権限を持つユーザーは、サンドボックスを管理し、このユースケースをテストできます。

設定方法

次に、患者タブ編集ページに対して、保存ボタン用のクライアントスクリプトを作成します。例として、ユーザーが保存ボタンをクリックするたびに、スクリプトがサブフォームのデータをチェックし、新しい訪問の開始時刻が既に登録されている訪問枠の時間帯に含まれている場合は、エラーポップアップを表示します。

このユースケース向けにクライアントスクリプトを設定する手順は、次のとおりです。

1) まず、スクリプトの目的に応じて、名前説明などの基本情報を入力します

2) カテゴリ詳細セクションで、次の項目を選択します。

* カテゴリ:タブ
* ページ:編集
* タブ:Patients(患者)
* 必要なレイアウトを選択します。

3)  イベント詳細セクションで、次の項目を選択します。

* タイプ:ページイベント
* イベント:onSave



コード

  1. //サブフォームデータの取得 - 訪問情報
  2. console.clear();
  3. var subform = ZDK.Page.getForm().getValues().Visit_Information;
  4. console.log(subform);
  5. var start = subform[0].Visit_Start_Time;
  6. var end = subform[0].Visit_End_Time;
  7. console.log('start : ', start);
  8. console.log('end : ', end);

  9. //サブフォームにデータがある場合、コードは if 条件内の処理に進みます
  10. if (subform.length > 1) {

  11. for (i = 1; i < subform.length; i++) {
  12. var new_start = subform[i].Visit_Start_Time;
  13. console.log('new start : ', new_start);
  14. var new_end = subform[i].Visit_End_Time;
  15. console.log('new end : ', new_end);

  16. n = i + 1;
  17. console.log('before check');
  18. console.log('first if ', (new_start > start && new_start < end));
  19. console.log('second if ', (new_end > start && new_end < end));

  20.         //新しい訪問の開始時刻が前のスロットの範囲内かをチェックし、データの保存を防止します
  21. if (new_start > start && new_start < end) {
  22. console.log('check passed at if ');
  23. ZDK.Client.showMessage('Start Date at row ' + n + ' is falling between the start and end date of previous row', { type: 'info' });
  24. return false;
  25. }
  26. else if (new_end > start && new_end < end) {
  27. console.log('check passed at else if ');
  28. ZDK.Client.showMessage('End Date at row ' + n + ' is falling between the start and end date of previous row', { type: 'info' });
  29. return false;
  30. }
  31. var start = new_start;
  32. var end = new_end;
  33. }
  34. }

  1. コードの説明

-> スクリプトは現在のレコードのサブフォームデータを取得し、1 行目の開始時刻と終了時刻の値を取得します。その後、サブフォームにデータがあるかを確認し、ある場合は処理を続行します。

-> 次に、同じサブフォーム項目(開始時刻・終了時刻)の、以降の行の値を取得します。 

-> その後、最後の行の開始時刻が、いずれかの前のスロット(=前の行)の時間帯に含まれていないかをチェックします。 

-> 不正なスロットが見つかった場合は、UI 上にエラーポップアップを表示して、エンドユーザーに修正を促します。また、データの保存処理をブロックし、編集ページのままにして、保存前にデータを修正できるようにします。

ポップアップエラーメッセージ例 - Start Date at row 4 is falling between the start and end date of previous row

動作デモ - スクリーンキャスト


Idea
同じ設定は、他のページにも構成できます。
Alertスムーズに導入するために、円滑な実装を行うには、本番環境に反映する前に、サンドボックス環境で設定を構成し、テストすることをおすすめします。

TIPS - よくあるエラーを防ぐ

-> スクリプト内では、必ず 正しい API 名を、タブと項目の両方について使用してください。

-> 意図した結果を得るため、各変数に対して logs() または console.log()を追加し、出力を確認しながら動作を検証することをおすすめします。つまり、各 logs() の出力は、'Messages'タブ(Client Script IDE内)で確認できます。コンソールログを表示するには、次の操作を行ってください - 'ブラウザー画面を右クリック >> 検証 (Inspect) >> Console'


-> 期待した動作にならない場合は、各出力やループを確認しながらスクリプトをテストし、あわせて、提供されているサンプルヘルプドキュメントで、各 ZDK Client/CRM API メソッドの構文を再確認してください。

Info各 ZDK Client/CRM API メソッドのサンプルスクリプト - ヘルプリファレンス

Notes
メモ: コードの最適化におけるベストプラクティスや、Zoho CRM 全体で Client Script を展開するさまざまな方法については、次の ガイド記事を参照してください。



ご不明な点がありましたら、遠慮なく partner-support@zohocorp.com までお問い合わせください。

Notes
また、ヨーロッパおよび英国のパートナーの皆さまは、partner-support@eu.zohocorp.comまでご連絡いただきますようお願いいたします。