実装時に気をつけると良いこと

実装時に気をつけると良いこと

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 度に実行できるレコードの操作には上限があるため、ループ内でのレコード操作を避け、コレクション変数を使用してレコードを操作してください。
  • 1 度に実行できるフロー要素の上限は 2000 のため、大きなコレクション変数をループする場合、この制限に抵触する可能性があります。ループ内のロジックを最適化できないか検討してください。
    • 自動実行フローの場合は、[一時停止] 要素を使用することで処理を分けることができますが、このとき、フローの残りの部分は異なる処理(異なるフロートランザクション)として実行されます。

実行ユーザ #

  • Summer ‘20 から開始要素でフローの実行ユーザを細かく制御できるようになりました。
  • 自動起動フローは、呼び出し元の実行ユーザを引き継ぎます。プロセスからフローを起動する場合、プロセスの実行はシステムコンテキストとなるため、呼び出されるフローの実行ユーザもシステムコンテキストとなります。

権限制御 #

  • フロー全体への権限については、[フローを実行] 権限やユーザの [フローユーザ] 項目を使用します。
  • 単一のフローに対してアクセス制御を行たい場合は、各フローの [編集アクセス権] から、[デフォルト動作を上書きし、有効化されたプロファイルまたは権限セットにアクセスを制限します。] にチェックを入れ、アクセスできるプロファイルや権限セットを選択します。
  • フローの中で、特定の権限の場合に処理を実行したい場合は、決定要素にプロファイルやカスタム権限を条件に使用して、処理を分岐させると良いでしょう。
  • ユーザコンテキストでフローを実行する場合は、設定系のオブジェクトや管理者固有の項目など、一般ユーザが表示できないオブジェクトに対してどうしてもアクセスが必要な場合は、システム権限で実行されるサブフローにその処理を移しましょう。