简介
本教程演示如何实施 Groovy 脚本以使用数据网格和数据网格迭代器。可以使用条件逻辑设置数据网格中的背景颜色、实施性能基准并设置网格中的默认数据值。
背景信息
通过数据网格界面,可以访问 POV/行/列标题单元格,并提供各种迭代器来迭代数据单元格。
先决条件
Cloud EPM 实操教程可能需要您将快照导入 Cloud EPM Enterprise Service 实例。在导入教程快照之前,必须请求另一个 Cloud EPM Enterprise Service 实例或删除当前应用程序和业务流程。教程快照不会通过现有应用程序或业务流程导入,也不会自动替换或恢复您当前使用的应用程序或业务流程。
在开始本教程之前,您必须:
- 具有服务管理员对 Cloud EPM Enterprise Service 实例的访问权限。
- 将此快照上载并导入到 Planning 实例中。
注意:
如果导入快照时遇到迁移错误,请重新运行迁移(不包括 HSS-Shared Services 组件),以及核心组件中的“安全性”和“用户首选项”对象。有关上载和导入快照的更多信息,请参阅 Administering Migration for Oracle Enterprise Performance Management Cloud 文档。提示:
本教程所需的脚本作为每个部分中的文本文件链接。使用条件逻辑设置背景颜色
在本节中,您将实施 Groovy 脚本,将数据值为 #MISSING 的单元的背景颜色设置为 █ (0x00BFFF) 颜色,将数据值小于或等于 50000 的单元设置为 █ (0xFF8C00) 颜色,将数据值大于 50000 的单元设置为 █ (0x00FA9A) 颜色。
注意:
在定义 Groovy 脚本之后,它可以与任何表单关联,这与需要在每个表单的上下文中定义的“数据验证”规则不同。- 打开 Calculation Manager,并在 Plan1 多维数据集中创建名为 Groovy Set Background Color 的规则。
- 在规则编辑器中,将设计器选项更改为编辑脚本,并将脚本类型设置为 Groovy 脚本。
- 复制此脚本并将其粘贴到编辑器中:
- 在工具栏上,单击
(保存)以保存脚本,然后单击
(验证和部署)以验证和部署脚本。出现提示时,单击 OK 。关闭 Calculation Manager。
- 从导航器中,打开表单管理器,然后选择 EmployeeDriverForm 表单。
- 编辑表单并将规则 Groovy Set Background Color 关联为加载后运行。保存表单并关闭“Form Manager(表单管理器)”窗口。
- 从导航器或主页中,单击数据。打开 EmployeeDriverForm 表单并验证脚本是否按设计突出显示单元格。


operation.grid.dataCellIterator.each {if(it.missing) {
it.bgColor = 0x00BFFF
} else if(it.data <= 50000)
it.bgColor = 0xFF8C00
else if(it.data > 50000) it.bgColor = 0x00FA9A
}
该脚本将迭代当前数据网格
operation.grid
中由 dataCellIterator
返回的每个数据单元格。
隐式 "it" 变量指要迭代的当前项。在这种情况下,“it” 变量引用 dataCellIterator
返回的当前数据单元。
提示:
还可以使用显式命名的变量,如 "cell" ,如下例所示:operation.grid.dataCellIterator.each { cell -> if(cell.missing) { cell.bgColor = 0x00BFFF } }
对于当前数据单元格,脚本将检查缺少的值。
注意:
请注意,对于 #MISSING 或零的单元格,cell.data
返回 0(零)。要检查 #MISSING 的单元格而不是零,可以使用 cell.missing
属性。要检查单元格中的零值而不是 #MISSING,可以使用条件,例如 cell.data == 0 && !cell.missing
。 如果为 TRUE,脚本会将单元格的背景颜色设置为
0x00BFFF
( █ )
该脚本将检查数据值是否小于或等于 50000。
如果为 TRUE,脚本会将单元格的背景颜色设置为
0xFF8C00
( █ )
如果单元格的数据值大于 50000,则脚本会将单元格的背景颜色设置为
0x00FA9A ( █ )




分析和调试脚本
在本部分中,将学习如何使用 DataGrid 接口提供的迭代器、分析代码以及向作业控制台添加调试语句。
- 打开 Calculation Manager,并在 Plan1 多维数据集中创建名为 Groovy Iterator Performance 的规则。
- 在规则编辑器中,将设计器选项更改为编辑脚本,并将脚本类型设置为 Groovy 脚本。
- 复制此脚本并将其粘贴到编辑器中:
- 在工具栏上,单击
(保存)以保存脚本,然后单击
(验证和部署)以验证和部署脚本。出现提示时,单击 OK 。关闭 Calculation Manager。
- 从导航器中,打开表单管理器,然后选择 EmployeeDriverForm 表单。
- 编辑表单并将规则 Groovy Iterator Performance 关联为保存后运行。保存表单并关闭“Form Manager(表单管理器)”窗口。
- 从导航器或主页中,单击数据。打开 EmployeeDriverForm 表单,将 1 级的最低薪金更改为 35000 ,将 2 级的最低奖金更改为 2000 。
- 保存并关闭该表单。导航到 "Jobs"(作业)控制台。
- 单击 Groovy Iterator Performance 以显示作业详细信息。单击已完成状态可查看 Groovy 脚本打印的日志消息。


def benchmark(GridIterator itr) {def start = currentTimeMillis()
itr.each { println "$it.memberNames, cell data: $it.data, $it.formattedValue" }
def elapsed = currentTimeMillis() - start println "\nTime taken by iterator: $elapsed"
} println "Iterate over all data cells in this data grid...\n"
benchmark operation.grid.dataCellIterator()
println "Iterate over edited data cells in this data grid...\n" benchmark operation.grid.dataCellIterator({DataCell cell -> cell.edited})
println "Iterate over Min Salary and Min Bonus data cells in this data grid...\n" benchmark operation.grid.dataCellIterator('Min Salary', 'Min Bonus')
![]()
定义一个名为
benchmark()
的实用程序方法,该方法使用指定的 GridIterator
迭代其单元格,并输出单元格表示的所有维的成员名称列表及其数据。它还会输出迭代程序花费的时间。
启动计时器。
使用指定的
GridIterator
对每个单元格进行迭代,并输出单元格表示的所有维的成员名称列表及其数据值和格式化值。$it.data
返回单元格的数字值,$it.formattedValue
返回用户输入的非数字值,如文本、智能列表或日期。
将迭代程序花费的时间输出到作业控制台。
将调试消息记录到作业控制台。
使用迭代器调用
benchmark()
方法以迭代当前数据网格中的每个单元格。
使用迭代器调用 benchmark() 方法,以迭代当前数据网格中已编辑的单元格。
提示:
此迭代器可与 DataCell 对象上返回布尔值的任何属性一起使用,例如 lock、miss、valid、readOnly、validIntersection 等。 使用迭代器调用
benchmark()
方法,以迭代当前数据网格中的最小薪金和最小奖金数据单元格。





第一个迭代程序打印所有单元格和数据值,第二个迭代程序仅打印已编辑的两个单元格,第三个迭代程序仅打印“最低薪金”和“最低奖金”列的单元格。
设置默认数据值
在此部分中,将学习如何使用 DataGridBuilder
界面在网格中设置默认数据值。
- 打开 Calculation Manager,并在 Plan1 多维数据集中创建名为 Groovy Reset Grade Data 的规则。
- 在规则编辑器中,将设计器选项更改为编辑脚本,并将脚本类型设置为 Groovy 脚本。
- 复制此脚本并将其粘贴到编辑器中:
Cube cube = operation.application.getCube("Plan1")
DataGridBuilder builder = cube.getDataGridBuilder("MM/DD/YYYY")
builder.addPov('FY16', 'Current', 'USD', 'BegBalance', 'BU Version_1', 'No Entity')
builder.addColumn('Min Salary', 'Max Salary', 'Min Bonus', 'Max Bonus') builder.addRow(['Grade 1'], [30000, 50000, '#missing', '#missing']) builder.addRow(['Grade 2'], [40000, 60000, '#missing', 5000]) builder.addRow(['Grade 3'], [70000, 90000, '#missing', 10000]) DataGridBuilder.Status status = new DataGridBuilder.Status()
builder.build(status).withCloseable { DataGrid grid ->
println("Total number of cells accepted: $status.numAcceptedCells")
println("Total number of cells rejected: $status.numRejectedCells") println("First 100 rejected cells: $status.cellsRejected") cube.saveGrid(grid)
}
- 在工具栏上,单击
(保存)以保存脚本,然后单击
(验证和部署)以验证和部署脚本。出现提示时,单击 OK 。关闭 Calculation Manager。
- 在导航器中,打开表单管理器,并将规则“Groovy 重置薪资级别数据”与 EmployeeDriverForm 表单关联。保存表单并关闭“表单管理器”窗口。
- 在 Planning 主页上,单击数据。打开 EmployeeDriverForm 表单,单击操作,然后从下拉菜单中选择业务规则。单击 Groovy Reset Grade Data 以运行规则。
- 规则成功运行后,单击“信息”对话框中的确定并验证网格数据是否已重置。
- 关闭表单并导航以打开作业控制台。
- 单击 Groovy Reset Grade Data 可显示作业详细信息。单击已完成状态可查看已接受和/或已拒绝的单元格数的详细信息。
为计划 1 多维数据集构建多维数据集对象。
获取多维数据集的 DataGridBuilder;定义脚本提供日期值的格式。
注意:
DataGridBuilder 还支持代表系统用户保存数据,方法是接受ExecuteAsUser
作为第二个参数。将数据另存为系统用户允许在不应用当前用户安全性的情况下保存数据。ExecuteAsUser
的有效值为 CURRENT_USER
(默认值)和 SYSTEM_USER
,如下例所示:DataGridBuider builder = cube.dataGridBuilder("MM/DD/YYYY", SYSTEM_USER)
通过添加 POV 成员、列成员和具有数据值的行来构建数据网格。
为在下一步中创建的 DataGrid 对象构建状态对象。
使用 withCloseable 构造构建 DataGrid 对象。当代码块完成执行时,该构造将关闭 DataGrid 对象。这对于确保在完成操作后规则不会使 DataGrid 对象在内存中保持打开状态非常重要。
将构建器接受或拒绝的单元数输出到作业控制台。将拒绝任何只读单元格。
保存数据网格。
网格将自动关闭。





下一个教程
相关链接
更多学习资源
通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 Oracle University 查看可用的培训资源。
有关产品文档,请访问 Oracle 帮助中心。