Financial Consolidation and Closeのフォームに年次累計(YTD)データを入力して表示するには、通常、フォームの設計にYTD_InputとYTDの2つのビュー・メンバーを含める必要があります。この要件は、フォームの設計を複雑にする可能性があります。次の例では、Groovyスクリプトを利用してこの要件を排除し、フォームにYTDビュー・メンバーのみが含まれるようにして、Groovyスクリプトで入力データを正しく管理します。この方法を使用すると、管理しやすいフォームの設計および表示が可能になります。
FCCS_YTDメンバーにデータを直接入力するためのGroovyルールを作成するには:
Calculation Managerに「PreFormLoad」という名前のオンデマンド・ルールを追加します。
オンデマンド・ルールのスクリプト・タイプを「Groovyスクリプト」に変更します。
PreFormLoadルールに次のコードを追加します:
operation.grid.dataCellIterator("FCCS_YTD").each { DataCell cell -> if (!cell.crossDimCell("FCCS_YTD_Input") && cell.isReadOnly())cell.forceEditable=true}
PreFormLoadルールを保存して検証します。
次のように、PreFormLoadルールにデフォルトの実行時プロンプト値を指定します:
連結: Entity Input
通貨: Entity Currency
エンティティ: FCCS_Global Assumptions
期間: Jul
シナリオ: Actual
年: FY19
PreFormLoadルールの6つの実行時プロンプトすべてに対して、「非表示」オプションおよび「オーバーライド値として使用」オプションを選択します。
PreFormLoadルールを保存、検証およびデプロイします。
Calculation Managerに「PreFormSave」という名前のオンデマンド・ルールを追加します。
オンデマンド・ルールのスクリプト・タイプを「Groovyスクリプト」に変更します。
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 }
PreFormSaveルールを保存して検証します。
次のように、PreFormSaveルールにデフォルトの実行時プロンプト値を指定します:
連結: Entity Input
通貨: Entity Currency
エンティティ: FCCS_Global Assumptions
期間: Jul
シナリオ: Actual
年: FY19
PreFormSaveルールの6つの実行時プロンプトすべてに対して、「非表示」オプションおよび「オーバーライド値として使用」オプションを選択します。
PreFormSaveルールを保存、検証およびデプロイします。
次のように、行に「FCCS_Periodic」と「FCCS_YTD」がある「YTD_Test_1」という名前のフォームを追加します:
YTDフォームのサンプル
「ビジネス・ルール」タブをクリックし、「Consol - Rule - PreFormSave」と「Consol - Rule - PreFormLoad」を右側に移動します。「Consol - Rule - PreFormSave」ルールに対して「保存前に実行」を選択し、「Consol - Run - PreFormLoad」ルールに対して「ロード後に実行」を選択します。画面は次のように表示されます:
ビジネス・ルールのサンプル
保存して「終了」をクリックします。
ノート: これらのステップにより、「Actual / FY19 Jul FCCS_Global Assumptions」データが「変更」としてマークされます。プロセス単位が開始され、ロックが解除された状態になっていることを確認します。これはこのプロトタイプにのみ適用されます。実際の実装には、これらの制限はありません。
「YTD_Test_1 form」を開き、次のようにFCCS_YTDに値を追加します:
YTD値のサンプル
フォームを保存します。FCCS_Periodicには、次のような対応する期別価額が移入されます:
移入されたYTDフォームのサンプル