Skip to main content

公式规则

表单使用过程中,有几处场景可以支持公式去控制一些特殊处理。比如:流程流转控制公式、公式控制表单项的可见性和可编辑性。以上需要使用公式的场景,在配置公式时,均需遵循以下规则。

控制条件范围

以下事项可作为控制条件:

  • 表单中的所有表单项子表单项
  • 填报人
  • 填报人单位
  • 填报时间
  • 流程发起人
  • 流程发起人单位
  • 流程发送时间
  • 已途经节点
  • 填报人角色

快速用法

控制公式的语法借鉴 JavaScript 表达式语法,形如:

流程发起人 in ["张三", "李四"] && 填报人 like "张%"

示例公式的语义是: 流程发起人是 张三 或者 李四,并且填报人姓张。

控制公式语法

控制公式语法在遵循 JavaScript 表达式语法子集的基础上扩展了关系运算符 inlike

比较关系运算符

支持以下关系运算符:

  • like - 字符串匹配(字符串包含)
  • in - 数组包含
  • >
  • >=
  • <
  • <=
  • ==
  • !=

in 数组包含

value in [1, 2, 3];

value 可以是数字、字符串、数组、也可以是对象:

  • value = 1时,公式返回 true
  • value = 4时,公式返回 false
  • value = [1, 7, 8]时,公式返回 true
  • value = [8, 9]时,公式返回 false
  • value = "1"时,公式返回 false
  • value = {selected: 1}时,公式返回true
  • value="1,2,3"时,公式返回true

like 字符串匹配

userName like "张%"

规则如下:

"张三" like "张%"     ====> TRUE
"李张三" like "张%" ====> FALSE
"李张三" like "%张%" ====> TRUE
"张三" like "张_" ====> TRUE
"张三2" like "张_" ====> FALSE
"张三2" like "张%" ====> TRUE
  • _ 表示匹配一个任意字符
  • % 表示匹配零个、一个或者多个任意字符

逻辑关系运算符

支持以下关系运算符:

  • &&AND
  • ||OR
  • !NOT

例如:

姓名 like "张%" && 年龄 >= 18 && 年龄 != 30

使用小括号()定义表达式的优先级

姓名 like "张%" && (年龄 <18 || 年龄 > 60)

此控制公式语义为:年龄小于 18 岁 或者大于 60 岁,并且姓张。

除此之外,我们可以使用 ! 和关键字 not 表示逻辑非运算。以下两个控制公式表达语义相同:

填报人 not in ["张三","李四"]

!(填报人 in ["张三","李四"])

字面量

支持三种字面量。

字符串

"字符串值"

注意:必须使用双引号"表达字符串字面量。字符串不支持单引号

数字

10
20.1
-10.5
.5
+0.15

数组

[1, "2", [3, "4"]]

设置表单项作为控制项

我们在使用表单项作为控制项时,可以在公式中使用字段标题或者字段名称作为控制项,在计算公式时会自动从表单中获取字段值。

如:

用户名 like "张%"

userName like "张%"

设置子表单项作为控制项

由于子表单数据结构比较复杂,所以我们在设置子表单项作为控制条件时,需要特别注意以下场景:

场景一: 子表单中任意一条数据的某一项设置控制公式

子表单.年龄 >= 18

此控制公式语义为: 子表单中任意一条数据中的年龄大于等于18 时,此控制公式就会满足条件。

场景二: 子表单中某一条数据的某一项设置控制公式

子表单[2].年龄 >= 18

此控制公式语义为: 子表单中第三条数据中的年龄大于等于18 时,此控制公式才会满足条件。