お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の
英語版を参照してください。
要件
ルックアップ項目で確立された連結をたどりながら、リンクされたレコードの系列を再帰的に更新する関数を実装します。
ユースケース
Zoho Creator のタスク管理アプリケーションを想定します。ここでは、タスク依頼は「新規」または「再開」のいずれかに分類されます。新規タスクは、追加する タスクフォームでタスクの詳細を直接入力して作成します。一方、再開タスクは、以前にオン Holdになっていたタスクにリンクされます。このリンクは、同じフォーム内のルックアップ項目を使用して行います。これにより、再開タスクも再度オン Hold にしたり、繰り返し再開したりできるため、リンクされたタスクのチェーンが作成されます。チェーン内の最新のタスクが完了に設定されると、ルックアップ項目を介してチェーンをたどる再帰関数が実行され、最初のオン Holdタスクを含む、リンクされたすべてのタスクのステータスが完了に更新されます。これにより、関連するすべてのタスクでステータスが正確かつ一貫して更新されます。
手順
-
タスクの詳細を保存するため、次の内容でフォームを作成します。
|
フォーム |
フォームリンク名 |
項目タイプ |
項目名 |
項目リンク名 |
|
追加する タスク |
Add_Task |
ラジオボタン |
タスクカテゴリー
|
Task_Category |
|
単一行 |
タスク件名 |
Task_Title |
|
ルックアップ(Add_Task) |
タスクを再開 |
Reinitiate_Task |
|
ドロップダウン |
タスクステータス
-
Started(初期設定)
-
オン Hold
-
Reinitiated
-
完了
メモ:Startedオプションの横にあるラジオボタンをクリックし、項目プロパティで初期設定として設定します。
|
Task_Status |
- 項目プロパティでタスクを再開ルックアップ項目のフィルターを設定オプションをクリックし、フィルターを設定してオン Holdのタスクのみが表示されるようにします。

- 項目にタスクステータス、演算子にequals、選択肢にオン Holdを選択します。

- Deluge 関数を作成し、戻り値の種類に無効を選択し、Record_IDという名前でintデータタイプの引数を指定します。関数名は「Recursion」とします。この関数はワークフローから実行され、再帰的に呼び出されて、関連付けられた再開タスクのステータスを取得および更新します。

- Deluge エディターに次のスクリプトを追加します。
- 無効 Recursion(int Record_ID)
- {
- //Fetch引数で渡されたレコード ID に一致するレコードを取得します。
- fetch_records = Add_Task[ID == Record_ID];
- //取得したレコードのタスクステータスを完了に更新します。
- fetch_records。Task_Status='完了';
- //関数を再度呼び出し、関連付けられた再開タスクを取得して、そのステータスを完了に更新します。
- if(fetch_records。Task_Category == 'オン Hold 中のタスクを再開')
- {
- thisapp。Recursion(fetch_records。Reinitiate_Task);
- }
- }
- フォームワークフローを作成し、追加する タスクフォームの送信が正常に完了したときに実行されるように設定します。レコードイベントとして「作成 or 編集」を選択し、ワークフロー名を「Update_Status」としてワークフローを作成をクリックします。このワークフローは、再開タスクのステータスと、関連付けられたタスクのステータスを更新します。

- Add 新規 操作 > Deluge Scriptをクリックし、Deluge エディターに次のスクリプトを追加します。
- //保留中のタスクが再開された場合、再開されたタスク データと、そのタスクに関連付けられている保留中タスクのタスク ステータスを更新します。
- //保留中タスクを再開するための新規タスク データを作成したとき。
- if(Task_Category == 'Reinitiate タスク オン hold' && Task_Status == 'Started')
- {
- input。Task_Status = 'Reinitiated';
- //再開タスクのタスク 件名を、関連付けられている保留中タスクの件名で更新します。
- input。Task_Title = input。Reinitiate_Task。Task_Title;
- fetch_records = Task_Request[ID == input。Reinitiate_Task];
- fetch_records。Task_Status='Reinitiated';
- }
- //再開されたタスクのステータスが完了に変更された場合、Recursionカスタム関数をトリガーして、関連付けられているすべての再開タスク データを「完了」に更新します。
- //再開されたタスクのステータスを完了に変更したとき。
- if(Task_Category == 'Reinitiate タスク オン hold' && Task_Status == '完了')
- {
- //Recursion 関数を呼び出します。
- thisapp。Recursion(input。ID);
- }
動作を確認する
- call 関数
- レコードの取得