グローバル変数と値を活用する
学習の目的
この単元を完了すると、次のことができるようになります。
- Flow Builder で実行ユーザーの項目を参照する。
- Flow Builder で実行ユーザーのロールとプロファイルを参照する。
- Flow Builder でカスタム表示ラベルを参照する。
- Flow Builder でカスタムメタデータを参照する。
グローバル変数とは?
グローバル変数はすべてのフローに存在します。ユーザーが作成するものではなく、フロー内で値を変更することもできませんが、この変数によってフロー内で非常に有用なデータにアクセスできます。このデータはフローが実行されるたびに異なる可能性があります。
グローバル変数はリソースを選択できる項目で使用できます。そのような項目には通常、[Enter value or search resources… (値を入力するか、リソースを検索...)]、[Search a field… (項目を検索…)]、[Insert a resource… (リソースを挿入...)] といったプレースホルダーテキストが含まれています。
Flow Builder ではグローバル変数はオブジェクトや項目と似た動作をします。各グローバル変数には複数の値が含まれます。フロー内でグローバル変数を使用するには、次の手順を実行します。
- 要素の作成または編集中に、リソースを選択できる項目をクリックします。この項目に使用できるリソースが表示されます。
- [Global Variables (グローバル変数)] の下にある任意のオプションを選択します。選択した変数に使用できる項目が表示されます。
- 使用する値が含まれる項目を選択します。
実行ユーザーの項目値を取得する
[Running User (実行ユーザー)] グローバル変数 (または一部の要素では $User グローバル変数) を使用すると、フローでユーザーの情報を取得できます。この変数によって、フローを実行したユーザーのユーザーデータにフロー内でアクセスできます。実行ユーザーの ID、名前、マネージャー ID、メールアドレスなどのデータにアクセスするには [Running User (実行ユーザー)] グローバル変数を使用します。
Pyroclastic の営業マネージャーはチームメンバーが重要商談を不成立としてクローズしたときに知りたいと考えています。Flo は Chatter 投稿を使用して商談所有者のマネージャーへの通知を自動化することをあなたに任せました。商談をクローズするユーザーが商談の所有者ではない場合があるため、通知では誰が変更したかを示す必要があります。
商談の StageName が [Closed Lost] に変更された場合に実行されるフロー [Create Follow-Up with Decision Maker (意思決定者へのフォローアップの作成)] はすでにあります。そのフローに商談所有者のマネージャーへの Chatter 投稿を作成するアクションを追加します。
まず、所有者のマネージャーを特定する必要があります。単元 2 で行ったのと同じように、[Get Records (レコードを取得)] 要素を使用して情報を取得し、その情報を [Action (アクション) 要素内で使用します。
所有者のマネージャーを取得する
- [Create Follow-Up with Decision Maker (意思決定者へのフォローアップの作成)] フローを開きます。
- フローキャンバスで、[Get Decision Maker (意思決定者を取得)] 要素の後で
をクリックします。[Get Records (レコードを取得)] を選択します。
- [Label (表示ラベル)] に
Get Owner Manager
(所有者のマネージャーを取得) と入力します。
この名前は生成された変数の表示ラベルに使用されるため、内容を示す名前にすることをお勧めします。
- [オブジェクト] で [ユーザー] を選択します。
- [Condition Requirements (条件の要件)] で [All Conditions Are Met (AND) (すべての条件に一致 (AND))] を選択します。
-
[レコードを絞り込む] セクションで、この要素で取得するレコードを指定する条件を定義します。
- Field (項目): User ID (ユーザー ID)
- Operator (演算子): Equals (次の文字列と一致する)
- Value (値): Triggering Opportunity (トリガー商談) > Owner ID (所有者 ID) (1 つ目) > Manager ID (マネージャー ID) (2 つ目)
- [Get Records (レコードを取得)] パネルで
をクリックしてパネルを閉じます。
これで、商談所有者のマネージャーのすべての項目 (名前やメールアドレスなど) を含むレコード変数ができました。次は、アクション要素を使用して Chatter 投稿を作成します。
テキストテンプレートを作成する
- Flow Builder で、ツールボックスがまだ開いていない場合には
をクリックして開きます。
-
[New Resource (新規リソース)] をクリックします。
- [リソース種別] で [テキストテンプレート] を選択します。
- [API Name (API 参照名)] に
ChatterPostManager
と入力します。
- [Resource Picker (リソースピッカー)] 項目の横にある [View as Rich Text (リッチテキストとして表示)] を [View as Plain Text (プレーンテキストとして表示)] に変更します。
- [Resource Picker (リソースピッカー)] 項目で、[User from Get Owner Manager (Get Owner Manager ユーザー)] > [User ID (ユーザー ID)] を選択します。
マネージャーの名前の差し込み項目がメッセージ本文の先頭に挿入されます。
- 次のように差し込み項目の周りに角括弧 [ ] を追加します。
[{Get_Owner_Manager.Id}]
- 次のように先頭に @ 記号、末尾にコロンを追加します。
@[{Get_Owner_Manager.Id}]:
- コロンの後で改行し、次のように入力します。
This opportunity was marked Closed Lost. Closed by:
- スペースはそのまま残し、[Global Variables (グローバル変数)] セクションにある [Running User (実行ユーザー)] グローバル変数を使用してさらに 3 個の差し込み項目を挿入します。一緒に実行されないように、間にスペースを追加します。
-
Running User (実行ユーザー) > FirstName
-
Running User (実行ユーザー) > LastName
-
Running User (実行ユーザー) > Email
-
[Done (完了)] をクリックします。
次は、[Action (アクション) 要素でテキストテンプレートを使用して商談の Chatter フィードに投稿します。
Chatter 投稿でマネージャーに通知する
- [Get Owner Manager (所有者のマネージャーを取得)] 要素の後で
をクリックします。検索バーに
post
(投稿) と入力します。
-
[Chatter に投稿] を選択します。
- [Label (表示ラベル)] で
Chatter Post to Manager
(マネージャーへの Chatter 投稿) と入力します。
- [メッセージ] で [ChatterPostManager] テキストテンプレートを選択します。
- [Target Name or ID (対象名または ID)] で、[User from Get Owner Manager (Get Owner Manager ユーザー)] > [User ID (ユーザー ID)] を選択します。
-
[Done (完了)] をクリックします。
- フローを保存します。
実行ユーザーのプロファイルとロールの値を取得する
フローを作成するときには、ID のハードコード化は避けます。ハードコード化とはフローやコードに Salesforce ID を手動で入力することです。たとえば、[レコードを更新] 要素で、「005i000006rZRFU」をチェックする条件を設定することはハードコード化です。そうするのではなく、[Get Records (レコードを取得)] 要素を使用して ID を取得し、[Get Records (レコードを取得)] 要素のレコード変数に保存された ID をチェックする必要があります。
これはグローバル変数にどのように関係するのでしょうか? どこかの時点で、ユーザーのプロファイルやロールにアクセスする必要があることがあります。あなたの組織が複数のテリトリーに分割されており、ユーザーロールとして営業担当に割り当てられているとします。西部テリトリー (Sales-West1、Sales-West2、Sales-West3) では他のテリトリーとは異なる割引計算を使用しています。割引を正しく計算するために、フローで実行ユーザーのロールを取得して、そのユーザーが西部テリトリーに割り当てられているかどうかを確認する必要があります。
Flo は [Running User (実行ユーザー)] グローバル変数を使用して実行ユーザーのロールを調べようとしますが、そこに含まれるロール値はロールの ID のみです。彼女は、フロー内で ID をハードコード化するべきではないことを知っています。幸い、実行ユーザーロールの情報にアクセスする別の方法があります。それが [Running User (実行ユーザー)] の [Role (ロール)] グローバル変数 (または一部の要素では $UserRole グローバル変数) です。この変数では実行ユーザーのロールの多数の値にアクセスできます。
同じように、[Running User (実行ユーザー)] の [Profile (プロファイル)] グローバル変数 (または一部の要素では $Profile グローバル変数) は、フローが実行ユーザーのプロファイルの値にアクセスする必要がある類似した状況で使用してください。[Running User (実行ユーザー)] の唯一のプロファイルの値はプロファイルの ID ですが、ロールの [Running User (実行ユーザー)] の [Role (ロール)] と同じように、[Running User (実行ユーザー)] の [Profile (プロファイル)] を使用するとプロファイルの残りの値にアクセスできます。
実行ユーザーのロールをチェックするときにハードコード化を避けるには、[Running User (実行ユーザー)] の [Role (ロール)] > [DeveloperName] を参照します。プロファイルの場合は、[Running User (実行ユーザー)] の [Profile (プロファイル)] > [Name] を参照します。
カスタム表示ラベルを取得する
組織のユーザーが複数の言語で作業している場合、カスタム表示ラベルが非常に役立ちます。カスタム表示ラベルには複数の言語に翻訳できるテキストの文字列が含まれています。翻訳を定義すると、各ユーザーにはユーザーのネイティブ言語でカスタム表示ラベルが表示されます。フローでもカスタム表示ラベルを使用できます。
Flow Builder で、[Custom Label (カスタム表示ラベル)] グローバル変数 (または一部の要素では $Label グローバル変数) を使用して、テキストリソースを使用できる任意の場所 (画面コンポーネント、項目のデフォルト値、テキスト数式など) にカスタム表示ラベルを配置します。次の例では、ToDo レコードを作成していますが、[Subject] 項目が [TaskPrintLabels] グローバル変数に設定されています。ユーザーが ToDo を表示すると、その件名は各自の言語で表示されます。
次の例は、フロー画面の [表示テキスト] コンポーネントです。画面の [Resource Picker (リソースピッカー)] 項目では、$Label が選択されると、使用可能なカスタム表示ラベルがリストされます。いずれかを選択すると、それがコンポーネントのテキストエリアに追加されます。
その他の重要なグローバル変数
その他にもフローを作成するときに役立つグローバル変数がいくつかあります。
グローバル変数 |
実行する内容 |
---|---|
Running Flow Interview (実行中のフローインタビュー) > CurrentDate
|
要素が実行されている日付を取得する |
Running Flow Interview (実行中のフローインタビュー) > CurrentDateTime
|
要素が実行されている日時を取得する |
Running Flow Interview (実行中のフローインタビュー) > InterviewStartTime
|
フローの実行が最初に開始された日時を取得する |
Running Flow Interview (実行中のフローインタビュー) > FaultMessage
|
フローがエラーのために停止した場合にエラーメッセージを取得する |
Running Org (実行組織) (または $Organization) |
[Setup (設定)] の [Company Information (組織情報)] ページに表示される情報 (組織の名前や住所など) を取得する |
Triggering (トリガー) <オブジェクト名>オブジェクト名>
|
レコードトリガーフローで、[Triggering (トリガー) <オブジェクト名>]オブジェクト名> を使用すると、フローをトリガーしたレコードのデータを取得できる。(ハンズオン Challenge では、このグローバル変数を使用して、新しく作成されたリードの会社と ID を取得しました。) [Triggering (トリガー) <オブジェクト名>]オブジェクト名> を使用して、次のことも行えます。
[Triggering (トリガー) <オブジェクト名>]オブジェクト名> についての詳細は、「レコードトリガーフロー」バッジを参照してください。 |
カスタムメタデータ値を取得する
カスタムメタデータはグローバル変数ではありませんが、Flow Builder と Salesforce 組織全体でグローバルにアクセスできる値のセットです。たとえば、カスタムメタデータ型はフロー、コード、入力規則などで使用できます。
Flow Builder でカスタムメタデータを取得するには、オブジェクトレコードを取得する場合と同じように、[Get Records (レコードを取得)] 要素を使用します。オブジェクトを選択するときに、カスタムメタデータ型を選択します。
詳細とサンプルユースケースについては、Trailhead の「カスタムメタデータ型の基本」モジュールで、特に「フローでカスタムメタデータ型を使用する」単元を参照してください。
リソース
- Salesforce Admins ブログ: Why You Should Avoid Hard Coding and Three Alternative Solutions (ハードコード化を避けるべき理由と 3 つの代替ソリューション)
- Salesforce Admins Automate This! 動画: Automate This! — Send Case Notifications Automagically with Flow (Automate This! — フローを使用して自動的にケース通知を送信する)
- Trailhead: カスタムメタデータ型の基本