LoginSignup
0
0

More than 1 year has passed since last update.

SOQLで取得したレコードを項目の値ごとに切り分ける処理

Posted at

レコードを分類わけする処理

最近よくレコードを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を表示するやり方。

ただデータ数が多いと動きがとても重いので、データ数に応じて段階的に取得するなどの配慮は必要。
その点については、また今度書きます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0