サブテーブルの並び替え

にメンテナンス済み

kintone のサブテーブル機能を使用することで、レコード内で 1:n の関係を表現することができます。

これは非常に強力で有用な機能ですが、際限なく行を追加することができるため、情報量が増えてくると、閲覧性に問題が発生することがあります。

例えば、日付と内容のフィールドを持つサブテーブルを使ってタスクを管理している場合、単純に行を追加して新しいタスクを追加していくと、最新のタスクにすぐにアクセスできなくなる可能性があります。

今回は解決策の 1 つとして、サブテーブルの各行を並び替えて登録しなおす JavaScript カスタマイズを紹介します。

2 つの行を比較する関数を作成

まずはじめに、2 つの行の大小を比較する関数を作成しておきます。

引数と返り値は、Array.prototype.sort()に合わせます。

以下の例は、サブテーブル内の日付フィールドを降順にソートする場合のコードです。

const compareRows = (rowA, rowB) => {
  const timeA = new Date(rowA.value['日付フィールド'].value).getTime();
  const timeB = new Date(rowB.value['日付フィールド'].value).getTime();

  return timeB - timeA;
};

ソート処理を実装

続いて、実際にレコードのサブテーブルを並び替え、登録する処理を記述していきます。

kintone.events.on のコールバック関数内で実行する場合

kintone.events.on(['...'], (event) => {
  // フィールドの入力可否を設定
  event.record['サブテーブルのフィールドID'].value.sort(compareRows);

  return event;
});

予め設置したボタンのクリック時など、独自のタイミングで実行する場合

前述した kintone.events.on の引数である event オブジェクトを使う方法は、あくまでそのコールバック関数内で完結する場合でのみ有効です。

コールバック関数でボタンを設置し、そのボタンをクリックしたタイミングなどで処理を実行する場合、以下の方法を利用する必要があります。

/** 実行時のレコード情報 */
const { record } = kintone.app.record.get();

// フィールドの入力可否を設定
record['サブテーブルのフィールドID'].value.sort(compareRows);

// レコード情報をセット
kintone.app.record.set({ record });
#JavaScript #kintone