Ribbit.work

記事のトップ画像

レコードのサブテーブルを並び替えて登録する【Kintone JavaScriptカスタマイズ】

JavaScriptKintone

last modified date2021-12-5

publish date2021-12-4

こんにちは、皆さんはサブテーブル、利用されていますか?

とても便利な機能ですが、情報量が増えてくると、閲覧性に問題が起こってしまうこともあります。

今回は解決策の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 });