はじめに
Set型変数は重複を排除できる配列の変数型です。
フローでは通常のList型の変数は標準で使用することができますが、Set型変数は標準では定義されていません。
ここではフローでSet型の変数を使用する方法を紹介します。
実現方法
標準では存在しないデータ型を利用するためにカスタムでデータ型を定義します。
フローの変数定義ではApex型という選択肢があり、Apexで定義したカスタムのデータ型を利用することができます。
Set型を利用するために、Apexでカスタムのデータ型を作ります。
実装例
以下のようなApexクラスを定義します。
フローとのインターフェース用にcollection
という変数を定義し、get・setプロパティで値の受け渡しをします。フローからこのApexを参照するために@AuraEnabled
アノテーションを付与します。
setプロパティからcollection
変数に値がセットされる時に、内部的にSet型の変数に変換します。
getプロパティでは内部的に保持しているSet型の変数をList型の変数に変換して値を返します。
public class SetForFlow {
// 内部保持用のSet型変数
private Set<String> innerSet;
@AuraEnabled
public List<String> collection {
get {
return new List<String>(this.innerSet);
}
set {
this.innerSet = new Set<String>(value);
}
}
}
動作検証
画面フローを使って検証をします。
新規リソースから以下のように変数を作成します。
データ型はApex型、Apexクラスは先程作成したSetForFlow
を指定します。
SetForFlow
型自体が配列をもつデータ型なので、「複数の値を許可」をオンにする必要はありません。
割り当ての要素を追加し以下のように設定します。
新規リソースで定義したFlowValues
変数に値をセットします。
値の受け渡しはFlowValues
で定義されたcollection
変数を介して行います。
値「B」と値「C」はそれぞれ2回セットされており、リスト内で重複する値となっています。
値の確認用に画面要素を配置し、表示テキストコンポーネントでFlowValues
変数の値を表示します。
動作結果
フローを実行すると以下のような結果となります。
複数回セットされた値「B」、値「C」とも重複排除されて配列に格納されています。
まとめ
今回はフロー標準では存在しないデータ型を使用する方法としてApex型の変数を紹介しました。
複雑な階層構造をもつデータや、フローでは実現が大変な処理を内部的に保持するデータ型を使いたい場合はApex型変数が有効な実現の選択肢となります。フロー自体が複雑になる場合は、複雑な部分をApexに切り出すことでフロー単体での可読性や保守性が向上するメリットもあるので活用してみてください。