こんにちは、DX攻略部のヘナトンです。
Salesforceで画面フローを使った業務自動化を進めていると、必ずと言っていいほど「このレコードの情報をフロー内で使いたい」という場面にぶつかります。
「商談レコードのページに配置したフローで、その商談のIDを使って処理を走らせたい」
「取引先のカスタムボタンからフローを起動したとき、その取引先の情報を使って項目を更新したい」
そういった要件を実現するために不可欠なのが、入力変数『recordId』です。
今回はrecordIdの概念から設定手順、実務でよく使う2つの実装パターン、そしてよくあるエラーの対処法まで、実例を交えて徹底的に解説します。
DX攻略部では、Salesforce支援サービスというサービスも提供しております。
こちら興味を持った方は、ぜひご相談ください。
recordIdとは?画面フロー開発に欠かせない入力変数の基礎知識
まずrecordIdを使いこなすための土台として、「そもそも何をしている変数なのか」を整理しておきましょう。
ここを理解しているかどうかで、フロー開発のスピードと精度が大きく変わります。
recordIdが解決する課題
Salesforceの画面フローは、Lightningレコードページに配置して使うケースが多くあります。
このとき画面フロー単体では、「自分がどのレコードのページに配置されているか」を自動では知ることができません。
たとえばA社の取引先ページでもB社の取引先ページでも、同じフローが起動されます。
フローの処理内容をそのレコードに応じて変えたい場合、「いまどのレコードのページにいるのか」という情報をフローに渡す仕組みが必要です。
それを担うのが入力変数recordIdです。
recordIdの仕組み
LightningレコードページにコンポーネントとしてフローをEmbed(埋め込み配置)すると、Salesforceのプラットフォームがそのレコードの18桁のSalesforce IDを自動的にフローへ渡そうとします。
このとき、フロー側に「recordId」という名前の入力変数が存在すれば、その変数に値が自動でセットされます。
つまり、フローを作る側がやることは「正しい名前と設定でrecordIdという変数を作る」それだけです。難しいコードは一切不要で、ノーコードの範囲で完結します。
recordIdを使う前に押さえるべき3つのポイント
フロー開発でrecordIdを扱う際、以下の3点は必ず事前に確認してください。
実務でエラーが発生するケースのほとんどは、このどれかが原因です。
- API参照名は「recordId」と完全一致させること(「recordid」「RecordId」は不可)
- データ型は「テキスト」を選択すること(IDはテキスト型として扱う)
- フロー外部での可用性で「入力で使用可能」にチェックを入れること(これを忘れると値が渡されない)
この3点を押さえたうえで、次のセクションから具体的な実装事例を見ていきましょう。
こんにちは、DX攻略部のヘナトンです。 Salesforceは、顧客関係管理(CRM)ソフトウェアのリーディング企業であり、世界中の多くの企業がそのサービスを利用しています。 Salesforceは、ビジネスプロセスを改善し、ビ[…]
事例①:取引先レコード詳細ページの画面フローで同一レコードの項目を更新する
最初の事例では、もっとも基本的なrecordIdの使い方として「画面フローが配置されたレコード自身の項目を更新するパターン」を解説します。
具体的には、取引先レコード詳細ページに配置した画面フローを使って、請求先住所と納品先住所をボタン一つで同期させます。
「同一レコードの更新」という最頻出パターンをここでしっかり習得しましょう。
完成イメージを確認する(同一レコードの更新パターン)
まず完成形の動作を確認しておきます。

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

画面フローが起動され、請求先住所と納入先住所が同じになりました。
この一連の処理を実現するために、フロー内でrecordIdを使って「いまページに表示されている取引先レコード」を特定し、その住所項目を書き換えます。
recordId変数の作成手順(設定の最重要ポイント)
設定に入る前に、フロー全体の流れを把握しておくと理解が早まります。
今回作成するフローは「画面 → レコードを取得 → 割り当て → レコードを更新」という4つの要素で構成されます。
設定>クイック検索「フロー」>フロー>新規フロー
まず新規フローを立ち上げます。
フロー種別を選択するモーダルウィンドウが表示されたら「画面フロー」を選択し、「作成」ボタンをクリックします。
今回はレイアウトを自由形式で作成するので「自動レイアウト」から「自由形式」に切り替えます。
*レイアウトの違いは設定する際のヴィジュアルだけですのでお好きな方を設定ください。
各フロー要素の設定手順
取引先レコード詳細ページに配置した際に始めに表示される画面を設定します。
ツールボックス>要素>相互関係>画面をキャンパスにドラッグ&ドロップで開きます。

新規画面が開けたら、画面のプロパティを設定します。
画面要素の表示ラベルとAPI参照名を入力します。
「ヘッダーを設定」でヘッダーの表示/非表示(デフォルトは表示)を設定し、ヘルプテキストを設定できます。
「フッターを設定」でフッターのボタンの詳細設定が可能です。

コンポーネント>表示>表示テキストをキャンパスにドラッグ&ドロップで配置します。
表示テキストのAPI参照名を入力します。
表示テキストの内容を入力します。(今回は「請求先住所を納入先住所と同じ住所にしますか?」と入力します)
モーダル画面の「完了」をクリックします。
レコードを取得
画面フローを起動した取引先レコードを取得します。
ツールボックス>要素>データ>レコードを取得をキャンパスにドラッグ&ドロップで開きます。

新規レコードの取得が開けたら、要素のプロパティを設定します。
レコードを取得要素の表示ラベルとAPI参照名を入力します。
このオブジェクトのレコードを取得>オブジェクトで取引先を選択します。

取引先レコードを絞り込み>項目で「Id」を選択します。
演算子で「次の文字列と一致する」を選択します。
ここからが重要です。

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

- リソース種別:変数を選択します。
- API参照名:「recordId」と入力します。一字違わず「recordId」と入力してください。「recordId」と入力しないと機能しません。「recordid」ではなく「recordId」です。
- データ型:テキストを選択します。
- フロー外部での可用性:「入力で使用可能」にチェックを入れてください。
- 完了をクリックします。
「取引先レコードを並び替え」と「保存するレコード数」、「レコードデータの保存方法」はデフォルトのまま「完了」をクリックします。
割り当て
取得した取引先レコードを更新する内容を割り当てます。
ツールボックス>要素>ロジック>割り当てをキャンパスにドラッグ&ドロップで開きます。

要素のプロパティを設定します。
割り当て要素の表示ラベルとAPI参照名を入力します。
レコードを取得で取得した取引先変数の項目を左側に設定する。(どの項目を設定するか)
右に値を設定する。(どの値に設定するか)
今回は請求先住所を納入先住所にするので、左に請求先、右に納入先を設定します。
「完了」をクリックします。
recordIdの設定方法という本題とは逸れますが、Salesforceでは住所項目でいくつかの項目を格納しています。(国、郵便番号、都道府県、市区郡、町名・番地、緯度、経度)
より正確に住所情報を保存するために、全ての項目を別々に設定しましょう。(緯度、経度項目は他の住所項目保存後に自動で設定されます。)
レコードを更新
割り当てた内容を更新する設定をします。
ツールボックス>要素>データ>レコードを更新をキャンパスにドラッグ&ドロップで開きます。

要素のプロパティを設定します。
レコードを更新要素の表示ラベルとAPI参照名を入力します。
更新するレコードを選択>レコードまたはレコードコレクションに、レコードを取得で取得した取引先変数を設定します。
「完了」をクリックします。
要素を連結してフローを完成させる
4つの要素が出そろったら、矢印でつないで実行順序を設定します。
「画面 → レコードを取得 → 割り当て → レコードを更新」の順につなぐことで、フローが正しい順番で処理を実行するようになります。

矢印でつなぐことで実行順序を設定できます。
最後に保存および有効化し、取引先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を取得し、そのレコードを更新する処理を行えるのです。
こんにちは、DX攻略部のヘナトンです。 「商談レコード詳細ページに画面フローを配置して、その商談の情報を使ってフロー処理をしたい!」 「取引先のカスタムボタンをクリックしてフローを起動する際に、その取引先の情報を使ってフロー処理[…]
事例②:商談にある画面フローを使って取引先項目を更新する!
事例①では画面上にあるレコードの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に値が渡されない
最も多いトラブルです。原因の大半は以下のどれかです。
まずAPI参照名の誤記で、「recordid」や「RecordId」など、大文字小文字が一字でも違うと値が渡されません。
必ず「recordId」と入力してください。
次に「入力で使用可能」のチェック漏れです。
変数の「フロー外部での可用性」設定で「入力で使用可能」にチェックが入っていない場合、外部からの値の受け渡しが機能しません。
また、フローのトリガー種別の確認も必要です。recordIdが自動で渡されるのはLightningレコードページへの「埋め込み配置」の場合です。
カスタムボタン経由でフローを起動する場合は、ボタンのURL数式などで明示的にrecordIdを渡す設定が別途必要になります。
フローを有効化してもレコードページに表示されない
フローをLightningレコードページに配置する際、Lightning App Builderで対象のページを編集してフローコンポーネントを追加する作業が別途必要です。
フローを保存・有効化するだけでは自動的にレコードページには表示されません。
同じフローを複数オブジェクトのページに配置した場合
recordIdはSalesforceのどのオブジェクトのIDも受け取れる汎用的な変数です。
そのため、取引先のページに配置しても商談のページに配置しても、同じフローが起動できます。
ただし、フロー内でオブジェクトを指定して「レコードを取得」している場合、別オブジェクトのページから起動するとレコードが取得できずにエラーになるケースがあります。
複数オブジェクトへの配置を想定する場合は、取得するオブジェクトとページを揃えて運用するか、決定要素でオブジェクト種別を判定するロジックを追加してください。
こんにちは、DX攻略部のmukkukoです。 今回はSalesforce導入の際、どのような課題があるのか・どう解決していくべきなのかを解説していきます。 実際に筆者が導入設定時に感じた目標設定の大切さについて、また実際の業務改[…]
まとめ
画面フローの入力変数recordIdについての解説は以上です。
画面フローでは入力変数recordIdを用いて処理を進めることで画面フローが起動されたレコードによって別々の処理を行えるというメリットがございます。
さらに、稀有なパターンで諸々使用条件はありますが、recordIdではどのオブジェクトなのかを定義していないため、別のオブジェクトのLightningレコードページで同じ画面フローを使用できます。
入力変数recordIdは画面フロー開発をしていく上で避けては通れないので、ぜひ参考にしていただければと思います。
二つの事例を用いて解説いたしましたが、フロー開発に慣れている方にとっては無駄な部分が多く感じると思いますが、ご了承ください。
なお、画面フローの開発や今回解説したrecordIdの活用を進めていくと、「フローは作れるが、そもそもSalesforceの設計が業務に合っていない」「もっと高度なカスタマイズをしたいが社内リソースが足りない」といった壁にぶつかるケースがあります。
DX攻略部のSalesforce支援サービスでは、初期導入から開発・カスタマイズ、運用、教育まで一気通貫で対応しています。
フロービルダーを含むノーコード開発はもちろん、Apex言語やAPIを活用したプログラム開発も対応可能です。
「まずは相談だけ」でも歓迎しているので、Salesforceの活用に課題を感じている方はぜひ詳細をご確認ください。
