有効な承認プロセスに対して、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

