3公式定义器练习.docx
《3公式定义器练习.docx》由会员分享,可在线阅读,更多相关《3公式定义器练习.docx(12页珍藏版)》请在冰豆网上搜索。
![3公式定义器练习.docx](https://file1.bdocx.com/fileroot1/2023-6/3/26b23544-eeed-4f56-9a02-6efc9131f80a/26b23544-eeed-4f56-9a02-6efc9131f80a1.gif)
3公式定义器练习
公式定义器扩展
用于何处?
公式定义器主要用于自定义表单控件的初始值,审批节点的审批人,自动分支的条件表达式等地方。
公式定义器的构成
公式的特点:
1、具有运行上下文。
简单地说,就是变量,参与计算的数据。
如:
“$报销金额$”。
2、通过一些逻辑运算符,进行一系列的运算。
对于相对复杂的运算,引入了函数的概念,方便了公式的编写,如:
“$时间.获取时间差$($结束时间$,$开始时间$)”。
3、最终会返回一个结果。
结合下图的公式定义器界面,可以更好地帮助您了解公式定义器。
变量:
变量是参与公式计算的数据。
在审批流程模块中,变量可以来自系统预定义的字段,如:
标题、创建时间、创建人等;还可以来自自定义表单的字段,如:
报销金额、开始时间、结束时间等。
在公式定义器中引用的格式为:
“$变量名$”,如:
“$报销金额$”。
变量可以在公式定义的左边树变量列表中直接选择引用。
逻辑运算符:
温馨提醒:
公式定义器中的逻辑运算符完全符合Java的语法,若您对Java语法了如指掌,请忽略下面这张表。
分类
符号
说明
数学运算符号
+(加)
-(减,或负)
*(乘)
/(除)
%(取模,即余数,如11%10=1)
使用除号需要小心,若参与运算的都是整数,则返回的结果会自动取整,如:
11/10=1,为了避免该现象,可以将上面的公式改写一下:
11.0/10=1.1
逻辑判断符
>(大于)
<(小于)
>=(大于或等于)
<=(小于或等于)
==(等于)
!
=(不等于)
!
(非)
注意:
这几个函数都用于数字类型的判断,对象类型的判断不能使用(字符串属于对象类型),详见“对象相等”
对象相等
equals(等于)
样例:
”a”.equals(“a”),返回真
常用表达式
true
真
false
假
return
终止后面运算,直接返回值,如returntrue;
逻辑表达式?
值1:
值2
若逻辑表达式成立,则返回值1,否则返回值2
if(逻辑表达式){
}else{
}
如果……
否则……
函数:
函数是系统预定义好的一些逻辑算法,每个函数包含若干个输入参数(某些函数可能没有输入参数)和一个返回值。
函数的格式:
$函数名$(参数1,参数2,……)。
函数可以通过左边树的函数列表进行选择,鼠标放在左边树的函数的时候,会显示该函数的帮助信息。
公式定义器的类型
公式定义器里面的所有变量都有数据类型,函数中的输入输出也有数据类型,公式定义的返回结果也有数据类型。
如何确认一个变量的数据类型?
比如在审批流程模块中,变量可能来自系统预定义的字段,也可能来自表单自定义的字段。
系统预定义的字段来自系统的数据字典(这点开发人员应该非常清楚),在此我就不多加描述。
自定义表单的字段类型如何确定呢?
自定义表单元素
类型确定
单行输入框
由该控件的“数据类型”属性确定是字符型还是数字型。
多行输入框
字符型
单选按钮
由该控件的“数据类型”属性确定是字符型还是数字型。
多选按钮
字符型,多值用;分隔
下拉菜单
由该控件的“数据类型”属性确定是字符型还是数字型。
富文本框
字符型
附件
不参与任何公式计算
地址本选择框
组织架构对象类型(SysOrgElement)
日期选择框
日期时间型(Date)
隐藏字段
由该控件的“数据类型”属性确定是字符型、数字型、日期型。
如何确认函数的参数类型和返回值类型?
当鼠标放在左边树的每个函数节点时,都会提示该函数的简单介绍,信息包括:
您该输入什么样的参数,将输出什么样的值。
如何确认公式返回结果类型?
要确认公式返回结果类型,需要从使用公式的场景来理解。
下面举几个场景:
1、流程定义中的条件分支:
显然这里应该返回true/false。
2、流程定义中,采用公式定义器来定义处理人:
返回值类型为组织架构对象(或组织架构对象列表)。
3、表单自定义中某个字段的初始值:
可以根据该字段的类型确定公式应该返回什么类型的数据。
返回结果类型的自动转换
公式定义器会自动将返回的结果转换成合适的类型。
期望返回类型
可自动转换的类型
字符
所有类型
日期/时间/日期时间
整数:
1970-01-0100:
00:
00GMT等于0,往后1毫秒的时间加1。
字符:
格式为1970-01-0100:
00
数字
字符
布尔(true/false)
字符:
true/false/t/f/yes/no/y/n/1/0
数字:
1/0
组织架构等model
字符:
以该字符作为ID的对象
另外,公式定义器还能将列表自动转换成单值,或将单值自动转换成列表。
常见的问题
校验失败?
由于公式定义器的语法过于灵活,所以公式定义器的校验方法中,只能简单模拟数据进行校验,所以无法完全校验公式是否可以正常运行。
所以,当您写一些比较复杂的公式的时候,公式定义器可能会提示:
“表达式校验未通过!
原因可能是由于表达式编写错误,或者校验器无法模拟真实数据导致。
是否仍使用该公式?
”当出现该提示的时候,若您确认公式的书写是正确的,可以忽略该提示信息。
常见误区:
字符串相等
在编写公式的时候,经常会用到字符串的比较,比如我们需要判断一个城市的字段值是否为深圳,那我们很自然地会将公式写成:
$城市$==”深圳”
很抱歉,上面的语法是无法得到您期望的结果。
正确的写法是:
”深圳”.equals($城市$)
公式解释器中,将字符串看成了是一个对象,这个对象的相等只能采用equals符号。
空指针错误?
字符串、日期、组织架构等都是对象类型,我们可以通过“对象1.equals(对象2)”的方式来比较两个对象是否相等,也可以访问对象的属性/方法,但若这个对象可能没有被赋值,那当访问的时候就会出空指针的错误,所以在使用公式的时候,请尽量保证使用的变量是必填项,避免空指针错误。
解决空指针的方法见“在公式定义器中使用脚本语言”小节。
表单控件初始化值
我们把自定义表单里面的薪资的控件值初始化为一个不大于10000的随机整数。
步骤一:
点击公式定义的按钮
步骤二:
编写逻辑代码
importjava.util.Random;
Randomr=newRandom();
returnr.nextInt(10000);
分支条件表达式
我们根据薪资的数额来决定是否需要老总审批,比如薪资大于8000的要老总来审批,小于等于8000的就不需要。
步骤一:
画出流程图
步骤二:
编写条件表达式
节点处理人
公式定义器里面已经内置了一些函数,我们可以在流程,自定义表单中使用它。
比如我们把经理审批节点设置为提交人的直线领导。
步骤一:
配置节点处理人
步骤二:
调用组织架构的方法
声明机器人节点service类,具体样例如下所示:
$创建者$.getLeader(0);
步骤三:
通过逻辑代码来返回
公式定义器里面允许我们编写逻辑代码。
比如如果创建人没有直线领导,那么我们则固定返回一个人作为审批人。
在公式定义器中直接写逻辑代码,具体实例如下代码所示:
varleader=$创建者$.getLeader(0);
if(leader==null){
leader=$组织架构.根据登录名取用户$("zhangp");
}
returnleader;