外部サービスアクションを使用してフローを作成する
まずは、架空の銀行の新しい銀行口座を作成するか、既存の銀行口座を更新できるフローを作成します。
画面キャンバスを追加する
画面キャンバスでは、API 仕様の入力パラメーターに対応するユーザーからの入力を収集できます。
- [Setup (設定)] から [Quick Find (クイック検索)] ボックスに
Flows
(フロー) と入力し、[Flows (フロー)] を選択します。
-
[New Flow (新規フロー)] をクリックします。
-
[Start from Scratch (最初から開始)] が選択されていることを確認して [Next (次へ)] をクリックします。
-
[Screen Flow (画面フロー)] を選択し、[Create (作成)] をクリックします。
- ボタンバーで、[Auto-Layout (自動レイアウト)] 設定を [Free-Form (自由形式)] に変更します。
- ツールボックスで [Elements (要素)] タブを選択し、[Screen (画面)] 要素をキャンバスにドラッグします。
- Label (表示ラベル):
Bank Account Record
(銀行口座レコード) - API Name (API 参照名):
Bank_Account_Record
- 入力コンポーネントのリストから、[Text (テキスト)] コンポーネントを 2 つ、[Flow Label (フローの表示ラベル)] 画面キャンバスにドラッグします。
- 最初の [Text (テキスト)] コンポーネントをクリックして強調表示します。
- Label (表示ラベル):
Last Name on Account
(口座の姓) - API Name (API 参照名):
Last_Name_on_Account
- 2 番目の [Text (テキスト)] コンポーネントをクリックします。
- Label (表示ラベル):
Bank Account Type
(銀行口座種別) - API Name (API 参照名):
Bank_Account_Type
-
[Done (完了)] をクリックします。
-
[Save (保存)] をクリックしてフローを保存し、フローのプロパティを設定します。
- Flow Label (フローの表示ラベル):
Bank Account Records
(銀行口座レコード) - Flow API Name (フローの API 参照名):
Bank_Account_Records
-
[Save (保存)] をクリックし、警告を無視します。
今のところはまだフローに 2 つのテキスト入力を可能にする画面要素を追加しただけです。次はアクションを追加しましょう。
アクションを追加する
定義上、アクション要素はフローの外部の呼び出し可能アクションを実行します。このアクションは API 仕様を登録したときに外部サービスによって作成されたものです。外部銀行サービスによって登録されたアクションをコールすることは、フローの外部のアクションを呼び出す例です。
ここでは、Salesforce 内部から架空の銀行の口座を追加しようとしています。そんなことは開発者でないとできないのでは、とお思いでしょうか? いいえ、そんなことはありません。難しい処理はすべて外部サービスによって実行されます。あとは Flow Builder や Einstein ボットなどのツールを使用して接続を行うだけです。
続けるには、フローのアクション要素として [addAccount] アクションを追加しましょう。このアクションは元々 API 仕様の操作だったものです。既存の銀行口座が存在しない場合には、[addAccount] アクションを使用して銀行サービスで新しい銀行口座を作成します。このアクションは 2 つのユーザー入力を取り込み、BankService の指定ログイン情報を使用して銀行サービスをコールし、名前と口座種別の両方が一致する既存の銀行口座を探します。
API 仕様の addAccount 操作には 2 つの出力値があり、それをここで変数として定義します。
-
201: 一致する名前が見つかりませんでした。現在、銀行口座がありません。そのため、addAccount を介して新しい銀行口座が作成されます。
-
409: 一致する名前が見つかったという例外 - 銀行口座がすでに存在するため、新しい銀行口座は作成しません。この場合、フロー内でメッセージと既存の口座の詳細が返されます。詳細が返されるのは、どの口座によって 409 例外がトリガーされたかがわかるようにするためです。
ここで出力値を定義して、フローの下流にあるその他の要素で利用できるようにします。この単元の残りの部分を受講し、ハンズオン Challenge を実行すれば、Salesforce の便利な機能を使いこなせるようになります。
- ツールボックスで [Elements (要素)] タブを選択し、[Action (アクション)] 要素をキャンバスにドラッグします。
- [Filter By (検索条件)] を [Type (種別)] に変更し、[External Service (外部サービス)] を選択して、検索ボックスをクリックします。
-
[Add Account (アカウントの追加)] を選択します。
- Label (表示ラベル):
Add Bank Account
(銀行口座の追加) - API Name (API 参照名):
Add_Bank_Account
-
[Account Name (アカウント名)] 項目をクリックして [Bank Account Record (銀行口座レコード)] を選択し、[Last_Name_on_Account] を選択します。
-
[Account Type (口座種別)] 項目をクリックして [Bank Account Record] を選択し、[Bank_Account_Type] を選択します。
-
[Show advanced options (詳細オプションを表示)] セクションを展開し、[Manually assign variables (手動で変数を割り当て)] をオンにします。
- [Store Output Values (出力値を保存)] で、[201] 項目をクリックし、[New Resource (新規リソース)] を選択します。
- Resource Type (リソース種別): Variable (変数)
- API Name (API 参照名):
account
- Data Type (データ型): Apex-Defined (Apex 定義)
- Apex Class (Apex クラス): ExternalService__BankService_accountDetails
- Availability Outside the Flow (フロー外部での可用性): [Available for input (入力で使用可能)] と [Available for output (出力で使用可能)] をオンにします。
-
[Done (完了)] をクリックします。
- [Store Output Values (出力値を保存)] で、[409 Exception (409 例外)] 項目をクリックし、[New Resource (新規リソース)] を選択します。
- Resource Type (リソース種別): Variable (変数)
- API Name (API 参照名):
existingAccount
- Data Type (データ型): Apex-Defined (Apex 定義)
- Apex Class (Apex クラス): ExternalService__BankService_accountDetails
- Availability Outside the Flow (フロー外部での可用性): [Available for input (入力で使用可能)] と [Available for output (出力で使用可能)] をオンにします。
-
[Done (完了)]、[Done (完了)] の順にクリックします。
多くの銀行担当者が新しいお客様をサインアップしているため、Maria Thompson の口座がすでに存在している可能性があります。そこで、口座がすでに存在しているかどうかを評価するロジックを追加しましょう。
決定を追加する
フローが実行されると、口座が存在しない場合にはフローは口座作成パスに転送され、addAccount によって新しいユーザーの口座の更新に進みます。口座がすでに存在する場合 (デフォルトの結果) は、更新パスに転送され、銀行からの情報で Salesforce ユーザーレコードを更新するだけです。この種類の評価と分岐ロジックは Flow Builder の決定要素に最適です。
- ツールボックスの [Elements (要素)] タブから、キャンバスに [Decision (決定)] をドラッグします。
- [New Decision (新規決定)] ウィンドウの上部で、次の値を入力します。
- Label (表示ラベル):
Bank Account Updated?
(銀行口座更新?) - API Name (API 参照名):
Bank_Account_Updated
(API 参照名では文字列の最後の「?」を削除します)
- [Outcomes (結果)] セクションの左側に [New Outcome (新しい結果)] と [Default Outcome (デフォルトの結果)] の 2 つの結果がリストされています。
-
[New Outcome (新しい結果)] が選択されていることを確認し、[Outcome Details (結果の詳細)] セクションで次の値を入力します。
- Label (表示ラベル):
Bank Account Created
(銀行口座が作成された) - API Name (API 参照名):
Bank_Account_Created
- [Condition Requirements to Execute Outcome (結果を実行する条件の要件)] で、[All Conditions Are Met (AND) (すべての条件に一致 (AND))] を選択します。
- [Resource (リソース)] に次の条件を入力します。
- Resource (リソース): existingAccount
- Operator (演算子): Is Null (null)
- Value (値): True
ここでは existingAccount リソースでサフィックス (existingAccount.id や existingAccount.name など) を指定していません。これは、1 つの項目だけでなくオブジェクト全体で一致を確認するためです。つまり、既存の口座を更新するには最初の画面入力で指定される名前と口座種別の両方が一致する必要があります。一致が見つからない場合は新しい口座を作成します。
-
[Default Outcome (デフォルトの結果)] を選択し、次のように入力します。
- Label (表示ラベル):
Bank Account Found
(銀行口座が見つかった)
-
[Done (完了)] をクリックします。
割り当てを追加する
銀行口座がすでに存在している場合は、フローで Salesforce ユーザーの [Account ID (口座 ID)] 項目を銀行の口座 ID で更新します。これを実行するには、値を変数 (account.id) に割り当てる必要があります。
- ツールボックスから、[Assignment (割り当て)] をキャンバスにドラッグします。
- [New Assignment (新規 割り当て)] ウィンドウで、次の値を入力します。
- Label (表示ラベル):
Assign Existing Bank Account ID
(既存の銀行口座 ID の割り当て) - API Name (API 参照名):
Assign_Existing_Bank_Account_ID
- [Set Variable Values (変数値を設定)] で、次の値を入力します。
- Variable (変数): [account] を選択して [id] を選択します。
- Operator (演算子): Equals (次の文字列と一致する)
- Value (値): [existingAccount] を選択して [id] を選択します。
-
[Done (完了)] をクリックし、警告を無視します。
レコード要素を追加して更新する
変数に保存された値を使用して、Salesforce ユーザーレコードの銀行口座種別と銀行口座 ID を更新しましょう。
- ツールボックスから、[Update Records (レコードを更新)] 要素をキャンバスにドラッグします。
- [New Update Records (新規のレコードの更新)] ウィンドウで、次の値を入力します。
- Label (表示ラベル):
Update Salesforce User Record
(Salesforce ユーザーレコードの更新) - API name (API 参照名):
Update_Salesforce_User_Record
-
[Specify conditions to identify records, and set fields individually (レコードを識別する条件を指定し、項目を個別に設定)] を選択します。
- [Update Records of This Object Type (このオブジェクト種別のレコードを更新)] で、次のように設定します。
- Object (オブジェクト): User (ユーザー)
- [Filter User Records (ユーザーレコードを絞り込み)] で、次のように設定します。
- Condition Requirements for record to update (レコードを更新する条件の要件): All Conditions Are Met (AND) (すべての条件に一致 (AND))
- Field (項目): LastName
- Operator (演算子): Equals (次の文字列と一致する)
- Value (値): Last_Name_on_Account
- [Set Field Values for the User Records (ユーザーレコードの項目値を設定)] で、次のように設定します。
- Field (項目): Account_ID__c
- Value (値): [account] を選択して [id] を選択します ([Apex-Defined (Apex 定義)] の下)。
-
[+ Add Field (+ 項目を追加)] をクリックします。
- Field (項目): Account_Type__c
- Value (値): Bank_Account_Type ([Screen Components (画面コンポーネント)] の下。[Apex-Defined (Apex 定義)] の下ではありません。)
-
[Done (完了)] をクリックします。
要素を接続する
もう一息です。あとはフローを接続するだけです。コネクタノードを対象要素にドラッグして正しい順序で要素を接続し、ビジネスプロセスが実行時に正しい流れで実行されるようにしましょう。保存することもお忘れなく。
-
[Start (開始)] を [Screen Bank Account Record (画面 銀行口座レコード)] に接続します。
-
[Screen Bank Account Record (画面 銀行口座レコード)] を [Action Add Bank Account (アクション 銀行口座の追加)] に接続します。
-
[Action Add Bank Account (アクション 銀行口座の追加)] を [Decision Bank Account Updated? (決定 銀行口座更新?)] に接続します。
- キャンバス上で [Decision (決定)] 要素の位置を調整して、両側に出力コネクタのスペースがあるようにします。
-
[Decision Bank Account Updated? (決定 銀行口座更新?)] の結果を [Assignment Assign Existing Bank Account ID (割り当て 既存の銀行口座 ID の割り当て)] に接続します。
- メッセージが表示されたら、決定結果に [Bank Account Found (銀行口座が見つかった)] を選択してパスに割り当て、[Done (完了)] をクリックします。
-
[Assignment Assign Existing Bank Account ID (割り当て 既存の銀行口座 ID の割り当て)] を [Update Records Update Salesforce User Record (レコードの更新 Salesforce ユーザーレコードの更新)] に接続します。
-
[Decision Bank Account Updated? (決定 銀行口座更新?)] を [Update Records Update Salesforce User Record (レコードの更新 Salesforce ユーザーレコードの更新)] に接続します。
-
[Save (保存)] をクリックします。
フローをデバッグする
もう少しで完了です。作業を終える前にデバッグモードを使用してフローをチェックしましょう。
-
[Debug (デバッグ)] をクリックします。
-
[Show details of what's executed and render flow in Lightning runtime (実行内容の詳細を表示して、Lightning ランタイムでフローを表示します)] をオンにします。
-
[Run (実行)] をクリックします。
- [Last Name on Account (口座の姓)] に
Thompson
と入力し、[Bank Account Type (銀行口座種別)] にChecking
(当座預金) と入力します。
-
[Next (次へ)] をクリックします。
この入力を使用してフローが実行されます。
[Debug Details (デバッグの詳細)] で、作成したばかりのフロー全体を確認します。
まずテキスト入力があります。次に BANKSERVICE.ADDACCOUNT の下ではテキスト入力が適切に割り当てられ、出力が次のいずれかを示すことが確認できます。既存のアカウント:
{!existingAccount} = 409exc
および
{!account} = 201 (null)
または口座が見つからず新しい口座が作成された:
{!existingAccount} = 409exc (null)
および
{!account} = 201
[Decision (決定)] フェーズでは決定の結果が確認されます。変数が割り当てられています。
次に [Update Records (レコードの更新)] では、Salesforce の [Account Type (口座種別)] 項目と [Account ID (口座 ID)] 項目に銀行 Web サービスからの新しい値が入力されています。
さあ、Salesforce で Maria Thompson のユーザーレコードを見てみましょう。
銀行の担当者として Salesforce に名前と口座種別を入力すると、フローアプリケーションによって自動的に銀行サービスで既存の銀行口座が更新され (または新しい銀行口座が作成され)、口座 ID と新しい口座種別が Salesforce ユーザーレコードに返されました。
これで、Salesforce 内から銀行口座の営業活動を追跡できるようになりました。コードを使用しないと言いましたよね。そうなんです。実際に、1 行もコードを記述せずにすべての作業が完了しました。
アプリケーションの限界を知る
エラーが発生する可能性があることも知っておく必要があります。たとえば、[Last Name on Account (口座の姓)] に「Maria Thompson」と入力すると、この項目ではスペースが認められないため、エラーが表示します。同様に、6 文字未満の名前 (「Jones」など) を入力した場合も、このシンプルなアプリケーションの別の制限のためにエラーが表示される可能性があります。次のようなコードが表示される可能性があります。
コード |
Acme 銀行サービス向けの説明 |
---|---|
200 |
指定された名前の口座が見つかりました |
201 |
この口座が存在せず、作成できる場合の応答 |
204 |
指定された名前の口座が見つかった場合の応答 |
400 |
口座名が最小の 6 文字未満の場合またはスペースが含まれている場合のエラー応答 |
404 |
口座がサービスによってサポートされていない場合または見つからなかった場合のエラー応答 |
409 |
口座が存在し、作成できない場合の応答 |
まとめ
お疲れさまでした。うまくいきましたね。外部サービスを使用してフローを作成した方法を振り返り、実行したステップを確認しておきましょう。OpenAPI 準拠のスキーマ定義を設定する必要があるものの、実施した作業の多くは宣言的 (コードが少ないか不要) なものでした。いいですよね!
さて、待ちに待った瞬間です。作業結果を確認しましょう。