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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |