Thursday, December 8, 2022

Quick tip - Finding out your EPM Cloud Infrastructure Datacentre

This is a quick tip on how to find out whether your EPM cloud running instance is running on OCI Classic or OCI Gen2 datacentre.


The answer is quite simple: find out by viewing your instance's activity reports. The activity report will include a header "Cloud Infrastructure" and it'll state whether it is "OCI Classic" or "OCI (Gen2)".






There is another way, cheeky one I must add, to find out and it is simply when you login to your environment:


OCI Gen2 login screen will look like this:



And OCI Classic login screen will look like this:



This should save you some time next time you are wondering whether you are on Classic on GEN2.


Until next time.


Friday, September 9, 2022

EPCM - A workaround for deleting scheduled jobs

I have found a workaround that enables me to delete scheduled jobs in Enterprise Profitability and Cost Management (EPCM). Check my last post for more details about the error itself.


Here is the error to begin with.




As you can see above, I cannot simply delete the job straight away (this is still a bug as of the date of this post), so what I need to do is create an LCM export for that job, modify the xml file, and re-import the file again.

1. Export the LCM job definition 







2. Export the LCM definition and download the file locally



3.Edit the XML file and change the end dates to a past date


This is the original XML file

In snippet format:
<?xml version='1.0' encoding='UTF-8'?><Scheduler><job name="Compact Outline" type="23"><jobParam name="DefaultQuartzJob:jobApplication" type="java.lang.String" value="FsnEPCM"></jobParam><jobParam name="DefaultQuartzJob:jobClassName" type="java.lang.String" value="com.hyperion.planning.schedulejobs.CubeCompactionScheduleJob"></jobParam><jobParam name="DefaultQuartzJob:jobCreateDate" type="java.util.Date" value="1662724800000"></jobParam><jobParam name="DefaultQuartzJob:jobIdentity" type="java.lang.String" value="epm_default_cloud_admin"></jobParam><jobParam name="DefaultQuartzJob:jobObjectName" type="java.lang.String" value="Compact Outline FsnEPCM.PCM_CLC"></jobParam><jobParam name="DefaultQuartzJob:jobObjectType" type="java.lang.Integer" value="23"></jobParam><jobParam name="DefaultQuartzJob:jobTrigger" type="com.hyperion.calcmgr.scheduler.triggers.DailyTrigger" value="[Daily] [Starts: Fri Sep 09 12:00:00 GMT 2022] [No End Time] [Cron: 0 0 22 1/1 * ? * Australia/Sydney]"></jobParam><jobParam name="DefaultQuartzJob:jobUserInputName" type="java.lang.String" value="Compact Outline"></jobParam><jobParam name="DefaultQuartzJob:origStartTime" type="java.util.Date" value="1662724800000"></jobParam><jobParam name="DefaultQuartzJob:timeZone" value="Australia/Sydney"></jobParam><jobParam name="Job Name" type="java.lang.String" value="Compact Outline FsnEPCM.PCM_CLC"></jobParam><jobParam name="appName" type="java.lang.String" value="FsnEPCM"></jobParam><jobParam name="dbName" type="java.lang.String" value="PCM_CLC"></jobParam><jobParam name="jobObjectKey" type="java.lang.String" value="23"></jobParam><jobParam name="physicalAppName" type="java.lang.String" value="AFsnEPCM"></jobParam><jobParam name="reviewData" type="java.util.LinkedHashMap"><property name="Job Type">Compact Outline</property><property name="Job Name">Compact Outline FsnEPCM.PCM_CLC</property></jobParam><jobParam name="reviewDetails" type="java.util.LinkedHashMap"><property name="Name">Compact Outline</property><property name="Job Type">Compact Outline</property><property name="Job Name">Compact Outline FsnEPCM.PCM_CLC</property></jobParam><trigger type="Daily" origStartDate="1662724800742"></trigger></job></Scheduler>


This is the modified XML file





In snippet format
<?xml version='1.0' encoding='UTF-8'?><Scheduler><job name="Compact Outline" type="23"><jobParam name="DefaultQuartzJob:jobApplication" type="java.lang.String" value="FsnEPCM"></jobParam><jobParam name="DefaultQuartzJob:jobClassName" type="java.lang.String" value="com.hyperion.planning.schedulejobs.CubeCompactionScheduleJob"></jobParam><jobParam name="DefaultQuartzJob:jobCreateDate" type="java.util.Date" value="1662724800000"></jobParam><jobParam name="DefaultQuartzJob:jobIdentity" type="java.lang.String" value="epm_default_cloud_admin"></jobParam><jobParam name="DefaultQuartzJob:jobObjectName" type="java.lang.String" value="Compact Outline FsnEPCM.PCM_CLC"></jobParam><jobParam name="DefaultQuartzJob:jobObjectType" type="java.lang.Integer" value="23"></jobParam><jobParam name="DefaultQuartzJob:jobTrigger" type="com.hyperion.calcmgr.scheduler.triggers.DailyTrigger" value="[Daily] [Starts: Thu Sep 08 13:00:17 GMT 2022] [Ends: Thu Sep 08 13:00:17 GMT 2022] [Cron: 17 0 23 1/1 * ? * Australia/Sydney]"></jobParam><jobParam name="DefaultQuartzJob:jobUserInputName" type="java.lang.String" value="Compact Outline"></jobParam><jobParam name="DefaultQuartzJob:origStartTime" type="java.util.Date" value="1662724800000"></jobParam><jobParam name="DefaultQuartzJob:timeZone" value="Australia/Sydney"></jobParam><jobParam name="Job Name" type="java.lang.String" value="Compact Outline FsnEPCM.PCM_CLC"></jobParam><jobParam name="appName" type="java.lang.String" value="FsnEPCM"></jobParam><jobParam name="dbName" type="java.lang.String" value="PCM_CLC"></jobParam><jobParam name="jobObjectKey" type="java.lang.String" value="23"></jobParam><jobParam name="physicalAppName" type="java.lang.String" value="AFsnEPCM"></jobParam><jobParam name="reviewData" type="java.util.LinkedHashMap"><property name="Job Type">Compact Outline</property><property name="Job Name">Compact Outline FsnEPCM.PCM_CLC</property></jobParam><jobParam name="reviewDetails" type="java.util.LinkedHashMap"><property name="Name">Compact Outline</property><property name="Job Type">Compact Outline</property><property name="Job Name">Compact Outline FsnEPCM.PCM_CLC</property></jobParam><trigger type="Daily" endate="1662642017034" origStartDate="1662642017034"></trigger></job></Scheduler>




4. Finally, import the updated LCM file


Once the file is imported, you will see the updated "Repeats" and "Scheduled End Time"  for the scheduled job.


Depending on whether you have selected an end date in the past, or not, the job will be updated to reflect the new end date and once it passes that date, the job will be completely removed from the scheduler.













Saturday, September 3, 2022

EPCM BUG - Error deleting scheduled jobs

So I came across this error in EPCM that is stopping me from deleting scheduled jobs. 


As of the creation date of this post, I'm unable to delete or edit a created scheduled job in EPCM, so until there is a fix for this, I suggest you do not create scheduled jobs in the interim and look for other workarounds (server side schedules, task manager in another pod etc).


This is the error message I'm getting while attempting to delete the job.





I have create an SR with and they have replicated the same issue in-house (this means it is a bug), I will update this post when I have more information.

Wednesday, August 3, 2022

Quick tip - Groovy rule validates successfully but fails to run

 This is a quick post about accessing Calc Manager rules properties using groovy class Rule.


I have the following script that validates just fine.



But if I try to run the rule I get the following error message:


The issue is caused by the rule not being deployed to the Planning tables:


The solution is simple. Deploy the run the rule again!




Monday, July 18, 2022

Enterprise Profitability and Cost Management (EPCM) - REST API - Calculate Model

 I found a typo in the Calculate Model REST API  in EPCM documentation that made go around in circles for a couple of hours trying to figure out what exactly is the problem! I already got in touch with the Oracle team in charge of the documentation and they are going to update the documentation at some point, so this post is about navigating such issues in the futures.


So the doco says the parameters (jobType and jobName) are required and their values must be "Calculate Model"



However, when I first tried to use this API using the exact same information, I got the following error:

"A job with name Calculate Model and type Calculate Model was not found. Try again with a valid job name and type"




Here comes the going around in circles bit, I'm following the exact instructions provided in the documentation so I thought there must be a typo somewhere, so what is the best way to find out the issue? EPM Automate commands is the correct answer, I know there is "calculateModel" epm automate command so I thought I will run the command, analyse the logs, and search for the correct parameter values.

After doing so, I found out the correct parameter values for jobName and jobType is "Calculation", not "Calculate Model" as per the screenshot below:

So I updated my REST request and replaced "Calculate Model" with "Calculation" and, Voila! it worked like a charm!








Enterprise Profitability and Cost Management (EPCM) - Quick Tips - The Rule Model does not exist for selected POV.

 This is another quick tip about an ambiguous error I came across while implementing EPCM for a client of mine. The error stopped me from calculating the model and it just says "The rule Model does not exist for selected POV" (which is not extremely helpful if you ask me).



Luckily, the solution is straight forward after I ran the Model Validation" and it turned out to be a renamed member that is no longer referenced in the rule.



And this is the error you will see when you edit the specified rule.




Finally, just update the rule and point to the renamed member and that's about it, you are good to go!

Enterprise Profitability and Cost Management (EPCM) - Quick Tips - NullPointerException

 I came across this very generic error while implementing EPCM for a client of mine and as you can see, the error is not informative. the error popped out while selecting ruleset range and all rules options only.






And after a lot of digging I found out this issue was caused by new rules that were never calculated before and in order to work around it, I ran the rule individually (as a single rule processing range) and the error never popped up again.


I don't know if you are going to experience this issue or not, but if you do, the solution is simple. just run and calculate the new rules at least one time as "SIGNLE RULE" before selecting ALL RULES or RANGE option.