項目自動更新で使用するApexクラスを作成

項目自動更新で使用する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(申請)
・approve(通常承認)
・skipApprove(自動承認)
・forceApprove(強制承認)
・reject(却下)
・remand(差戻し)
・remove(取消)

String

項目自動更新の設定時の「更新タイミング」とは異なる粒度での操作区分であることにご注意ください。

画面操作と紐づいた操作区分となっておりますので、それぞれの操作に応じて細やかな更新が可能となっております。

(例えば、通常の操作によるステップの承認では動作せず、自動承認時のみ実行される等)

processIdProcessInstanceのレコードIDId
stepId

操作中のStepのレコードID
※StepInstanceではない

Id

以下の操作の場合、値はNullになります。
・申請
・取消

actorId操作中のActorInstanceのレコードID
※代理承認・再割り当ての場合は、それぞれの元となっているActorInstanceのレコードID
Id

以下の操作の場合、値はNullになります。
・申請
・自動承認
・取消

userId操作者のユーザIDId自動承認中の場合、すべて「自動承認する起因となった操作者」のユーザIDが設定されます。
targetRecordId申請対象レコードIDId
戻り値

 型: Boolean

 処理が正常終了したことを示す正負値です。


Apex実装例

FieldUpdateExecutor
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;
    }

}