使用 Groovy 规则向 FCCS_YTD 成员输入数据的原型

要在 Financial Consolidation and Close 表单中输入和显示年初至今 (YTD) 数据,可以使用以下方法之一:

要创建直接向 FCCS_YTD 成员输入数据的 Groovy 规则:

  1. 在 Calculation Manager 中添加名为 "PreFormLoad" 的按需规则。

  2. 将该按需规则的脚本类型更改为“Groovy 脚本”。

  3. 将以下代码添加到 "PreFormLoad" 规则中:

    operation.grid.dataCellIterator("FCCS_YTD").each { DataCell cell -> if (!cell.crossDimCell("FCCS_YTD_Input") && cell.isReadOnly())cell.forceEditable=true}
  4. 保存和验证 "PreFormLoad" 规则。

  5. 为 "PreFormLoad" 规则提供默认的运行时提示值,如下所示:

    • 合并:"Entity Input"

    • 货币:"Entity Currency"

    • 实体:"FCCS_Global Assumptions"

    • 期间:"Jul"

    • 方案:"Actual"

    • 年份:"FY19"

  6. 对于 "PreFormLoad" 规则的所有六个运行时提示,选中隐藏用作覆盖值选项。

  7. 保存、验证和部署 "PreFormLoad" 规则。

  8. 在 Calculation Manager 中添加名为 "PreFormSave" 的按需规则。

  9. 将该按需规则的脚本类型更改为“Groovy 脚本”。

  10. 将以下代码添加到 "PreFormSave" 规则中:

    def app = operation.application
    Cube cube = operation.cube
    Member ytdInputMember =
    app.getDimension(DimensionType.VERSION).getMember("FCCS_YTD_Input")
    Collection<DataCell> pendingYtdCells =
    operation.grid.dataCellIterator("FCCS_YTD").findAll {DataCell ytd -> if (ytd.edited) {
    def ytdInput = ytd.crossDimCell(ytdInputMember.name)
    ytdInput?.formattedValue = ytd.formattedValue
    ytd.setEdited(false)
    return ytdInput == null
    }
    }
    if (pendingYtdCells) {
    DataGridBuilder builder = cube.dataGridBuilder("MM/DD/YYYY")
    Set<String> allDimNames = set(app.getDimensions(cube)*.name)
    List<String> rowDimNames = set((allDimNames -
    operation.grid.pov*.dimName) - [ytdInputMember.dimension.name]) as List
    builder.addPov(operation.grid.pov.findAll({it.dimName !=
    ytdInputMember.dimension.name})*.uniqueMbrName as String[])
    builder.addColumn(ytdInputMember.name)
    pendingYtdCells.each {DataCell cell ->
    builder.addRow(rowDimNames.collect
    {cell.getMemberName(it, MemberNameType.UNIQUE_NAME)},
    [cell.formattedValue])}
    DataGridBuilder.Status status = new DataGridBuilder.Status()
    builder.build(status).withCloseable {grid -> cube.saveGrid(grid)}
    }
    Set<String> set(Collection<String> names) {
    Set<String> set = new TreeSet<>(String.CASE_INSENSITIVE_ORDER)
    set.addAll(names)
    return set
    }
    
  11. 保存和验证 "PreFormSave" 规则。

  12. 为 "PreFormSave" 规则提供默认的运行时提示值,如下所示:

    • 合并:"Entity Input"

    • 货币:"Entity Currency"

    • 实体:"FCCS_Global Assumptions"

    • 期间:"Jul"

    • 方案:"Actual"

    • 年份:"FY19"

  13. 对于 "PreFormSave" 规则的所有六个运行时提示,选中隐藏用作覆盖值选项。

  14. 保存、验证和部署 "PreFormSave" 规则。

  15. 添加一个名为 "YTD_Test_1" 的表单,行上有 "FCCS_Periodic" 和 "FCCS_YTD",如下所示:

    示例 YTD 表单


    示例 YTD 表单
  16. 单击业务规则选项卡,并将 "Consol – Rule – PreFormSave" 和 "Consol – Rule – PreFormLoad" 移到右侧。对于 "Consol – Rule – PreFormSave" 规则选中保存前运行,对于 "Consol – Run – PreFormLoad" 规则选中加载后运行。屏幕应显示如下内容:

    示例业务规则


    示例业务规则
  17. 保存并单击完成

    注意:这些步骤会将 "Actual"/ "FY19" "Jul" "FCCS_Global Assumptions" 数据标记为“已更改”。请确保处理单元已启动并处于“未锁定”状态。这仅适用于此原型。实际实施时将没有这些限制。

  18. 打开 "YTD_Test_1 form" 并为 FCCS_YTD 添加值,如下所示:

    示例 YTD 值


    示例 YTD 值
  19. 保存表单。将使用相应的周期性值填充 FCCS_Periodic,如下所示:

    已填充的示例 YTD 表单


    已填充的示例 YTD 表单