Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】How do you show an Apex collection in a Screen Flow Data Table without a custom object?

2026年11月03日に「Dev.to」が公開したITニュース「How do you show an Apex collection in a Screen Flow Data Table without a custom object?」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

SalesforceのScreen Flowデータテーブルで、カスタムオブジェクトなしにApex定義のコレクションを直接表示できるようになった。Winter '26以降、開発者は外部データなどを簡単にFlowへ取り込み、不要なオブジェクト作成やカスタムLWCを避けられる。データ表示と行選択が可能になり、メンテナンスが容易になる。

ITニュース解説

システムエンジニアを目指す皆さんにとって、Salesforceというクラウドサービスは、業務システム開発の現場で非常に広く使われているプラットフォームである。このSalesforceの「Screen Flow(スクリーンフロー)」という、主に画面を作成して業務プロセスを自動化するためのツールにおいて、最近、開発効率を大きく改善する新しい機能が追加された。このニュースは、プログラムで処理したデータを画面に表示する際に、これまで手間がかかっていた部分が大幅に簡素化されるという内容である。

具体的には、Salesforce上で動く独自のプログラム言語である「Apex(エイペックス)」で処理したデータの集まり(「コレクション」と呼ぶ)を、Screen Flowの画面上で表形式で表示する「Data Table(データテーブル)」という部品に、直接渡せるようになったという進化だ。これは「Winter '26(ウィンター・トゥエンティシックス)」というSalesforceの最新バージョン(APIバージョン65.0以降)で利用可能になった機能である。

これまでの方法では、Apexで取得・計算したデータをScreen FlowのData Tableに表示するには、いくつかの回り道が必要だった。例えば、Apexで定義したデータの形に合わせて、Salesforce上に「カスタムオブジェクト」という、いわば一時的なデータベースのテーブルのようなものを用意し、そこにデータを格納してから画面に表示するという手法がよく使われていた。あるいは、データを一時的に保存してはすぐに削除する、特別な変換処理を挟む「Transform(トランスフォーム)」要素を利用する、または、画面表示のためのプログラム部品「Lightning Web Component(ライトニングウェブコンポーネント)」を自分で一から作る、といった手間のかかる選択肢があった。これらの方法は、一時的なデータ表示のためだけに余分な設定やプログラムコードを増やすことになり、結果としてシステムの構成が複雑になり、後々の管理やメンテナンスにおいて負担となる点が大きな課題だった。

今回の新機能は、この課題を根本的に解決するものである。Apexで定義した独自のデータ型(例えば、通貨コード、通貨名、買値、売値など複数の項目を持つ「通貨レート」のようなデータの形)のコレクションを、Data Tableの「Source Collection(ソースコレクション)」として直接指定できるようになったのだ。これにより、余分なカスタムオブジェクトを作成したり、一時的なレコードを操作したりする手間が一切不要になる。

この新しい機能を使うための具体的な手順を追ってみよう。

まず「ステップ1」として、表示したいデータの「行の型」をApexで定義する必要がある。例えば、通貨レートの情報を表示したい場合、以下のようなApexクラスを定義する。

1public class FxRate {
2    @AuraEnabled public String currencyCode;
3    @AuraEnabled public String currencyName;
4    @AuraEnabled public Decimal buy;
5    @AuraEnabled public Decimal sell;
6}

ここで重要なのは、各項目(currencyCodeなど)の前に@AuraEnabledというキーワードを付けている点だ。これは、定義したデータ項目がSalesforceのFlowなど、Apex以外の要素から参照できるようにするために必要となる指定である。

次に「ステップ2」として、定義した型(FxRate)のデータの集まりを、Screen Flowから呼び出せる形で返すApexプログラムを作成する。これは「Invocable Method(インボーカブルメソッド)」という特殊なメソッドとして定義する。

1public with sharing class GetFxRates {
2    public class Result {
3        @InvocableVariable(label='Rates')
4        public List<FxRate> rates;
5    }
6
7    @InvocableMethod(label='Get FX Rates')
8    public static List<Result> run() {
9        Result r = new Result();
10        r.rates = FxService.fetchRates(); // ここで外部サービスからデータを取得したり、計算したりする
11        return new List<Result>{ r };
12    }
13}

このプログラムでは、GetFxRatesというクラスの中にResultという内部クラスを定義し、その中にFxRate型のリストであるratesを宣言している。@InvocableVariableは、このratesというリストがFlowの出力として利用できることを示すものだ。そして、@InvocableMethodが付いたrun()メソッドの中で、実際にデータを取得(例ではFxFService.fetchRates()という架空のサービス呼び出し)し、その結果をFxRate型のリストとして返している。

最後に「ステップ3」として、これらのApexプログラムをScreen Flowに組み込む作業を行う。 Screen Flowの画面編集で、「Apexアクション」という要素を追加し、先ほど作成したGet FX Ratesという名前のInvocable Methodを呼び出す。このApexアクションの「出力」として得られるRatesというデータ(FxRate型のコレクション)を、フロー内で定義した変数(これもFxRate型のコレクション変数)に保存する。

次に、Screen Flowの画面上に「Data Table」コンポーネントを配置する。このData Tableの「Source Collection」の設定項目に、先ほどApexアクションから受け取ったデータを保存した変数を指定する。

ここで非常に重要なのが、「Unique Identifier(ユニークアイデンティファイア)」の設定である。これは、Data Tableの各行を一意に識別するための項目を指定するものだ。今回の例では、currencyCode(通貨コード)のように、それぞれの行で重複しない値を持つフィールドを選ぶことが推奨される。なぜなら、もし重複する項目をIdentifierに指定してしまうと、ユーザーがData Table上で特定の行を選択した際に、どの行が選ばれたのかシステムが正しく判断できなくなり、予期せぬ動作を引き起こす可能性があるからだ。安定したデータ(レコードのIDやISO通貨コードなど、ビジネス上で意味のある一意なキー)を選ぶべきであり、もし元データに適切な一意のキーがなければ、Apexプログラムでリストを作成する際に一時的な一意のキーを生成することもできる。

これらの設定が完了すると、Apexで処理されたデータが、カスタムオブジェクトを介することなく、直接Screen FlowのData Tableに表示されるようになる。ユーザーは表示された表から行を選択でき、選択された行のデータはフローの次の処理(例えば、別のApexアクションへの入力として渡したり、次の画面で詳細を表示したりする)で再利用できる。

ただし、この新しい機能には、現時点(APIバージョン65.0)でまだ制限事項がある。それは、Data Tableに表示されたデータに対する「インライン編集」には対応していない点だ。つまり、Data Tableのセルを直接クリックして値を変更するような操作は、現時点ではできない。もしユーザーがテーブル内の値を編集する必要がある場合は、これまで通り、別の入力コンポーネントを用意するか、カスタムのLightning Web Componentを利用する必要がある。

この機能は、外部APIからリアルタイムで取得した通貨レートや株価を表示するようなケース、Apexプログラムで複雑な財務計算を行った結果を一時的に表示するケース、あるいはSalesforceに永続的に保存する必要のないバッチ処理の結果を表示するケースなど、様々な場面で非常に有効だ。追加のカスタムオブジェクトを一切作成することなく、迅速に社内向けの画面を構築できる。

この一見すると小さな改善に見える機能追加は、Salesforceのプラットフォーム開発において非常に大きな意味を持つ。余計なカスタムオブジェクトを一つも作らないことは、そのオブジェクトに対するデータ移行の考慮、セキュリティ設定、そして将来のシステム管理者への説明といった、多くの運用・管理コストを削減することに直結する。Apexというプログラム層と、Screen FlowというUI(ユーザーインターフェース)層の間でのデータ連携がよりスムーズになり、開発者はよりシンプルでメンテナンスしやすいシステムを構築できるようになる。これは、プラットフォームの持つ機能を最大限に活用し、不要な複雑さを排除するという、効率的で持続可能なシステム開発の哲学に沿った進化と言えるだろう。

関連コンテンツ

関連IT用語

関連ITニュース