有効な承認プロセスに対して、Apexのクラスの実行により申請や承認・却下を行うことができます。
■申請時の記述方法
申請時はApproval.ProcessSubmitRequestオブジェクトを利用します。
-
// プロセス作成
-
Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
-
// 申請対象の承認プロセスを指定
-
psr.setProcessDefinitionNameOrId('ProcessApiName');
-
// 申請対象のレコードをIdで指定
-
psr.setObjectId(対象のレコードのId);
-
// 申請時のコメント(任意)
-
psr.setComments('任意のコメント');
-
// 申請者のUserId 実行ユーザが申請者の場合はUserInfo.getUserId()
-
psr.setSubmitterId(申請ユーザのId);
-
// 承認者の指定 承認プロセスですでに指定されている場合はnull
-
psr.setNextApproverIds(new Id[] {承認ユーザのId});
-
// 申請プロセス実行
-
Approval.ProcessResult submitResult = Approval.process(psr);
■承認・却下時の記述方法
承認・却下時はApproval.ProcessSubmitRequestオブジェクトを利用します。
-
// 承認・却下する申請情報の取得
-
ProcessInstanceWorkitem workItem = [SELECT Id
-
,ProcessInstanceId
-
FROM ProcessInstanceWorkitem
-
// 承認プロセスAPI参照名
-
WHERE ProcessInstance.ProcessDefinition.DeveloperName = 承認プロセスAPI参照名
-
// 申請対象のオブジェクトレコード
-
AND ProcessInstance.TargetObjectId = :対象のレコードId
-
// 承認プロセスの現在の承認担当ユーザのId
-
AND ActorId = :承認ユーザのId
-
LIMIT 1
-
// 承認・却下用のプロセス作成
-
Approval.ProcessWorkitemRequest pwr = new Approval.ProcessWorkitemRequest();
-
// 実行処理の指定(承認:Approve, 却下:Reject, 削除:Removed)
-
pwr.setAction('Approve');
-
// 承認・却下対象のプロセスをIdで指定
-
pwr.setWorkitemId(workItem.Id);
-
// 承認・却下時のコメント(任意)
-
pwr.setComments('任意のコメント');
-
// 次の承認者の指定。最終承認時は不要
-
pwr.setNextApproverIds(new Id[] {次の承認ユーザのId});
-
// プロセス実行
-
Approval.ProcessResult workitemResult = Approval.process(pwr);
■オブジェクト構成について
承認申請の関するオブジェクト構成を簡単に解説します。
以下の5つのオブジェクトに関わる情報は全て格納されています。
・ProcessInstance
承認プロセスの情報を取得する際に利用する 下記4項目の親項目に当たる
・ProcessInstanceStep
承認プロセスのステップごとの情報を取得する際に利用する
・ProcessInstanceNode
承認履歴の詳細を取得する際に利用する
・ProcessInstanceWorkitem
保留中の承認プロセスに関する情報が格納される 申請処理を実行すると生成される
・ProcessInstanceHistory
「ProcessInstanceStep」と「ProcessInstanceWorkitem」を統一して参照するためのオブジェクト
なお、個々のProcessInstanceに紐づく全てのProcessInstanceHistoryを取得する場合は、
以下のようにサブクエリを用いたSOQLで取得することができます。
SELECT Id, (SELECT Id, StepStatus, Comments FROM StepsAndWorkitems) FROM ProcessInstance