Salesforce:そこのお前!承認プロセスをApexで動かすとApex実行ユーザーで承認されるぜ!

1 min read読了の目安(約1500字

承認プロセスをApexで動かすとApex実行ユーザーで承認される

背景

どうしても別のユーザーとして承認したかったけどダメだった話

仮説

  1. RunAsでApex実行ユーザーを指定すればいけるのでは説
    テストメソッドのみで runAs を使用できます。
    だめだった

  2. 承認プロセスに承認者設定をして実行すればいけるのでは説
    → そんな項目はない(絶望)

🤔...

(゚∀゚)💡

ProcessInstanceStepにApexトリガをBeforeInsertで設定して、承認者IDを変更すればよいのでは?

→ Apexトリガの設定できるオブジェクトはsObjectのみ。
  → ProcessInstanceStep には設定できない。

詰んだかも。。。

いや、まだ諦めへん

▽Salesforceヘルプ
Help | Training | Salesforce

次の権限のあるユーザは、指定承認者でなくても承認申請に返答できます。
「すべてのデータの編集」
オブジェクトに対する「すべて変更」

むむむ?

レコードが承認ステップに入ったとき、および承認プロセスが後でそのステップに戻ったときに
承認者のリストがどうなるのかを次に示します。

 ・返答したユーザが指定承認者のリストに含まれておらず、オブジェクトの「すべてのデータの編集」
  または「すべて変更」権限がある場合、承認者のリストの元の承認者はそのユーザに置き換わります。

 ・返答したユーザが指定承認者のリストに含まれている場合、そのステップの承認者のリストは変更されません。
  この動作は、承認者を指定する項目値が変更されていても発生します。

むむむむ?

仮説:APEXログインユーザーのプロファイルから[すべてのデータの編集]と対象オブジェクトの[編集権限:すべて変更]を外したらどうなる?

→そもそもAPEXからの承認ができなくなった

いよいよ詰んだ /(^o^)\

妥協案

A. 承認ユーザーごとにログインさせる
→ログインする手間とID,PW,ログイントークンを保持しておく必要あり

B. コメント欄に承認者を転記するように変更
→Apex実行ユーザーの名前を変更、コメント欄に「Slackからhogehogeが承認」などのコメントを付与
→リスト出力ができない
 →できたのでOK

C. 承認申請のタブをVFで作成する
→出力するときの項目を[OriginalActorID]とすることで承認が可能
→GUIからの代理承認はしない想定。

結論

B. コメント欄に承認者を転記するように変更

こちらを採用した。

結果、解決はできず妥協した。
ぐぬぬ...

あの頃の自分に言いたい。