Spring 22 以降のレコードトリガーフローのベストプラクティス


+ [Spring 22 以降のレコードトリガーフローのベストプラクティス](https://www.reddit.com/r/salesforce/comments/s6i9h9/record_triggered_flow_best_practices_after_spring/)

Spring 22 でフローに新たに追加されたいくつかの機能、つまりトリガーされたフローの実行順序の制御に関して、巨大なフローを回避するために「オブジェクトごとに 1 つのレコードでトリガーされるフロー」というルールを破ることができるかどうか疑問に思っていました。

保存後のフローについては、そこでサブフローを使用できるため、依然として 1 つのフローに固執する必要があると思いますが、保存前のフローについては、保存前のフローを複数に分割し、新しく追加された実行制御を使用してどのフローを追跡するかを推奨しますか?いつ発砲するのか？保存フローの前に 1 つの巨大なフローを順序付ける場合と比較して、保存フローの前に複数の順序を付ける場合、パフォーマンスに影響はありますか?


個人的には、なぜ複数のフローに分割する必要があるのか​​わかりません。私の意見では、フィールドへの編集がどこから来たのかを把握するのが難しくなるだけです。並べ替え順序の管理は複雑さを増すだけです。

したがって、個人的には次のように考えています。

1. 保存前に単一のオブジェクトに対して同じレコードの更新を何回行う予定ですか?ほとんどのオブジェクトでは、1 つのフローを維持することが非常に管理しやすいと思います。オートメーションの機能に基づいてオブジェクトごとに複数の保存前フローを作成するポリシーを実装する場合、すべてのオブジェクトがこのポリシーに従っている場合は、ほとんどのオブジェクトを簡単に含めることができる場合でも、フローのリストが不必要に拡張されるだけになります。一つの流れの中で。

2. おそらく多くの自動化が行われているオブジェクトについては、私は依然として 1 つのフローに留めるように言います。扱いにくくなった場合は、2 番目のフローを作成してこの 2 番目のフローに新しい自動化を構築するか、既存のフローの新しいバージョンを保存して複数のフローに分割します。私は今でも、一つの流れに留めてくださいと言います。でも、私は大きくて複雑な流れが好きです。複数のフローの間で探し回るよりも、答えが目の前にあることを知りたいと思っています。

正直なところ、なぜこのような実行順序が可能になるのかわかりません。うまくいかない方法はたくさんあると思います。パフォーマンスを考慮する場合、Salesforce 顧客の 99% が組織の規模に基づくパフォーマンスの問題に気付かないことは、その 1 つであるように感じられます。

私は、すべての常識を無視して、すでに複数の保存前フローを作成している少数派ですが、エントリ基準は、無関係な「コード」の巨大な塊を切り出すための優れた方法を提供する、というのが私の見解であり、今も昔も変わりません。また、フローを小さくすることで、ピア レビューがはるかに簡単になり、変更が非常に分離されていることを確認できます。25 個以上のノードを持つモノリシック フローの 2 つのバージョンを比較しようとしたことはありますか?本当に XML を読み取ってみたいという場合を除き、それは不可能ではないと思いますが、通常、diff にはノイズが多すぎるため、実際的ではありません。


+ [Spring’22 同一オブジェクト内でフロー実行順序を指定できるように](https://sf.forum.circlace.com/articles/694231968434360320)


トリガの順番を値を指定して、同じオブジェクトの保存前または保存後のフローの実行順序を決定します。宣言的に別のフローの前または後にフローを実行するように構築することができます。フローを順序付けることで、過度に複雑なフローを作成することなく一貫した結果を得ることができ、チームや論理的所有者ごとに自動化を分割することができます。

対象：この変更は、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の間に別のフローを簡単に入れることができます。この方法を使えば、既存のフローのトリガ順序値を変更する必要がなくなります。

あるフローを有効化、無効化、または順序を変更すると、他のフローの順序も自動的に更新される可能性があります。レコードトリガフローの順序は、関連するスケジュールパスや非同期パスには直接影響を与えません。

+ [オブジェクトのレコードトリガフローの実行順序の定義](https://help.salesforce.com/s/articleView?id=release-notes.rn_automate_flow_builder_trigger_order.htm&release=236&type=5)

オブジェクトの保存前または保存後レコードトリガフローでのみトリガ順序値を定義できます。たとえば、特定の保存後フローを優先して、ケースオブジェクトの他の保存後フローの前に実行できます。ただし、特定の保存後フローを優先して、保存前フローまたは Apex トリガの前に実行することはできません。複数のフローに同じトリガ順序値を設定できます。

+ [オブジェクトのレコードトリガーフローの実行順序を定義するためのガイドライン](https://help.salesforce.com/s/articleView?id=sf.flow_concepts_trigger_guidelines.htm&type=5)

   + オブジェクトとトリガー (保存前または保存後) が同じで、1 ～ 1,000 のトリガー順序値が設定されているフローは、昇順 (1、2、3、以下同様) に実行されます。同じトリガー順序値の複数のフローは、フローの API 参照名に基づいてアルファベット順に実行されます。
   + 次にトリガー順序値のないフローが作成日順に実行されます。Winter '22 以前に作成されたフローは、トリガー順序値を定義していなければ引き続きこの順序で実行されます。
   + フローの順序を有効化、無効化、または変更すると、他のフローの順序が自動的に更新される可能性があります。レコードトリガーフローを並び替えても、関連付けられているスケジュール済みパスや非同期パスに直接影響することはありません。


+ [レコードトリガフローの実行順番と再帰実行について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007clKNX)


# トリガーの実行順序

https://soe-irony.hateblo.jp/entry/2023/09/16/220650



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/eee05cab-d26b-436a-845c-edf549b9c04c.png)