サブテーブルの並び替え
にメンテナンス済み
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