第 11篇 使用REST API更新记录

cybozu发表于:2016年11月11日 13:55:19更新于:2023年09月27日 15:28:15

概要

上次、我们挑战了使用REST API来获取应用信息和记录信息。这次,我们使用REST API来对记录进行更新处理。大家一起加油\(^o^)/

关于Lookup

Lookup就是在添加或更新记录时从复制源取得数据,对需要复制处的字段进行数据复制。但是在这之后,如果用户再更新复制源的数据,之前已复制过的字段却不会自动更新。(>_<)

这还真是让人苦恼呢・・・
所以,让我们来挑战一下Lookup的自动更新吧(*^^*)

应用的准备

这次,我们将使用顾客管理应用、以及要Lookup顾客管理应用的估算管理应用。

顾客管理应用

像下面这样准备好顾客管理应用。

0015825739811f9c1f613aad068f9ad

字段名称

字段类型

字段编码

备注

记录编号

记录编号

记录编号


公司

单行文本框

company

设为必填项

部门

单行文本框

post


电话号码

链接

tel

输入值的种类:电话号码

在这个顾客管理应用里写JavaScript,来实现Lookup的自动更新。

 

估算管理应用

像下面这样准备好估算管理应用。

00158257972140d9f30d384352573ce

字段名

字段类型

字段编码

备注

Lookup

Lookup

lookup

要关联的应用:顾客管理应用

要复制的字段:记录编号

其他要复制的字段:

 公司⇐[顾客管理应用]公司

 部门⇐[顾客管理应用]部门

 电话号码⇐[顾客管理应用]电话号码

设置要在搜选列表中显示的字段:

 公司, 部门

公司

单行文本框

company

设为必填项

部门

单行文本框

post


电话号码

链接

tel

输入值的种类:电话号码

表格

表格

Table


表格[产品]

单行文本框

product


表格[个数]

数值

个数

最小值:0以上

表格[单价]

数值

单价

最小值:0以上

单位符号:元

表格[价格]

计算

price

计算公式:个数*单价

隐藏计算公式

单位符号:元

小计

计算

subtotal

计算公式:SUM(price)

隐藏计算公式

单位符号:元

消费税

计算

tax

计算公式:subtotal*0.08

隐藏计算公式

单位符号:元

合计

计算

total

计算公式:subtotal+tax

隐藏计算公式

单位符号:元

通过记录编号对顾客管理应用进行Lookup,复制公司、部门、电话号码的信息。应用创建之后,应用ID会在之后使用到,所以要记住哦φ( ̄ー ̄ )

更新时事件

要让Lookup自动更新,所需要的处理就是将顾客管理应用中所作的更改自动反映到估算管理应用中,对吧(^^)
关于更改时的事件处理在第 8篇已经有所提及了,忘记的各位请前去复习一下哦(*^_^*)
这次我们使用下面的两个事件,使用REST API将更改内容更新到估算管理应用里吧!

(function() {
    "use strict";
    // 执行保存时的事件
    kintone.events.on(['app.record.edit.submit', 'app.record.index.edit.submit'], function(event) {
        // 此处写要处理的内容
    });
})();

已经是我们熟悉的样子了吧(^^♪

批量获取更新时需要的记录

关于记录的批量获取,我们上次也做过了吧(^^♪

(function() {
    "use strict";
    // 执行保存时的事件
    kintone.events.on(['app.record.edit.submit', 'app.record.index.edit.submit'], function(event) {
        // 记录的批量获取(最多100条件)
        kintone.api(
            kintone.api.url('/k/v1/records', true),
            'GET', {
                app: updateAppId,
                query: 'lookup = ' + event.record['记录编号'].value
            },
            function(resp) {
                // 获取记录后的处理
        }
        );
    });
})();

使用REST API的批量获取,一般默认一次可以拿到100条记录。但是参考获取记录(GET),使用“query”参数的“limit”选项,一次可以拿到500条记录。
当想要执行500条以上记录的Lookup自动更新时,可参考获取所有记录的方法。这次我们只对100条记录的情形进行说明^^;

Lookup的批量更新

在这里,让我们再看一下记录的批量更新的文档吧(^^♪

001582585444f81838c8d57af9f30a5

所需要的参数,就是应用ID和要更新的记录ID,以及待更新的记录信息组合而成的对象。因此,我们准备好可以作成记录ID和待更新记录信息组合的对象的函数(^^♪

/*
* 作成用REST API来批量更新records数据的函数
* @param records 使用REST API批量获取的records数据
* @returns {Array} 使用REST API批量更新后的records数据
*/
function createPutRecords(records) {
    var putRecords = [];
    for (var i = 0, l = records.length; i < l; i++) {
        var record = records[i];
        putRecords[i] = {
            id: record['$id'].value,
            record: {
                lookup: {
                    value: record.lookup.value
                }
            }
        };
    }
    return putRecords;
}

我们将要更新的字段,只有Lookup。使用这条记录的更新信息,通过REST API来批量更新,就可以更新需要复制处的字段了。到了这里,接下去只需要通过记录的批量更新API就可以更新了呢(^^♪

/*
* 批量更新ookup的函数
* @param appId 执行Lookup更新的应用ID
* @param records 待批量更新的records数据
*/
function updateLookup(appId, records) {
    kintone.api(
        kintone.api.url('/k/v1/records', true),
        'PUT', {
            app: appId,
            records: records
        },
        function(resp) {
            alert('Lookup更新成功!');
        }
    );
}

上次上上次,我们接触了REST API,所以已经不需要再对kintone.api 进行说明了吧(*^_^*) 总的来说大概就是这样一个JavaScript。
※估算管理应用的应用ID请大家替换成实际环境中该应用的ID哦。

(function() {
    "use strict";
    // 估算管理应用的应用ID
    var updateAppId = 668;
    /**
     * 作成使用REST API来批量更新records数据的函数
     * @param records 使用REST API批量获取的records数据
     * @returns {Array} 待批量更新的records数据
     */
    function createPutRecords(records) {
        var putRecords = [];
        for (var i = 0, l = records.length; i < l; i++) {
            var record = records[i];
            putRecords[i] = {
                id: record['$id'].value,
                record: {
                    lookup: {
                        value: record.lookup.value
                    }
                }
            };
        }
        return putRecords;
    }
    /**
     * 批量更新Lookup的函数
     * @param appId 执行Lookup更新的应用ID
     * @param records 待批量更新的records数据
     */
    function updateLookup(appId, records) {
        kintone.api(
            kintone.api.url('/k/v1/records', true),
            'PUT', {
                app: appId,
                records: records
            },
            function(resp) {
                alert('Lookup更新成功!');
            }
        );
    }
    // 执行保存时的事件
    kintone.events.on(['app.record.edit.submit', 'app.record.index.edit.submit'], function(event) {
        // 记录的批量获取(最多100条件)
        kintone.api(
            kintone.api.url('/k/v1/records', true),
            'GET', {
                app: updateAppId,
                query: 'lookup = ' + event.record['记录编号'].value
            },
            function(resp) {
                var records = resp.records;
                // Lookup的更新
                updateLookup(updateAppId, createPutRecords(records));
            }
        );
    });
})();

那么,就让我们把这个JavaScript上传到在顾客管理应用里,更新下记录看看吧(^^♪

001582588455627779c2973c7223cf5

像这样改下记录,然后再保存・・・

001582588a76d8fe44af15fc380b510

显示弹出框了耶!

然后,再看看更新内容是否反映到了估算管理应用带有Lookup的记录里。

0015825899b423b47b8c60a401e90cc

漂亮地完成了呢\(^o^)/

最后

此次,为大家介绍了使用kintone REST API来自动更新Lookup的方法!但是,因为这次的范例都是基于最多进行100件Lookup的更新,所以请务必以获取所有记录的方法为参考(^^♪

Let’s kintone customize\(^o^)/

该Tips在2015年1月版中进行过确认。

<< 第 10篇 使用REST API获取记录 | 第 12篇 使用jQuery >>


回复(2)

  • betsy_yan

    你好,

    使用Lookup功能复制的数据将与原应用中的数据分开保存。
    即使原应用的数据被更改或删除,在再次点击[搜选]之前,该记录都将保持上次获取的数据。


    例如同时有A表和B表(B表lookup了A表,也就是B表获取了A表的内容)。

    当A表内容更新时,如果不编辑B表的lookup(也就是重新搜选一次)的话,B表显示的还是A表没有更新时的数据。

    引用 coca 的回复:

    更新lookup的值后,其他需要复制的字段也会重新复制。

  • coca

    更新lookup的值后,其他需要复制的字段也会重新复制。