WPS AirScript脚本合集(六):自动化流程执行脚本检查输入数据格式的正确性

一、多维表格数据表及字段结构

  1. 多维表格共存在5个数据表,分别为产品信息表、多选录入拆分表、下料表、粗加工表、精加工表

  1. 产品信息表 表格结构 :

  1. 字段名称:产品代码 - 属性类型:文本 - 禁止录入重复值:- 默认值:无

(注:产品代码禁止录入重复值,需保持唯一性)

  1. 字段名称:产品名称 - 属性类型:文本 - 禁止录入重复值:否 - 默认值:无

  1. 多选录入拆分表 表格结构 :

  1. 字段名称:编号 - 字段类型:编号 - 编号格式:000001

(注:编号为增加记录时自动分配连续的序号,故具备唯一性)

  1. 字段名称:操作人 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无

  1. 字段名称:关联产品信息表 - 字段类型:双向关联 - 来自:产品信息表 - 可关联的记录范围:全部记录 - 可关联的数量:允许关联多条记录

  1. 字段名称:产品名称 - 字段类型:查找引用 - 需要引用的字段:关联产品信息表产品名称 - 查找条件:无

  1. 字段名称:下料数量 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无

  1. 字段名称:粗加工数量 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无

  1. 字段名称:精加工数量 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无

二、 设计思路

  1. 用户行为描述:当用户在多选录入拆分表中输入操作人、产品代码、下料数量、粗加工数量、精加工数量时,自动检查下料数量、粗加工数量、精加工数量是否按照“数字-数字-数字”格式输入,以及产品数量与对应的下料数量、粗加工数量、精加工数量是否相互匹配

  1. 自动化流程设计思路:当在 多选录入拆分表 中新增/修改记录 时,执行AirScript脚本

  1. 脚本设计思路:根据表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、结果处理:错误输出:若有错误,返回错误详情和原始数据。成功输出:若无错误,返回验证通过状态。

五、自动化流程运行输出示例

附:微信公众号文章https://mp.weixin.qq.com/s/Fz0qAUl8c1LSi8PMsJ95-w

广东省
浏览 248
收藏
3
分享
3 +1
+1
全部评论