获取列表的所有记录的方法

aki发表于:2017年04月07日 15:25:26更新于:2019年01月31日 13:50:51

概要

大家好。
这次将为大家介绍获取全部记录的方法 (^^)

代码

/**
 * 全部记录的获取
 *
 * @author Yuichi Ochiai <ochiai@cstap.com>
 */
(function() {
    "use strict";
    // 记录列表页面
    kintone.events.on('app.record.index.show', function(event) {
        var manager = new KintoneRecordManager;
        manager.getRecords(function(records) {
            // 记录获取后的处理
            console.log(records);
        });
        return event;
    });
    /**
     * 和kintone通信的类
     */
    var KintoneRecordManager = (function() {
        KintoneRecordManager.prototype.records = [];    // 获取的记录
        KintoneRecordManager.prototype.appId = null;    // 应用ID
        KintoneRecordManager.prototype.query = '';      // 检索query
        KintoneRecordManager.prototype.limit = 100;     // 每次获取的最大件数
        KintoneRecordManager.prototype.offset = 0;      // offset
        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;
    })();
})();

KintoneRecordManager

KintoneRecordManager是一个关于记录处理的类。使用递归调用getRecords方法,可以实现全部记录的获取。因为要多次调用REST API的记录的批量获取,记录数多的情形下比较花时间。

利用方法

在KintoneRecordManager这个类里可以设定一些属性。

应用ID的指定

默认使用kintone.app.getId()。需要指定的时候可以采用以下的代码。

// 记录列表页面
kintone.events.on('app.record.index.show', function(event) {
    var manager = new KintoneRecordManager;
    manager.appId = 100; // 其他的应用ID
    manager.getRecords(function(records) {
        // 获取记录后的处理
        console.log(records);
    });
    return event;
});

使用query指定检索条件

默认没有检索条件。想要的指定的时候可以像下面这样写。

// 记录列表页面
kintone.events.on('app.record.index.show', function(event) {
    var manager = new KintoneRecordManager;
    manager.query = "数值_0 > 100";  // 检索条件的指定
    manager.getRecords(function(records) {
        // 记录获取后的处理
        console.log(records);
    });
    return event;
});

获取全部记录后的callback

调用getRecords方法时,可以指定callback。对于获取到全部记录后的处理可以使用callback来指定。

最后

全部记录的获取,往往记录数的多少决定着所花费时间的多少。大家在使用的时候,请注意这点。另外,本Tips虽然只是以记录列表页面的显示事件作为范例,其实使用其他的事件也是可以的,大家可以试试看。