配置节点参与者
工作流的参与者包含角色参与者、组织参与者、用户参与者、流程实例参与者、流程节点参与者、Json参数参与者:
- 角色参与者:根据用户角色求解参与者。
参与角色是用来配置该节点处理人的角色。
如果需要进一步过滤角色,则可设置如下参数:
- 基准组织类型:表示在角色满足的情况下,进一步根据组织来过滤角色数据,即筛选出某一组织中的某一种角色用户,包含如下类型:
无:不对获取到的参与者进行过滤选择
当前用户组织:当前任务节点用户所处的组织
创建人组织:当前流程实例创建人的所在组织
指定基准组织:指定一个组织,当某些流程节点的参与者组织是固定的的时候可使用,图示如下:
指定参数基准组织:通过表单变量/实例变量/流程节点变量传入组织参数值来动态配置一个组织,图示如下:
【提示】: 此处的orgId为组织Id。
关于流程应用中的动态传参:
- 表单传参:作用域最小,只在一次审批请求中生效,优先级最高。(若参数名称与节点变量或者实例变量名重复了,以表单传值为准)
- 节点变量:作用域在一个节点范围内,优先级次之。
- 实例变量:在这次流程实例中一直生效,优先级最低。
基准组织排序:对于以上组织的指定后,可以按照组织的顺序来查找基准组织,这里的基准组织排序指的是,递归往上查找或者往下查找,直到满足条件(即查找到相关人员)则停止查找。在当前处理人配置求解不出用户的情况下,设置基准组织排序可获取到其他组织用户。
(注:所有的求解人员规则都是求解到人则停止求解)
父组织筛选:“父组织”是指当前所指定组织的上一级组织,当选择“父组织-兄弟组织”是指在当前所指定组织求解不出用户时,系统会一直往上一级组织寻找,若仍没有求解出用户,则寻找当前所指定组织的同级组织求解用户(注意这里不是找父组织的同级组织),“父组织-子组织”是指在当前所指定组织的上一级组织仍没有求解出用户的情况下,找当前所指定组织的下一级组织。其他筛选情况也同理。
兄弟组织筛选:“兄弟组织”是指与当前所指定组织同一个父组织的同级组织。筛选情况类比于“父组织筛选”。
- 是否包含并行组织角色:即是否配置同级组织同种角色的用户处理人,用于会签查找到满足人相邻的组织结构所满足条件的人。
- 批次:一个流程节点的参与者可以设置多个,对于不同的参与者,求解人的规则总是从最小的批次往最大的批次开始求解,直到求解到相关人员则停止查找。当有多个相同批次时需要有逻辑关系,否则便无需配置逻辑关系。对于相同批次,有如下三种逻辑关系:
并集:同个批次的所有满足人员条件的集合
差集:同个批次的满足前者条件的人员,且不满足后者条件的人员。比如有两个相同批次时,差集由韦恩图表示为两个封闭曲线不交叠的部分。
交集:同个批次的共同满足人员条件的集合。比如有两个相同批次时,交集由韦恩图表示为两个封闭曲线相交叠的部分。
【场景】:
实现:创建人组织(此处创建人组织为领导组织)用户减去jsonUser(这里为“领导”组织当中的刘靖)再加上指定用户。指定用户的逻辑关系在此处无用,即最后一个参与者的逻辑关系是没有派上用场的(注:竺维彬、查询账号在“领导”部门中):
同理,将第一个选择的组织的逻辑关系改为“交集”:
- 规则条件:可以设定条件来决定是否求解该批次的人员。不设置默认为求解该批次,可以通过流程变量或者表单参数来传入条件参数值,其规则表达式遵循以下操作符:
算术运算符:支持常见的算术运算符,包括+ - * / %五个二元运算符,和一元运算符-(负)。其中- * / %和一元的-仅能作用于Number类型。+不仅能用于Number类型,还可以用于String的相加,或者字符串与其他对象的相加。并规定,任何类型与String相加,结果为String。
逻辑运算符:支持的逻辑运算符包括一元否定运算符!、逻辑与的&&、逻辑或的||。逻辑运算符的操作数只能为Boolean。&&和||都执行短路规则。
关系运算符: 支持的关系运算符包括<、<=、 >、 >=以及==和!= 。
关系运算符可以作用于Number之间、String之间、Pattern之间、Boolean之间、变量之间以及其他类型与nil之间的关系比较,不同类型除了nil之外不能相互比较。
位运算符: 支持所有的 Java 位运算符,包括&、 |、^、 ~、 >>、<<、>>>。
匹配运算符:匹配运算符=~用于String和Pattern的匹配,它的左操作数必须为String,右操作数必须为Pattern。 匹配成功后,Pattern的分组将存于变量$num,num为分组索引。
三元运算符:虽然没有提供if else语句,但是提供了三元运算符?:,形式为bool ? exp1: exp2。 其中bool必须为Boolean类型的表达式,而exp1和exp2可以为任何合法的表达式,并且不要求exp1和exp2返回的结果类型一致。
支持如下数据类型:
Number类型: 数字类型,支持四种类型,分别是long、double、java.math.BigInteger(简称 big int)和java.math.BigDecimal(简 称 decimal),规则如下:
任何以大写字母 N 结尾的整数都被认为是 big int
任何以大写字母 M 结尾的数字都被认为是 decimal
其他的任何整数都将被转换为 Long
其他任何浮点数都将被转换为 Double
超过 long 范围的整数字面量都将自动转换为 big int 类型
其中 big int 和 decimal 是 2.3.0 版本开始引入的。数字还支持十六进制(以0x或者0X开头的数字), 以及科学计数法,如1e-3等。 不支持其他进制。
String类型: 字符串类型,单引号或者双引号括起来的文本串,如'hello world', 变量如果传入的是String或者Character也将转为String类型
Bool类型: 常量true和false,表示真值和假值,与 java 的Boolean.TRUE和Boolean.False对应
Pattern类型: 正则表达式,以//括起来的字符串,如/\d+/,内部 实现为java.util.Pattern
变量类型: 与 Java 的变量命名规则相同,变量的值由用户传入nil类型: 常量nil,类似 java 中的null,但是nil比较特殊,nil不仅可以参与==、!=的比较, 也可以参与>、>=、<、<=的比较,Aviator 规定任何类型都大于nil除了nil本身,nil==nil返回true。 用户传入的变量值如果为null,那么也将作为nil处理,nil打印为null
内置如下函数:
函数名称 |
说明 |
sysdate() |
返回当前日期对象 java.util.Date |
rand() |
返回一个介于 0-1 的随机数,double 类型 |
print([out],obj) |
打印对象,如果指定 out,向 out 打印, 否则输出到控制台 |
println([out],obj) |
与 print 类似,但是在输出后换行 |
now() |
返回 System.currentTimeMillis |
long(v) |
将值的类型转为 long |
double(v) |
将值的类型转为 double |
str(v) |
将值的类型转为 string |
date_to_string(date,format) |
将 Date 对象转化化特定格式的字符串,2.1.1 新增 |
string_to_date(source,format) |
将特定格式的字符串转化为 Date 对 象,2.1.1 新增 |
string.contains(s1,s2) |
判断 s1 是否包含 s2,返回 Boolean |
string.length(s) |
求字符串长度,返回 Long |
string.startsWith(s1,s2) |
s1 是否以 s2 开始,返回 Boolean |
string.endsWith(s1,s2) |
s1 是否以 s2 结尾,返回 Boolean |
string.substring(s,begin[,end]) |
截取字符串 s,从 begin 到 end,如果忽略 end 的话,将从 begin 到结尾,与 java.util.String.substring 一样。 |
string.indexOf(s1,s2) |
java 中的 s1.indexOf(s2),求 s2 在 s1 中 的起始索引位置,如果不存在为-1 |
string.split(target,regex,[limit]) |
Java 里的 String.split 方法一致,2.1.1 新增函数 |
string.join(seq,seperator) |
将集合 seq 里的元素以 seperator 为间隔 连接起来形成字符串,2.1.1 新增函数 |
string.replace_first(s,regex,replacement) |
Java 里的 String.replaceFirst 方法, 2.1.1 新增 |
string.replace_all(s,regex,replacement) |
Java 里的 String.replaceAll 方法 , 2.1.1 新增 |
math.abs(d) |
求 d 的绝对值 |
math.sqrt(d) |
求 d 的平方根 |
math.pow(d1,d2) |
求 d1 的 d2 次方 |
math.log(d) |
求 d 的自然对数 |
math.log10(d) |
求 d 以 10 为底的对数 |
math.sin(d) |
正弦函数 |
math.cos(d) |
余弦函数 |
math.tan(d) |
正切函数 |
map(seq,fun) |
将函数 fun 作用到集合 seq 每个元素上, 返回新元素组成的集合 |
filter(seq,predicate) |
将谓词 predicate 作用在集合的每个元素 上,返回谓词为 true 的元素组成的集合 |
count(seq) |
返回集合大小 |
include(seq,element) |
判断 element 是否在集合 seq 中,返回 boolean 值 |
sort(seq) |
排序集合,仅对数组和 List 有效,返回排 序后的新集合 |
reduce(seq,fun,init) |
fun 接收两个参数,第一个是集合元素, 第二个是累积的函数,本函数用于将 fun 作用在集合每个元素和初始值上面,返回 最终的 init 值 |
seq.eq(value) |
返回一个谓词,用来判断传入的参数是否跟 value 相等,用于 filter 函数,如filter(seq,seq.eq(3)) 过滤返回等于3 的元素组成的集合 |
seq.neq(value) |
与 seq.eq 类似,返回判断不等于的谓词 |
seq.gt(value) |
返回判断大于 value 的谓词 |
seq.ge(value) |
返回判断大于等于 value 的谓词 |
seq.lt(value) |
返回判断小于 value 的谓词 |
seq.le(value) |
返回判断小于等于 value 的谓词 |
seq.nil() |
返回判断是否为 nil 的谓词 |
seq.exists() |
返回判断不为 nil 的谓词 |
- 组织参与者:根据指定组织求解参与者。
- 包含子组织:递归查找所有的下一级机构组织。选择”包含”,则获取处理人时会获取到该部门下的用户以及该部门下的子组织及其用户。
- 基准组织层级:当选定包含子组织为是时,用来定义截取到哪个子组织层级。当前所配置组织的下一级组织为第一层级,下下一级组织为第二层级,以此类推。
基准组织类型、批次、逻辑关系以及规则条件同角色参与者
- 用户参与者:根据指定用户求解参与者。
指定参与用户,常见于某些流程步骤需要固定几位领导审批的流程中。
批次、逻辑关系以及规则条件同角色参与者
- 流程实例参与者:根据流程创建人或当前处理人求解参与者。
当参与组织为“创建人”时,求解出的处理人为该流程实例发起人;当参与组织为“当前用户”时,求解出的处理人为该流程实例当前任务节点用户。
批次、逻辑关系以及规则条件同角色参与者
- 流程节点参与者:根据运行过的流程节点处理人求解参与者。
1)流程节点:可选择历史节点处理人来作为当前节点处理人。
2)参与者模式:当选取的节点有多个批次时,参与者模式就可派上用场了。
全部:处理人为所选历史流程节点步骤的所有参与者;
最后一批:处理人为所选流程节点最后一批的参与者用户;
最后一个:处理人为所选流程节点最后一批中顺序排最后一个的参与者用户;
第一批:处理人为所选流程节点第一批的参与者用户;
第一个:处理人为所选流程节点第一批中的顺序排第一个的参与者用户。
批次、逻辑关系以及规则条件同角色参与者
- Json参数参与者:根据自定义参数名动态求解Json格式的参与者。
当后续处理审批人不确定时,可以通过传递json参数来动态选择参与者,注意传参时是传json数组,如下:
自定义参数的格式为:
[{
"loginId": "user1"
}, {
"loginId": "user2"
}]
批次、逻辑关系以及规则条件同角色参与者