🐴
Salesforce:そこのお前!承認プロセスをApexで動かすとApex実行ユーザーで承認されるぜ!
承認プロセスをApexで動かすとApex実行ユーザーで承認される
背景
どうしても別のユーザーとして承認したかったけどダメだった話
仮説
-
RunAsでApex実行ユーザーを指定すればいけるのでは説
→テストメソッドのみで runAs を使用できます。
だめだった -
承認プロセスに承認者設定をして実行すればいけるのでは説
→ そんな項目はない(絶望)
🤔...
(゚∀゚)💡
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. コメント欄に承認者を転記するように変更
こちらを採用した。
結果、解決はできず妥協した。
ぐぬぬ...
Discussion