3.6概述Groovy脚本语言支持
Groovy是一种脚本语言,Java平台类似Java语法。ADF业务组件的Groovy语言表达不同的Java代码中可以使用的业务组件自定义Java类。Groovy脚本语言简化了编写代码,采用点分隔的符号,但仍然支持语法操纵集合,字符串,和JavaBeans。Groovy表达式,类型检查是在运行时完成,而在Java中,类型检查是在编译时完成。此外,由于动态编译的Groovy表达式,它们存储在XML定义文件,在你使用它的业务组件。
ADF业务组件支持地方访问实体对象,查看对象属性是有用的,包括属性验证器(实体对象),属性的默认值(对于任何一个实体对象或视图对象),瞬态属性值中使用Groovy脚本语言计算(无论是实体对象或视图对象),绑定变量的默认值(在视图对象的查询报表和视图的标准过滤器),和错误的消息(在实体对象验证规则)的占位符。此外,ADF业务组件提供了一组有限的内置关键字,可以用来在Groovy表达式。
具体来说,ADF业务组件框架支持的使用Groovy语言表达的,执行以下任务:
在JDeveloper中要执行这些任务,您可以使用特定任务的表达式编辑器对话框。例如,当您要创建一个短暂的视图对象属性的默认值,则使用属性的编辑表达式编辑器“对话框中输入一个表达式,确定一个运行时的属性值。相同的对话框,也可以让你指定的值时,应计算(称为重新计算条件),如图3-9所示。
图3-9对话框编辑缺省属性值的表达式
此外,概述编辑器,你用它来 编辑实体对象和视图对象显示业务规则“页面,在这里你可以查看和编辑所有表达式由一个单一的业务组件使用。例如,业务规则页面显示视图对象可以让你查看所有表达式视图对象上使用其视图的访问,绑定变量,和属性。您可以过滤显示只显示这些项目的Groovy表达式定义,如图3-10所示。尽管表达式不能在设计时验证,所有表达式编辑器让您测试表达式语法之前,您将它保存。
图3-10概述编辑业务规则“页面上显示的所有表达式使用的业务组件
Groovy语言的更多信息,请参阅下列网站:
3.6.1引用业务组件对象在Groovy表达式
有一个名为ADF顶层对象使您可以访问的对象,该框架提供Groovy脚本。当你引用的Oracle ADF对象在Groovy的表达,在Oracle ADF运行时返回包装对象,不符合实际的具体类型的类。这些包装对象支持所有的方法和字段类型的包装对象。你的表达式可以使用包装的对象,好像他们是实际的对象。但是,请注意,任何尝试投打包,对象,其具体类型将失败与时抛出。在一般情况下,当工作与Groovy语言,它是没有必要使用显式转换,这些包裹ADF业务组件对象的情况下,这样做会导致异常。
访问Oracle ADF的对象包括以下内容:
adf.context -引用ADFContext对象
adf.object -引用对象,在该对象上的表达(也可以使用关键字对象引用,没有ADF前缀)被应用。其他访问成员的名字来从Groovy脚本应用的上下文中。
实体对象的属性:上下文是一个实体实现类的实例。你可以通过这个对象引用自定义的自定义实体的实现类,基实现类中定义的任何方法的的JavaDoc EntityImpl的指定方法,你可以参考实体实例的属性。
实体对象脚本验证规则:上下文校验器对象(JboValidatorContext)的合并与实体验证器应用。在这种情况下,您可以使用关键字的详细信息,请参阅第3.6.2.1节,“引用相同的业务组件的成员。”
查看对象的属性:上下文视图行实现类的一个实例。通过这个对象,可以自定义视图行实现类,基实现类中定义的任何方法的的JavaDocViewRowImpl的指定引用自定义的方法,你可以参考属性所定义的查询行的行实例设置。
绑定变量视图对象:上下文变量对象本身不是视图的行。您可以参考的的属性访问structureDef其他信息,以及ViewObject表现属性访问视图绑定变量参与的对象,其中。然而,进入查看对象的属性不支持。
绑定变量,在视图的访问上下文是当前视图的行。使用绑定变量的视图访问创建级联值列表(LOV)。视图访问Groovy的驱动值,从目前来看排用来制定有效选项的列表视图访问视图对象。
瞬态属性:上下文是当前实体或视图的行。该实体或视图的行上,你可以参考属性名称属性出现在实体或视图的行,以及公共方法。要对当前对象的访问方法,则必须使用对象关键字来引用当前对象(例如,object.methodName() )。相当于这个关键字在Java 对象关键字。如果没有它,在短暂的表达式中,该方法将被假定为存在对动态编译的的Groovy脚本对象本身。
adf.error -验证规则,要访问的错误处理程序,允许验证表达式生成异常或警告
adf.userSession -返回一个引用ADF业务组件用户会话(userData的 HashMap的是会话的一部分,您可以使用参考值)
您也可以参考当前日期时间截断或使用下列表达式的当前日期和时间:
adf.currentDate
adf.currentDateTime
3.6.2引用自定义业务组件的方法和属性在Groovy表达式
Groovy脚本语言,简化了编写代码,你可能写访问你的实体对象和视图对象的方法和属性。
3.6.2.1引用的成员相同的业务组件
引用的业务构件,包括实体对象和视图对象定义的方法和属性,最简单的例子是引用存在于同一个实体对象的属性,或查看对象的属性,你应用的表达。
例如,你可以定义一个Groovy表达式来计算一个瞬态属性AnnualSalary的价值实体对象与属性萨尔指定雇员的月薪:
萨尔* 12
或者,用Groovy你可以写一个简单的验证规则的属性比较单一视图对象,使用类似的语法:
PromotionDate> HIREDATE
相同的比较使用Java中,这看起来像这样:
((日期)的getAttribute(“PromotionDate”))的compareTo(日期的getAttribute(的“HIREDATE”))> 0
需要注意的是当前对象,通过这个对象的脚本,所以你可以通过简单地使用属性名引用当前对象中的属性。例如,在属性级别或实体级脚本表达式验证器,请参阅一个属性名为“HIREDATE”,该脚本可以简单地引用雇用日期。
引用属性类似,当你定义在一个实体中实现类的自定义方法,你可以调用这些方法,你的表情的一部分。例如,要定义一个属性的默认值:
(adf.object.getDefaultSalaryForGrade)
一种方法参考需要前 缀adf.object的,它允许你引用同一个实体定义的属性表达。此相同的前缀,也可以让您引用 实体实现类(EntityImpl.java),您的自定义实现类扩展的基类的方法。
请注意,当你想在验证规则的一个实体实现类的引用的方法,您可以使用源前缀:
(source.getDefaultSalaryForGrade)
源前缀的使用是必要的验证器,因为对象关键字意味着验证规则的对象,而不是实体对象(定义方法)。
为了让您能够引用的验证对象(JboValidatorContext“ )的成员,你可以使用这些关键字,您的验证规则表达式:
NEWVALUE:在属性级别的验证,访问属性值被设置
OLDVALUE:在属性级别的验证,访问被设置的属性的当前值
例如,您可以使用下面的表达式指定一个动态的验证规则检查一个推销员的工资。
(招聘==“推销员”) { 返回NEWVALUE
3.6.2.2其他业务组件引用成员
您也可以参考实体对象和视图对象的方法和属性,表达您适用于不同的实体对象的属性或验证规则定义。这是通过引用访问器中的实体关联。
例如,如果你定义一个实体的主部和EMP细节协会,默认情况下,实体关联的存取将被命名为部和EMP,源和目标数据源的身份。一个Groovy表达式中使用,存取新员工的工资根据各自部门的位置上设置默认值:
adf.object.getDefaultSalaryForGrade(Dept.Loc)
这个表达式不引用的实体,即使它有相同的名称(系)为协会的存取。相反,假设一个部门和雇员之间的主从关系,引用存取允许为员工实体对象的Groovy表达式往回走主部门实体,并通过从该主的价值禄。
3.6.3操作业务组件属性值在Groovy表达式
您可以使用下面的内置聚合函数Oracle商务组件的RowSet对象:
rowSetAttr总和(GroovyExpr)
rowSetAttr数(GroovyExpr)
rowSetAttr平均(GroovyExpr)
rowSetAttr分钟(GroovyExpr)
rowSetAttr最大(GroovyExpr)
这些聚集函数接受一个字符串值设置为计算的总的行中的每一行的背景下,一个Groovy表达式,该表达式被解释为参数。该的Groovy表达式必须返回一个数值(或数域)。
例如,在一个部门实体对象,你可以添加一个短暂的属性,显示所有雇员工资的总和,通过以下公式计算:
EmployeesInDept.sum(“萨尔”)
要引用一个特定部门的员工,表达提供主从关联的存取目的地EMP实体的名称。在这种情况下,访问者是EmployeesInDept的工资被解释为每个记录EMP实体对象。
或者,假设您想要具体部门,包括每个员工的福利待遇,随工作角色的工资总额计算:
EmployeesInDept.sum(“萨尔+ adf.object.getBenefitsValue(工作)”)