WPS AirScript脚本合集(十一):关联字段自动化拆分并跨表同步数据
一、多维表格数据表及字段结构
多维表格共存在3个数据表,分别为录入表、基础数据、拆分数据表
录入表 存在一个名为“录入明细”的表格视图和一个名为“表单视图”的表单视图,
“录入明细”表格视图结构如下 :
◉ 字段名称:编号 - 字段类型:编号 - 编号格式:000001
◉ 字段名称:型号 - 字段类型:查找引用 - 需要引用的字段:从关联字段引用 序列号 型号 - 查找条件:无
◉ 字段名称:序列号 - 字段类型:单向关联 - 来自:基础数据 - 关联方式:手动选择 - 可关联的记录范围:全部记录 - 可关联的数量:允许关联多条记录
◉ 字段名称:库存状态 - 字段类型:单选项 - 选项:预售、在售、缺货、闲置 -允许填写时添加选项:勾选 - 默认值:无
◉ 字段名称:领用人 - 字段类型:联系人 - 使用设置:勾选允许选择多个联系人、勾选允许向新插入的联系人发送通知 - 默认值:无
◉ 字段名称:地点 - 字段类型:单选项 - 选项:斗罗大陆、天空之城、哈尔的移动城堡、完美世界、萤火之森 -允许填写时添加选项:勾选 - 默认值:无
◉ 字段名称:使用开始日期 - 字段类型:日期 - 日期格式:2025/06/18 - 显示星期:不勾选 - 显示时间:不勾选- 默认值:无
◉ 字段名称:预期结束日期 - 字段类型:日期 - 日期格式:2025/06/18 - 显示星期:不勾选 - 显示时间:不勾选- 默认值:无
◉ 字段名称:点击按钮执行脚本 - 字段类型:按钮 - 执行操作:点击按钮时触发修改记录 - 执行成功的提示:Σ(⊙▽⊙"执行脚本成功,请自行检查数据 - 按钮名称:点击按钮执行脚本- 按钮颜色:绿色
◉ 字段名称:脚本执行情况 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
“表单视图”表单视图结构如下 :
表单中允许编辑字段有:序列号、库存状态、领用人、地点、使用开始日期、预期结束日期
不允许编辑字段有:脚本执行情况
基础数据 存在一个名为“入库数据”的表格视图,表格结构如下 :
◉ 字段名称:序列号 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
◉ 字段名称:型号 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
注意:序列号和型号的逻辑关系为:每个序列号只有1个型号,但1个型号对应多个序列号
拆分数据表 存在一个名为“拆分数据”的表格视图,表格结构如下 :
◉ 字段名称:编号 - 字段类型:数字 - 数字格式:1234 - 显示千位符:否 - 默认值:无
(注:编号字段的字段类型必须是数字,不等同于录入表的字段类型为编号)
◉ 字段名称:型号 - 字段类型:查找引用 - 需要引用的字段:从数据表引用 基础数据 型号 - 查找条件:基础数据 序列号 等于 拆分数据表 序列号
◉ 字段名称:序列号 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
◉ 字段名称:库存状态 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
◉ 字段名称:领用人名称 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
◉ 字段名称:地点 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
◉ 字段名称:使用开始日期 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
◉ 字段名称:预期结束日期 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
◉ 字段名称:脚本执行情况 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
二、 设计思路
用户行为描述:当用户在 表单视图 或 “录入明细”表格视图 中 新增记录,输入序列号、库存状态、领用人、地点、使用开始日期、预期结束日期内容时,触发自动化流程自动执行Air Script脚本将序列号内容和领用人内容进行交叉组合(笛卡尔积),生成多行记录写入到拆分数据表“拆分数据”视图中。每一行记录包含:编号、一个序列号、库存状态、一个领用人名称、地点、使用开始日期、预期结束日期及脚本执行情况说明。
(注:新增记录 不等于 修改记录,若用户在 “录入明细”表格视图 中 修改原有记录,不会触发自动化流程,拆分数据表“拆分数据”视图中的记录不会同步更新)
2、自动化流程设计思路:当用户在 表单视图 或 “录入明细”表格视图 中 新增记录 且 序列号、库存状态、领用人、地点、使用开始日期、预期结束日期内容 不为空 时,执行 拆分数据跨表同步 AirScript脚本,并将脚本执行情况写入“录入明细”表格视图 中的“脚本执行情况”字段
3、拆分数据跨表同步 AirScript脚本设计思路:
根据行记录ID获取所在行的原始记录数据,从原始数据中提取多个字段的值,比如编号、型号、序列号等。
接着解析序列号和领用人数据,通过嵌套循环将每个序列号和领用人组合,生成多条记录。每条记录包含编号、序列号、库存状态等信息,并记录创建时间。
最后构建请求对象,将记录批量写入目标表。
三、 自动化流程
注意“执行AirScript脚本”-配置参数-脚本入参和脚本返回值需切换英文输入法输入,如果第3步“修改记录”-配置参数-设置字段值点击+号无“第2步AirScript脚本的返回值”,需检查第2步“执行AirScript脚本”中配置参数-脚本入参和脚本返回值输入内容是否正确!
3.1 新增记录时自动拆分并同步数据流程
3.2 点击按钮时执行脚本(可通过点击按钮强制执行脚本)
四、 Air Script脚本程序代码
“拆分数据跨表同步”脚本代码
帖子限5000个字,完整代码放不下,详见微信公众号文章https://mp.weixin.qq.com/s/58DJgGr4AkQktIiqHtP1pw
脚本编辑器中运行结果示例如下:
代码逻辑解释
获取输入参数:优先通过Context.argv.recordid获取记录ID,若未传参则取当前选中记录的ID;
读取所在记录的字段值:从指定行记录中提取字段值,分别为编号、型号、序列号、库存状态、领用人、使用开始日期和预期结束日期;
解析数据:将序列号、领用人数据转换为数组,并生成交叉匹配记录;
将数据写入指定表中:通过指定表名获取目标表ID,使用for循环格式化记录,并调用Application.Record.CreateRecords()写入目标表中。
注意事项:
记录ID数据获取:如下方代码所示,当前recordid获取依赖Context.argv.recordid或表格视图中选择记录。
const recordid = Context.argv.recordid || Application.Selection.GetSelectionRecordIds()[0][0];
console.log("当前记录ID:", recordid);
如果是单独脚本编辑器中运行,鼠标需先选择一个表格视图中对应行记录,AirScript脚本才能成功运行;
如果不在视图中选择对应行记录,AirScript脚本运行报错结果如下:
数据表及字段设置:脚本代码中直接指定数据表名称如“录入表””拆分数据表“、视图名称如”录入明细“以及字段名称如”编号“”型号“”序列号“等,需保证相关数据表名称、视图名称及字段名称一致,如相关名称不存在,直接执行脚本会引发错误。
笛卡尔积性能隐患:若序列号或领用人数量较大(如各100个),生成的记录数会达到10000条,可能超出系统单次创建记录的限制或导致性能问题。
脚本代码无修改同步逻辑:若用户在 “录入明细”表格视图 中 修改原有记录,不会触发自动化流程,拆分数据表“拆分数据”视图中的记录不会同步更新。
举个例子,用户A第1天在“录入明细”表格视图 中新增记录为:编号-00036,序列号-222 333,库存状态-在售,领用人-B C,地点-不存在的地点,使用开始日期-1900/00/00,预期结束日期-9999/13/99;
此时触发自动化流程自动执行AirScript脚本,将序列号内容和领用人内容进行交叉组合,生成多行记录写入到拆分数据表“拆分数据”视图中,新增记录如下:
第2天用户A在编号为00036的记录上修改,将“领用人-B C”改为“领用人-A C”,此时拆分数据表“拆分数据”视图中依然保持如上记录,不会发生变更!
五、自动化流程运行输出示例
动图示例
表单视图中新增数据
表格视图中新增数据(成功概率极低,非脚本代码问题,大概率出现下方异常情况第三种,即触发自动化流程成功但同步数据缺少预期结束日期)
异常情况说明,以下情况为一定概率偶现
填写表单或表格视图新建记录后未触发自动化流程?
这种情况小概率偶现(如下图所示),原因不详,可能自动化流程触发情况存在延迟,可点击按钮强制执行脚本重新同步
填写表单后触发自动化流程同步失败?
这种情况也是小概率偶现(复现概率太小以至于没来及录动图证明(._.)?),原因不详,可能自动化流程触发失败,可点击按钮强制执行脚本重新同步点击按钮重新同步
表格视图新增数据触发自动化流程成功,同步数据缺少预期结束日期?
这种情况大概率偶现(如下图所示),原因不详,可删除原先失败数据后,点击按钮强制执行脚本重新同步;
点击按钮执行脚本成功,据此对照说明可排除脚本代码问题
(PS:新增记录执行脚本和点击按钮执行脚本的自动化流程用的都是同一个脚本,没道理一个失败一个成功呀🤔?而且自动化流程运行日志也没报错,有可能是个BUG?喔吼(´・Д・)」
六、自动化流程测试用例
用例ID | 测试目的 | 输入条件 | 预期输出 |
001 | 自动化流程触发条件 | 新增记录,其中序列号、库存状态、领用人、地点、使用开始日期、预期结束日期字段部分内容为空 | 新增记录不会触发自动化流程,点击按钮强制执行脚本出现“当前记录未符合点击按钮的条件,请检查”弹窗提示 |
002 | 验证主逻辑正确性 | 列号3个值,领用人2个值,其他字段有效 | 生成6条记录,写入成功且字段匹配 |
003 | 单序列号&多领用人,验证一对多拆分逻辑 | 序列号仅1个,领用人3个,其他字段有效 | 生成3条记录,序列号重复但领用人不同 |
004 | 多序列号&单领用人,验证多对一拆分逻辑 | 序列号5个,领用人仅1个,其他字段有效 | 生成5条记录,领用人重复但序列号不同 |
005 | 单序列号&单领用人,验证一对一拆分逻辑 | 序列号仅1个,领用人仅1个,其他字段有效 | 生成1条记录 |