エラー要素 test001 (FlowRecordUpdate)。
このエラーは、フローでレコードの更新が試行されたときに発生しました: $Record.ApprovalRoute__r.Authorizer1__r.User__r.Email の値が設定されていないか、割り当てられていないため、フローでこの値にアクセスできませんでした。
数式リソースを少々変更してからこのエラーになりましたね。
- $Record.ApprovalRoute__r はトリガーを発生しているメインのオブジェクトの承認経路という項目。
- Authorizer1__rは承認経路というオブジェクトの承認者1という項目(ユーザの参照項目)
- User__r.Emailは上記にセットされている ユーザのメールアドレス
上記の関係があります。
元の式
IF(ISBLANK({!$Record.ApprovalRoute__r.Authorizer1__r.User__r.Email}) ,NULL,{!$Record.ApprovalRoute__r.Authorizer1__r.User__r.Email} ))
解決できた式
IF(ISBLANK({!$Record.ApprovalRoute__r.Authorizer1__r.User__c}) ,NULL,{!$Record.ApprovalRoute__r.Authorizer1__r.User__r.Email} ))
どうもIF文で承認経路のAuthorizer1__r(承認者1)というフィールドが設定されていて、この承認者オブジェクトにはいくつかのフィールドがあります。この承認者オブジェクトのユーザが設定されているか見て判断しないといけなかったのに、そのユーザオブジェクトのメールアドレスがNullなのかを見てしまったのがエラーの原因のようです。
承認者オブジェクトのUser__c(ユーザの参照項目)が設定されていない場合はnullですが、そのnullのメールアドレス項目を参照したのがいけなかったようです。
解決に役に立ったヘルプ
この種のエラーを回避するには、クロスオブジェクト参照を行う前に、外部キー (別名リレーション) 項目に基づいて、その項目が null かどうかを確認する条件を使用します。
この条件の順序に注意します。参照項目が null でないことの確認は、その参照でクロスオブジェクト参照を行う条件を評価する前に実行する必要があります。
上記の例の続きとして、プロセス条件は [Contact].AccountId Is Null False と [Contact].Account.Name equals Acme で、この順序でなければなりません。AccountId が null かどうかの確認は、値が入力される取引先項目に依存するクロスオブジェクト参照の前に行う必要があります。
[アクションの実行条件] で [数式の評価が true になる] を使用する場合、この例では以下の式を使用できます。
AND (NOT(ISBLANK( [Contact].AccountId )), [Contact].Account.Name = "Acme")
多くの標準リレーションは、項目名に「Id」が含まれ、混乱を招くことがあるため、null 値を確認する必要があります。上記の例を引き続き使用すると、よくある間違いは、[Contact].Account.Id の null を確認しようとすることです。これは、取引先の ID 項目へのクロスオブジェクト参照であるため、[取引先] 参照項目が空白であれば失敗します。正しい条件は [Contact].AccountId (つまり、取引先責任者の [取引先] 参照項目) を確認するものです。ここで注意すべき重要な点は、条件が、別のオブジェクトの「Id」項目へのクロスオブジェクト参照を行うのではなく、参照項目自体を確認することです。