扩展字段
应用场景
扩展字段可以视为隐藏表单项,即业务中需要用到这个字段,但是这个字段无需在表单详情页中展示。与普通的表单项一样,可以参与公式运算,作为查询条件,用于打印输出(自定义布局打印)。
字段设计
扩展字段配置表单中配置项说明:
属性名称 | 属性说明 |
---|---|
字段标题 | 中文标题 |
字段标识 | 具有唯一性,需要注意不要与其他扩展字段或普通的表单项标识重复 |
默认值表达式 | 用于生成扩展字段的默认值 |
值同步 | 实时计算扩展字段的值 |
备注 | 扩展字段的校验提示信息 |
数据尺寸 | 扩展字段在数据库中保存的数据长度 |
查询条件渲染组件 | 扩展字段作为查询条件时,展示的表单项 |
默认值表达式
扩展字段的默认值表达式与普通的字段中默认值
中的插值表达式
一样,支持插值表达式和公式两种表达方式。
插值表达式
以花括号包裹的默认值表达式我们就会认为是插值表达式。格式{表达式的值}
。插值表达式只能是获取单个对象的值。下面章节中会详细介绍插值表达式支持的字段。
公式
非花括号包裹的默认值公式我们都认为是公式表达式,可以使用javaScript
的编码方式来编写业务逻辑。比如说扩展字段的默认值格式为:当前登录人的部门名称全路径+登录人姓名
,我们可以使用如下的公式来表达:
currentUser.deptInfoName.join('/') + '/' + currentUser.userName;
默认值表达式只在表单新建的时候触发一次,后续表单流转过程中不会再次调用
值同步
值同步允许我们采用公式的方式来根据当前表单的值和用户信息实时生成对应的值。与默认值表达式中的公式使用方法一样。 下面章节中会详细介绍公式中支持的字段和方法。
值同步只要表单值发生变化就会触发解析并生成对应的值
使用方法
插值表达式支持的字段
表达式 | 值 |
---|---|
拟稿人 | 当前登录人姓名 |
填报人 | 当前登录人姓名 |
创建人 | 当前登录人姓名 |
当前登录人 | 当前登录人姓名 |
流程发起人 | 当前登录人姓名 |
办理人 | 当前登录人姓名 |
发送人 | 当前登录人姓名 |
拟稿人部门 | 当前登录人的部门名称 |
填报人部门 | 当前登录人的部门名称 |
流程发起人部门 | 当前登录人的部门名称 |
创建部门 | 当前登录人的部门名称 |
创建人部门 | 当前登录人的部门名称 |
完整部门 | 当前登录人的完整部门名称全路径 |
创建人完整部门 | 当前登录人的完整部门名称全路径 |
创建时间 | 表单的起草时间 |
拟稿时间 | 表单的起草时间 |
年份 | 当前时间的年份 |
季度 | 当前时间的季度 |
月份 | 当前时间的月份 |
公式支持的字段
表达式 | 值 |
---|---|
填报人 | 表单起草人名称 |
填报人角色 | 表单起草人角色 |
填报人单位 | 表单起草人的部门信息 |
填报人单位类型 | 表单起草人的部门类型:总行、分行 |
填报时间 | 表单起草时间 |
流程发起人 | 当前登录人的名称 |
流程发起人单位 | 当前登录人的部门信息 |
流程发起人单位类型 | 当前登录人的部门类型:总行、分行 |
流程发送时间 | 当前系统时间 |
已经途经节点 | 表单流转中途经的节点名称集合 |
currentUser | 当前登录人 |
各个表单项的 fieldName | 对应的表单项的值 |
公式支持的方法
字符串操作方法
方法名 | 说明 | 使用示例 |
---|---|---|
trim | 去除字符串前后空格。参数:要处理的字符串 | trim(" abc ") |
replace | 替换字符串中的字串。参数:需要处理的字符串;被替换的字串;替换后的内容 | replace("abc","c","z") |
split | 拆分字符串。参数:需要拆分的字符串;分隔符 | split("a.b.c",".") |
substring | 字符串截取。参数:需要被截取的字符串;截取开始位置;截取结束位置,不指定则截取到字符串末尾。(注意:截取的字串是不包含结束位置对应的字符的) | substring("abc",0,1) |
toLower | 转换成小写的字符串。参数:需要转换的字符串 | toLower("ABC") |
toUpper | 转换成大写的字符串。参数:需要转换的字符串 | toUpper("abc") |
日期操作方法
方法名 | 说明 | 使用示例 |
---|---|---|
now | 返回当前时间 | now() |
dateFormat | 格式化日期,返回日期字符串。参数:要格式化的日期;日期格式 | dateFormat("2022-05-12","YYYY-MM") |
parseDate | 以指定的日期格式解析日期字符串,返回日期。参数:日期字符串;日期格式 | parseDate("2022-05-12","YYYY-MM-DD") |
dateYear | 获取年度。参数:日期或日期格式的字符串 | dateYear('2022-05-12') |
dateMonth | 获取月份。参数:日期或日期格式的字符串 | dateMonth("2022-05-12") |
dateQuarter | 获取季度 | dateQuarter("2022-05-12") |
dateDiff | 获取两个日期之间的差异。参数:需要比较的日期;需要比较的日期;差异的单位 | dateDiff("2022-05-12","2022-06-15","day") |
数组操作方法
方法名 | 说明 | 使用示例 |
---|---|---|
every | 判断数组中的每一条数据是否都满足断言。参数:要遍历的数据;断言方法 | every([1,2],(item)=> item>1) |
filter | 返回数组中满足断言的所有元素。参数:要遍历的数据;断言方法 | filter([1,2],(item)=> item > 1) |
find | 遍历数组,返回第一个满足断言的元素。参数:要遍历的数据;断言方法 | find([1,2],(item)=> item > 1) |
join | 将数组中所有元素使用指定的分隔符拼接成字符串。参数:要拼接的数据;分隔符 | join([1,2],",") |
map | 根据迭代函数生成新的数组。参数:原始的数组;生成新元素的迭代函数 | map([1,2],(item)=> item*2) |
reduce | 对数据进行累计运算,得到一个最终值。参数:数组;迭代函数;初始值 | reduce([1,2],(pre, cur)=>pre + cur, 0) |
reverse | 反转数组或字符串。参数:数组 | reverse([1,2]) |
skip | 跳过数组中的前几个元素,组成新的列表。参数:数组;需要跳过的元素数量 | skip([1,2],1) |
some | 判断数组中的元素是否有一条数据满足断言。参数:数组;断言方法 | some([1,2],(item)=> item > 1) |
take | 从数组的起始位置开始提取指定数量的元素生成一个新的数组。参数:数组;要提取的元素个数 | take([1,2],1) |
peek | 获取指定索引的元素。参数:数组;索引 | peek([1,2],1) |
对象操作方法
方法名 | 说明 | 使用示例 |
---|---|---|
keys | 获取对象所有的属性名称。参数:对象 | keys({a:1,b:2}) |
prop | 获取对象属性值。参数:对象;属性名或属性名路径 | prop({a:{b:{c:3}}},"a","b","c") |
toPairs | 获取对象所有的属性名和属性值。参数:对象 | toPairs({a:1,b:2}) |
values | 获取对象所有的值。参数:对象 | values({a:1,b:2}) |
逻辑操作方法
方法名 | 说明 | 使用示例 |
---|---|---|
defaultTo | 如果值为空,则返回默认值。参数:可能为空的值;默认值 | defaultTo("","xxx") |
isNull | 判断值是否为 null 或 undefined。参数:需要判断的值 | isNull("xxx") |
isEmpty | 判断值是否为为 null 或者是空数组、空字符串。参数:需要判断的值 | isEmpty('xxx') |
isIn | 判断数组是否包含指定项。参数:数组;指定项 | isIn([1,2],2) |
管道操作符 |
管道操作符的作用是将上一个表达式的值作为参数交给下一个表达式。对于比较复杂的公式,如果使用普通的编码方式可能会产生很多方法的嵌套,导致可读性比较差,这个时候使用管道操作符改写,可以让代码的可读性大大提升。
下面我们以一个实际的需求来演示一下两种不同的写法。
需求:获取当前用户信息中的二级部门,如果没有的话,就使用用户的当前部门。
传统的编码方式:
peek(reverse(currentUser.deptInfo), 1) || currentUser.deptId;
使用管道符:
currentUser.deptInfo | reverse | peek(1) | defaultTo(currentUser.deptId);
注意事项
公式暂不支持解析单引号