Just realised that I’ve put tm1financelib on GitHub and didn’t tell anyone about it ;) Here it is.
I know nobody should be using Java Extension TIs as this functionality is no longer actively developed (but still supported for all PA 2.x releases), but I’m still not sure what’s the best way to replace it. The lack of built-in support for all financial calculations in TM1 never ceases to puzzle me and essentially we’ve got 3 options for their replacement:
Write your own TIs to do these calculations. I’m so-so-so against this as it’s really hard for complicated calculations and is a lot slower than any 3rd party language library. And just how many times you want to test IRR / NPV / VARP, there are definitely more value-adding activities around :)
Use something in TM1 that allows you to define User Defined Functions (UDFs). This was and still is Java without any replacement announced. The upside is that these calls are executed within the same server and are a lot faster than TI loops, we compared performance on one of our clients. The downside is that you need a JVM to run these extensions (not a given and not installed on data tier in the Cloud, afaik) and need to understand Java to adjust them.
Use a REST API and wrap around a call to a standard library to do the calculations and write back the results. CubeCalc is a perfect example of this, look how simple it is. My main gripe with this approach is that you run a TI that runs a script that logins to TM1 to read/write calculation result. This extra login is entirely unnecessary, slow and prone to locking (with CAM security you need to check clients existence, add him/her, update }ClientGroups, etc – on each login). And yeah carrying scripts around, installing something else on the server (or using py2exe to wrap in a .exe file) – all this feels so complicated. Same can be said for jar files of course. Python is a big plus for me, love it a lot more than Java.
Anyhow, rant mode off, let’s see what future brings us, hopefully, an ability to run REST calls within TI without re-authentication :)