項目自動更新で使用するApexクラスを作成
項目自動更新の値の設定方法として、Apexクラスを作成することにより、動的な値の設定や、申請対象のオブジェクト以外へのデータ操作も可能となります。
Apex実装例を参考に、WF_FieldUpdateExecutorインタフェースを継承したApexクラスを作成してください。
前提条件
作成するクラスは、以下の条件を満たしている必要があります。この条件を満たしていない場合、ワークフローは動作を保証しません。
- WF_FieldUpdateExecutor インタフェースを実装していること。
- WF_FieldUpdateExecutor インタフェースの実装ルールに基づいていること。
- global であること。
- without sharing であること。
WF_FieldUpdateExecutor インタフェースの詳細
名前空間
TSMNTWF
run メソッド
項目自動更新を行います。このメソッドの実装は以下の条件を満たす必要があります。
- 処理が完了した場合、trueを返すこと。
※ ワークフローは、作成されたApexクラスによって更新されたデータの妥当性、整合性は検証しません(例えば、Apexクラス内でのレコード削除や、参照項目の付け替え等)。更新内容の妥当性、整合性はメソッド内で検証してください。
※ 何らかの理由により処理を中止する場合は例外をスローしてください。ワークフローは処理を中止し、画面には例外に設定した メッセージが表示します。
※ SOQLのコール回数等のガバナ制限の影響を受けることに留意してください。SOQLのコール回数が極端に多い場合等は、ワークフローは動作を保証しません。
シグニチャ
Boolean run(Map<String, Object> values)
パラメータ
values
型: Map<String, Object>
values は run 実行時の状態を保持しています。以下のキーが保持されています。項目自動更新を実行する際に、必要な情報を利用してください。
キー | 値 | 型 | 備考 |
---|---|---|---|
operation | 操作区分 ・submit(申請) | String | 項目自動更新の設定時の「更新タイミング」とは異なる粒度での操作区分であることにご注意ください。 画面操作と紐づいた操作区分となっておりますので、それぞれの操作に応じて細やかな更新が可能となっております。 (例えば、通常の操作によるステップの承認では動作せず、自動承認時のみ実行される等) |
processId | ProcessInstanceのレコードID | Id | |
stepId | 操作中のStepのレコードID | Id | 以下の操作の場合、値はNullになります。 |
actorId | 操作中のActorInstanceのレコードID ※代理承認・再割り当ての場合は、それぞれの元となっているActorInstanceのレコードID | Id | 以下の操作の場合、値はNullになります。 |
userId | 操作者のユーザID | Id | 自動承認中の場合、すべて「自動承認する起因となった操作者」のユーザIDが設定されます。 |
targetRecordId | 申請対象レコードID | Id |
戻り値
型: Boolean
処理が正常終了したことを示す正負値です。
Apex実装例
global without sharing class FieldUpdateExecutor implements TSMNTWF.WF_FieldUpdateExecutor { public Boolean run(Map<String, Object> values){ Boolean result = true; // 引数から申請対象レコードを取得 Id recordId = (Id) values.get('targetRecordId'); TSMNTWF__WF_Data__c data = [ SELECT Id, Name FROM TSMNTWF__WF_Data__c WHERE Id = :recordId ]; // 件名の末尾に「_Apexクラスによる更新」と追加して更新 data.Name = data.Name + '_Apexクラスによる更新'; update data; return result; } }