プレリリース組織でフローをいじっていると、思いがけない仕掛けを発見して、Salesforceのフロー担当さんが色々と考えながら作ったんだろうなぁ、と嬉しい気持ちになります。
今まではフローでしかできないことを設定する必要があるときのみ設定をしてきたので、まだまだ全然フローとお友達になれてはいないのですが、創意工夫にあふれているフローの画面を見ているとやる気がどんどん出てきます。
今日は自動化機能を使いこなすうえで欠かせない実行順序のお話です。
◇ SALESFORCE HELP >DOCS >SALESFORCE RELEASE NOTES >Salesforce Spring ’22 Release Notes >Define the Run Order of Record-Triggered Flows for an ObjectDefine the Run Order of Record-Triggered Flows for an Object
Specify a trigger order value to determine the run order of before-save or after-save flows for the same object. Declaratively configure a flow to run before or after another flow. Order your flows to help ensure consistent results without creating overly complex flows, letting you divide automation by teams or logical owners.
Where: This change applies to Lightning Experience and Salesforce Classic in Essentials, Professional, Enterprise, Performance, Unlimited, and Developer editions.
Why: You can define a trigger order value only for a before- or an after-save record-triggered flow on an object. For example, you can prioritize an after-save flow to run before other after-save flows on the Case object. But you can’t prioritize an after-save flow to run before any before-save flows or before an Apex trigger. Multiple flows can have the same trigger order value.
How: When you save a before- or after-save record-triggered flow, specify a trigger order value from 1 to 2,000. In a flow that’s already saved, specify a trigger order value in the flow’s version properties.
・Flows with the same trigger (before- or after-save) on the same object with trigger order values from 1 to 1,000 run in ascending order (1, 2, 3, and so on). Multiple flows with the same trigger order value run in alphabetical order based on the flows’ API names.
・Flows without trigger order values run next and in the order of their created dates. Flows in Winter ’22 and before run and continue to run in this order, unless you define a trigger order value for them.
・Flows with trigger order values from 1,001 to 2,000 run next and in ascending order. Any ties are settled using the flows’ API names.
When you order a large number of flows, a best practice is to evenly distribute the trigger order values, for example, 10, 20, 30, or 100, 200, 300. Then later, you can easily slot another flow in between, for example, between 10 and 20. This practice can help you avoid changing the trigger order values for preexisting flows.
Activating, deactivating, or changing the order for one flow can cause the order for other flows to be automatically updated. Ordering record-triggered flows has no direct effect on any associated scheduled or asynchronous paths.
↓日本語訳です。
オブジェクトのレコードトリガフローの実行順序を定義する
トリガの順番を値を指定して、同じオブジェクトの保存前または保存後のフローの実行順序を決定します。宣言的に別のフローの前または後にフローを実行するように構築することができます。フローを順序付けることで、過度に複雑なフローを作成することなく一貫した結果を得ることができ、チームや論理的所有者ごとに自動化を分割することができます。
対象:この変更は、Essentials、Professional、Enterprise、Performance、Unlimited、および Developer エディションの Lightning Experience と Salesforce Classic に適用されます。
理由: オブジェクトのレコード保存前または保存後のトリガフローに対してのみ、トリガ順序の値を定義できます。たとえば、ある保存後フローを優先して、ケースオブジェクトの他の保存後フローより先に実行することができます。しかし、保存後フローを保存前フローやApexトリガーの前に実行するよう優先順位をつけることはできません。複数のフローが同じトリガー順序値を持つことができます。
方法:保存前または保存後のレコードトリガ付きフローを保存するときに、トリガ順序(Trigger Order)の値を1~2,000の間で指定します。すでに保存されているフローでは、フローのバージョンプロパティでトリガー順序の値を指定します。
・同じオブジェクトに同じトリガ(保存前または保存後)を持つ、1~1,000のトリガ順序値を持つフローは、昇順(1、2、3、...)に実行されます。同じトリガ順序の値を持つ複数のフローは、フローのAPI名に基づいてアルファベット順に実行されます。
・次に、トリガを持たないフローが、作成された日付の順に実行されます。Winter '22以前のフローは、トリガ順序の値を定義しない限り、この順序で実行されます。
・次に、1,001から2,000までのトリガ順序値を持つフローが昇順で実行されます。同順位のフローは、各フローのAPI名で決定されます。
大量のフローを順序付ける場合は、10、20、30、100、200、300といった具合に、トリガの順序値を均等にするのがベストプラクティスです。そうすれば、後から、例えば10と20の間に別のフローを簡単に入れることができます。この方法を使えば、既存のフローのトリガ順序値を変更する必要がなくなります。
あるフローを有効化、無効化、または順序を変更すると、他のフローの順序も自動的に更新される可能性があります。レコードトリガフローの順序は、関連するスケジュールパスや非同期パスには直接影響を与えません。
大まかなルールはこういう↓ことかなと。
・トリガフローの場合、基本的に同じオブジェクトの同じトリガ内で「実行順序の値 の昇順(1→2→3→)」で実行される。同じ順序の値が設定されている場合は「API参照名のアルファベット順(A→B→C)」で実行される。例えば、同じオブジェクトで保存前トリガのフローが複数ある場合、そのなかで実行順序の値→API参照名で実行される。
・トリガを持たないフローは、作成された日付の順(古い→新しい?)で実行される。
プレリリース組織で見てみよう
フローを適当に作成し、保存時に画面を確認すると、「Trigger Order」の項目がありました。
一度保存したフローは、画面左上のギアアイコンをクリックしてプロパティを開き、さらに「詳細を表示」をクリックすると、下のほうに「Trigger Order」がありました。
トリガフローで実行順序の順 かつ 同じ順番の場合はAPI参照名の順かどうか試してみました
まずは同じオブジェクト内の同じトリガのときの実行順序を確認してみました。
本当は実際にあり得る例で検証して格好つけたかったのですが、凝ったことをやろうとして失敗を重ねてしまったので、順番を確認するためだけのどうでもいい設定をしています。
検証した内容
トリガ レコードトリガフロー|レコードが作成された|アクションと関連レコード(保存後)
各フローと Trigger Orger(実行順序)およびAPI参照名・商談名を変更。
実行順序:3
API参照名:FlowRenameOpp
・商談の「説明」に「〇〇(変更後の商談名)に変更したよ」の文言追加。
実行順序:11
API参照名:FlowFillDescription
・メールアラートで商談名変更を通知、↑で追加された「説明」項目もメールに差し込みあり。
実行順序:11
API参照名:NoticeOppsNewCreated
本来ならこれらはもっと無駄のないエレガントなフローにまとめられるので、絶対に真似しないでください。
結果
3つのフローを有効化し、レコードを新規作成しました。
レコード作成後、まずは商談名が変更されまして
「説明」項目にも「リネームされたよ」が挿入され
メールアラートで更新された商談名と「説明」の内容が通知されました。
実行順序(Trigger Orger)の値の順で、同じ値の場合は API参照名のアルファベット順になっていますね。
ひとこと
冒頭でも書きましたが、実行順序は自動化で重要なポイントで、認定アドミニストレーターの資格試験のときにも順序を必死に覚えたものです。既存のワークフローやプロセスビルダーと共存させていくためには、これまでの知識も引き続き重要になっていきますが、フローに一本化していく場合は、古(いにしえ)の情報となるかもしれませんね。
Flow Trigger Explorer も大変便利ですが、こちらでは実行順序(Trigger Orger)の値は確認できないのでしょうか?
ひとまず、私はもっとフローと仲良くなれるようにフローを特訓します。Spring’22のフロー関連の改修や新機能、ちょっと英語の文章を読んでいるだけでは正しく理解できているか自信がないので、日本語訳が出た後にもきちんと確認したいところです。
Spring’22関連記事
Spring'22 のスケジュール(英語)が出ました!Spring’22のプレリリース組織が取得できますよSpring'22 のリリースノート(英語版)が公開されましたSpring’22で承認プロセスの結果からフローがトリガできるようになる様子ワークフローのFlow移行ツール:Migration to Flow(Beta)を試してみました公開:2021年12月24日
更新①:2023年8月16日