· 

Apexクラスによる承認申請の実行

有効な承認プロセスに対して、Apexのクラスの実行により申請や承認・却下を行うことができます。

 

■申請時の記述方法

申請時はApproval.ProcessSubmitRequestオブジェクトを利用します。

  1. // プロセス作成
  2. Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
  3. // 申請対象の承認プロセスを指定
  4. psr.setProcessDefinitionNameOrId('ProcessApiName');
  5. // 申請対象のレコードをIdで指定
  6. psr.setObjectId(対象のレコードのId);
  7. // 申請時のコメント(任意)
  8. psr.setComments('任意のコメント');
  9. // 申請者のUserId 実行ユーザが申請者の場合はUserInfo.getUserId()
  10. psr.setSubmitterId(申請ユーザのId);
  11. // 承認者の指定 承認プロセスですでに指定されている場合はnull
  12. psr.setNextApproverIds(new Id[] {承認ユーザのId});
  13. // 申請プロセス実行
  14. Approval.ProcessResult submitResult = Approval.process(psr);

 

■承認・却下時の記述方法

承認・却下時はApproval.ProcessSubmitRequestオブジェクトを利用します。

  1. // 承認・却下する申請情報の取得
  2. ProcessInstanceWorkitem workItem = [SELECT Id
  3.                      ,ProcessInstanceId
  4.                   FROM  ProcessInstanceWorkitem
  5.                   // 承認プロセスAPI参照名
  6.                   WHERE ProcessInstance.ProcessDefinition.DeveloperName = 承認プロセスAPI参照名
  7.                   // 申請対象のオブジェクトレコード
  8.                   AND  ProcessInstance.TargetObjectId = :対象のレコードId
  9.                   // 承認プロセスの現在の承認担当ユーザのId
  10.                   AND  ActorId = :承認ユーザのId
  11.                   LIMIT 1
  12. // 承認・却下用のプロセス作成
  13. Approval.ProcessWorkitemRequest pwr = new Approval.ProcessWorkitemRequest();
  14. // 実行処理の指定(承認:Approve, 却下:Reject, 削除:Removed)
  15. pwr.setAction('Approve');
  16. // 承認・却下対象のプロセスをIdで指定
  17. pwr.setWorkitemId(workItem.Id);
  18. // 承認・却下時のコメント(任意)
  19. pwr.setComments('任意のコメント');
  20. // 次の承認者の指定。最終承認時は不要
  21. pwr.setNextApproverIds(new Id[] {次の承認ユーザのId});
  22. // プロセス実行
  23. 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