5
3

More than 3 years have passed since last update.

Kintoneで全レコードを空更新する

Last updated at Posted at 2020-06-16

自動計算のフィールドなどを後から追加した場合に自動で計算フィールドが埋まらないので全件更新したいときに使います。
一覧画面のヘッダーにボタンを配置して任意のタイミングでできるようにしたかったのでまとめました。
ボタンをクリックして全件取得して何かしたい、と思った時にはこちらを改造すればいいと思います。
公式にあるサンプルプログラムを組み合わせていきます。

サンプルプログラム

できました

JSファイルを作って以下をコピーして読み込ませる。

allUpdate.js
(function() {
  "use strict";
  // レコード一覧画面の表示後イベント
  kintone.events.on('app.record.index.show', function(event) {
    // 増殖バグを防ぐ
    if (document.getElementById('my_index_button') !== null) {
        return;
    }

    // ボタン
    var myIndexButton = document.createElement('button');
    myIndexButton.id = 'my_index_button';
    myIndexButton.innerText = '全件空更新';

    // ボタンクリック時の処理
    myIndexButton.onclick = function() {
      var manager = new KintoneRecordManager;
      manager.getRecords(function(records) {
        // レコード取得後の処理
        console.log(records);

        // 取得したレコードを空更新する
        var body = {
          "app": manager.appId,
          "records": []
        }
        var record = {};
        var recordArr = [];
        for (var i = 0; i < records.length; i++) {
          record[i] = {
            "id": records[i]['レコード番号']['value'],
            "record": {}
          }
          recordArr.push(record[i]);
        }
        // 100件ずつ更新
        var s = 0;
        var e = 0;
        while (s < recordArr.length) {
          e = s + 100;
          body.records = recordArr.slice(s, e);
          kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', body, function(resp) {
            // success
            console.log(resp);
          }, function(error) {
            // error
            console.log(error);
          });
          s = s + 100;
        }
      });

      // 再読み込み
      location.reload();
    };

    // メニューの右側の空白部分にボタンを設置
    kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
  });

  /**
   * kintoneと通信を行うクラス
   */
  var KintoneRecordManager = (function() {
    KintoneRecordManager.prototype.records = [];    // 取得したレコード
    KintoneRecordManager.prototype.appId = null;    // アプリID
    KintoneRecordManager.prototype.query = '';      // 検索クエリ
    KintoneRecordManager.prototype.limit = 100;     // 一回あたりの最大取得件数
    KintoneRecordManager.prototype.offset = 0;      // オフセット

    function KintoneRecordManager() {
        this.appId = kintone.app.getId();
        this.records = [];
    }

    // すべてのレコード取得する
    KintoneRecordManager.prototype.getRecords = function(callback) {
      kintone.api(
        kintone.api.url('/k/v1/records', true),
          'GET',
          {
            app: this.appId,
            query: this.query + (' limit ' + this.limit + ' offset ' + this.offset)
          },
        (function(_this) {
          return function(res) {
            var len;
            Array.prototype.push.apply(_this.records, res.records);
            len = res.records.length;
            _this.offset += len;
            if (len < _this.limit) { // まだレコードがあるか?
                _this.ready = true;
                if (callback !== null) {
                    callback(_this.records); // レコード取得後のcallback
                }
            } else {
                _this.getRecords(callback); // 自分自身をコール
            }
          };
        })(this)
      );
    };
    return KintoneRecordManager;
  })();
})();

以上

追加

テキストボックスを用意してアプリID指定して遠隔で空更新したい場合はテキストボックスの追加と入力内容を取得すればよい。
以下の場合は入力内容のチェックをしていないので適宜追加してください。

allUpdate.js
    // テキストボックス
    var myIndexInputBox = document.createElement('input');
    myIndexInputBox.id = 'my_index_input';
    myIndexInputBox.type = "text";
~
    function KintoneRecordManager() {
        // テキストボックスの入力内容を取得
        var appId = document.getElementById('my_index_input').value === "" ? kintone.app.getId() : document.getElementById('my_index_input').value;
        this.appId = appId;
        this.records = [];
    }
5
3
8

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
5
3