Loop Block を知る
学習の目的
この単元を完了すると、次のことができるようになります。
- Loop Block とその機能を定義する。
- キーとマージコードで Loop Block を構成する。
- Data Mapper Transform を作成して JSON オブジェクト内の特定のデータを検索し、各 JSON ノードにマージする。
はじめに
これは Robert です。Get Cloudy Consulting のテクニカルアーキテクトで、OmniStudio データツールを使用しています。
Robert はすでに「OmniStudio を使用したガイド付きエクスペリエンスを構築する」トレイルを修了し、このデータツールについては理解しました。さらに高度な機能を学習する準備はできています。高度な機能を使用すれば時間のかかる Apex コードなしでソリューションを構築できます。
さあ、仕事です。Get Cloudy の医療保険市場の重要な顧客である ClearLight Health からいくつか要件を受け取っています。今日のヘルスケア消費者は、すばやく簡単にオンラインで予約可能時間を確認し、診察の予約ができることを求めています。ClearLight では、健康保険プランのメンバーにポータルを提供していますが、ポータルにはオンライン予約機能がありません。つまり、Robert がこの機能を構築して ClearLight のメンバーポータルに追加する必要があります。
[Schedule a Provider (かかりつけ医を予約)] 画面では、Tom Johnson が担当のかかりつけ医で、5 つの予約時間枠が空いています。
Robert は OmniStudio Integration Procedure でアクションとブロックを構成して医療サービス提供者と予約のデータを取得できることを知っています。ただし、使用すべきブロックとアクションがわかりません。さらに、Apex コードを使用せずに配列を反復処理して各ノードを変更する方法もわかりません。
Robert は調査を始め、Loop Block にたどり着きました。
「Loop Block とは何か? どう構成するのか、このユースケースで Integration Procedure のデータフローのしくみはどうなるのか?」沢山の疑問が湧いてきますが、時間はありません。
Loop Block とは?
Roberts は Loop Block について猛スピードで学び始めました。Loop Block はデータ配列の項目を反復処理し、項目ごとに Loop Block 内のアクションを繰り返します。
Get Cloudy の同僚である Awhina Oahu が、先月納入したコミュニケーションソリューションで Loop Block を使用したことを教えてくれました。Awhina のチームは 4 つの商品を一度にショッピングカートに入れられるようにするため Loop Block を使用しました。Loop Block がなかったら、Remote Action を別個に 4 回実行して商品を追加する必要がありました。
Roberts はもう Loop Block が大好きになっています。構成方法を学ぶ前に、使用可能なプロパティを把握します。
LoopBlock1 の例のプロパティを見てみましょう。[Loop List (ループリスト)] (1) で配列が含まれる JSON ノードを受け入れます。[Additional Loop Output (追加ループアウトプット)] (2) を使用して Loop Block にある Action のレスポンスを構成します。指定したキー/値ペアは Integration Procedure の後続ステップで使用できます。[Execution Conditional Formula (実行条件式)] (3) を使用し、true または false を評価する式に基づいていつ Loop Block を実行するかを制御します。
空き時間枠の構成
医療サービス提供者の空き時間枠を表示するために Robert が作成しなければならない Integration Procedure の構造を確認しましょう。
この Integration Procedure には 2 つの HTTP Action が含まれています。HTTPActionGetCareProviders は医療サービス提供者データを取得し (1)、HTTPActionGetTimeslots は医療サービス提供者の対応可能な空き時間のデータを取得します (2)。LoopBlockProviders Loop Block (3) には SlotsForOneProviderTest (4) という Data Mapper Transform Action が含まれており、アウトプットを JSON フォーマットに変換します。Response Action (5) で JSON データを切り取ります。
この Integration Procedure のデータフローがどうなるか見てみましょう。
- データフローではまず HTTP Action が外部システムから医療サービス提供者データを取得します。
- Loop Block が返されたデータ配列の項目を反復処理します。
- Data Mapper Transform は、データが目的のロジックに従って変更されたことを保証します。
- Data Mapper Transform Action が Data Mapper Transform を呼び出します。
- Response Action が変換ロジックに従って結果を絞り込みます。
- Response Action がデータを OmniStudio UI コンポーネント、すなわち FlexCard または OmniScript に送信します。このレスポンスで Integration Procedure から REST API を呼び出すこともできます。
医療サービス提供者データを取得する
Integration Procedure には 2 つの HTTP Action が必要です。最初の HTTP Action で医療サービス提供者データを取得します。
このアクションを作成するには、HTTP Action (1) を [Structure (構造)] パネルにドラッグします。HTTP メソッド (GET、PUT、POST、DELETE など) を選択します。この場合、HTTP Path から医療サービス提供者に関連するデータを取得する必要があるため、[HTTP Path (HTTP パス)] 項目 (2) に URL を入力します。次に、[HTTP Method (HTTP メソッド)] (3) に「GET」を設定します。
空き時間枠データを取得する
2 つ目の HTTP Action で空き時間枠に関連するデータを取得します。
このアクションを作成するには、もう 1 つの HTTP Action (1) を [Structure (構造)] パネルにドラッグします。外部システムの [HTTP Path (HTTP パス)] (2) を入力し、[HTTP Method (HTTP メソッド)] (3) を指定します。
Loop Block を構成する
医療サービス提供者と空き時間枠に関するデータをアウトプットでマージするため、Robert は Loop Block の構成を開始します。
Loop Block を構成するには、Loop Block (1) を [Structure (構造)] パネルにドラッグします。[Loop List (ループリスト)] の値 (2)を「HTTPActionGetCareProviders:careProviders」に設定します。これで各医療サービス提供者のリストが作成されます。[Additional Loop Output (追加ループアウトプット)] (3) にキーとして「careProviders」、マージコード値として「%SlotsForOneProviderTest%」と入力します。
Data Mapper Transform 構成
Robert の次のタスクは Data Mapper Transform を作成することです。なぜでしょうか?
Data Mapper Transform では JSON、XML、および Apex データ型間で中間データ変換を実行し、コード不要で空き時間枠データをマージできます。Robert はコーディングのプロですが、労力をかけずに Data Mapper Transform に大変な作業を任せられるならそれに越したことはありません。
Data Mapper Transform を作成するには、Data Mapper Transform Action コンポーネントを [Structure (構造)] パネルから Loop Block にドラッグし、[Element Name (要素名)] (1) を指定します。[Data Mapper Interface (Data Mapper インターフェース)] で、ドロップダウンリストから [+ Create New Data Mapper (+ 新規 Data Mapper を作成)] (2) を選択します。
この場合、Data Mapper Transform で JSON オブジェクト内の医療サービス提供者ごとに時間枠を検索し、空き時間枠をそれぞれの医療サービス提供者 JSON ノードにマージする必要があります。
次は [Formulas (数式)] タブ、[Transforms (変換)] タブ、[Preview (プレビュー)] タブを理解しましょう。
[FORMULAS (数式)] タブ
Data Mapper では、[Formulas (数式)] タブを使用して、アウトプット用にデータの追加や操作を行います。
[Formula(数式)] 項目に目的のロジックを追加し、[Formula Result Path (数式結果パス)] 項目に数式の結果を保存する JSON ノードを指定します。この例では、3 つの数式を作成して目的の Data Mapper アウトプットを構成します。
- 最初の [Formula(数式)] (1) は careProviders:careProviderId で [Formula Result Path (数式結果パス)] は careProviderId です。
- 2 つ目の [Formula(数式)] (2) は各 careProviderId の空き時間枠値を検索します。数式は VALUELOOKUP (Slots, careProviderId) で [Formula Result Path (数式結果パス)] は slotsProvider です。
- 3 つ目の [Formula(数式)] (3) は各提供者の予定枠を記録します。数式は slotsProvider で、[Formula Result Path (数式結果パス)] は careProvider:timings です。
[Transforms (変換)] タブ
次は [Transforms (変換)] タブを調べましょう。
インプット JSON とアウトプット JSON のパスを使用してデータをマッピングします。[Input JSON Path (インプット JSON パス)] 項目 (2) にインプットパスを指定します。[Output JSON Path (アウトプット JSON パス)] 項目 (3) にアウトプットパスを追加します。この例ではインプットパスとアウトプットパスの両方に careProviders を使用しています。
[Preview (プレビュー)] タブ
[Preview (プレビュー)] タブでは、Data Mapper 出力をテストします。
[Input (インプット)] ペイン (1) にサンプルインプットを貼り付け、[Execute (実行)] をクリックします。[Response (レスポンス)] ペイン (2) に絞り込まれた結果が表示され、医療サービス提供者のデータとその対応可能な空き時間枠が含まれています。空き時間枠と関連する Care Provider Id を含む配列の並びを確認できます。
Data Mapper Transform の準備ができたところで、Integration Procedure に追加します。
Integration Procedure で Data Mapper Transform Action (1) を選択します。[Data Mapper Interface (Data Mapper インターフェース)] 項目で、ドロップダウンリストから [VLKUP2_ProviderSlots] (2) を選択します。
次に、Response Action を [Structure (構造)] パネルにドラッグします。
Response Action (1) を使用して、Data Mapper Transform から JSON フォーマットで返されたデータを送信します。[Response Format (レスポンスフォーマット)] (2) に、目的のフォーマット (この場合は JSON) を入力します。
結果をプレビューします。
[Preview (プレビュー)] タブ (1) に移動し、[Execute (実行)] (2) をクリックします。[Response (レスポンス)] セクション (3) に、提供者配列が医療サービス提供者 ID と共に表示されます。
Loop Block と Data Mapper Transforms のしくみがわかって、この先の道筋が見えてきました。続けて ClearLight メンバーポータルに空き時間枠機能を実装します。
ただし、Robert の作業には終わりはありません。List Action を使用して次のアプリケーション要件を実現します。
リソース
-
Salesforce ヘルプ: Process Arrays Using Loop Blocks (Loop Block を使用した配列の処理)
-
Salesforce ヘルプ: HTTP Action