以前に「Web-to リードで入力フォームを変更せずに格納先を変更する」で、
POST された内容を項目自動更新で保存先を差し替えたりしたが、
実はあれだけでは不十分だと分かったので追記。
Sandbox と本番環境でアクションの並び順が異なる
なぜか Sandbox からリリース送信して、
本番でアクションの並びを見ると逆順になっていた。
逆順になると自動更新が働かなくなり困ったことになった。
※あとで複数ある項目自動更新の実行順番は既定されていないと分かったが、処理にさほど時間がかからないものであれば上から順に実行されていそうな雰囲気
ワークフローアクションの実行順番
アクションを何度入れ替えても順番を決められなかったので、
この順番は実行順番とは関係ないものではないかという疑惑が涌いた。
・項目自動更新は、メールアラート、ToDo、およびアウトバウンドメッセージの前に実行されます。
・項目自動更新は、ケース割り当て、リード割り当て、自動レスポンス、およびケースエスカレーションの各ルールの後に実行されます。
と、書かれているので以下のような順番で実行されるらしい。
1. ケース割り当て
2. リード割り当て
3. 自動レスポンス
4. ケールエスカレーション
5. 項目自動更新
6. メールアラート
7. Todo
8. アウトバウンドメッセージ
さらに項目自動更新を複数使っている場合で、
かつ同じ項目を参照・更新する場合は、順番が既定されていないので結果が予測できないらしい。
・1 つのワークフロールールに異なる値を同じ項目に適用する複数の項目自動更新が含まれている場合には、項目自動更新の結果は予測できません。
クマった(´(ェ)`)。
Salesforce 内で動く全自動化処理の実行順番
姓名からカスタム姓名にコピー処理が終わった後に、
別の処理で姓名に値を入れればいいと思ったが、
ワークフロールールの後にはそれを行える処理がなかった。
・古いレコードをデータベースからロード(または、新しい挿入の初期化)
・新しいレコードの値で古い値を上書き
・システムの入力規則
・すべての before トリガを実行(EE / UE のみ)
・カスタム入力規則
・レコードをデータベースに保存(しかし、コミットされていない)
・レコードをデータベースから再ロード
・すべての after トリガを実行(EE / UE のみ)
・割り当てルール
・自動応答ルール
・ワークフロー ルール
・エスカレーション ルール
・積み上げ集計数式の値の更新(存在する場合)
・データベースのコミット
・コミット後のロジック(メールの送信)
ニャンともクマった(´(ェ)`)。
対処法(ワークフロールールの再評価)
お手上げかと思ったが、「項目変更後にワークフロールールを再評価する」を利用すると実現可能となることが分かった。
ワークフロールールが2つ必要となるが、再評価を使えば項目自動更新の順番を決めて処理を実行することができる。
1. リードが作成される(ルールAの実行条件)
2. ワークフロールールA実行
姓 → カスタム性にコピー
名 → カスタム名にコピー
3. ワーフクロールールの再評価
4. カスタム姓がnullではない(ルールBの実行条件)
5.ワークフロールールB実行
カスタム性+様 → 姓に挿入
null → 名に挿入
ルールの説明のところにしっかり書いておかないと忘れてしまいそうな設定項目だけど、なんとかこれで実現できた!