実装時に気をつけると良いこと
Help に記載のベストプラクティス に可能な限り従ってください。
全体設計 #
- フローで実現したい処理が複雑な場合は、1 つのフローに何でも要素を詰め込むのではなく、サブフローに分割し、見通しのよいフローを作ることを心がけましょう。単に巨大な処理を分割するだけでなく、複数のフローで同じ処理を行いたい場合や、一部の処理で権限を昇格したい(例えば、ユーザ権限の画面フローで、システムオブジェクトにアクセスしたいなど)場合にもサブフローは活用できます。
- 変更される可能性がある値や、環境によって異なる値は、カスタム表示ラベルやカスタムメタデータに保存しましょう。要素内に直接値を設定するとメンテナンスが大変です。
- 1 オブジェクトにレコードトリガフロー、Apex トリガ、プロセス、ワークフロールールを混在させることを控えましょう。
- フローやプロセス、ワークフロールールの機能比較、性能比較、ロードマップについては、『Architect’s Guide to Building Record-Triggered Automation』を参照してください。
- 既に組織のメインオブジェクトに複雑なプロセスビルダーや Apex トリガがある場合は、Winter ‘22 でレコードトリガフローでサブフローが対応されることを待ってから移行を検討すると良いでしょう。
命名規則 #
各要素の API 名には命名規則を設けることで保守性が高まります。このレシピでは一例として以下の命名規則を定めています。また、各要素の [説明] 欄には可能な限りその目的を入力しておきましょう。
要素 | 命名規則の例 | API名の例 |
---|---|---|
画面 | screen_ で始める | screen_LeadUpdate |
画面の入力要素 | input_ で始める | input_FirstName |
画面の表示要素 | display_ で始める | display_ErrorMessage |
数式 | formula_ で始める | formula_Today |
変数 | var_ で始める(※ recordId は例外) | var_AccountId |
決定 | decision_ で始める | decision_Profile |
ループ | loop_ で始める | loop_Contacts |
割り当て | assign_ で始める | assign_AccountShippingAddress |
レコードを取得 | ・get_ で始める・オブジェクト名を含める | get_Opportunity |
レコードを作成 | ・create_ で始める・オブジェクト名を含める | create_Lead |
レコードを更新 | ・update_ で始める・オブジェクト名を含める | update_Contact |
レコードを削除 | ・delete_ で始める・オブジェクト名を含める | delete_Account |
主要なガバナ制約 #
フローやプロセスは、Apex トリガと異なり、自動で一括処理 (Bulkifiation) が考慮されますが、主要な制限に抵触しないように、実装時には以下に注意が必要です。
- フロー内で 1 度に実行できるレコードの操作には上限があるため、ループ内でのレコード操作を避け、コレクション変数を使用してレコードを操作してください。
- 詳細は Help 記事 を参照してください。
- 1 度に実行できるフロー要素の上限は 2000 のため、大きなコレクション変数をループする場合、この制限に抵触する可能性があります。ループ内のロジックを最適化できないか検討してください。
- 自動実行フローの場合は、[一時停止] 要素を使用することで処理を分けることができますが、このとき、フローの残りの部分は異なる処理(異なるフロートランザクション)として実行されます。
実行ユーザ #
- Summer ‘20 から開始要素でフローの実行ユーザを細かく制御できるようになりました。
- 自動起動フローは、呼び出し元の実行ユーザを引き継ぎます。プロセスからフローを起動する場合、プロセスの実行はシステムコンテキストとなるため、呼び出されるフローの実行ユーザもシステムコンテキストとなります。
権限制御 #
- フロー全体への権限については、[フローを実行] 権限やユーザの [フローユーザ] 項目を使用します。
- 単一のフローに対してアクセス制御を行たい場合は、各フローの [編集アクセス権] から、[デフォルト動作を上書きし、有効化されたプロファイルまたは権限セットにアクセスを制限します。] にチェックを入れ、アクセスできるプロファイルや権限セットを選択します。
- フローの中で、特定の権限の場合に処理を実行したい場合は、決定要素にプロファイルやカスタム権限を条件に使用して、処理を分岐させると良いでしょう。
- ユーザコンテキストでフローを実行する場合は、設定系のオブジェクトや管理者固有の項目など、一般ユーザが表示できないオブジェクトに対してどうしてもアクセスが必要な場合は、システム権限で実行されるサブフローにその処理を移しましょう。