WPS AirScript脚本合集(六):自动化流程执行脚本检查输入数据格式的正确性
一、多维表格数据表及字段结构
多维表格共存在5个数据表,分别为产品信息表、多选录入拆分表、下料表、粗加工表、精加工表
产品信息表 表格结构 :
字段名称:产品代码 - 属性类型:文本 - 禁止录入重复值:是 - 默认值:无
(注:产品代码禁止录入重复值,需保持唯一性)
字段名称:产品名称 - 属性类型:文本 - 禁止录入重复值:否 - 默认值:无
多选录入拆分表 表格结构 :
字段名称:编号 - 字段类型:编号 - 编号格式:000001
(注:编号为增加记录时自动分配连续的序号,故具备唯一性)
字段名称:操作人 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
字段名称:关联产品信息表 - 字段类型:双向关联 - 来自:产品信息表 - 可关联的记录范围:全部记录 - 可关联的数量:允许关联多条记录
字段名称:产品名称 - 字段类型:查找引用 - 需要引用的字段:关联产品信息表产品名称 - 查找条件:无
字段名称:下料数量 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
字段名称:粗加工数量 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
字段名称:精加工数量 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
二、 设计思路
用户行为描述:当用户在多选录入拆分表中输入操作人、产品代码、下料数量、粗加工数量、精加工数量时,自动检查下料数量、粗加工数量、精加工数量是否按照“数字-数字-数字”格式输入,以及产品数量与对应的下料数量、粗加工数量、精加工数量是否相互匹配。
自动化流程设计思路:当在 多选录入拆分表 中新增/修改记录 时,执行AirScript脚本
脚本设计思路:根据表ID和行记录ID获取所在行的原始记录数据,检查产品名称、下料数量、粗加工数量、精加工数量字段是否存在内容,如果没有则输出错误提示;下料数量、粗加工数量、精加工数量按字符“-”进行分割,检查分割后的数量是否与产品数量一致,且分割后的每个部分是否为有效数字,无效则记录错误。
三、 自动化流程
1、多维表格数据表字段设置
在“多选录入拆分表”新增3个字段“数据格式-自动化检查-状态”、“数据格式-自动化检查-脚本信息”和“数据格式-自动化检查-数据”记录自动化流程执行情况。
2、新增记录时数量格式检查-自动化流程设置
注意“执行AirScript脚本”-配置参数-脚本入参和脚本返回值需切换英文输入法输入,如果第3步“修改记录”-配置参数-设置字段值点击+号无“第2步AirScript脚本的返回值”,需检查第2步“执行AirScript脚本”中配置参数-脚本入参和脚本返回值输入内容是否正确!
3、修改记录时数量格式检查-自动化流程设置
同上述“新增记录时数量格式检查”流程设置基本一致,只需将第1步“新增记录时”调整为“修改记录时”
四、 Air Script脚本程序代码
let sheetIDs = Context.argv.sheetID || [27]
let recordIds = Context.argv.recordID || ["Uz"]
let data = {}
const errors = [] // 错误收集器
for (let i = 0; i < recordIds.length; i++) {
let recordId = recordIds[i]
let sheetID = sheetIDs[i]
const record = Application.Record.GetRecord({ SheetId: sheetID, RecordId: recordId })
data = record.fields
// 基础验证
const productNames = data["产品名称"] || []
const productCount = productNames.length
if (productCount === 0) {
errors.push("产品名称字段为空;\n")
break
}
// 定义需要验证的字段
const checkFields = [
"下料数量",
"粗加工数量",
"精加工数量"
]
// 遍历验证每个字段
checkFields.forEach(field => {
const value = data[field]
if (!value) {
errors.push(`${field} 字段为空;\n`)
return
}
// 新增空格验证(检测任意空白字符)
if (/\s/.test(String(value))) {
errors.push(`${field} 存在非法空格;\n`)
return
}
// 格式验证
const parts = String(value).split("-")
if (parts.length !== productCount) {
errors.push(`${field} 拆分数量(${parts.length})与产品数量(${productCount})不匹配;\n`)
}
// 数值验证
const invalidNumbers = parts.filter(p => isNaN(Number(p)))
if (invalidNumbers.length > 0) {
errors.push(`${field} 包含非数字内容: [${invalidNumbers.join(",")}];\n`)
}
})
}
// 结果处理
if (errors.length > 0) {
console.error("验证失败,发现以下问题:\n" + errors.join("\n"))
return {
status: "error",
message: errors,
data: data
}
} else {
console.log("所有数量字段验证通过")
return {
status: "success",
message: "无错误信息输出",
data: data
}
}
代码解释
1、初始化参数
let sheetIDs = Context.argv.sheetID || [27]
let recordIds = Context.argv.recordID || ["Uz"]
作用:从上下文参数 Context.argv 中获取要操作的表ID (sheetID) 和记录ID (recordID)。
默认值:如果未提供参数,默认操作表ID为27、记录ID为"Uz"的记录。
这个默认值怎么来的呢?可通过使用上一篇分享的“输入表名获取表ID、行记录ID及行记录所有字段的值”程序脚本进行查询哦,指路下方链接🔗
WPS AirScript脚本合集(五):输入表名获取表ID、行记录ID及行记录所有字段的值
2、数据准备:
**data**:存储从表格中读取的记录字段数据。
**errors**:收集验证过程中发现的所有错误信息。
3、循环处理记录:遍历所有需要验证的记录ID,通过多维表格API Application.Record.GetRecord 获取指定记录的数据。
4、产品名称字段验证:确保 产品名称 字段不为空。若为空,记录错误并终止当前记录的后续验证。
5、数量字段验证:
存在性检查:检查字段值是否为空。
非法空格检查:使用正则表达式 \s 检测字段值中是否包含空格。
格式一致性检查:验证字段值按 - 分割后的子项数量是否与产品数量一致。
数值有效性检查:确保分割后的每个子项均为有效数字。
6、结果处理:错误输出:若有错误,返回错误详情和原始数据。成功输出:若无错误,返回验证通过状态。