根据不同客户自动编号

cybozu发表于:2017年03月30日 15:15:35更新于:2021年11月09日 15:48:57

关于按年自动编号,在以前的按年自动编号的技巧(日语)已经有过介绍,这次将基于案件来给大家解说下自动编号的方法。

具体将使用 “营业支援(SFA)包”,在登录案件信息的时候,默认在“案件名”栏使用lookup获取到 “根据不同客户自动编号”的字符串,连接任意的字段信息后显示。

表单的样子

00158f5bdc6a434374ae91ac95f78e8

自动编码格式

[客户名]-[5位连续号码]-[案件种类]

字段的设定

客户信息应用

由于需要管理不同客户的编号,所以我们在客户信息应用里像下面这样追加了自动编号管理用的字段。※标记以外是默认的。

字段类型字段名称初期值字段代码
数值
案件编号0案件编号

※由于并非常用字段,可以在隐藏在组合部件里。


接下来为了更新上面案件里的编号,需要获取到客户信息的应用ID,这是为了检索而设定的应用代码。主要的设置在[应用的设置]-[详细设置]-[高级设置]页面。

00158f5be1f3f1651670c40cd7dd593

案件信息应用

在案件信息应用里,也追加了和上面的客户信息应用一样的数值字段。
另外,为了获取之后客户信息应用的更新所需要的记录编号,追加了下面的字段。

字段类型字段名称初始值字段代码
数值案件编号0案件编号
数值客户信息记录编号-客户信息记录编号

追加上面两个字段以后,客户名lookup字段的设置→“其他要复制的字段”里,做可以获取 “案件编号” 以及 “客户信息记录编号” 值的设置。

00158f5c064d4a28ffd0e63fd81f6b8

接下来作为连接 “案件名” 的任意字段,追加以下内容。现在的api版本,无法获取lookup字段的事件,所以我们在这里追加的字段的事件里设置案件名。

字段类型字段名称项目和顺序字段代码
下拉框案件种类
新建,追加,更改
 案件种类

获取和编辑自动编码的代码

首先,先做个在记录添加・编辑页面更改 “案件种类”的时候,对 “案件名” 进行自动编号的范例。
作成JavaScript文件后,放到 “案件信息” 应用里。

(function() {
    "use strict";
    // 添加案件种类字段的更新事件
    var events = [
        'app.record.create.change.案件种类',
        'app.record.edit.change.案件种类'
    ];
    kintone.events.on(events, function(event) {
        var record = event.record;
        var matterName =
            record['lookup']['value'] +
            "-" +
            ("00000" + record['案件编号']['value']).slice(-5) +
            "-" +
            record['案件种类']['value'];
        //字段名“案件名”的字段代码变成“matter”的情形
        record['matter']['value'] = matterName;
        return event;
    });
})();

更新自动编码的代码

接下来是追加记录的时候,更新编号的范例。
作成JavaScript文件后,同样应用到 “案件信息” 应用

(function() {
    "use strict";
    // Register the events.
    var events = [
        'app.record.create.submit'
    ];
    kintone.events.on(events, function(event) {
        var app_code = "AppIdClient001";        // 客户信息应用的应用代码
        kintone.api(kintone.api.url('/k/v1/apps', true), 'GET', {"codes": [app_code]
        }, function(resp) {
            var app_id = resp.apps[0].appId;
            var record = event.record;
            var rec_id = record['客户信息记录编号']['value'];
            var seq = parseInt(record['案件编号']['value']) + 1;
        // 案件编号更新请求
            kintone.api(kintone.api.url('/k/v1/record', true), 'PUT',
            {
                "app": app_id, "id": rec_id, "revision": -1, "record": {
                    "案件编号": { "value": seq }
                }
            }, function(resp) {
            }, function(error) {
                var errmsg = 'An error occurred while updating records.';
                if (error.message !== undefined) {
                    errmsg += '\n' + error.message;
                    alert(errmsg);
                }
            }
            );
        }, function(error) {
            var errmsg = 'An error occurred while getting records.';
            if (error.message !== undefined) {
                errmsg += '\n' + error.message;
                alert(errmsg);
            }
        });
    });
})();

代码的解说

关于客户的编号部分,lookup字段的设置内容里使用的是复制源的信息,所以代码是非常简单的。

同样,关于更新编号的代码,在设置lookup字段的时候,由于可以获取到客户信息记录ID,所以记录里使用的是页面上的项目。

关于应用ID,本篇文章里使用的是2014/9/14发布版本中追加的获取应用的信息api。使用名称和多条记录,可以批量获取。从这里设置的应用代码,可以获取应用ID。

注意事项

有关客户信息案件编号的一系列更新处理,基于案件信息添加时的 'app.record.create.submit' 事件,将会更新其他应用的字段。而当更新或者删除客户信息的时候,将不会更新那些应用的字段。另外更改案件的时候也是,事件本身作为对象外,无法捕捉到客户信息的更改,因此需要手动的修正。

 

以上,这个插件可以让各个客户的编号保持统一性,请在理解的基础上灵活应用。

该Tips在2014年9月版中进行过确认。