Skip to end of metadata
Go to start of metadata

項目自動更新の値の設定方法として、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;
  }

}
  • No labels