使用 Groovy 規則向 FCCS_YTD 成員輸入資料的原型

Financial Consolidation and Close 表單中輸入和顯示年初至今 (YTD) 資料時,通常需要在表單設計中包含兩個「檢視」成員:YTD_Input 和 YTD。這種規定會使表單設計變得複雜。以下範例利用 Groovy 指令碼避開上述規定,而且表單中只包含「YTD 檢視」成員,然後 Groovy 指令碼會正確管理輸入資料。使用這種方法可以實現更易於管理的表單設計和顯示。

若要建立 Groovy 規則來直接向 FCCS_YTD 成員輸入資料:

  1. 在名為 "PreFormLoad" 的 Calculation Manager 中新增隨需規則。

  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" 規則提供預設的「執行時期提示」值,如下所示:

    • Consolidation: "Entity Input"

    • Currency: "Entity Currency"

    • Entity: "FCCS_Global Assumptions"

    • Period: "Jul"

    • Scenario: "Actual"

    • Years "FY19"

  6. 勾選 "PreFormLoad" 規則所有六個「執行時期」提示的已隱藏作為置換值選項。

  7. 儲存、驗證和部署 "PreFormLoad" 規則。

  8. 在名為 "PreFormSave" 的 Calculation Manager 中新增隨需規則。

  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" 規則提供預設的「執行時期提示」值,如下所示:

    • Consolidation: "Entity Input"

    • Currency: "Entity Currency"

    • Entity: "FCCS_Global Assumptions"

    • Period: "Jul"

    • Scenario: "Actual"

    • Years "FY19"

  13. 勾選 "PreFormSave" 規則所有六個「執行時期」提示的已隱藏作為置換值選項。

  14. 儲存、驗證和部署 "PreFormSave" 規則。

  15. 新增一個名為 "YTD_Test_1" 的表單並在各列上新增 "FCCS_Periodic" 和 "FCCS_YTD",如下所示:

    YTD 表單範例


    YTD 表單範例
  16. 按一下商業規則頁籤,將 "Consol – Rule – PreFormSave" 和 "Consol – Rule – PreFormLoad" 移至右側。為 "Consol – Run – PreFormSave" 規則勾選儲存前執行,然後為 "Consol – Run – PreFormLoad" 規則勾選載入後執行。畫面應顯示如下:

    商業規則範例


    商業規則範例
  17. 儲存並按一下完成

    注意:這些步驟會將 "Actual"/ "FY19" "Jul" "FCCS_Global Assumptions" 資料標記為「已變更」。確定整個程序單元已啟動並處於「已解除鎖定」狀態。這僅適用於此原型。真正的實作不會有這些限制。

  18. 開啟「YTD_Test_1 表單」,並將值新增至 FCCS_YTD,如下所示:

    YTD 值範例


    YTD 值範例
  19. 儲存表單。FCCS_Periodic 會被植入相應的「定期」值,如下所示:

    植入的 YTD 表單範例


    植入的 YTD 表單範例