Apexで承認プロセスを操作するには?
有効な承認プロセスに対して、Apexから承認申請や承認/却下を行うことができます。
承認申請はApproval.ProcessSubmitRequestクラスで行います。
ソースコードはこんな感じ↓
// プロセスの作成
Approval.ProcessSubmitRequest psr
= new Approval.ProcessSubmitRequest();
// 申請するオブジェクトの設定
psr.setObjectId(objectId);
// 次の承認者の設定(自動割当の場合はnull)
psr.setNextApproverIds(new Id[] {UserInfo.getUserId()});
// プロセス実行
Approval.ProcessResult submitResult = Approval.process(psr);
// 成功 or 失敗の確認
System.assert(submitResult.isSuccess());
// 状態の確認
// Pending:未承認、Approved:承認済み、
// Rejected:却下、 Removed:取消済み
System.assertEquals(
'Pending', submitResult.getInstanceStatus());
// 承認申請により作成された
// ProcessInstanceWorkitemオブジェクトのIDを取得
// (承認申請すると、ProcessInstanceWorkitemオブジェクトに
// レコードが作成される)
List<Id> newWorkItemIds = submitResult.getNewWorkitemIds();
承認/却下はApproval.ProcessWorkitemRequestクラスで行います。
ソースコードはこんな感じ↓
// プロセスの作成
Approval.ProcessWorkitemRequest pwr
= new Approval.ProcessWorkitemRequest();
// 承認するProcessInstanceWorkitemオブジェクトのIDの設定
pwr.setWorkitemId(newWorkItemIds.get(0));
// 次の承認者の設定
// (自動割当や最終承認の場合はnull)
pwr.setNextApproverIds(new Id[] {UserInfo.getUserId()});
// アクションの設定
// Approval:承認、Reject:却下、
// Removed:削除<システム管理者のみ>
pwr.setAction('Approval');
// コメントの設定
pwr.setComments('コメント');
// プロセス実行
Approval.ProcessResult workitemResult
= Approval.process(pwr);
System.assert(workitemResult.isSuccess());
System.assertEquals(
'Approved', workitemResult.getInstanceStatus());
上の例では、ProcessInstanceWorkitemオブジェクトのIDを、
承認申請時の結果から取得していますが、SOQLで検索して取得する方法もあります。
承認フローで利用するオブジェクトは、以下の4つです。
・ProcessInstance:参照のみ可
・ProcessInstanceHistory:アクセス不可
・ProcessInstanceStep:参照のみ可
・ProcessInstanceWorkitem:参照、更新、削除のみ可
どのオブジェクトに対してもレコードの作成ができないので、オブジェクトのレコード操作によって、申請や承認といった承認フローの操作をすることはできません。
承認プロセスの操作はApproval.ProcessSubmitRequestクラスとApproval.ProcessWorkitemRequestクラスで行い、未承認オブジェクトや承認者などのデータ取得時に、これらのオブジェクトを利用します。
コメント