通过自动lookup来输入名字

aki发表于:2017年02月22日 08:59:13更新于:2022年07月27日 10:35:37

开发者中心包含此范例模板(自动lookup获取名字),请前往开发者中心下载学习。

概要

公司内部的一些申请类的kintone应用,大部分是本人自己提交申请的吧。想必不少人觉得如果在点添加记录时候能默认选择自己名字的话,该有多方便啊。

因此本次就向大家介绍在添加记录的时候,通过lookup自动从员工信息管理等应用中获取自己的名字并设为默认值的自定义。

用一句话概括的话,那就是“自动lookup”!

这样就可以省略点击lookup按钮,在“用户选择”页面中选择自己…这两步操作了。

完成后的样子

点击[+]按钮新建记录时,lookup已经读取了自己的名字了。

00158b7b322ced71114269dfb19c3bc

开发概要

开发逻辑

下面是这次开发的逻辑。动作上跟标准功能的lookup类似,而实际上JavaScript是像下面这样处理的。

00158b7b332508ec1ec8a6662654e9c

开发流程

  1. 使用REST API在记录添加事件发生时以登录名称为key,发送请求以获取lookup所参照的应用的记录信息

  2. 获取1条跟key相匹配的记录信息

  3. 获取的记录的值并赋值给lookup字段

  4. 执行lookup

准备应用

设置员工信息管理应用

准备员工信息管理应用。
这次是以登录名称为key,获取与之匹配的记录信息。设置登录名称及其他要从员工信息管理应用中获取的字段。这次设置“员工编号”和“名字”。

字段名称字段类型字段代码备注

员工编号

单行文本框

员工编号

勾选“值为唯一”※

名字

单行文本框

名字


登录名称

单行文本框

登录名称


※本次自定义使用了自动获取lookup
复制源字段的值重复时,不可自动获取。
因此,复制源字段需要设置为"值为唯一"。
员工信息管理应用建好后,别忘记了要添加记录!
因为是以登录名称为key的,务必正确输入。

00158b7b3465cb6a2d123c923187265

设置申请应用

准备申请应用。
lookup字段通过[员工编号]与刚才的员工信息管理应用关联起来,设置如下图。另外,作为key的登录名称因为可以通过kintone API来获取,无需在应用上设置。

00158b7b3620058722eba39999049b5

字段名称字段类型字段代码备注

员工编号

lookup

员工编号

 “其他要复制的字段”中设置“名字” <“员工信息管理”应用的“名字”

名字

单行文本框

名字

 -

-

空白栏

error_display_field

 -

范例代码和解说

注意事项

  • 本范例程序,不保证运行绝对正确

  • 不对本范例程序提供技术上的支持

程序(JavaScript)

(function() {
    "use strict";
    var events1 = ['app.record.create.show'];
    kintone.events.on(events1, function(event) {
        var record = event.record;
        if (!record['员工编号']['value']) {
            // 获取Lookup所参照的应用ID,放到请求body里
            var appId = kintone.app.getLookupTargetAppId("员工编号");
            var user = kintone.getLoginUser();
            var params = {
                'app': appId,
                // 以登门名称为key的查询
                'query': '登录名称 = "' + user.code + '" order by $id desc limit 1'
            };
            // 使用REST API获取Lookup所参照的记录1条
            kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params, function(resp) {
                if (resp['records'].length === 1) {
                    var setRecord = kintone.app.record.get();
                    // 获取到的记录的值赋给lookup
                    setRecord['record']['员工编号']['value'] = resp['records'][0]['员工编号']['value'];
                    // 根据赋值执行执行Lookup
                    setRecord['record']['员工编号']['lookup'] = true;
                    kintone.app.record.set(setRecord);
                // 但当员工信息管理应用中没有找到匹配的记录时的错误信息
                }else {
                    var errorDisplayField = kintone.app.record.getSpaceElement('error_display_field');
                    errorDisplayField.parentNode.style.width = '250px';
                // 文字列要素
                    var errorDisplayDiv = document.createElement('div');
                    errorDisplayDiv.style.backgroundColor = '#ffd78c';
                    errorDisplayDiv.innerHTML = '找不到相应的数据。';
                    errorDisplayField.appendChild(errorDisplayDiv);
                }
            });
        }
    });
    // 手动Lookup时的错误信息显示区域
    var events2 = ['app.record.create.change.名字'];
    kintone.events.on(events2, function(event) {
        var record = event['record'];
        if (record['名字']['value'] !== null) {
            var errorDisplayField = kintone.app.record.getSpaceElement('error_display_field');
            if (errorDisplayField !== null) {
                errorDisplayField.innerHTML = null;
            }
        }
        return event;
    });
})();

重点解说

值赋给lookup字段

  // 使用REST API获取Lookup所参照的记录1条
            kintone.api(kintone.api.url('/k/v1/records', true), 'GET', params, function(resp) {
                if (resp['records'].length === 1) {
                    var setRecord = kintone.app.record.get();
                    // 获取到的记录的值赋给lookup
                    setRecord['record']['员工编号']['value'] = resp['records'][0]['员工编号']['value'];
                    // 根据赋值执行执行Lookup
                    setRecord['record']['员工编号']['lookup'] = true;
                    kintone.app.record.set(setRecord);
  • 通过REST API获取到的员工信息的记录的值(这次是员工编号)赋给lookup,以此为依据执行lookup。

  • 通过这样的设计,可以杜绝申请自擅自改写员工编号。

错误处理

                // 但当员工信息管理应用中没有找到匹配的记录时的错误信息
                }else {
                    var errorDisplayField = kintone.app.record.getSpaceElement('error_display_field');
                    errorDisplayField.parentNode.style.width = '250px';
                // 文字列要素
                    var errorDisplayDiv = document.createElement('div');
                    errorDisplayDiv.style.backgroundColor = '#ffd78c';
                    errorDisplayDiv.innerHTML = '找不到相应的数据。';
                    errorDisplayField.appendChild(errorDisplayDiv);
                }
  • 如果员工信息管理应用中找不到匹配的记录,在页面上显示相应的提示信息。

00158b7b373676c7ebd6aa9d9164b28

  // 手动Lookup时的错误信息显示区域
    var events2 = ['app.record.create.change.名字'];
    kintone.events.on(events2, function(event) {
        var record = event['record'];
        if (record['名字']['value'] !== null) {
            var errorDisplayField = kintone.app.record.getSpaceElement('error_display_field');
            if (errorDisplayField !== null) {
                errorDisplayField.innerHTML = null;
            }
        }
        return event;
    });
})();
  • 如果就这样子的话,提示信息一直显示着,过后即使再次通过手动成功lookup了,也有一只留着。

  • 因此使用更改字段时的事件,当手动通过lookup拷贝了值时,则清除提示信息。

使用的API


    1. 添加事件句柄

    2. 显示记录添加页面时的事件

    3. 获取Lookup字段的参照对象的应用ID

    4. 获取用户信息

    5. 批量获取记录(在查询中指定条件)

    6. 获取记录的值

    7. 设置记录的值

    8. 自动获取Lookup

    9. 记录添加页面的字段值发生更改时的事件

    10. 获取空白栏的的元素

最后

这个自定义的好处是:可以省略两步的操作;另外,其他在应用中如果设置了字段代码相同的lookup,就可以直接复制粘贴这里的代码了。

可以简单地获取互相关联起来的应用的记录信息,例如请假申请应用跟年假管理应用关联起来的话,就可以在请假申请应用中显示自己的名字及剩余年假天数。请务必充分利用起来哦。

该Tips在2016年5月版中进行过确认。