本当に参りました。まさかのIdの桁数とデバックにおける「別のユーザとしてフローを実行」でのユーザIdには、本当に参った。
今回は今まで別のシステムで運用していた社内の承認申請をSalesforceで作り変えるというお話です。
残念ながら承認ワークフローは仕様が違い過ぎて使えないので、フローで作ることになりました。
今回はある条件の時だけに、申請者が登録すると即承認としていいパターンを作っていました。
Route__cという部門によって経路選択を行えるようにしています。経路によっては承認者が異なります。
本当はロール階層とかを使ってもよさそうでしたが、承認者が部門を兼務していることがあるのでロールをやめて経路をしていすることにしました。(経路はフローの中で申請者の部門から自動でセットしています)
経路によって!$Record.ApprovalRoute__r.Authorizer1__r.User001__cのようにユーザIdを引用します。
しかし、何とここは18桁のIdなんですよね。数式リソースなので15桁と思い込んでましたが、デバッグしてみると18桁のIdが取得されています。
CASE( {!$Record.Route__c} ,
"001" , {!$Record.ApprovalRoute__r.Authorizer1__r.User001__c} ,
"002" , {!$Record.ApprovalRoute__r.Authorizer1__r.User002__c} ,
"003" , {!$Record.ApprovalRoute__r.Authorizer1__r.User003__c} ,
"004" , {!$Record.ApprovalRoute__r.Authorizer1__r.User004__c} ,
"005" , {!$Record.ApprovalRoute__r.Authorizer1__r.User005__c} ,
"006" , {!$Record.ApprovalRoute__r.Authorizer1__r.User006__c} ,
"009" , {!$Record.ApprovalRoute__r.Authorizer1__r.User009__c} ,
"010" , {!$Record.ApprovalRoute__r.Authorizer1__r.User010__c} ,
"011" , {!$Record.ApprovalRoute__r.Authorizer1__r.User011__c} ,
"012" , {!$Record.ApprovalRoute__r.Authorizer1__r.User012__c} ,
"013" , {!$Record.ApprovalRoute__r.Authorizer1__r.User013__c} ,
{!$Record.ApprovalRoute__r.Authorizer1__r.User__c} )
また、上記の結果が申請者と同じ(承認者と申請者が同一)の場合をチェックしたかったので,
これと等しいかを比べてみました。
{!$User.Id}
当然、デバックでは「別のユーザとしてフローを実行」を指定しているのですが、この値はデバックしている私のIdが15桁として入ってました。ええええ、別のユーザのIdにならないし、何でここは15桁なんだよ。
仕方ないので別にある申請者というユーザの参照項目を使うと、ちゃんと別のユーザの15桁のIdになっていましたね。
ああでも15桁なんです。
最終的には18桁、15桁のIdが混在するので以下のように無理やり15桁に桁数をそろえることになりました。
LEFT(CASE( {!$Record.Route__c} ,
"001" , {!$Record.ApprovalRoute__r.Authorizer1__r.User001__c} ,
"002" , {!$Record.ApprovalRoute__r.Authorizer1__r.User002__c} ,
"003" , {!$Record.ApprovalRoute__r.Authorizer1__r.User003__c} ,
"004" , {!$Record.ApprovalRoute__r.Authorizer1__r.User004__c} ,
"005" , {!$Record.ApprovalRoute__r.Authorizer1__r.User005__c} ,
"006" , {!$Record.ApprovalRoute__r.Authorizer1__r.User006__c} ,
"009" , {!$Record.ApprovalRoute__r.Authorizer1__r.User009__c} ,
"010" , {!$Record.ApprovalRoute__r.Authorizer1__r.User010__c} ,
"011" , {!$Record.ApprovalRoute__r.Authorizer1__r.User011__c} ,
"012" , {!$Record.ApprovalRoute__r.Authorizer1__r.User012__c} ,
"013" , {!$Record.ApprovalRoute__r.Authorizer1__r.User013__c} ,
{!$Record.ApprovalRoute__r.Authorizer1__r.User__c} ) ,15) =LEFT({!$Record.Applicant__c},15)
しかし、同じ数式を数式項目としてつくるとなぜかちゃんと機能しているんですよね。
何でフローとは挙動が一致しないのだろう。