按照条件统计关联记录的项目

cybozu发表于:2017年03月30日 15:26:07更新于:2022年07月27日 10:40:24

开发者中心包含此范例模板(按条件统计关联记录的值),请前往开发者中心下载学习。


请创建2个应用,“案件信息”和“客户信息”。

案件信息的必要字段

字段名称字段类型字段代码项目与顺序
客户名单行文本框客户名


接受订货准确度下拉菜单接受订单准确度

接受订货

内部公示

书面请示

讨论中

接受订货金额
数值接受订货金额


客户信息的必要字段

字段名称字段类型字段代码
公司名单行文本框公司名
案件列表关联记录列表关联记录列表
小计
标签

空白栏
TotalAmount(元素ID)

00158f6d86d43e3396b326cd924ef88

看着这个案件列表,想要对订货金额之类的列项目的进行统计。应用内设置的表格工具虽然具有自动计算功能,但是对关联记录列表的项目的统计,现在的版本还不具有这个功能。所以我们使用js自定义来实现吧。

另外,在关联记录列表的标准设置里,获取的是被关联应用的全部记录。这次我们将考虑带条件的设置情形,比如案件列表, 以“接受订货准确度” 为接受订货以外的记录作为条件。

字段的设置

首先,客户信息应用的表单设置,在关联记录列表字段 “案件列表” 的 “更多筛选条件” 设置里,像下面这样设置当 “接受订货准确度” 为 “接受订货” 以外的记录。

00158f5db3322a460c565837fa39d3b

另外在显示统计结果的地方,空白栏的元素ID 设置为 “TotalAmount”,追加在案件列表的最下方。关联记录列表的接受订货金额项目的位置对齐,另外再追加任意宽度的空白栏和 “小计” 的标签。

00158f5de062f5791136719fce48e83

代码

显示表单的详细页面、编辑页面时计算的范例。

作成JavaScript文件以后,应用到 “客户信息” 应用里。

(function () {
  "use strict";

  var events = ["app.record.detail.show", "app.record.edit.show"];
  kintone.events.on(events, function (event) {
    var clientUserName = event.record.公司名.value;
    var relatedAppId = kintone.app.getRelatedRecordsTargetAppId("关联记录列表");
    var query =
      '客户名 ="' + clientUserName + '" and 接受订货准确度 not in ("接受订货")';
    var outputFields = ["接受订货金额"];
    var appUrl = kintone.api.url("/k/v1/records");

    var params = {
      app: relatedAppId,
      query: query,
      fields: outputFields,
    };

    var elementId = "TotalAmount";

    kintone.api(appUrl, "GET", params, function (resp) {
      var amount = 0;
      for (var i = 0; i < resp.records.length; i++) {
        amount = amount + parseFloat(resp.records[i].接受订货金额.value);
      }

      var divTotalAmount = document.createElement("div");
      divTotalAmount.style.fontWeight = "bold";
      divTotalAmount.style.textAlign = "right";
      divTotalAmount.style.fontSize = 12;
      var wString = String(
        amount.toFixed(0).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")
      );
      divTotalAmount.innerHTML = wString + "元";
      kintone.app.record.getSpaceElement(elementId).appendChild(divTotalAmount);
      return event;
    });
  });
})();

代码的解说

为了检索和关联记录列表里设置的条件相同的客户信息应用时,作成了以下的查询。

var query =
      '客户名 ="' + clientUserName + '" and 接受订货准确度 not in ("接受订货")';

关于接受订货准确度里排除接受订货的记录,关键点是这边的文档里说明的 “接受订货准确度”里检索的not in语句。

应用代码后,输出以下的小计计算的结果。

00158f6d8d9b3718a69964c400d5e3a

 

注意事项

这次的Tips里,我们在关联记录列表里设置的相关的条件,运行这个条件的query。当您需要无条件合计全部记录的时候,只需要把条件的部分去掉,就可以合计所有的记录了。记录件数除以offset(100)的值为需要和服务器进行交互的次数,处理时间和条件无关,和记录件数有关。另外关联记录列表标准是以5件为单位进行翻页,小计行的计算是全部符合条件记录的计算。这些点需要留意。

 

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

<<根据不同客户自动编号


回复(2)

  • betsy_yan

    可以在字段“案件列表”设置的时候,在“更多筛选条件”中添加一个筛选条件,比如“接受订货预定日” “>=(以后)” “2022-01-01”


    引用 kyle 的回复:

    我想加入日期条件比如2022-01-01以后该如何设定

  • kyle

    我想加入日期条件比如2022-01-01以后该如何设定