Building on the previous post and in the spirit of reusing code, this will expand on the concept by walking through the creation and use of functions in Groovy calculations. Functions have huge value in reducing your Groovy calculations and streamlining development. Read more
Now that you are knee deep in Groovy, help yourself out and reuse common code. The more you learn, the more efficient you will be and will laugh at some of your initial attempts at your Groovy calculations. If you are like me, you get excited about all the possibilities and learn as you go. When you find better ways to do something, or even preferable ways, you end up with an application with inconsistent representations of the same logic. You are too busy to go back and update all the snippets you have improved, so it stays in a somewhat messy state.
Do yourself a favor and start reusing some of the things you need in every script. Read more
KScope has concluded, and what a fantastic week it was. I love the years I get the feedback that I have an abstract selected so I can attend. This year, I was awarded Oracle Ace, so it was really nice to be nominated and recognized for my contributions to the community. Read more
There are a lot of reasons one might loop through children in a Groovy Calculation. On my journeys with Groovy, I have run into a few roadblocks where this has been helpful. Some of these were related to limits in PBCS. Looping through sets of members allowed us to get around some of the limitations. Read more
Introduction
Before we jump in, there are a number of questions you are going to have at the conclusion of this article. Please post comments and I will answer them, but keep in mind, this is an example. Are there different ways to accomplish this? You bet. Should the data sync directly to the rFin database? Probably not, as there are calculations in the fin database that likely need to happen. This could be so complicated that nobody would follow it, so some liberties have been taken to simplify the explanation. The hope is that you can take this, as it has all the pieces required, and modify, add pieces, alter others, and be able to create something that meets your needs. This is a continuation of Part 18. Please read that before you continue.
Introduction
Yes, it is true that Groovy is available in on-premise and cloud (PBCS) versions of Hyperion Planning. No, it is not true that the same flavor of Groovy exists in both. Both have their advantages, and both have their drawbacks. The likelihood that they will ever be the same is extremely low, and here is why.
The Difference Is
On-Premise gives developers the ability to write and use independent Groovy compiled applications. These can be used in Business Rules as CDFs (custom defined functions). Developers have complete functionality to make this do whatever they want. It can return results to save to Essbase/Planning, it can interact with SQL, can run other programs, pretty much anything you can access that has a JAVA API.
PBCS doesn’t have the same flexibility. Custom defined functions can’t be compiled and stored on the server. PBCS, rather, has “Groovy Calculations.” This gives developers the flexibility to interact with the Data Forms that on-premise doesn’t have. Developers can iterate through the cells and act accordingly. It can stop the form from saving, calculate and override data entered, color code cells, customize Data Maps, Smart Pushes, dynamically generate calculations, move data between databases, all with access to much of the Groovy functionality.
PBCS also supports the REST API, so Groovy can be used to access that and do everything, even more, that EPM Automate can do.
Why They Will Never Be The Same
This is just an opinion. Technology changes so rapidly that this may change. Corporate strategy changes almost as rapidly.
If PBCS had to ability to do what on-premise does, the ability for Oracle to support the instance would be a challenge. CDFs can delete all the files on a server, for instance, and I don’t see a cloud provider giving developers this much control in a shared environment.
I also don’t see on-premise to have the same proactive interaction that PBCS has with Groovy Calculations purely because Oracle is pushing the cloud, and they want the most current functionality to exist in the platform they are pushing clients to use.
My Two Cents
I understand why there is a difference, and I don’t expect it to change in the near future. 3 years ago I didn’t expect that I would tell you that I would rather do a cloud implementation than on prem, either. I do think as people get more comfortable with the cloud, and security improves, there will be advances. I think there will be a future state where the cloud offerings will be closer to having the flexibility to the on-premise implementations.
Introduction
Chris Hull has been kind enough to partner with us to present how the methods available in Groovy calculations have made a huge impact in their budgeting and reporting process using PBCS. Read more
Introduction
One of the challenges with Hyperion Planning is the ability to move data between applications in real time. A classic example of this is a P&L application with other modules that have greater detail. The following is an example. Read more
No, But Can It Solve Yours?
I received a lot of positive feedback on the Groovy Series and have been asked a many great questions. People are excited about the improvements but are still a little hesitant to buy in to the hype. They question, and rightfully so, Read more
Challenge Accepted
When I asked visitors to try to come up with a situation that Groovy Calculation might be able to solve, this was a good one. One visitor asked if they could require a cell comment if certain parameters were not met. It is actually relatively easy.
The following requirement exist in this example. If any month holds more than 30% of the full year, that cell requires the user to enter a cell comment. If no comment exists, the user won’t be able to save the form.
The User Experience
If any month is more than 30% of the full year, and the user doesn’t add a comment to a cell, the form will not save. The following shows what happens when the above fails, and what happens after the user enters a comment into the cell.
The Code
def backErrColor = 16755370 //Red def caseTotal = 0 def accountName = "" // Loop through the months operation.grid.dataCellIterator('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec').each { // Get a total for all 12 months every time the row changes if(it.getAccountName() != accountName) { accountName = it.getAccountName(); caseTotal = it.data + it.crossDimCell('Feb').data + it.crossDimCell('Mar').data + it.crossDimCell('Apr').data + it.crossDimCell('May').data + it.crossDimCell('Jun').data + it.crossDimCell('Jul').data + it.crossDimCell('Aug').data + it.crossDimCell('Sep').data + it.crossDimCell('Oct').data + it.crossDimCell('Nov').data + it.crossDimCell('Dec').data } // If the value is greater than 30% of the total and the cell does NOT have a cell comment, interrupt the form save if(it.data > 0 && it.data / caseTotal > 0.3 && !it.hasCellNote() ) { it.addValidationError(backErrColor, "Cases for a single month can't be more than 30% of the total year without an assumption.", false) } }
Conclusion
Challenge accepted. This one goes in the win column for Groovy Calculations!