加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy在ADF BC中的常见用法之二

发布时间:2020-12-14 16:49:46 所属栏目:大数据 来源:网络整理
导读:开发运行环境:JDeveloper 11.1.2.4 1. 访问其它EO中的Attribute 以Departments和Employees为例,二者是一对多的关系。 现在想在Employees中的AnnualSalary中引用Departments中的locationId。 首先,要看一下Departments和Employees之间的Assocation关系定义
开发运行环境:JDeveloper 11.1.2.4

1. 访问其它EO中的Attribute
以Departments和Employees为例,二者是一对多的关系。
现在想在Employees中的AnnualSalary中引用Departments中的locationId。
首先,要看一下Departments和Employees之间的Assocation关系定义。
可以看到,在Employees中暴露了Departments Accessor。


那么AnnualSalary的Expression可以这样写:adf.object.getDefaultSalaryForGrade(Departments.LocationId)。
方法getDefaultSalaryForGrade(Integer locId)是定义在EmployeeImpl中的自定义方法: ??
public static BigDecimal getDefaultSalaryForGrade(Integer locId) {
? ? System.out.println(" ################### " + locId);
? ? return new BigDecimal(20000);
}
2. 内置的属性:adf.currentDate 和 adf.currentDateTime
比如,你可以为Hiredate定义一个验证规则:
return (newValue < adf.currentDate)
3. 集合功能
<Accessor>.sum(Groovyexpression)
<Accessor>.count(Groovyexpression)
<Accessor>.avg(Groovyexpression)
<Accessor>.min(Groovyexpression)
<Accessor>.max(Groovyexpression)
(1)对于Departments的SalarySum,你可以使用Employees.sum("Salary")来统计该部门员工的工资和。
其中,Employees是Departments中的Accessor,Salary是Employees中的Attribute。
你甚至可以这样写:Employees.sum("Salary + 1000"),为每个员工涨1000元。
因为参数"Salary + 1000"将被首先解析,即获取每一个Employees EO上的Salary,然后加1000。
同样,你也可以在参数中再调用一个方法,比如:Employees.sum("Salary + adf.object.getBenefitsValue(JobId)")。
注意,方法getBenefitsValue是定义在EmployeesImpl中的。
(2)对于Employees的Salary,你可以增加一个验证规则:return newValue > Departments.Employees.min("Salary"),即要求用户的工资必须大于这个部门工资最低的员工工资。
这里,Departments是Employees EO中reference的对象,而Departments.Employees是Deparments EO中reference的对象。
注意,使用这个验证规则时,如果一个部门的员工很多,比如上千名员工,会有性能问题。
4. 更复杂一些的Groovy验证规则
(1)(JobId != "SALESMAN" ? newValue > 100 : newValue > 0)
(2)Employees.sum("CommissionPct != null ??CommissionPct?: 0")
(3)Employees.count("CommissionPct?!= null &&?CommissionPct?> 300 ??CommissionPct?: null")

5. 使用adf.error抛出异常或警告
if (newValue > 1000){
if (newValue > 5000){
adf.error.raise("SALARY_TOO_HIGH_ERROR")
return false
}
adf.error.warn("SALARY_LIMIT_WARNING")
return true
}else{
? ? ? ?return true

Project 下载:ADF_Groovy(2).7z

http://maping930883.blogspot.com/2013/06/adf234groovyadf-bc.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读