使用记录保存后事件来实现自动编号的简单方法

aki发表于:2017年02月06日 16:51:16更新于:2022年07月27日 10:34:12

开发者中心包含此范例模板(记录保存后实现自动编号),请前往开发者中心下载学习。


本Tips使用的是2016年8月发布的新功能,早于此版本的环境无法运行,请注意。
Moment.js已进入维护状态,推荐转为使用更加新的可替代Moment.js进行日期处理的库。替代库的候选之一Luxon,我们也公开了在kintone自定义中的导入Luxon的方法(日语)

概要

2016年8月系统更新时(仅提供日文)新增了记录添加或编辑页面保存成功后的事件。
使用记录添加或编辑页面保存成功后事件、以及记录列表页面行内编辑保存成功后事件,可追加此类事件发生时的一些处理。
另外,因为只有当kintone上记录成功保存的情况下才可以发送请求,利用此事件便于和外部系统整合。
(详情请参考以下链接。)

本次使用上面三个中的记录添加页面保存成功后的事件来开发以下简单的功能。

  • 自动编号时的逻辑更改
    以前因为只有记录执行保存前事件,因此当自动编号中需要包含“记录编号”时,只能采取获取所有记录+1的方法。
    ⇒有了保存成功后事件只需要获取该记录的记录编号就可以了,因此开发变得更加简单!

  • 字符结合自定义时的逻辑更改
    字符结合时,有些信息无法通过记录保存前事件来获取。
    ⇒有了保存后事件,也可以对创建人、记录编号、创建时间等进行结合了!

那么,我们来实际操作一下。

完成后的样子

记录添加页面保存成功后,按“交通[创建时间]-[记录编号]”的格式来自动生成编号。
(本Tips使用alert来确认结合结果。)

记录添加页面保存成功后

00158a6afa794eaad20d0f1f912408f

记录详情页面
00158a6afba05d224eb1bac1a585b9f

准备应用

为了尝试自动编号功能,我们来准备一个“交通费申请”的应用,请添加以下应用。

字段名称字段代码字段类型
申请编号submit_No单行文本框

PC版专用的JavaScript文件

在应用设置页面打开“通过JavaScript / CSS自定义”,指定以下Cybozu CDN中的如下链接。

  • Moment.js
    https://js.cybozu.cn/momentjs/2.13.0/moment.min.js (使用version 2.13.0)

代码

编写如下代码。

(function() {
    
    "use strict";
    
    //记录添加添加、编辑、列表页面的的“申请编号”设为不可编辑
    var myEvents = ["app.record.create.show", "app.record.edit.show", "app.record.index.edit.show"]; 
    kintone.events.on(myEvents, function(event) {
       var record = event.record;
       if(('app.record.create.show').indexOf(event.type) >= 0) {
           record['submit_No']['value'] = "";
       } 
       record['submit_No']['disabled'] = true;
       return event;
    });
    
    //记录添加页面保存成功后事件
    kintone.events.on('app.record.create.submit.success', function(event) {
       var record = event.record;
       var appId = event.appId;
       var recordId = event.recordId;
       var createDate = moment(record["创建时间"]["value"]).format("YYYYMMDD");
       
       //记录更新API
       var body = {
           "app": appId,
           "id": recordId,
           "record": {
               "submit_No": {
                   "value": "交通" + createDate + "-" + recordId
               }
           }
       };
       return kintone.api(kintone.api.url("/k/v1/record", true), "PUT", body).then(function(resp) {
         alert("申请编号:" + "交通" + createDate + "-" + recordId + "已创建。");
         return event;
       }, function(error) {
          alert(error.message);
          return event;
       });
    });
})();

代码解说

前半部分的处理是将编号对象的字段设为不可编辑。

 //记录添加添加、编辑、列表页面的的“申请编号”设为不可编辑
    var myEvents = ["app.record.create.show", "app.record.edit.show", "app.record.index.edit.show"]; 
    kintone.events.on(myEvents, function(event) {
       var record = event.record;
       if(('app.record.create.show').indexOf(event.type) >= 0) {
           record['submit_No']['value'] = "";
       } 
       record['submit_No']['disabled'] = true;
       return event;
    });

后半部分是当记录添加页面保存成功后的事件发生时,结合“创建时间”和“记录编号”,然后使用记录更新API来更新申请编号字段结合后的值。
※记录更新处理使用kintone.Promise。详情请看这里

//记录添加页面保存成功后事件
    kintone.events.on('app.record.create.submit.success', function(event) {
       var record = event.record;
       var appId = event.appId;
       var recordId = event.recordId;
       var createDate = moment(record["创建时间"]["value"]).format("YYYYMMDD");
       
       //记录更新API
       var body = {
           "app": appId,
           "id": recordId,
           "record": {
               "submit_No": {
                   "value": "交通" + createDate + "-" + recordId
               }
           }
       };
       return kintone.api(kintone.api.url("/k/v1/record", true),"PUT", body).then(function(resp) {
         alert("申请编号:" + "交通" + createDate + "-" + recordId + "已创建。");
         return event;
       }, function(error){
          alert(error.message);
          return event;
       });
    });

相关Tips

最后

本次介绍了使用记录添加页面保存成功后的事件来开发简单的自动编号。
请参考以下相关Tips,看各种情况下代码是怎么写的。

该Tips在2016年8月版中确认过。