レコードを分類わけする処理
最近よくレコードをdatatableで表示するコードを書くんですが、レコードの特定の項目でdatatableの中身を出し分けたいな~ってなるわけです。
SOQLで取得したレコードを、分けていく時にいつもこんがらがってしまうので備忘録です。
RecordSeparate.cls
@AuraEnabled
public static List<DataTableInfo> getRecord() {
// サブクラスのリスト定義
List<DataTableInfo> infoList = new List<DataTableInfo>();
// オブジェクトのレコードをFieldAの昇順で取得
List<Account> recordList = [SELECT Id
,FieldA
,FieldB
FROM Account
ORDER BY FieldA];
String currentFieldA = '';
DataTableInfo info = null;
// レコードを項目ごとにまとめる
for (Account record : recordList) {
String fieldA = record.FieldA;
// 項目の値が変わったら新しいDataTableInfoを作成
if (fieldA != currentFieldA) {
currentFieldA = fieldA;
info = new DataTableInfo(fieldA);
infoList.add(info);
}
// レコードをカテゴリに追加
info.recordList.add(record);
}
return infoList;
}
// datatableで表示する用のサブクラス
public class DataTableInfo {
// FieldA
@AuraEnabled public String fieldA {get;set;}
// レコードリスト
@AuraEnabled public List<Account> recordList {get;set;}
// コンストラクタ
public DataTableInfo(String fieldA) {
this.fieldA = fieldA;
this.recordList = new List<Account>();
}
}
これでFieldAを、切り分けしたい項目に変更しAccountを対象のオブジェクトに変更すれば処理は完成。
このサブクラスをlwc側で、for:eachなどの繰り返し処理で動的に表示が可能になる。
よくやるのは、FieldAをタブにしてタブごとにdatatableを表示するやり方。
ただデータ数が多いと動きがとても重いので、データ数に応じて段階的に取得するなどの配慮は必要。
その点については、また今度書きます。