DX攻略部がリニューアルしました!

【実装例あり】Salesforce画面フローの入力変数recordIdとは?使い方を徹底解説!

こんにちは、DX攻略部のヘナトンです。

商談レコード詳細ページに画面フローを配置して、その商談の情報を使ってフロー処理をしたい!

取引先のカスタムボタンをクリックしてフローを起動する際に、その取引先の情報を使ってフロー処理をしたい!

これらのような経験はございませんか?

今回はそんな時に便利な入力変数recordIdについて2つの事例を用いて解説します。

そもそも画面フローとは?という方はこちらの記事をご活用ください。

事例①:取引先にある画面フローを使って取引先項目を更新する!

今回の事例は取引先レコード詳細ページに配置された画面フローを使ってその取引先の請求先住所と納品先住所を同じ住所にボタン一つで変更する処理を行います。

まずは目標である完成形を確認しましょう。

目標確認

取引先レコード詳細ページに配置された画面フローの「はい」というボタンをクリックします。

画面フローが起動され、請求先住所と納入先住所が同じになりました。

設定方法

設定>クイック検索「フロー」>フロー>新規フロー

まず新規フローを立ち上げます。

フロー種別を選択するモーダルウィンドウが表示されたら「画面フロー」を選択し、「作成」ボタンをクリックします。

今回はレイアウトを自由形式で作成するので「自動レイアウト」から「自由形式」に切り替えます。

*レイアウトの違いは設定する際のヴィジュアルだけですのでお好きな方を設定ください。

画面

取引先レコード詳細ページに配置した際に始めに表示される画面を設定します。

ツールボックス>要素>相互関係>画面をキャンパスにドラッグ&ドロップで開きます。

新規画面が開けたら、画面のプロパティを設定します。

画面要素の表示ラベルとAPI参照名を入力します。

「ヘッダーを設定」でヘッダーの表示/非表示(デフォルトは表示)を設定し、ヘルプテキストを設定できます。

「フッターを設定」でフッターのボタンの詳細設定が可能です。

コンポーネント>表示>表示テキストをキャンパスにドラッグ&ドロップで配置します。

表示テキストのAPI参照名を入力します。

表示テキストの内容を入力します。(今回は「請求先住所を納入先住所と同じ住所にしますか?」と入力します)

モーダル画面の「完了」をクリックします。

レコードを取得

画面フローを起動した取引先レコードを取得します。

ツールボックス>要素>データ>レコードを取得をキャンパスにドラッグ&ドロップで開きます。

新規レコードの取得が開けたら、要素のプロパティを設定します。

レコードを取得要素の表示ラベルとAPI参照名を入力します。

このオブジェクトのレコードを取得>オブジェクトで取引先を選択します。

取引先レコードを絞り込み>項目で「Id」を選択します。

演算子で「次の文字列と一致する」を選択します。

ここからが重要です。

値のボックス内をクリックし、「+新規リソース」をクリックします。

  • リソース種別:変数を選択します。
  • API参照名:「recordId」と入力します。一字違わず「recordId」と入力してください。「recordId」と入力しないと機能しません。「recordid」ではなく「recordId」です。
  • データ型:テキストを選択します。
  • フロー外部での可用性:「入力で使用可能」にチェックを入れてください。
  • 完了をクリックします。

    「取引先レコードを並び替え」と「保存するレコード数」、「レコードデータの保存方法」はデフォルトのまま「完了」をクリックします。

    割り当て

    取得した取引先レコードを更新する内容を割り当てます。

    ツールボックス>要素>ロジック>割り当てをキャンパスにドラッグ&ドロップで開きます。

    要素のプロパティを設定します。

    割り当て要素の表示ラベルとAPI参照名を入力します。

    レコードを取得で取得した取引先変数の項目を左側に設定する。(どの項目を設定するか)

    右に値を設定する。(どの値に設定するか)

    今回は請求先住所を納入先住所にするので、左に請求先、右に納入先を設定します。

    「完了」をクリックします。

    recordIdの設定方法という本題とは逸れますが、Salesforceでは住所項目でいくつかの項目を格納しています。(国、郵便番号、都道府県、市区郡、町名・番地、緯度、経度)

    より正確に住所情報を保存するために、全ての項目を別々に設定しましょう。(緯度、経度項目は他の住所項目保存後に自動で設定されます。)

    レコードを更新

    割り当てた内容を更新する設定をします。

    ツールボックス>要素>データ>レコードを更新をキャンパスにドラッグ&ドロップで開きます。

    要素のプロパティを設定します。

    レコードを更新要素の表示ラベルとAPI参照名を入力します。

    更新するレコードを選択>レコードまたはレコードコレクションに、レコードを取得で取得した取引先変数を設定します。

    「完了」をクリックします。

    要素を連結する

    作成した要素同士をつなぎます。

    矢印でつなぐことで実行順序を設定できます。

    最後に保存および有効化し、取引先Lightningレコードページに配置すれば完了です。

    Apexで書くとこうなる(プログラマー向け)

    最後にプログラマーの方がフローをイメージしやすいようにレコードを取得からレコードを更新までの要素の処理内容をApexコードで表現します。

    Account acc = [SELECT 全ての項目 FROM Account WHERE Id =: recordId];
    acc.BillingCountry = acc.ShippingCountry;
    acc.BillingPostalCode = acc.ShippingPostalCode;
    acc.BillingState = acc.ShippingState;
    acc.BillingCity = acc.ShippingCity;
    acc.BillingStreet = acc.ShippingStreet;
    update acc;

    参考までにどうぞ。

    事例①のまとめ

    このrecordId活用事例では取引先に配置された画面フローを起動し、取引先項目を更新しました。

    つまりrecordIdを使うことで、入力変数として画面上にあるレコードののSalesforce Idを取得し、そのレコードを更新する処理を行えるのです。

    事例②:商談にある画面フローを使って取引先項目を更新する!

    事例①では画面上にあるレコードのSalesforce Idを使用し、そのレコードの項目値を更新する処理をしました。

    事例②では商談レコード詳細ページに配置された画面フローを使ってその商談の取引先の従業員人数を変更する処理を行います。

    つまり画面上にあるレコードのSalesforce Idを取得し、そのレコードの親レコードの値を更新する処理を行います。

    まずは目標である完成形を確認しましょう。

    目標確認

    現在、EEE有限会社の従業員数は25人です。

    EEE有限会社の商談レコードページに配置された画面フローの「次へ」をクリックします。

    数値を入力し、「次へ」をクリックします。

    EEE有限会社の従業員数が50人に変更されたことが確認できます。

    設定方法

    設定>クイック検索「フロー」>フロー>新規フロー

    まず新規フローを立ち上げます。

    フロー種別を選択するモーダルウィンドウが表示されたら「画面フロー」を選択し、「作成」ボタンをクリックします。

    今回はレイアウトを自由形式で作成するので「自動レイアウト」から「自由形式」に切り替えます。

    *レイアウトの違いは設定する際のヴィジュアルだけですのでお好きな方を設定ください。

    画面①

    商談レコード詳細ページに配置した際に始めに表示される画面を設定します。

    ツールボックス>要素>相互関係>画面をキャンパスにドラッグ&ドロップで開きます。

    新規画面が開けたら、画面のプロパティを設定します。

    画面要素の表示ラベルとAPI参照名を入力します。

    「ヘッダーを設定」でヘッダーの表示/非表示(デフォルトは表示)を設定し、ヘルプテキストを設定できます。

    「フッターを設定」でフッターのボタンの詳細設定が可能です。

    コンポーネント>表示>表示テキストをキャンパスにドラッグ&ドロップで配置します。

    表示テキストのAPI参照名を入力します。

    表示テキストの内容を入力します。(今回は「取引先の従業員数を変更しますか?」と入力します)

    モーダル画面の「完了」をクリックします。

    画面②

    取引先の従業員数を入力する画面を設定します。

    ツールボックス>要素>相互関係>画面をキャンパスにドラッグ&ドロップで開きます。

    新規画面が開けたら、画面のプロパティを設定します。

    画面要素の表示ラベルとAPI参照名を入力します。

    「ヘッダーを設定」でヘッダーの表示/非表示(デフォルトは表示)を設定し、ヘルプテキストを設定できます。

    「フッターを設定」でフッターのボタンの詳細設定が可能です。

    コンポーネント>入力>数値をキャンパスにドラッグ&ドロップで配置します。

    数値の表示ラベルとAPI参照名を入力します。この表示ラベルが数値入力ボックスのタイトルになります。

    必須やデフォルト値などを設定します。

    モーダル画面の「完了」をクリックします。

    レコードを取得(商談)

    画面フローを起動した商談レコードを取得します。

    ツールボックス>要素>データ>レコードを取得をキャンパスにドラッグ&ドロップで開きます。

    新規レコードの取得が開けたら、要素のプロパティを設定します。

    レコードを取得要素の表示ラベルとAPI参照名を入力します。

    このオブジェクトのレコードを取得>オブジェクトで商談を選択します。

    取引先レコードを絞り込み>項目で「Id」を選択します。

    演算子で「次の文字列と一致する」を選択します。

    ここからが重要です。

    値のボックス内をクリックし、「+新規リソース」をクリックします。

    • リソース種別:変数を選択します。
    • API参照名:「recordId」と入力します。一字違わず「recordId」と入力してください。「recordId」と入力しないと機能しません。「recordid」ではなく「recordId」です。
    • データ型:テキストを選択します。
    • フロー外部での可用性:「入力で使用可能」にチェックを入れてください。
    • 完了をクリックします。

      「商談レコードを並び替え」と「保存するレコード数」、「レコードデータの保存方法」はデフォルトのまま「完了」をクリックします。

      レコードを取得(取引先)

      レコードを取得(商談)で取得した商談の親取引先レコードを取得します。

      ツールボックス>要素>データ>レコードを取得をキャンパスにドラッグ&ドロップで開きます。

      新規レコードの取得が開けたら、要素のプロパティを設定します。

      レコードを取得要素の表示ラベルとAPI参照名を入力します。

      このオブジェクトのレコードを取得>オブジェクトで取引先を選択します。

      取引先レコードを絞り込み>項目で「Id」を選択します。

      演算子で「次の文字列と一致する」を選択します。

      値のボックス内をクリックし、先ほど取得した商談レコード変数getOpp>取引先IDを選択します。

        「取引先レコードを並び替え」と「保存するレコード数」、「レコードデータの保存方法」はデフォルトのまま「完了」をクリックします。

        割り当て

        取得した取引先レコードを更新する内容を割り当てます。

        ツールボックス>要素>ロジック>割り当てをキャンパスにドラッグ&ドロップで開きます。

        要素のプロパティを設定します。

        割り当て要素の表示ラベルとAPI参照名を入力します。

        レコードを取得で取得した取引先変数の項目を左側に設定する。(どの項目を設定するか)

        画面②の数値入力コンポーネントの値を右側に設定する。(どの値に設定するか)

        今回は取引先従業員数を入力した数値にするので、左に取引先従業員数、右に入力数値API名を設定します。

        「完了」をクリックします。

        レコードを更新

        割り当てた内容を更新する設定をします。

        ツールボックス>要素>データ>レコードを更新をキャンパスにドラッグ&ドロップで開きます。

        要素のプロパティを設定します。

        レコードを更新要素の表示ラベルとAPI参照名を入力します。

        更新するレコードを選択>レコードまたはレコードコレクションに、レコードを取得で取得した取引先変数を設定します。

        「完了」をクリックします。

        要素を連結する

        作成した要素同士をつなぎます。

        矢印でつなぐことで実行順序を設定できます。

        最後に保存および有効化し、取引先Lightningレコードページに配置すれば完了です。

        Apexで書くとこうなる(プログラマー向け)

        最後にプログラマーの方がフローをイメージしやすいようにレコードを取得からレコードを更新までの要素の処理内容をApexコードで表現します。

        Opportunity opp = [SELECT 全ての項目 FROM Opportunity WHERE Id =: recordId];
        Account acc = [SELECT 全ての項目 FROM Account WHERE Id =: opp.AccountId];
        acc.NumberOfEmployees = num;
        update acc;

        参考までにどうぞ。

        事例②のまとめ

        このrecordId活用事例では商談に配置された画面フローを起動し、取引先項目を更新しました。

        つまりrecordIdを使うことで、入力変数として画面上にあるレコードののSalesforce Idを取得し、親レコードを更新する処理を行えるのです。

        まとめ 

        画面フローの入力変数recordIdについての解説は以上です。

        画面フローでは入力変数recordIdを用いて処理を進めることで画面フローが起動されたレコードによって別々の処理を行えるというメリットがございます。

        さらに、稀有なパターンで諸々使用条件はありますが、recordIdではどのオブジェクトなのかを定義していないため、別のオブジェクトのLightningレコードページで同じ画面フローを使用できます。

        入力変数recordIdは画面フロー開発をしていく上で避けては通れないので、ぜひ参考にしていただければと思います。

        また、もうひとつさらに便利な入力変数input_recordもございますので気になった方はこちらの記事もご参照ください。

        二つの事例を用いて解説いたしましたが、フロー開発に慣れている方にとっては無駄な部分が多く感じると思いますが、ご了承ください。

        最後までお読みいただきありがとうございました。