はじめに
皆さんはレコードを絞り込むとき、どのような機能をお使いでしょうか。
Salesforceでは、レポート・リストビュー・ルックアップ検索条件など、データを絞り込むための様々な機能が用意されていますよね。
今回は、そうした機能とは少し違う、ユーザビリティをより高めてくれるような画面フローの活用方法について紹介したいと思います。
Salesforceでは、レポート・リストビュー・ルックアップ検索条件など、データを絞り込むための様々な機能が用意されていますよね。
今回は、そうした機能とは少し違う、ユーザビリティをより高めてくれるような画面フローの活用方法について紹介したいと思います。
画面フローで実現できること
では画面フローを用いた場合、具体的にどのような絞り込みが可能になるのでしょうか。
画面フローを使用することで、通常の絞り込みでは難しい以下のようなことが実装できます。
①数式などを用いた複雑な検索ロジックを組める
②リレーションを持たないor2階層以上の別オブジェクトを検索条件に使用できる
③レコードの絞り込み手順をユーザに対してナビゲートできる
④検索した結果のレコードを更新or一括更新できる
上記はあくまでも一例になりますが、フロー機能を用いることでより柔軟なレコード検索ができそうですよね!
画面フローを使用することで、通常の絞り込みでは難しい以下のようなことが実装できます。
①数式などを用いた複雑な検索ロジックを組める
②リレーションを持たないor2階層以上の別オブジェクトを検索条件に使用できる
③レコードの絞り込み手順をユーザに対してナビゲートできる
④検索した結果のレコードを更新or一括更新できる
上記はあくまでも一例になりますが、フロー機能を用いることでより柔軟なレコード検索ができそうですよね!
仕組み
設定方法に進む前に、画面フローを使用したレコード検索の仕組みについて説明したいと思います。
例えば、ユーザが入力した条件値に合致したレコード検索し、そのレコードを更新したい場合、フローの大まかな処理の流れは以下のようになります。
例えば、ユーザが入力した条件値に合致したレコード検索し、そのレコードを更新したい場合、フローの大まかな処理の流れは以下のようになります。
「①検索条件入力」と「③検索結果表示」はフローの画面コンポーネントを用いて実装します。
「②レコード検索」と「④レコード更新」は通常のフロー機能を用いることができます。
ユーザに入力された情報によって条件分岐を加えたり、動的に検索条件を変えたりもできるので、よりプロコードに近いレコード検索を実現できそうですね!
「②レコード検索」と「④レコード更新」は通常のフロー機能を用いることができます。
ユーザに入力された情報によって条件分岐を加えたり、動的に検索条件を変えたりもできるので、よりプロコードに近いレコード検索を実現できそうですね!
画面フローの設定方法
ここから、活用事例の1つとして、具体的なシナリオを用いた画面フローの設定方法について紹介します。
シナリオ
自動車メーカーの営業担当者は、お客様に紹介する紹介車両レコードを管理しています。
この紹介車両レコードは、ディーラー担当者を参照する参照項目を保持しており、以下の要件をもとにディーラー担当者を絞り込んだ上で値を設定したいと考えています。
■要件
・担当店レコードを「本部」→「支部」→「担当店」の順にレコードを絞り込む
・選択した担当店に所属する、かつ「Available」項目がtrueのディーラー担当者を検索結果に一覧表示する
・選択したディーラー担当者を紹介車両レコードの参照項目に設定し、レコードを更新する
■オブジェクトリレーション
・「紹介車両」オブジェクトは「ディーラー担当者」オブジェクトを参照
・「ディーラー担当者」オブジェクトは「担当店」オブジェクトを参照
※「紹介車両」オブジェクトと「担当店」オブジェクトに直接リレーションはない
この紹介車両レコードは、ディーラー担当者を参照する参照項目を保持しており、以下の要件をもとにディーラー担当者を絞り込んだ上で値を設定したいと考えています。
■要件
・担当店レコードを「本部」→「支部」→「担当店」の順にレコードを絞り込む
・選択した担当店に所属する、かつ「Available」項目がtrueのディーラー担当者を検索結果に一覧表示する
・選択したディーラー担当者を紹介車両レコードの参照項目に設定し、レコードを更新する
■オブジェクトリレーション
・「紹介車両」オブジェクトは「ディーラー担当者」オブジェクトを参照
・「ディーラー担当者」オブジェクトは「担当店」オブジェクトを参照
※「紹介車両」オブジェクトと「担当店」オブジェクトに直接リレーションはない
実際の挙動としては以下のようなイメージになります。
設定方法
それでは設定方法です。
①本部・支部リスト値を画面表示する
画面要素を追加し、「連動選択リスト」コンポーネントを配置します。
※本部と支部は連動関係の選択リスト項目
「連動選択リスト」コンポーネントは以下の通りに設定します。
①本部・支部リスト値を画面表示する
画面要素を追加し、「連動選択リスト」コンポーネントを配置します。
※本部と支部は連動関係の選択リスト項目
「連動選択リスト」コンポーネントは以下の通りに設定します。
設定箇所 | 設定値 | 備考 |
---|---|---|
API参照名 | コンポーネントのAPI参照名 | 選択された値を取得する時に使用します! |
オブジェクトAPI参照名 | 「担当店」オブジェクトのAPI参照名 | 選択リスト項目が属するオブジェクトのAPI参照名を設定する |
選択リスト1のAPI参照名 | 「本部」項目のAPI参照名 | 制御選択リスト項目のAPI参照名を設定する |
選択リスト2のAPI参照名 | 「支部」項目のAPI参照名 | 選択リスト1に連動する選択リスト項目のAPI参照名を設定する |
②担当店リスト値を画面表示する
①で設定した画面に後続する画面要素を追加し、「ラジオボタン」コンポーネントを配置します。
「ラジオボタン」コンポーネントは以下の通りに設定します。
①で設定した画面に後続する画面要素を追加し、「ラジオボタン」コンポーネントを配置します。
「ラジオボタン」コンポーネントは以下の通りに設定します。
設定箇所 | 設定値 | 備考 |
---|---|---|
表示ラベル | リスト値の上部に表示されるラベル | どのリスト値を表示しているのかを示す |
API参照名 | コンポーネントのAPI参照名 | 選択された値を取得する時に使用します! |
コンポーネントの種類 | ラジオボタン | 「選択リスト」の形式にも変更できる |
担当店リスト値となるラジオボタンの「選択肢」は、新規リソースを追加し以下の通りに設定します。
設定箇所 | 設定値 | 備考 |
---|---|---|
リソース種別 | レコード選択肢セット | 条件に合致するレコードを取得し、選択リスト値を作成する |
API参照名 | コンポーネントのAPI参照名 | |
オブジェクト | 「担当店」オブジェクトのAPI参照名 | 取得するレコードのオブジェクトを指定する |
検索条件 | 本部 = ①の連動選択リストAPI参照名.選択リスト1 AND 支部 = ①の連動選択リストAPI参照名.選択リスト2
|
|
選択肢表示ラベル | Name | |
選択肢の値 | Id | 選択された値を元にレコードを取得するため、Idを設定する |
③ディーラー担当者リスト値を表示する
②で設定した画面に後続する画面要素を追加し、「ラジオボタン」コンポーネントを配置します。
「ラジオボタン」コンポーネントは以下の通りに設定します。
②で設定した画面に後続する画面要素を追加し、「ラジオボタン」コンポーネントを配置します。
「ラジオボタン」コンポーネントは以下の通りに設定します。
設定箇所 | 設定値 | 備考 |
---|---|---|
表示ラベル | リスト値の上部に表示されるラベル | どのリスト値を表示しているのかを示す |
API参照名 | コンポーネントのAPI参照名 | 選択された値を取得する時に使用します! |
コンポーネントの種類 | ラジオボタン | 「選択リスト」の形式にも変更できる |
ディーラー担当者リスト値となるラジオボタンの「選択肢」は、新規リソースを追加し以下の通りに設定します。
設定箇所 | 設定値 | 備考 |
---|---|---|
リソース種別 | レコード選択肢セット | 条件に合致するレコードを取得し、選択リスト値を作成する |
API参照名 | コンポーネントのAPI参照名 | |
オブジェクト | 「ディーラー担当者」オブジェクトのAPI参照名 | 取得するレコードのオブジェクトを指定する |
検索条件 | Available = true AND 担当店 = ②のラジオボタンAPI参照名 |
|
選択肢表示ラベル | Name | |
選択肢の値 | Id | 選択された値を元にレコードを取得するため、Idを設定する |
④紹介車両レコードを更新する
選択されたディーラー担当者の値を参照項目にセットし、紹介車両レコードを更新します。
まずは画面上に開かれている紹介車両Idを取得するための変数を定義します。
新規リソースを追加し、以下の通りに設定します。
選択されたディーラー担当者の値を参照項目にセットし、紹介車両レコードを更新します。
まずは画面上に開かれている紹介車両Idを取得するための変数を定義します。
新規リソースを追加し、以下の通りに設定します。
設定箇所 | 設定値 | 備考 |
---|---|---|
リソース種別 | 変数 | |
API参照名 | recordId | 大文字と小文字含め、左記の通りに指定する |
データ型 | テキスト | |
フロー外部での可用性 | 入力で使用可能 = true | URLからIdパラメータの値を取得するために指定する |
③で設定した画面に後続するレコード更新要素を追加し、以下の通りに設定します。
設定箇所 | 設定値 | 備考 |
---|---|---|
更新するレコードを検索してその値を設定する方法 | レコードを識別する条件を指定し、項目を個別に設定 | |
オブジェクト | 「紹介車両」オブジェクトのAPI参照名 | |
レコードを更新する条件の要件 | Id = recordId | recordIdは画面上の紹介車両Idを取得するための変数 |
紹介車両の項目値をレコードに設定 | ディーラー担当者 = ③のラジオボタンAPI参照名 |
以上で設定は完了です。
全体像としては以下のような設定になるかと思います。
全体像としては以下のような設定になるかと思います。
あとは紹介車両オブジェクトの設定画面から、新規アクションを追加して画面フローを起動できるようにすれば完成です!
考慮事項
以下、画面フローを使用して絞り込み検索を実装する上での考慮事項です。
★大量データを処理する必要がある場合は、パフォーマンスを考慮する必要がある
フロー機能はApexガバナ制限と同じ制限が設けられているため、ある程度のデータ量を処理することは可能ですが、100万件以上のようなデータを絞り込み→一括更新する処理はパフォーマンスが著しく低下する恐れがあります。その場合は、Apex一括処理やレポートからデータをエクスポートし、データローダで一括更新するなど別の方法を検討してみてください。
★他機能との使い分け
画面フローを用いることで柔軟なレコード検索が可能ですが、ビジネス要件によっては他機能が適する場合もあります。
・データの細かな分析や、データをエクスポートする必要がある場合
→レポート
・常に一定のクエリでレコードを絞り込んだり、特定のユーザにのみ公開したりする場合
→レポートまたはリストビュー
・ルックアップ関係が1つで、シンプルな検索画面でレコード検索したい場合
→ルックアップ検索条件
★大量データを処理する必要がある場合は、パフォーマンスを考慮する必要がある
フロー機能はApexガバナ制限と同じ制限が設けられているため、ある程度のデータ量を処理することは可能ですが、100万件以上のようなデータを絞り込み→一括更新する処理はパフォーマンスが著しく低下する恐れがあります。その場合は、Apex一括処理やレポートからデータをエクスポートし、データローダで一括更新するなど別の方法を検討してみてください。
★他機能との使い分け
画面フローを用いることで柔軟なレコード検索が可能ですが、ビジネス要件によっては他機能が適する場合もあります。
・データの細かな分析や、データをエクスポートする必要がある場合
→レポート
・常に一定のクエリでレコードを絞り込んだり、特定のユーザにのみ公開したりする場合
→レポートまたはリストビュー
・ルックアップ関係が1つで、シンプルな検索画面でレコード検索したい場合
→ルックアップ検索条件
まとめ
ここまでレコードを絞り込み検索するための画面フローの活用方法について見てきました。
ユーザに見やすい形で検索フローを示したり、レコードを絞り込むだけでなくロジックを組んで自動化処理を加えたりできる点がフローの魅力ですね。
また今回は単一の条件値を指定する方法を紹介しましたが、画面フローの「チェックボックスグループ」や「複数選択リスト」コンポーネントを用いることで、複数の条件値に合致するレコードを一覧表示することも可能です。
ぜひ、画面フローを活用してみてください。
ユーザに見やすい形で検索フローを示したり、レコードを絞り込むだけでなくロジックを組んで自動化処理を加えたりできる点がフローの魅力ですね。
また今回は単一の条件値を指定する方法を紹介しましたが、画面フローの「チェックボックスグループ」や「複数選択リスト」コンポーネントを用いることで、複数の条件値に合致するレコードを一覧表示することも可能です。
ぜひ、画面フローを活用してみてください。
46 件