需求描述:
出单据的时候,需要将子表的销售产品名称字段汇总起来写入父表的多行文本字段。
例如,我的销售产品明细表如下:
销售产品名称 数量 单价
苹果 20 1.2
梨子 40 1.5
桃子 23 2
我们需要获得 每个产品的名称,然后组合成一个文本字段,存入父表的文本字段产品描述,存入后 父表的产品描述字段显示 “苹果梨子桃子”。
如果使用汇总字段,可以将数量,或者单价等数值字段求和存入父表。但是产品名称为文本字段,没办法直接使用汇总字段。
实现原理
用 webhook 去销售产品明细表找到该父表的数据。然后用代码块将获取到的数据取值,然后拼合更新至父表文本字段。
实现难点
1.如何使用 webhook 配合 API 获取符合某些条件的记录。
解决办法:
第一步,新建工作流触发。可以设置成按钮或者更新,随你喜好。题主使用的是按钮触发。
第二步,获取父表的关联明细表。如下图:
第三步,新建 webhook,配置 API:
webhook 使用 post, url 设置为获取列表 post 的请求 URL。
查看方法:进入应用,点击应用名称右边的小三角形 点击 API 开发文档, 如下图:
在右边找到你的明细表,比如我的就是销售明细表,如下图:
header 留空, 然后 body 选择 raw:
说下代码部分:
使用代码如下:
{
"appKey": "c27cc86f75c7dca8",
"sign": "MTUyZDVhNGY5MmVhYzRmNWMxZmMxMWI4MjliYzBjODdmYTI5Y2MxZjIxOGE2MGE3MzA3YjFmMTY3NDhkN2UxZA==",
"worksheetId": "5f8976a1439fc00c0886306a",
"viewId": "",
"pageSize": 50,
"pageIndex": 1,
"sortId": "",
"isAsc": "",
"keywords": "关键词", //* 这里填写你筛选数据的关键词,我使用的我的父订单的合同号, **注意 这个父订单的合同号需要用他表字段,显示在你的明细表上面。**
"filters": [ //* 关于这个filters 我尝试了好多控件,结果只有用caid也就是创建者控件才能筛选出来。我也不知道为什么。
{
"controlId": "caid",
"dataType": 26,
"spliceType": 1,
"filterType": 0,
"value": "这里使用的创建者的ID" //* 创建者ID 去
}
]
}
第一次配置的时候,关键词和创建者 ID 使用静态值,不要动态获取。 因为需要先获得返回数组的结构。
这里关键词我第一次使用的是父订单的合同号, 创建者 ID 需要找到测试明细的创建者,进入他的页面 如下图:
红框里面的就是创建者 ID。
返回的结果:
这里返回结果 data_total 为 2,表示找到了符合条件的两条数据。 这里我们就需要取这两条数据的 产品名称。
新建分支,不同的返回结果数量走不同的分支。
配置代码块解析返回结果。
同样,这里第一次配置代码块的时候, 用前面返回的静态示例结果。不要用我截图里面这样的动态值,当测试完成后改为动态的 webhook 返回的 data_rows.
var pdetail= JSON.parse(input.pdetail);
var pname = pdetail[0]; //这里的0,表示获取的第一个数组,改成1就是第二个,改成2就是第三个。 我图里的P1,P2,P3就是指第一个产品,第二个产品,第三个产品。。
output = { pname: pname};
这段代码无敌好用, 我发现几乎所有的 webhook 返回的数组都可以用这段代码来处理。之前写得快递获取动态更新里面也用的这个,图像识别,我也用的这段代码。
解析后我得到一个值
这个值就是我要的。
更新父表文本字段。
将文本字段更新为获取到的值
这里,如果有两个产品就是这样的,我最多支持五个产品。当然可以继续增加。
然后,这是一个笨办法,因为我是化工产品的,产品数量会比较少。 如果你的产品数量会很多的话,这样就会写很长,不太合适,估计应该用子流程来做就很好了。
效果
打完收工。