後で追加した計算フィールドに一括で値を反映する方法

著者名:斎藤栄(ラジカルブリッジ)

目次

kintone エバンジェリストに指名いただきました ラジカルブリッジ (External link) の斎藤と申します。
当社の 「kintoneブログ」 (External link) でも kintone に関するさまざまな小ネタを発信していますが、今後はこちらの cybozu developer network でも情報発信をしていきたいと思っていますのでどうぞ宜しくお願いします。

今回は、運用中のアプリに新たに「計算」フィールドを追加した際に、JavaScript を用いて計算フィールドに一括で値を反映する方法を紹介します。

kintone は、一度作成したアプリでも後で簡単にフィールドを追加できるため、最初にすべての要件がそろっていなくてもまずは作り始められるというのがすばらしいところです。

しかしながら、数値フィールドの計算結果を格納するような計算フィールドを後で追加した場合、そのままでは既存のレコードには自動的に計算結果が格納されません。

レコードの詳細画面を開いて、何も変更せず再保存することで計算フィールドに計算結果を反映できますが、大量のレコードが登録されているような場合、すべてのレコードに対してこのような作業をするのはベターなやり方ではありません。

そこで、ボタンを 1 回押すだけで一括で値を反映させてみたいと思います。

デモ環境

cybozu developer network DemoSite (External link) のデモ環境で実際に動作を確認できます。
ログイン情報は cybozu developer network デモ環境 で確認してください。

サンプルイメージ

今回紹介する JavaScript はどんなアプリにも対応できるのですが、ここではある会合の「合計金額」と「参加人数」を記録するアプリを想定してみましょう。
下の図はその一覧画面を表示したもので、3 レコード登録されています。

ここで参加者一人当たりの金額を計算で出してみたくなり、「一人当たりの金額」という計算フィールドを追加しました。
もちろん計算式は「合計金額 / 参加人数」です。(フィールドのタイトルとフィールドコードをそろえています)

下の図は、「一人当たりの金額」フィールドを追加した直後の一覧画面です。

ご覧のように、計算フィールドを追加しただけでは、まだ計算結果が格納されていません。
このサンプルでは 3 レコードしかありませんので、各レコードを再保存することで計算結果を反映させることもできるのですが、これが数百レコードある場合は作業する気にもなりません。

そこで今回は複数レコードを空更新することで、一括で値を反映をしたいと思います。

複数レコードに空更新を行う

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
kintone.api('/k/v1/records', 'GET', {app: appId}).then((resp) => {
  // 空更新オブジェクトの生成
  const param = {
    app: appId,
    records: []
  };

  for (let i = 0; i < resp.records.length; i++) {
    param.records[i] = {
      id: resp.records[i].$id.value,
      record: {}
    };
  }
});

あとは、このパラメーターをもとに 複数のレコードを更新する の PUT メソッドでレコードを更新すれば更新完了です。
なお、このスクリプトは「レコード番号」フィールドのフィールドコードが、既定値の「レコード番号」になっていることを前提としています。

tips
補足

このままスクリプトを作成すると 100 レコードまでのアプリの対応となります。
100 レコードより多い場合は「 offset の制限値を考慮したレコード一括取得について」を参照してください。

一括で値を反映させてみよう

JavaScript でレコード一覧画面にボタンを配置して、一括で値を反映してみましょう。
ボタンの設置方法は、 第2回 レコード一覧画面にボタンを置いてみよう! をご参考ください。

このボタンをクリックして、空更新する関数を呼び出します。
以下の図のように、「一人当たりの金額」フィールドに正しい計算結果が格納されました。

とっても楽チンですね!

kintone アプリの運用を続けているとフィールドの追加は必ず発生してくるものです。
そんなときに、今回ご覧いただいたような計算フィールドへの一括反映処理をしたい場面が必ず出てくるかと思います。
このスクリプトはどんなアプリにも対応可能ですので、ぜひご活用ください。

information

この Tips は、2022 年 10 月版 kintone で動作を確認しています。