tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:データ登録時に複数メールを順番に送信する方法

Salesforceにデータを登録する際に同じ宛先に複数のメールを順番に送信する方法についてです。あまり無いケースだと思いますが、必ずメールAが受取人に届いたあとにメールBを送りたいといった要件が発生したときの対応方法です。複数送信ということでパッと思いつくのが下記の設定方法です。

f:id:tyoshikawa1106:20190120180754p:plain


ですがワークフロールールのアクションの実行順序は保証されていないので必ずしも同じ順番で送信されるわけではありません。

ワークフローの考慮事項


実行順序を担保したい場合は、プロセスビルダーで設定するのが良いと思います。
f:id:tyoshikawa1106:20190120181342p:plain


これで要件を満たす形で設定完了...と思ったのですが、思わぬ挙動がありました。メールクライアントによって表示順が異なる場合があります。下記のようにGmailではメールAが届いたあとにメールBが届いたのですが、Appleのメールクライアントでは稀に順番が逆転しました。

Gmail

f:id:tyoshikawa1106:20190120181458p:plain

Apple

f:id:tyoshikawa1106:20190120181641p:plain


下記の形でメールアラート処理の間に項目自動更新を挟む形でも解決できませんでした。

  1. メールA送信
  2. メールB送信フラグを更新
  3. メールB送信


順番を担保したい場合はメールB送信処理を遅らせる必要があるみたいです。


この問題を解決する方法ですが、プロセスビルダーのスケジュール済みアクションを使用することで解決できます。スケジュールの間隔は「日」または「時」のみ指定可能で「分」はありませんでした。ですが、「0時間前」という形で指定することで1時間以内に送信することができます。
f:id:tyoshikawa1106:20190120182339p:plain

f:id:tyoshikawa1106:20190120182450p:plain


2つ目のメールはだいたい1分〜3分遅れで送信されると思います。(状況によってはもっと時間がかかるかもしれません)
f:id:tyoshikawa1106:20190120182742p:plain


この手順でメールAのあとにメールBが送信されるという要件を確実に満たせると思います。

プロセスビルダーのスケジュール済アクションのメリット

プロセスビルダーのスケジュール済アクションで、レコードの更新を行う場合は実行条件を指定できます。
f:id:tyoshikawa1106:20190120183401p:plain


ワークフロールールの時間ベースのアクションの場合は、項目自動更新アクションをそのまま呼び出すので細かい設定ができないようです。
f:id:tyoshikawa1106:20190120183822p:plain

こうしたスケジュール済み処理で判定処理を組み込む必要がある場合はプロセスビルダーの方がやりやすいと思います。

参考