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