tag:blogger.com,1999:blog-65752832180058074752024-02-18T22:34:32.990-08:00More to life...A delve into the disturbing world of EPM, uncovering the mysteries and facts beneath the shiny surface, yawn your way through yet another blog, let's hope this one is interesting...John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.comBlogger282125tag:blogger.com,1999:blog-6575283218005807475.post-53088202977199408592019-12-09T05:04:00.000-08:002019-12-09T05:04:47.755-08:00EPM Cloud - Integration Agent update - Running as a Windows service<div dir="ltr" style="text-align: left;" trbidi="on">
Back with a very quick update for the EPM Integration Agent. From the EPM Cloud 19.12 release, the agent can be run as a Windows service.<br />
<br />
If you have a look at the agent bin directory of the 19.12 release compared to a prior version, you will notice a few differences.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS10T8-N10Zny4GdGUaJ1BU9NkohjM3ZrT7iuVT4JjBRJnMFLIyLXKJ-ne52eqw5V836KV2qTWA3rUAeFVou6jKMCqKQhE0NapEUbpDWB9g5dF37ItPSQ-1wJ18xmA9jvsYgd1I2hyphenhyphen7kI/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="257" data-original-width="287" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS10T8-N10Zny4GdGUaJ1BU9NkohjM3ZrT7iuVT4JjBRJnMFLIyLXKJ-ne52eqw5V836KV2qTWA3rUAeFVou6jKMCqKQhE0NapEUbpDWB9g5dF37ItPSQ-1wJ18xmA9jvsYgd1I2hyphenhyphen7kI/s1600/image001.png" /></a></div>
<br />
“<b class="yellow">EPMAgentService.exe</b>” will install/uninstall and run the agent from a Windows service.<br />
<br />
“<b class="yellow">startagent.bat</b>” has been removed. To continue starting the agent from command line you can just call "epmagent.bat" instead.<br />
<br />
“<b class="yellow">startagent.sh</b>” has been updated so the agent is started as a background process.<br />
<br />
“<b class="yellow">stopagent.sh</b>” has been added for Linux/Unix type systems. The script will basically find the process the agent is running under and then kill it.<br />
<br />
To update the agent to the latest release is very simple. I suggest renaming the existing agent directory and replace with the latest version. Remember to copy the EPM Cloud SSL certificate back to the cert directory and any custom jar files to the lib directory.<br />
<br />
If “<b>EPMAgentService.exe</b>” is executed, it will display details on how to install/uninstall the agent as a Windows service.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSagR_I71qBuQ3j8G5Z8JdXWicD8XwMFClybDkZMJDUEuFhbpgMj752jY4NpUS7V3-oqswgSarz48tkos3pbEs9M0xLCzDjTcPuut9ukq93C2wx_8BQTUvu3_jI8_SSADpu0s48Us2k_U/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="229" data-original-width="654" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSagR_I71qBuQ3j8G5Z8JdXWicD8XwMFClybDkZMJDUEuFhbpgMj752jY4NpUS7V3-oqswgSarz48tkos3pbEs9M0xLCzDjTcPuut9ukq93C2wx_8BQTUvu3_jI8_SSADpu0s48Us2k_U/s1600/image002.png" /></a></div>
<br />
To install the service, the syntax is:<br />
<br />
<b class="yellow">EPMAgentService.exe -install “service name” “location of agent initialisation file”</b><br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6nw5jm4l3iC5XXFpM_XduDi2gRafJcS0hYAFn2K13wbLoAuDaxjhWtJUDWM_ke6F5L8q1aFSwGI7IISvxXLhop5iU9X28I2ROz-BJ0eFogOwO-tF7caadm3rkSyenv5edZFSrsIoUOlk/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="86" data-original-width="662" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6nw5jm4l3iC5XXFpM_XduDi2gRafJcS0hYAFn2K13wbLoAuDaxjhWtJUDWM_ke6F5L8q1aFSwGI7IISvxXLhop5iU9X28I2ROz-BJ0eFogOwO-tF7caadm3rkSyenv5edZFSrsIoUOlk/s1600/image003.png" /></a></div>
<br />
Once the command has been executed, a window will open confirming whether the service was installed successfully.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKVCLoYBIMU3H5UGFYi3BheqOpQPYIAq1mT2IpEpewjMf9t7no0bgwh9dwwhZTxnXrpYj3Z0u9oKjkgXzdjZw7UhshAnOmx_ccfnPuasbo7LfgzkgqzDvRlLyuRBkYv7PRrOTfZo4vSqU/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="79" data-original-width="521" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKVCLoYBIMU3H5UGFYi3BheqOpQPYIAq1mT2IpEpewjMf9t7no0bgwh9dwwhZTxnXrpYj3Z0u9oKjkgXzdjZw7UhshAnOmx_ccfnPuasbo7LfgzkgqzDvRlLyuRBkYv7PRrOTfZo4vSqU/s1600/image004.png" /></a></div>
<br />
A log will be created with more details around the creation of the windows service.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXDrkyuHhtgNFJqzjvoEIeSwtXqWdjCTFeYhn7C7I7ZkjRY0jzdWM1pnHpIR9WRoTJ0UC6V0GlincapcsZmkYeO41tzDfoEe43VeAr0oAV0nOa8g4x0u8D0airMCmZp0V1YcFYQppseF4/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="107" data-original-width="518" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXDrkyuHhtgNFJqzjvoEIeSwtXqWdjCTFeYhn7C7I7ZkjRY0jzdWM1pnHpIR9WRoTJ0UC6V0GlincapcsZmkYeO41tzDfoEe43VeAr0oAV0nOa8g4x0u8D0airMCmZp0V1YcFYQppseF4/s1600/image005.png" /></a></div>
<br />
If successful, the agent should be available as a Windows service.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqNyQlLsKENe0sYh6ak-NoOfE4flEJBtDw2mLiVtHkmB1zRx4vHxBKQgogIOgXFtThwBUZjGG7iHpRtfDGg6YHmSK1H1vPYXPp7IDbb-wSe3-WEHO4FCx2NWm7G16W8di9TsGBtqY7rug/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="40" data-original-width="515" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqNyQlLsKENe0sYh6ak-NoOfE4flEJBtDw2mLiVtHkmB1zRx4vHxBKQgogIOgXFtThwBUZjGG7iHpRtfDGg6YHmSK1H1vPYXPp7IDbb-wSe3-WEHO4FCx2NWm7G16W8di9TsGBtqY7rug/s1600/image006.png" /></a></div>
<br />
The display name will be generated with same as the service name. The services is set to manual and the account which runs the service will be local system, so you may want to update the service configuration to fit your requirements.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFPCFNc07-iZ5vzkKA8skF9DA-RJPgOqNblS6n0lsMkNdRVs8n1Bf2k1_WThXT1Qyo6rk1JpQ-0emjy01yNGvb-TOn-OeVvRLai1QhfkBuXZUPK269wuGxc-tn5W5DW5cETAiYZvlSwb8/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="236" data-original-width="406" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFPCFNc07-iZ5vzkKA8skF9DA-RJPgOqNblS6n0lsMkNdRVs8n1Bf2k1_WThXT1Qyo6rk1JpQ-0emjy01yNGvb-TOn-OeVvRLai1QhfkBuXZUPK269wuGxc-tn5W5DW5cETAiYZvlSwb8/s1600/image007.png" /></a></div>
<br />
Once the agent has been started, there will be “EPMAgentService.exe” as a process which will have the agent Java process running as a child process.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw_jHLd-FkUIb46cHjRGQntApTRTPilrdn23NlF_vZc_H6gSFgHS4sLxrvwsjRVxD-4bbfsi4P1Hq13nkG64czpjeyvONY0lqyoIpE2_Wa7aDNqVz4igSb6DJMWu_QKRyGTdv3XPbo7yc/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="73" data-original-width="325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw_jHLd-FkUIb46cHjRGQntApTRTPilrdn23NlF_vZc_H6gSFgHS4sLxrvwsjRVxD-4bbfsi4P1Hq13nkG64czpjeyvONY0lqyoIpE2_Wa7aDNqVz4igSb6DJMWu_QKRyGTdv3XPbo7yc/s1600/image008.png" /></a></div>
<br />
In the agent log directory, there will be an additional log for the agent. The naming convention for the log is:<br />
<br />
<b class="yellow"><windows_service_name>_<agent_name>_Service_<date>.log</b><br />
<br />
The log will contain the same information that was displayed when running the agent from command line.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlOoQ8993XfaI9OLclUZ33QUyhqXmKHeqlO3hRgd86LAvv9ZEpf8eB6ekmZMFEbg7hAEIvd1Y4FwjT9UeaLh695Xhb6jw3qLjNtxTqfSH3VlFyzoOaCU6AHYd7roQeOWSMQfOBHpP5_nM/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="270" data-original-width="512" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlOoQ8993XfaI9OLclUZ33QUyhqXmKHeqlO3hRgd86LAvv9ZEpf8eB6ekmZMFEbg7hAEIvd1Y4FwjT9UeaLh695Xhb6jw3qLjNtxTqfSH3VlFyzoOaCU6AHYd7roQeOWSMQfOBHpP5_nM/s1600/image009.png" /></a></div>
<br />
When the agent is stopped, there will be entries in the log to confirm whether it was stopped successfully.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpQmvRoSXsH5jGvuKTtbw02MyrD99pKcUkQDDfMz48DV0n_bR7O8qWAC7XaT6JlrHdJG3KHQe5SLPsAEi-UVRe-tdqWTJK48wJ8Pi9YR_giGfnoKmNXGRiRI7MZjYzd6NPuBDfPwvty58/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="74" data-original-width="461" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpQmvRoSXsH5jGvuKTtbw02MyrD99pKcUkQDDfMz48DV0n_bR7O8qWAC7XaT6JlrHdJG3KHQe5SLPsAEi-UVRe-tdqWTJK48wJ8Pi9YR_giGfnoKmNXGRiRI7MZjYzd6NPuBDfPwvty58/s1600/image010.png" /></a></div>
<br />
It is possible to run multiple agents as Windows services on the same machine.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8Bd3Dl0VGGAjVt2MWaFWkqzINaKzdpFSbZq_9U7CRYdmqPsoLP4-J_IZMg0x3hGA9QhO7DuoDo4kLUN9QB8kC5QOavIoilWx-avgXqVWIvEYDnahhF0o6JdMrmvE6LTTynZ_pOCK4Id0/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="59" data-original-width="663" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8Bd3Dl0VGGAjVt2MWaFWkqzINaKzdpFSbZq_9U7CRYdmqPsoLP4-J_IZMg0x3hGA9QhO7DuoDo4kLUN9QB8kC5QOavIoilWx-avgXqVWIvEYDnahhF0o6JdMrmvE6LTTynZ_pOCK4Id0/s1600/image011.png" /></a></div>
<br />
Multiple services will now be available.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDIN2fmO4Y03KGAhFtLagKUNBNPKyMOMsF3HwpdDyLtXrS7WUNZEdOogqVwZVMfZDiwcUkj-CyuknbWgK20dehmvt58WeHjMzoDif8o-f6URoTurGkU3sUu28MqX3typ7qxqPaexLUxcA/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="39" data-original-width="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDIN2fmO4Y03KGAhFtLagKUNBNPKyMOMsF3HwpdDyLtXrS7WUNZEdOogqVwZVMfZDiwcUkj-CyuknbWgK20dehmvt58WeHjMzoDif8o-f6URoTurGkU3sUu28MqX3typ7qxqPaexLUxcA/s1600/image012.png" /></a></div>
<br />
There will be a separate agent log for each Windows service.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1V8xsGJXhx_kDMp-QAhxO494f4F29RpRVY_NW_uCnAEGEBU2MHW3CV7TEJohvg2i0ciUjqhGh41HdTcr6bo2eMJpXows1Br7oMf7rVuGL57n_CggB3WR9K5RYY8YJYbK3h8XKuPWSuBQ/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="104" data-original-width="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1V8xsGJXhx_kDMp-QAhxO494f4F29RpRVY_NW_uCnAEGEBU2MHW3CV7TEJohvg2i0ciUjqhGh41HdTcr6bo2eMJpXows1Br7oMf7rVuGL57n_CggB3WR9K5RYY8YJYbK3h8XKuPWSuBQ/s1600/image013.png" /></a></div>
<br />
If you want to update the display name for the Windows service, this can be achieved easily through command line.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqbMVGGkVoQsH664uYPQzYJ_btnob8D18D_d4Lb5eNtfUUlvlZ2XYKEuXEBqp9hyphenhyphen7EsUE8az1nwCuZYuLV90_uZ8e2ahejvkYbQwh0N55xmsDQJnDjsHFKESPm4_64PzxHsgB-qKheHjw/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="32" data-original-width="498" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqbMVGGkVoQsH664uYPQzYJ_btnob8D18D_d4Lb5eNtfUUlvlZ2XYKEuXEBqp9hyphenhyphen7EsUE8az1nwCuZYuLV90_uZ8e2ahejvkYbQwh0N55xmsDQJnDjsHFKESPm4_64PzxHsgB-qKheHjw/s1600/image014.png" /></a></div>
<br />
The display name will be updated.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrXxu2r_fPWRG9dlt-fWY3YYUdzcktPVY8dIk4v_V71hwBuhaFLaaRWXH04zzx88yYrEOak_JTsdBcjytV2GLfRH_BfdXd-qr1uBUE6GjWpupokloCZGGqaEKnseHbOo-xI6qanVwSGIs/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="38" data-original-width="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrXxu2r_fPWRG9dlt-fWY3YYUdzcktPVY8dIk4v_V71hwBuhaFLaaRWXH04zzx88yYrEOak_JTsdBcjytV2GLfRH_BfdXd-qr1uBUE6GjWpupokloCZGGqaEKnseHbOo-xI6qanVwSGIs/s1600/image015.png" /></a></div>
<br />
To remove an agent as a Windows service, the following syntax can be used:<br />
<br />
<b class="yellow">EPMAgentService -uninstall <windows_service_name></b><br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjUp2S86dpmD3zqDKNU4oDkYCSbMZE88tqsQdkiWznVBA5J6xBK3Id0lhIxa0s3cXnD9olFMYEdUxVyVKaXMo0V34BRUUwhyTqSivyz7gMkTF-sgPLtpgEGymqapVc0sFjWTnYT9zdWvY/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="60" data-original-width="373" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjUp2S86dpmD3zqDKNU4oDkYCSbMZE88tqsQdkiWznVBA5J6xBK3Id0lhIxa0s3cXnD9olFMYEdUxVyVKaXMo0V34BRUUwhyTqSivyz7gMkTF-sgPLtpgEGymqapVc0sFjWTnYT9zdWvY/s1600/image016.png" /></a></div>
<br />
This will open a new window confirming whether the agent was uninstalled successfully.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCPjbYMkteoKmJ6nhUcVt7KImnKvduTV2sPfErw5B1MlIqJUKJE8KCkstswCoV-ocj43n11SgLCUVu6Ui8JMfuebmoo0r3HMVDgOhL1IbpgeIxYhM02iC_QFWAU30m2mASYs3oG6dPaHg/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="76" data-original-width="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCPjbYMkteoKmJ6nhUcVt7KImnKvduTV2sPfErw5B1MlIqJUKJE8KCkstswCoV-ocj43n11SgLCUVu6Ui8JMfuebmoo0r3HMVDgOhL1IbpgeIxYhM02iC_QFWAU30m2mASYs3oG6dPaHg/s1600/image017.png" /></a></div>
<br />
A log will have been generated with further details.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6eSRRilFkP1YVoV1xkOuxLJUQa_qvkV3dLgVvmWDZP_ecxqXT7DiVXP0nXHHOAZftr7mDvpf350fMsNPqmExar0OVyYiiqwEslrCSab_NDnzL7TBCHMm4VMxIcc-lUaBT23GqLTQk6gA/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="77" data-original-width="540" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6eSRRilFkP1YVoV1xkOuxLJUQa_qvkV3dLgVvmWDZP_ecxqXT7DiVXP0nXHHOAZftr7mDvpf350fMsNPqmExar0OVyYiiqwEslrCSab_NDnzL7TBCHMm4VMxIcc-lUaBT23GqLTQk6gA/s1600/image018.png" /></a></div>
<br />
So there we go, nice and simple. :)</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-48934794416719848742019-11-18T05:54:00.000-08:002019-11-18T05:54:12.017-08:00EPM Cloud - Integration Agent Part 7 - Drill down to source data<div dir="ltr" style="text-align: left;" trbidi="on">
Time for the latest part of the EPM Cloud Integration Agent series, in which I am going to be looking at drill down functionality. FDMEE/Data Management has always provided the option to drill through to source data using a URL and passing in parameters, for example with source systems like Oracle Financials Cloud, E-Business Suite or SAP. If your source was a relational database, then there was not really an option to directly drill back to the data.<br />
<br />
With the Integration Agent, it is now possible to select to drill through to source, this will execute a predefined SQL query against the source database and display the results in Data Integration.<br />
<br />
The following diagram is my interpretation of how the drill down functionality operates.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiBi_X4T8dstn3mQP30f4V7YZFZ3vttxKbJVY6p6vav_lO-EvpAkoukdK_ZGFF-nUsNiZI0ZXDS0j5uL2w9FGEyE3gyaFUoimgGxFnmFdmpKeRfbcMBpMxwrzdhjQ5Nr5OrRe2qSbu1kc/s1600/image002.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="522" data-original-width="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiBi_X4T8dstn3mQP30f4V7YZFZ3vttxKbJVY6p6vav_lO-EvpAkoukdK_ZGFF-nUsNiZI0ZXDS0j5uL2w9FGEyE3gyaFUoimgGxFnmFdmpKeRfbcMBpMxwrzdhjQ5Nr5OrRe2qSbu1kc/s1600/image002.jpg" /></a></div>
<ul style="text-align: left;">
<li><b class="yellow">Drill to source is initiated in either Data Integration workbench or drill through landing page.</b></li>
<li><b class="yellow">A REST call is made from a browser to the Integration Agent.</b></li>
<li><b class="yellow">The REST call contains the encrypted SQL query, bind variables and connection information.</b></li>
<li><b class="yellow">The agent updates the query with the bind variables values, the query is executed against the source database.</b></li>
<li><b class="yellow">The results of the query are converted to JSON and returned to the browser.</b></li>
<li><b class="yellow">The JSON is converted into a table format and displayed in a browser window.</b></li>
</ul>
To be able to use the drill down functionality you will really need to access the agent over HTTPS which will be through either a load balancer or web server. The URL the browser will make the REST call to will be the Web URL, which is defined in Data Integration. This will not be a problem if you are using the agent in synchronous mode as it will already have the Web URL defined and be accessible. Please refer to part <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-1.html">one</a></b> and <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-2-get.html">two</a></b> of the series for a better understanding.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilYQ2EA6dNLu-qZpCqc8WG31g7ZOJCOAbp2W8A2Sz0-8ltt4k1kgKkV6WhPqQVUbLq1wBLeYbntCiFEp9SwdxZQ79jhbmXolEB1AGCsF3S3DYdI-RvPbkpE8a-EyQ5ce_f1EJ1qSIJWFw/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="169" data-original-width="477" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilYQ2EA6dNLu-qZpCqc8WG31g7ZOJCOAbp2W8A2Sz0-8ltt4k1kgKkV6WhPqQVUbLq1wBLeYbntCiFEp9SwdxZQ79jhbmXolEB1AGCsF3S3DYdI-RvPbkpE8a-EyQ5ce_f1EJ1qSIJWFw/s1600/image003.png" /></a></div>
<br />
If you are using asynchronous mode, then the web server or load balancer does not have to be internet facing. The call is being made from the browser, so it is just the machine the browser is making the call from that needs to be able to access it.<br />
<br />
For my testing, I installed and configured Apache HTTP Server on an internal network which proxied to the agent. The web server does not have to be located on the same machine as the agent. It may be that you already have an internal load balancer or web server that could be configured to proxy to the agent.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi63Wshsf8xp2w7iRcQ2xPj_dL3Y6TxmEcf23GgHfdZ9paNmE6-l_jqupvPqojKwhUnHZE1r9Qi5Pb0Obmap8lWb86-mCs-xKfkSQIBEbviWdoBbzzij2LIevEiKST0Bp6J4DkxL2s9he8/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="186" data-original-width="505" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi63Wshsf8xp2w7iRcQ2xPj_dL3Y6TxmEcf23GgHfdZ9paNmE6-l_jqupvPqojKwhUnHZE1r9Qi5Pb0Obmap8lWb86-mCs-xKfkSQIBEbviWdoBbzzij2LIevEiKST0Bp6J4DkxL2s9he8/s1600/image004.png" /></a></div>
<br />
You may be asking why you can’t just access the agent directly over HTTP and not through a web server.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkn9kaMlUJRS2hOt8LWwtohgrkczwOqLKKy4pe5wf13-T4TDB9YL7m6NMwvioVgVqIF2Aj-H9Bdh1jucdefNm6BxORsrpge23nPnragZ6ZjKy5eJeI9QXb1uBozJhbSFXI3WqW_jiJDls/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="168" data-original-width="524" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkn9kaMlUJRS2hOt8LWwtohgrkczwOqLKKy4pe5wf13-T4TDB9YL7m6NMwvioVgVqIF2Aj-H9Bdh1jucdefNm6BxORsrpge23nPnragZ6ZjKy5eJeI9QXb1uBozJhbSFXI3WqW_jiJDls/s1600/image005.png" /></a></div>
<br />
Accessing EPM Cloud through a browser will be over HTTPS, if the browser then tries to make a call over HTTP to the agent then this will be a security issue, most browsers will block <b><a href="https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default">mixed content</a></b>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjamTdXq6tSbeqyBq130seY5jLwD8jnG224tL_bctOSnbjrycTVcK2vRu9UBJos1P5sBLBDhi3BPl6G8M52rIs3W35tAeXqkq6_7RKy0APGKSacizTRBkXTwKJg3-cShD_3lbfon4hI5Ko/s1600/a1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="20" data-original-width="447" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjamTdXq6tSbeqyBq130seY5jLwD8jnG224tL_bctOSnbjrycTVcK2vRu9UBJos1P5sBLBDhi3BPl6G8M52rIs3W35tAeXqkq6_7RKy0APGKSacizTRBkXTwKJg3-cShD_3lbfon4hI5Ko/s1600/a1.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
It is possible to disable mixed content blocking but depending on the browser you will probably encounter more issues. For many reasons, it makes sense just to front the agent with a web server of some description.<br />
<br />
To demonstrate the drill down functionality, I am going to use my example from part <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-3.html">three</a></b> of this series where data is extracted from a source Oracle database.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmyXRACzh93DHmHLcTAuH1SYWP1UmNAFAN8WP7gbAbNthfg-CdIeD95sWSZ-eoTEST_WyAvEykzVmnzsaoQ4ZEcOcZzIIS2PVlhzyv04Zy85FzgMrCPrRFXxoB9xQ587wPL6SI9Z7BpZs/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="213" data-original-width="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmyXRACzh93DHmHLcTAuH1SYWP1UmNAFAN8WP7gbAbNthfg-CdIeD95sWSZ-eoTEST_WyAvEykzVmnzsaoQ4ZEcOcZzIIS2PVlhzyv04Zy85FzgMrCPrRFXxoB9xQ587wPL6SI9Z7BpZs/s1600/image007.png" /></a></div>
<br />
A database view provides summary General Ledger data and the query to extract the data is defined in Data Integration.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZHkXEQIZwB9eN4LNmLvUGqPZg3a4LZD5XfiMfyesDzFdm3sbLQUT-LJK8n0OPKkQWbP2WJi6dEydFP8FJqesRfWuqTRDe5-zROvfis25qH-__-ShyphenhyphenFq5H7rnea4FqcwHoqhlGE_-6_KQ/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="231" data-original-width="489" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZHkXEQIZwB9eN4LNmLvUGqPZg3a4LZD5XfiMfyesDzFdm3sbLQUT-LJK8n0OPKkQWbP2WJi6dEydFP8FJqesRfWuqTRDe5-zROvfis25qH-__-ShyphenhyphenFq5H7rnea4FqcwHoqhlGE_-6_KQ/s1600/image008.png" /></a></div>
<br />
In the Data Integration workbench, there is the option “Drill Through to Source” on each source amount.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAFoSBY3NyfUc1g744X3GL8Qe82cvEraJtDbb6uDPEwJFK9tqgcMNMhkyGlzYCCoD425M6IuvgfY5HAFjs3Xr3imEgINNLegHnmFMVr1ZqKm-NyR1BY_0Zd9qEeseROQLEotSygNEbTzs/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="320" data-original-width="708" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAFoSBY3NyfUc1g744X3GL8Qe82cvEraJtDbb6uDPEwJFK9tqgcMNMhkyGlzYCCoD425M6IuvgfY5HAFjs3Xr3imEgINNLegHnmFMVr1ZqKm-NyR1BY_0Zd9qEeseROQLEotSygNEbTzs/s1600/image009.png" /></a></div>
<br />
For this example, the idea is to drill down to a database table which contains the detailed GL data.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo4Zo3RlpnaTnFyjpNaguDEmOgRI7gpLPIobGtfn3tMNLsFgt1U75BPAkEaWlxroflClyH_9m8gyhkNrBinNIst3ZryKJdcCydt22G8FC8RtvM_Zx1LGVwNGGP_6MJvb7zbdFLOF16iUA/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="131" data-original-width="700" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo4Zo3RlpnaTnFyjpNaguDEmOgRI7gpLPIobGtfn3tMNLsFgt1U75BPAkEaWlxroflClyH_9m8gyhkNrBinNIst3ZryKJdcCydt22G8FC8RtvM_Zx1LGVwNGGP_6MJvb7zbdFLOF16iUA/s1600/image010.png" /></a></div>
<br />
Please note this is just a demo, the source table could contain many more columns than shown.<br />
<br />
The first step is to create the query in Data Integration which will return the required data set.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi40NOFeP3s38kTrlD1vbsI0TOaODlOz4KnJ72-OkRMcmi_G7XOui8CKQMVfppos0sjZy4KNEczeGxOJIDnV68TtWkSJiovSDJuRFAEaGl6hblpTN-yuTydQYkIBCAIWQq-3e_IQ1VGr_8/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="253" data-original-width="478" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi40NOFeP3s38kTrlD1vbsI0TOaODlOz4KnJ72-OkRMcmi_G7XOui8CKQMVfppos0sjZy4KNEczeGxOJIDnV68TtWkSJiovSDJuRFAEaGl6hblpTN-yuTydQYkIBCAIWQq-3e_IQ1VGr_8/s1600/image011.png" /></a></div>
<br />
The query also includes bind variables, the values will depend on the row where the drill is being selected.<br />
<br />
What you need to be mindful of is the amount of records that can be returned. As the results are returned to the browser you will want to limit them as much as possible. The functionality is not really designed to dump large amounts of data to a browser.<br />
<br />
Next, the Drill URL is defined. This is either through “Map Dimensions” in Data Integration or “Import Format” in Data Management.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghKLGIQINNNPSwP2uzp-3TB9LEEQOBPAmiak_JIRWOHBzuIEShWAUTZBu2UzVm7hp9u2gGG-QCUpoy7cl7e9y8lzct5G9vAapTNaSkVxDMFCzkKUzcgJtYyKZ3Oe0pzF5e8q03xUOyRnI/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="412" data-original-width="431" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghKLGIQINNNPSwP2uzp-3TB9LEEQOBPAmiak_JIRWOHBzuIEShWAUTZBu2UzVm7hp9u2gGG-QCUpoy7cl7e9y8lzct5G9vAapTNaSkVxDMFCzkKUzcgJtYyKZ3Oe0pzF5e8q03xUOyRnI/s1600/image012.png" /></a></div>
<br />
The Drill URL will need to start with <b>#agent</b> when accessing a drill down with the Integration Agent.<br />
<br />
The QUERY parameter is the name of the SQL Query. I have included the query which I just created.<br />
<br />
The other parameters are the bind variables which I assigned in the Query. The values are the columns in the data staging tables.<br />
<br />
The URL I have defined will be with the agent, it will run the “GL_BALANCES” query. The bind variables will be based on the ACCOUNT and ENTITY values for the selected drill row.<br />
<br />
I can now select to “Drill Through to Source” on a row in the workbench.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3m6PveNoUTzfE7FPDd9R6hhGe1xARVR9Y61vW8y2mZesArOMKSb7zMBGkjVU3LbFyLEJmAVXzjAViJ9CT37bgLy1tOtTHciEtombJTL6hqNppY_jk8Diu16W4Q214M3l5TC6wcTGpA9U/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="291" data-original-width="709" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3m6PveNoUTzfE7FPDd9R6hhGe1xARVR9Y61vW8y2mZesArOMKSb7zMBGkjVU3LbFyLEJmAVXzjAViJ9CT37bgLy1tOtTHciEtombJTL6hqNppY_jk8Diu16W4Q214M3l5TC6wcTGpA9U/s1600/image013.png" /></a></div>
<br />
This will then make the call to the agent; the bind variables will be assigned to the query and then executed. The results will be returned and displayed in a window.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfCA_HSKnBylXFwsRe1u39hEWf97ilz5ZMZTZneVNs8TWbht54yZrGF5YPh4oCf13Oq7pjJXaJxkc5b8nWkbH7YY5P-9oggMP7B46fzQa8S4vF48zR_fU4X0kftFvTIbmLbrEhtR8vO1E/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="431" data-original-width="716" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfCA_HSKnBylXFwsRe1u39hEWf97ilz5ZMZTZneVNs8TWbht54yZrGF5YPh4oCf13Oq7pjJXaJxkc5b8nWkbH7YY5P-9oggMP7B46fzQa8S4vF48zR_fU4X0kftFvTIbmLbrEhtR8vO1E/s1600/image014.png" /></a></div>
<br />
It would be nice if there was an option to download the results.<br />
<br />
If you do have any issues with the drill down functionality, you will more than likely see the following default error.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsCGVtHB8TpC1SZUBQNdL-159-lQkibe0P2pdNO3ELiqwTsiYnegrcd1GNRby7RiL73dBskjoFdKFtd7Da_8z_Q2FgFnnbTKYnj5YbMc4anb1ifaXsmK5Tvy-0uzzGrW6LKhQMgg4Joak/s1600/image016.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="90" data-original-width="386" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsCGVtHB8TpC1SZUBQNdL-159-lQkibe0P2pdNO3ELiqwTsiYnegrcd1GNRby7RiL73dBskjoFdKFtd7Da_8z_Q2FgFnnbTKYnj5YbMc4anb1ifaXsmK5Tvy-0uzzGrW6LKhQMgg4Joak/s1600/image016.jpg" /></a></div>
<br />
Looking at the agent logs or using developer functionality within the browser will help narrow down the issue.<br />
<br />
You may be wondering whether it is possible to drill back from a web form or Smart View and the answer is yes.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKcS2bDUxE-FtyqliToqYxwZRZPXUmJXK6toeLHAPlzCLvaRsP0gnxaJS4Nfofer-NL5k0UF8XCq1p60wOIKoGkHHG92AO2pakTkiImVbJf6yaW1L2lLm6gS-QNOYq8DDkDGShlfwr1Yk/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="155" data-original-width="506" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKcS2bDUxE-FtyqliToqYxwZRZPXUmJXK6toeLHAPlzCLvaRsP0gnxaJS4Nfofer-NL5k0UF8XCq1p60wOIKoGkHHG92AO2pakTkiImVbJf6yaW1L2lLm6gS-QNOYq8DDkDGShlfwr1Yk/s1600/image017.png" /></a></div>
<br />
Selecting “Drill Through to source” will open the standard landing page.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkhHGxJGX4rEC8uRaqjZKUI9J4_JJFS-MWu-ert8mQZj2uiofzr8W9LuXPwjEUeMBDx0dyjuDcWNAX6xZ7tUxlKYSIsQHuivjoNF9dVn2wxB6VPN3g0Qvc8ruMWf4sBObEobU69y5sImA/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="368" data-original-width="722" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkhHGxJGX4rEC8uRaqjZKUI9J4_JJFS-MWu-ert8mQZj2uiofzr8W9LuXPwjEUeMBDx0dyjuDcWNAX6xZ7tUxlKYSIsQHuivjoNF9dVn2wxB6VPN3g0Qvc8ruMWf4sBObEobU69y5sImA/s1600/image018.png" /></a></div>
<br />
The gear icon next to the amount can be selected and then “Drill Through to Source” again. A window will be displayed with the results.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnh1rQhvM2C0K3FeaTYwRlcTRy4Ij4O-FWCoslxfnAVZs0wVh3ESybtCAD3qt2WdNSRP0afpP8HINhY1hkHAfTbzhJw8kZV3S9H82FYweQ42wxYh5VnBYnc2SJ5N2t8K3nOSkS1jV7hlI/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="515" data-original-width="725" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnh1rQhvM2C0K3FeaTYwRlcTRy4Ij4O-FWCoslxfnAVZs0wVh3ESybtCAD3qt2WdNSRP0afpP8HINhY1hkHAfTbzhJw8kZV3S9H82FYweQ42wxYh5VnBYnc2SJ5N2t8K3nOSkS1jV7hlI/s1600/image019.png" /></a></div>
<br />
I must admit the options to resize the window are not great.<br />
<br />
Please note, this functionality does not work from the workbench in Data Management.<br />
<br />
When a drill down is executed there will be an entry in the window of the agent.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip8y0qyGk64K2Per-p_ZpqMgcxbfg8CvQOUZd2NRAgjcxLf-KwHKkbcHVrZhFPAYGQWelccQOPGzqILzALtAmSO_ow41QAdX-k2lFlV7pGROatqhRIe7wqQT6lTCKzbOh6rfV6BU3GF_Y/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="25" data-original-width="373" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip8y0qyGk64K2Per-p_ZpqMgcxbfg8CvQOUZd2NRAgjcxLf-KwHKkbcHVrZhFPAYGQWelccQOPGzqILzALtAmSO_ow41QAdX-k2lFlV7pGROatqhRIe7wqQT6lTCKzbOh6rfV6BU3GF_Y/s1600/image020.png" /></a></div>
<br />
The session ID number has a corresponding log entry.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgue5iF29xuROPpzdy1pnxIDaMCOcF6moKSyhCGyb0ahOPkFdTRIljmWSVeg_WlZe48yurTJTw58acY6Xo0eQECl2Q-zeS3Mu3SRPhiq15TklwszlcOZH9vq8p9lm0iGtlCWtbASvQHZXg/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="116" data-original-width="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgue5iF29xuROPpzdy1pnxIDaMCOcF6moKSyhCGyb0ahOPkFdTRIljmWSVeg_WlZe48yurTJTw58acY6Xo0eQECl2Q-zeS3Mu3SRPhiq15TklwszlcOZH9vq8p9lm0iGtlCWtbASvQHZXg/s1600/image021.png" /></a></div>
<br />
The log contains information similar to running a normal data extract. The information includes the data source, query, bind variables and values.<br />
<br />
The difference to a standard extract is the output type, instead of file it is JSON.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:500 :: *************** Starting execution for sessionId:27387043 at: 16:01:49:500***************</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:500 :: Process Extract Request with data:--------------Executor Request Data--------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> jobType:EXTRACT</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> sessionID:27387043</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> Data Source Name:EPMAGENT_ORA_DEMO</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> credStore:CLOUD</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> query:SELECT </span></b><br />
<b class="yellow"><span style="font-size: x-small;">ACC_PER,LEDGER,JNL_ID,ACCOUNT,LOB,CC,</span></b><br />
<b class="yellow"><span style="font-size: x-small;">PRODUCT,IC,BEG_BAL,PER_ACT,END_BAL </span></b><br />
<b class="yellow"><span style="font-size: x-small;">FROM GL_FACT </span></b><br />
<b class="yellow"><span style="font-size: x-small;">WHERE ACCOUNT=~ACC~ AND CC=~ENT~</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> outputType:JSON</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> delimiter:,</span></b><br />
<b class="yellow"><span style="font-size: x-small;">--------------Bind Variables--------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">Name: ACC, Value:5800, Type:STRING</span></b><br />
<b class="yellow"><span style="font-size: x-small;">Name: ENT, Value:410, Type:STRING</span></b><br />
<b class="yellow"><span style="font-size: x-small;">--------------------------------------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:500 :: --------------- Executing Custom Event :BefExtract ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:500 :: Script: E:\EPMAgent\appdata\scripts\BefExtract.py Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:532 :: Adding String Bind Variable: ACC with value: 5800</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:532 :: Adding String Bind Variable: ENT with value: 410</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:532 :: --------------- Completed execution for sessionId:27387043 ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:532 :: --------------- Executing Custom Event :AftExtract ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:532 :: Script: E:\EPMAgent\appdata\scripts\AftExtract.py Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:532 :: --------------- Executing Custom Event :BefUpload ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:532 :: Script: E:\EPMAgent\appdata\scripts\BefUpload.py Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:532 :: --------------- Executing Custom Event :AftUpload ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:532 :: Script: E:\EPMAgent\appdata\scripts\AftUpload.py Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">16:01:49:937 :: *************** End execution for sessionId:27387043 ***************</span></b><br />
<br />
The log also highlights that the event scripts are executed. I will provide an example with an event script shortly.<br />
<br />
I believe the log is appended to each time a drill is executed. A new session log will be created when the agent is restarted.<br />
<br />
In my previous example, all periods are being returned in the query results. There are different options available to filter down to a single period and I will now go through a couple of them.<br />
<br />
As columns from the staging data table can be included in the Drill URL, it is possible to return the period key that the data has been loaded to.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSDdT_-HcAgPFNXfQyxTy-bBQ2n1AtwJq777WYsMlzztUhDCJbQaEuGaYO3wamP8KjPOOxweqVzjeamc72m54_o23Pgz71YAAUoqahkwSLCtNO4Y7s4oMLdOST7DoWizkFzriIsioSKoA/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="250" data-original-width="427" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSDdT_-HcAgPFNXfQyxTy-bBQ2n1AtwJq777WYsMlzztUhDCJbQaEuGaYO3wamP8KjPOOxweqVzjeamc72m54_o23Pgz71YAAUoqahkwSLCtNO4Y7s4oMLdOST7DoWizkFzriIsioSKoA/s1600/image022.png" /></a></div>
<br />
An example of the format the PERIODKEY is returned:<br />
<br />
<b class="yellow">2019-11-30 00:00:00.0</b><br />
<br />
The format for the period in the source database table is MM-YY. By using a substring function I can convert the period key into the correct format.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnQtcLj54mD_oF87QbbN63Uvg7IOkGDlrYWfDTJFiaEkw9APTEvk5ZlG-wsbJWadc9ZngHrp8KT4gen81wS6a2wQMDraF_wEmGJBuzLeEJcR54V71zzXnSAPkjoQRzIUdqG7qwvJuQZNk/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="333" data-original-width="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnQtcLj54mD_oF87QbbN63Uvg7IOkGDlrYWfDTJFiaEkw9APTEvk5ZlG-wsbJWadc9ZngHrp8KT4gen81wS6a2wQMDraF_wEmGJBuzLeEJcR54V71zzXnSAPkjoQRzIUdqG7qwvJuQZNk/s1600/image023.png" /></a></div>
<br />
This time the results returned will only be for the period in the POV.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0nyhK7qILys_8iYRGIyzWqVvXrkgsAKWetoqIthHgj8FG_gglrQOZW-ORncjqhqjzwKVi9vD0Pyl-_qAcJfADXmyZFyIfLq32i7mKHOifRilU_pdJ1KFbDMKu_P5kL41MLw9-P-IWVls/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="121" data-original-width="691" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0nyhK7qILys_8iYRGIyzWqVvXrkgsAKWetoqIthHgj8FG_gglrQOZW-ORncjqhqjzwKVi9vD0Pyl-_qAcJfADXmyZFyIfLq32i7mKHOifRilU_pdJ1KFbDMKu_P5kL41MLw9-P-IWVls/s1600/image024.png" /></a></div>
<br />
Another option would be to override the SQL in the before extract event script.<br />
<br />
The following script generates the current month and year in the correct format. The original query is then updated to filter on the period.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg30ZWXzX33uvOhTZwvead21pyKI5LtXSBgSYopcMA1eDWF5SS6vJjiD6JQcu9GhEn6qG14yLKjL7si1qEmDtud8eEZ_PbEx15azLWzK9-4w_ra_tKAoBncSRX0GYZ6rzlJyqVvTm2VSmI/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="511" data-original-width="437" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg30ZWXzX33uvOhTZwvead21pyKI5LtXSBgSYopcMA1eDWF5SS6vJjiD6JQcu9GhEn6qG14yLKjL7si1qEmDtud8eEZ_PbEx15azLWzK9-4w_ra_tKAoBncSRX0GYZ6rzlJyqVvTm2VSmI/s1600/image025.png" /></a></div>
<br />
Yes, this only works if you always want to return data for the current month and year, but it is just an example of how to override the query. The script can be written to suit whatever the requirements are.<br />
<br />
The output from the agent displays the original query and the executed query which has the period included.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1KPf6xLVY37q_3BU-D6XXr1ICw9TS3_tw7Ouc6grTCWCyEWxjiGl_ur55oOTzMSQQIgWrR9D7kn4dytZou60aZxgbbyIqz2Ca_ta9aFVV_47DuyoLG15wNkOZW3anUWnMHRGJvS_jC9E/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="256" data-original-width="377" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1KPf6xLVY37q_3BU-D6XXr1ICw9TS3_tw7Ouc6grTCWCyEWxjiGl_ur55oOTzMSQQIgWrR9D7kn4dytZou60aZxgbbyIqz2Ca_ta9aFVV_47DuyoLG15wNkOZW3anUWnMHRGJvS_jC9E/s1600/image026.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Another option could be when the data is extracted and loaded to EPM Cloud, it could include the period which is loaded to an attribute column.<br />
<br />
Instead of loading the period to an attribute column I am going to change it a little. In the next example I want to drill down to a journal table by journal ID. The query for the data extract will include the journal ID which I will load to an attribute.<br />
<br />
To do this I am going to update the integration which extracts summary data using a database view.<br />
<br />
A new column for the journal ID is added to the data source application.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWSO3HISe90k0uXCaps_wCamyVcqDcwj1nu4LSlengR-VWYwTj8jfi909OA1OvnWQVamHi3HanJh2RuCWMcdHudTkhGyI2jlKO3nSUDHve9Wy6Q0bkIggVj88JwAP04UckP6-p8woJ58M/s1600/image028.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="208" data-original-width="489" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWSO3HISe90k0uXCaps_wCamyVcqDcwj1nu4LSlengR-VWYwTj8jfi909OA1OvnWQVamHi3HanJh2RuCWMcdHudTkhGyI2jlKO3nSUDHve9Wy6Q0bkIggVj88JwAP04UckP6-p8woJ58M/s1600/image028.jpg" /></a></div>
<br />
In the integration dimension mappings, journal ID is mapped to an attribute.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJx-MH_iXX07BrB_BVbUicgJRio3Klpx24N3iqkQ4fs7fnwRcrgq_VHSUZ7vabveOJiVg1jE_5gXlK3kR0VFel9Ut81M4uIlk2YGWWNofjEcggetEymtGI5v3oq281dmioVxkCq6o3iks/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="367" data-original-width="525" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJx-MH_iXX07BrB_BVbUicgJRio3Klpx24N3iqkQ4fs7fnwRcrgq_VHSUZ7vabveOJiVg1jE_5gXlK3kR0VFel9Ut81M4uIlk2YGWWNofjEcggetEymtGI5v3oq281dmioVxkCq6o3iks/s1600/image029.png" /></a></div>
<br />
The query to extract summary data is updated to include the journal ID column.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXiQbcAS7abgdoMf2ErVaUvavbkak5RLxfJrm0p2APppyv4-vdnBlrjdSj7FC-1oD0mtfX7x_nhTsuB_chsayPk4rfJSzwzcfDf8Ly7VVT3Ooofqlq6WQIK6du-GZar30nk90E8_FzlKQ/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="285" data-original-width="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXiQbcAS7abgdoMf2ErVaUvavbkak5RLxfJrm0p2APppyv4-vdnBlrjdSj7FC-1oD0mtfX7x_nhTsuB_chsayPk4rfJSzwzcfDf8Ly7VVT3Ooofqlq6WQIK6du-GZar30nk90E8_FzlKQ/s1600/image030.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
When the integration is run and the data has been extracted and loaded to EPM Cloud, the journal ID is loaded to the attribute column.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJbTNdIcDaFd-0ZFTymdduEIkZSLOxkIRLDiQvWM5hiGenqRpnrgr40S0SBK-kXgXRrH_zVQXW1VSVVVkTeiu7LyT_L1A6yzH9dE4z1Tsk2LPpkYWPyIew6N9lsf2BVLG-M1RUXt5eRL4/s1600/image032.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="186" data-original-width="390" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJbTNdIcDaFd-0ZFTymdduEIkZSLOxkIRLDiQvWM5hiGenqRpnrgr40S0SBK-kXgXRrH_zVQXW1VSVVVkTeiu7LyT_L1A6yzH9dE4z1Tsk2LPpkYWPyIew6N9lsf2BVLG-M1RUXt5eRL4/s1600/image032.jpg" /></a></div>
<br />
I couldn’t get the attribute column to display in the Data Integration workbench, so I have provided the above example using Data Management.<br />
<br />
The next step is to set up the drill functionality to display records from a table which has journal line information.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguULAEYxY7KRzuxlGuBWuuNK8tUO34j8jrPXO8a5Wutn5rBBdRIVpCOLD_-XXnlccJP9iLYVl48dgbfUVibsEGMS87nbY2CFM5ADc4eUElMKD3gEHir36MXNm04BjjgzSZxcVB0QuyBGI/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="134" data-original-width="602" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguULAEYxY7KRzuxlGuBWuuNK8tUO34j8jrPXO8a5Wutn5rBBdRIVpCOLD_-XXnlccJP9iLYVl48dgbfUVibsEGMS87nbY2CFM5ADc4eUElMKD3gEHir36MXNm04BjjgzSZxcVB0QuyBGI/s1600/image033.png" /></a></div>
<br />
A new Query is created which returns journal line records. Some of the columns have been aliased to return more meaningful names.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLJ5G8HEM_djQ3a0CXaQCJXtc3VJZa8YAZNsYqrJ6JmrKJ53OavZuiJgEFNfLyQRKEWmjnVxazN-s1WoWdDdVSLFGjjzflJxQP-BEkJCaV4YUnhUopxHRaVxp88Y6-Txw5yx4QEJ-wd-4/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="320" data-original-width="469" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLJ5G8HEM_djQ3a0CXaQCJXtc3VJZa8YAZNsYqrJ6JmrKJ53OavZuiJgEFNfLyQRKEWmjnVxazN-s1WoWdDdVSLFGjjzflJxQP-BEkJCaV4YUnhUopxHRaVxp88Y6-Txw5yx4QEJ-wd-4/s1600/image034.png" /></a></div>
<br />
The above query includes a bind variable to filter by journal ID.<br />
<br />
The Drill URL is updated to include the query name, bind variable and attribute column name.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEityI-gQRZPqmb4pJfXKLMzSDdBprtm9jS_IPSYfl0aG_TDVYbCXVaNCG9j7P6xjBsTNbVsmvSJ14w9gK3FfdZd8HedDbaBGgm741DTsUimgz4FFgRGmb9heoQT5fkhAkHFgoZ21LchKOk/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="249" data-original-width="424" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEityI-gQRZPqmb4pJfXKLMzSDdBprtm9jS_IPSYfl0aG_TDVYbCXVaNCG9j7P6xjBsTNbVsmvSJ14w9gK3FfdZd8HedDbaBGgm741DTsUimgz4FFgRGmb9heoQT5fkhAkHFgoZ21LchKOk/s1600/image035.png" /></a></div>
<br />
Now the drill down can be tested.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg65_5MiLcyRLBT9ha_CTU5LrTdvoPDiL7YjzIKCbzysDzyxTEb67WNpPCiIGn2VyoDLZROxWxMR70oCD6NWEHgANn6S2DzomIMtJoxDjx8E0IggJF_H3L0zOCg05z3WWZvRP-xKLntR6o/s1600/a1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="113" data-original-width="721" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg65_5MiLcyRLBT9ha_CTU5LrTdvoPDiL7YjzIKCbzysDzyxTEb67WNpPCiIGn2VyoDLZROxWxMR70oCD6NWEHgANn6S2DzomIMtJoxDjx8E0IggJF_H3L0zOCg05z3WWZvRP-xKLntR6o/s1600/a1.png" /></a></div>
<br />
The journal line records are returned and displayed in a window.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYWW9M_KhLRbaFpYG8H9PkFiDXDvKHOodunqwOQwXgV0S4oCPVxbRscoRn78v1wQoiWQCiOCtsjDASZ4xXmdVxtc4egbig2b4p6wY-mfqSeYk8bw-pcZRfmBfwGaQVH_KssGTr-AxlFic/s1600/image037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="175" data-original-width="590" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYWW9M_KhLRbaFpYG8H9PkFiDXDvKHOodunqwOQwXgV0S4oCPVxbRscoRn78v1wQoiWQCiOCtsjDASZ4xXmdVxtc4egbig2b4p6wY-mfqSeYk8bw-pcZRfmBfwGaQVH_KssGTr-AxlFic/s1600/image037.png" /></a></div>
<br />
If drilling back from a web form or Smart View, the landing page provides the ability to display the journal ID column.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIf1SBbZNob1hKatakIcKqKZtlJ_gVzKiyFl-nYJWJZdeOnhlK4_g1eQm9K35zgKN3IVYHyhQKBnXYhp-OsZPIKJn860bzX1DkpwNyG37O5va6QWci2M2J9keSMPFEnpSkCV0bsH14pdk/s1600/image038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="325" data-original-width="520" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIf1SBbZNob1hKatakIcKqKZtlJ_gVzKiyFl-nYJWJZdeOnhlK4_g1eQm9K35zgKN3IVYHyhQKBnXYhp-OsZPIKJn860bzX1DkpwNyG37O5va6QWci2M2J9keSMPFEnpSkCV0bsH14pdk/s1600/image038.png" /></a></div>
<br />
I think that covers everything I wanted to. Until the next instalment…</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com2tag:blogger.com,1999:blog-6575283218005807475.post-50432505712510013262019-11-04T05:35:00.001-08:002019-11-04T05:35:20.379-08:00EPM Cloud - Integration Agent Part 6 - Multiple agents and cluster assignments<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both;">
Time for the next instalment in the series looking at the EPM Cloud Integration Agent. In this post I will look at running multiple agents and then move on to cluster assignments. I am going to assume that you have been following my previous posts on the agent and you understand the concept of agents and clusters. If not, I recommend reading through the first two parts.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
Up to now, my examples have been using a single agent which has been assigned to either an asynchronous or synchronous cluster. To provide high availability and load balancing options you may wish to run multiple agents which can be assigned to one or more clusters. The agents could coexist on a single server or be spread across numerous servers. Depending on where the source data resides, the agents and clusters could be deployed across different geographical locations.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
In this first example I am going to run two agents on one server and another two on a server in a different location. They will all be assigned to a single asynchronous cluster.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
For simplicity, I am going to name the agents from AGENT1 through to AGENT4.</div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
An asynchronous cluster has been created in Data Integration which the agents will be registered to.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtjcjStLEwTmK416w_bRRDht8zD0v6c_E8w1m-Iyx8JsOibf6ZEaDxuP-vVNtuJHxvu63fbeRDiHG4Hh2tEdZ0kGHpIODRSQVS650EneUv5CZvO8IHIjPaZuRGiWjpXSnA4PZ9pZ2lrLI/s1600/a1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="133" data-original-width="516" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtjcjStLEwTmK416w_bRRDht8zD0v6c_E8w1m-Iyx8JsOibf6ZEaDxuP-vVNtuJHxvu63fbeRDiHG4Hh2tEdZ0kGHpIODRSQVS650EneUv5CZvO8IHIjPaZuRGiWjpXSnA4PZ9pZ2lrLI/s1600/a1.PNG" /></a></div>
<br />
The first agent is configured using an initialisation file and assigned to the above. Please refer to part <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-2-get.html">two</a></b> of this series for more details on all the parameters in the ini file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_zYiwz9cHFnHc2aAYMtqaQJ2xMh3z7ZINYglyMtaZ1p_VsQOHTOTxYX9TGSvuNKMzIPfKehO4lRpRkCwJI6YJWzQ7zq9XhBXT7QhQcYSgABMeFSG3WSkcFjIeRG5b7Mn1QW9ZfqqpYt8/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="119" data-original-width="335" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_zYiwz9cHFnHc2aAYMtqaQJ2xMh3z7ZINYglyMtaZ1p_VsQOHTOTxYX9TGSvuNKMzIPfKehO4lRpRkCwJI6YJWzQ7zq9XhBXT7QhQcYSgABMeFSG3WSkcFjIeRG5b7Mn1QW9ZfqqpYt8/s1600/image002.png" /></a></div>
<br />
The agent is started, registers to EPM Cloud and starts polling the job queue. Notice the agent is running on machine 1.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpMkd0NetudYpyctb7_kkqCzkhPD0csJP5xV0oq4CgbRMSEugcg_gyjUYR3PWAwBoOWG3x6rlqqtYhVIgLrN8omaE6yPpT7VxXLjkLd877V6bjvMOym05cDb1qCtWxYb7nHPRujYOTCN4/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="301" data-original-width="518" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpMkd0NetudYpyctb7_kkqCzkhPD0csJP5xV0oq4CgbRMSEugcg_gyjUYR3PWAwBoOWG3x6rlqqtYhVIgLrN8omaE6yPpT7VxXLjkLd877V6bjvMOym05cDb1qCtWxYb7nHPRujYOTCN4/s1600/image003.png" /></a></div>
<br />
For the second agent, the ini file is copied to a new name. The agent name is set as AGENT2 and because the first agent will be occupying port 9090, the port for second agent is updated to 9095.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimzHNXt_cP9ll558xP-v30TsIMcCrt7CO4DIKeAUNIjHUdLASEXAgRrVaYEUH3VIwnJZbC_bqa0T-qklIg2aclKVBT0WwiqldgsUNRQDYqwc9b_P9WeA_50ktCQ3ecGxRxQTlSfFAmVmM/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="123" data-original-width="333" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimzHNXt_cP9ll558xP-v30TsIMcCrt7CO4DIKeAUNIjHUdLASEXAgRrVaYEUH3VIwnJZbC_bqa0T-qklIg2aclKVBT0WwiqldgsUNRQDYqwc9b_P9WeA_50ktCQ3ecGxRxQTlSfFAmVmM/s1600/image004.png" /></a></div>
<br />
The agent is started and registers successfully, then starts polling.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHRK04iv_DGl8oXCrIzWX6RWQgDcvdJFRXNXN4Fv1VITQyvBgLQx_a5maleOSUrQXmys1QaaFLAqXr7JY_4qYSiOlh9umXqN-ehSUAbUpGS9NG1CtVK4kTukz8uMoaP5oFWA1pt-j2w_o/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="275" data-original-width="521" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHRK04iv_DGl8oXCrIzWX6RWQgDcvdJFRXNXN4Fv1VITQyvBgLQx_a5maleOSUrQXmys1QaaFLAqXr7JY_4qYSiOlh9umXqN-ehSUAbUpGS9NG1CtVK4kTukz8uMoaP5oFWA1pt-j2w_o/s1600/image005.png" /></a></div>
<br />
Within Data Integration you can see that both the agents have been registered.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpCC4GC5n8L9Jo1Zp7HqoFUkZH35r0j5zPhtoU-EJi_uskmpTmKicSyI7tyuwFrGvlrP1XptZvbtkAWDtPsDaIikieF-6-dc40uKv8KsK2yaa_qxqNQuU-VEs_IRzUPMeOQlBRAhyXGS4/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="218" data-original-width="643" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpCC4GC5n8L9Jo1Zp7HqoFUkZH35r0j5zPhtoU-EJi_uskmpTmKicSyI7tyuwFrGvlrP1XptZvbtkAWDtPsDaIikieF-6-dc40uKv8KsK2yaa_qxqNQuU-VEs_IRzUPMeOQlBRAhyXGS4/s1600/image006.png" /></a></div>
<br />
There is a slight difference that the agent uses a 24 hour clock format while Data Integration displays a 12 hour format.<br />
<br />
On to the second server. The third agent is set up a similar way to the first agent. The only difference is the agent name.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhszBMv1_IKgnX9ZYpqN7kezUgKPPo5oCi1P8s8nTxtfFifkJzogGvs5zV_JL2pzGJ-ESVxFIzEpFDqZzxatrlieJiURHnLW7gKhB-tx6xTO7BRZPrL-RvHYJwZB1abCCcP9ZAOQvGHc0M/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="206" data-original-width="527" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhszBMv1_IKgnX9ZYpqN7kezUgKPPo5oCi1P8s8nTxtfFifkJzogGvs5zV_JL2pzGJ-ESVxFIzEpFDqZzxatrlieJiURHnLW7gKhB-tx6xTO7BRZPrL-RvHYJwZB1abCCcP9ZAOQvGHc0M/s1600/image007.png" /></a></div>
<br />
The fourth agent is set up, once again the port has been updated to avoid a clash.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwm1I_wb2usKZkRQZBJZia-fAwkvpL2nugF7Y1qIvgJpH5CEZctdDAklG6q6vtSNskvm0DPSgp2UoN1I_lD4JK7WXl2tvYPiPqYHN5xRvITI4PCr8sCP5ivON2LzQC8bBXSd84SmtZ_S0/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="161" data-original-width="523" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwm1I_wb2usKZkRQZBJZia-fAwkvpL2nugF7Y1qIvgJpH5CEZctdDAklG6q6vtSNskvm0DPSgp2UoN1I_lD4JK7WXl2tvYPiPqYHN5xRvITI4PCr8sCP5ivON2LzQC8bBXSd84SmtZ_S0/s1600/image008.png" /></a></div>
<br />
In Data Integration, the four agents are now registered across two servers.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfOWvgd_hSV2Mdq2Qs4oeUB5tXVyEWLJ61gRHY-u5qf9rrHW81bhyTBfiEEadvj2cOKBOAAG3ne6wZXdp9YOTEWRCB-_IWgPq1o4Dg52CgzUV0Kl0h_SZSM7k1NrC8ImCy0nNwkdXmhHk/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="323" data-original-width="532" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfOWvgd_hSV2Mdq2Qs4oeUB5tXVyEWLJ61gRHY-u5qf9rrHW81bhyTBfiEEadvj2cOKBOAAG3ne6wZXdp9YOTEWRCB-_IWgPq1o4Dg52CgzUV0Kl0h_SZSM7k1NrC8ImCy0nNwkdXmhHk/s1600/image009.png" /></a></div>
<br />
When using asynchronous mode, the agent to first to make a poll to EPM Cloud after an integration has been initiated will be the agent that runs the process.<br />
<br />
To demonstrate this, the first agent was started with a 60 second polling interval.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihr5J0KQDCSFrax2W0wiP93i6pVW1sybAHJoGHKKoyrYU1ZSFlxE5wKq84zRF6num4tvNa7WOxblsPVoyuzm-_XZc2XjGynY2BNAXRqhyphenhyphenIkY2FNysmmVebPrFa5BrJHY0TXycHKwvUubg/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="105" data-original-width="495" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihr5J0KQDCSFrax2W0wiP93i6pVW1sybAHJoGHKKoyrYU1ZSFlxE5wKq84zRF6num4tvNa7WOxblsPVoyuzm-_XZc2XjGynY2BNAXRqhyphenhyphenIkY2FNysmmVebPrFa5BrJHY0TXycHKwvUubg/s1600/image010.png" /></a></div>
<br />
The second agent was started around 30 seconds later, again with a 60 second polling interval.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyHJyy4U0tNFqHeOd281J_-2qgj0Ke_gxhuE-pXFPGg-4WH08KSdf0R5O3_DS94ytyi-0iqQwx59HfiHpNxYTQvxN5J_LeJ9W-k3NL0-sQJXaEbexTb89Q1ni9Sh-bOMSTQXATjvi8yxE/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="96" data-original-width="494" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyHJyy4U0tNFqHeOd281J_-2qgj0Ke_gxhuE-pXFPGg-4WH08KSdf0R5O3_DS94ytyi-0iqQwx59HfiHpNxYTQvxN5J_LeJ9W-k3NL0-sQJXaEbexTb89Q1ni9Sh-bOMSTQXATjvi8yxE/s1600/image011.png" /></a></div>
<br />
An integration was started.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipE_VMeqMh7M9hDnfrKk5kX7jVwpIIAmecfTNnQvyl6XsbnUhHScJR0gdtSfQXhmP5yPG3iywBHy-63mz9NlJ3ivw7I3L44ncBowChyphenhyphenwgpXLmvfovaUTFSI3U5YEKL5_vDkmWrK8OhDvA/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="168" data-original-width="483" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipE_VMeqMh7M9hDnfrKk5kX7jVwpIIAmecfTNnQvyl6XsbnUhHScJR0gdtSfQXhmP5yPG3iywBHy-63mz9NlJ3ivw7I3L44ncBowChyphenhyphenwgpXLmvfovaUTFSI3U5YEKL5_vDkmWrK8OhDvA/s1600/image012.png" /></a></div>
<br />
AGENT1 makes the first poll after the integration has been executed so this agent runs the process.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXLFBHBEqmN_cvQn7KLlfhGUXNPcvUSV1TGY-vyGua9bPjvTXdI-4Fn90JnW0CpoUEvTszXdvNsqUKmidNGfQiQ5stbioPTYsGH-tE-KguM6V-6uD02774bboMYz9sUAqIi8TWLWUt0hA/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="170" data-original-width="549" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXLFBHBEqmN_cvQn7KLlfhGUXNPcvUSV1TGY-vyGua9bPjvTXdI-4Fn90JnW0CpoUEvTszXdvNsqUKmidNGfQiQ5stbioPTYsGH-tE-KguM6V-6uD02774bboMYz9sUAqIi8TWLWUt0hA/s1600/image013.png" /></a></div>
<br />
AGENT2 makes a poll next and, as there have been no additional integrations started, it does nothing until the next poll interval.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp3pKJLFX1AoorwGueCeS3GhI-miYuIvILtRP3_15MnvyemRxkGgE7ZzdIlyRTm0JiZp1WdLh1qTFhBgvq8WzHBxUqnSkYRNaE2vRCLYE-bbAbmMivE6XU8AWGzc-7EjeVUHjAiTLHa7c/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="97" data-original-width="495" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp3pKJLFX1AoorwGueCeS3GhI-miYuIvILtRP3_15MnvyemRxkGgE7ZzdIlyRTm0JiZp1WdLh1qTFhBgvq8WzHBxUqnSkYRNaE2vRCLYE-bbAbmMivE6XU8AWGzc-7EjeVUHjAiTLHa7c/s1600/image014.png" /></a></div>
<br />
If an integration had been started, then the next agent to poll would start the integration process.<br />
<br />
In Data Integration, the queue shows that the first agent processed the integration.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFQam-t5hqb9bVtz2YW9YW7T0m06-BwNSkINwupAidWk5OujJpkN-cTpBa6K7zgoWHyJVAFXG0BBVZ218xlUjN1lP7k8DJuLaTSklx-n7uIguS0PuV1pB0twuAkGNif21svbRHmTvrdOw/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="117" data-original-width="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFQam-t5hqb9bVtz2YW9YW7T0m06-BwNSkINwupAidWk5OujJpkN-cTpBa6K7zgoWHyJVAFXG0BBVZ218xlUjN1lP7k8DJuLaTSklx-n7uIguS0PuV1pB0twuAkGNif21svbRHmTvrdOw/s1600/image015.png" /></a></div>
<br />
If frequent integrations are being executed, then running multiple agents helps spread out the processing load between the agents. Also, if any of the agents are down or need restarting or if one of the servers is out of action, then it does not impact the integrations being run from the Cloud.<br />
<br />
Moving on to running multiple agents in synchronous mode.<br />
<br />
In the next example I am going to run three agents on the same server, but these could as easily be spread across multiple servers and locations.<br />
<br />
A cluster has been created in Data Integration which operates in synchronous mode.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGRSQn8VRo5b5e0tmD2cz2oxxrdB2UYhzHKpeXOehoWFtJdspslcyyrZeRj0wgHOOw3ZN35_AH7XQCciMitG9LJgHma1QR6GHl9VT6kOIEWw3KfEqyyqerWIaOnoS5vd_TvyM7A2WJKP8/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="175" data-original-width="504" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGRSQn8VRo5b5e0tmD2cz2oxxrdB2UYhzHKpeXOehoWFtJdspslcyyrZeRj0wgHOOw3ZN35_AH7XQCciMitG9LJgHma1QR6GHl9VT6kOIEWw3KfEqyyqerWIaOnoS5vd_TvyM7A2WJKP8/s1600/image016.png" /></a></div>
<br />
The first agent is configured using the same initialisation file as the previous example, but set to register with the synchronous cluster.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirNY0nMEWN1FE0ulz4nboa_24H4bYSRKqTCpfrk9wOL_-OPDJxOSBC2oDQ7n0zlWIiCMA0U5yQvuRIqyi0eW15V3MTE_JxTqeWQsovGY4n4PN4DPjUTAVMSbaNcZEs0Bm7W3B5iiTpN2Y/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="203" data-original-width="523" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirNY0nMEWN1FE0ulz4nboa_24H4bYSRKqTCpfrk9wOL_-OPDJxOSBC2oDQ7n0zlWIiCMA0U5yQvuRIqyi0eW15V3MTE_JxTqeWQsovGY4n4PN4DPjUTAVMSbaNcZEs0Bm7W3B5iiTpN2Y/s1600/image017.png" /></a></div>
<br />
The second is set to register in sync mode and run on a different port.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV1ZVzPMRVIbZ5LrV3gPB9XPstvOaPeo3KKu-HIgTkMjgBEBlZzJ1cCAsFytM_qHhaRJXgmo1wK-YN_PPwfihJ0m8SsoJFPEi03h63tlG3LcDWwNFxZtebKtycgIlZzzSTB-dzH8mwyZM/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="212" data-original-width="512" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV1ZVzPMRVIbZ5LrV3gPB9XPstvOaPeo3KKu-HIgTkMjgBEBlZzJ1cCAsFytM_qHhaRJXgmo1wK-YN_PPwfihJ0m8SsoJFPEi03h63tlG3LcDWwNFxZtebKtycgIlZzzSTB-dzH8mwyZM/s1600/image018.png" /></a></div>
<br />
The third agent, still running on the same machine but on a free port, registers in sync mode.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmOM-bY0i-X-FC13kOfc_gs6gyKeGDasJyfJ74JAd0EmMzTzCEmLbEziASwxjDw3Tap9L59mVC0BVzZb1Dc8jhJipwkofgUP3sflnV0uDqx2Jmn4yqZJeQdnZ5g5JZ8U4j3QtMde_cUbE/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="215" data-original-width="523" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmOM-bY0i-X-FC13kOfc_gs6gyKeGDasJyfJ74JAd0EmMzTzCEmLbEziASwxjDw3Tap9L59mVC0BVzZb1Dc8jhJipwkofgUP3sflnV0uDqx2Jmn4yqZJeQdnZ5g5JZ8U4j3QtMde_cUbE/s1600/image019.png" /></a></div>
<br />
The registered agents can be viewed in Data Integration against the synchronous cluster.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQyOpAg9aOb26gp-JJooqxQAC4mOn7I-2wGUZpFApEtjCJ6XaEloc9H7sqxDzGj4Qqovl6Md-F0vriXGXPF5-wZjXSFPjStue8Ifm0OuxgB00reYH2Lxf3JeOP9PDo1854hVh2OsoJ7Eo/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="276" data-original-width="538" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQyOpAg9aOb26gp-JJooqxQAC4mOn7I-2wGUZpFApEtjCJ6XaEloc9H7sqxDzGj4Qqovl6Md-F0vriXGXPF5-wZjXSFPjStue8Ifm0OuxgB00reYH2Lxf3JeOP9PDo1854hVh2OsoJ7Eo/s1600/image020.png" /></a></div>
<br />
As this is synchronous mode, the agents must be accessible through an internet facing URL. Just like in part <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-2-get.html">two</a></b> of this series, I configured a load balancer which was available over HTTPS through an internet facing URL. The load balancer was configured to only allow HTTPS traffic from Oracle Cloud. Depending on the agent URL, the load balancer would proxy through to the correct agent. The machine running the agents only accepts traffic from the load balancer on the designated ports.<br />
<br />
In synchronous mode, agents are assigned jobs in a round robin technique using the order they are registered.<br />
<br />
To demonstrate this, I registered AGENT3 first, then AGENT2 and then finally AGENT1.<br />
<br />
An integration was then run. In the process log you can see the cluster and mode are retrieved, the next agent in the queue is assigned.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Retrieved EPM Cluster name:EPMAGENT_SYNC</span></b><br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Retrieved Cluster Mode:SYNC</span></b><br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Calling agent extract SYNC mode: BEGIN</span></b><br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Getting agent name from queue...</span></b><br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Cluster Name:EPMAGENT_SYNC</span></b><br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Retrieved EPM Agent name:AGENT3</span></b><br />
<br />
As AGENT3 was the first agent to be registered, the integration is run against it.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEbszNOD-n7w9ruwHic0ydLWPreTMxg8r1PbYCr5RQhO65tjykXDKneqQQ9zSqJ1e-y-VI7HDXxmpMnsgcT1eQVs2cp18CsrXioTuYCfQ9RRkrxJ4QxkxVMTGFgQhzQKJdMgtiHyQ_2tY/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="82" data-original-width="460" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEbszNOD-n7w9ruwHic0ydLWPreTMxg8r1PbYCr5RQhO65tjykXDKneqQQ9zSqJ1e-y-VI7HDXxmpMnsgcT1eQVs2cp18CsrXioTuYCfQ9RRkrxJ4QxkxVMTGFgQhzQKJdMgtiHyQ_2tY/s1600/image021.png" /></a></div>
<br />
The integration is run again, the process log again shows which agent is going to be assigned to process the integration.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Getting agent name from queue...</span></b><br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Cluster Name:EPMAGENT_SYNC</span></b><br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Retrieved EPM Agent name:AGENT2</span></b><br />
<br />
As expected, the next in line is AGENT2.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4Ppq9za2xhkktvcuuijelGp5QgMYSU7RS6HEe3EniyZPPxk6Mxfv5CargMXzEL3ESTf_wGWLbTrKyAZ5JXEcl0NFN4N4icew75JRfJwQU3VxNbzqOxSA7pME8A2-3QTuSeQJ1FVw3-a0/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="83" data-original-width="464" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4Ppq9za2xhkktvcuuijelGp5QgMYSU7RS6HEe3EniyZPPxk6Mxfv5CargMXzEL3ESTf_wGWLbTrKyAZ5JXEcl0NFN4N4icew75JRfJwQU3VxNbzqOxSA7pME8A2-3QTuSeQJ1FVw3-a0/s1600/image022.png" /></a></div>
<br />
Three agents have been registered so let us run the integration again and check the process log.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Getting agent name from queue...</span></b><br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Cluster Name:EPMAGENT_SYNC</span></b><br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Retrieved EPM Agent name:AGENT1</span></b><br />
<br />
No shock that AGENT1 is assigned the integration.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvFprG5ONzqPyiHQcL0glnosihPGB_dbjqiGMNVoqMDAC3vxDW_uMoopQcjc1wn4GJ06JllWPwT7lxF7kn7PQw1LS6W81HvHgVkU1vlevSvhXl8L5iS-6isY0PylNy0Ue3L5_2yhlmq0I/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="92" data-original-width="457" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvFprG5ONzqPyiHQcL0glnosihPGB_dbjqiGMNVoqMDAC3vxDW_uMoopQcjc1wn4GJ06JllWPwT7lxF7kn7PQw1LS6W81HvHgVkU1vlevSvhXl8L5iS-6isY0PylNy0Ue3L5_2yhlmq0I/s1600/image023.png" /></a></div>
<br />
In Data Integration you can see the queue order for the processes that have just been run.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjRNx23gO_Hd0dIbtvDnXlpkHa_HTkNictTO6yZ26eMQ8QuGrNGlmGYPOR-4WXck38MESzDel5NhAuFKiGIFqv0gP7LGvlAIi4aF1zbmUdLdxdjht2GFWt1jfV_rfI9C3NDPzvvFJHIP8/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="194" data-original-width="546" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjRNx23gO_Hd0dIbtvDnXlpkHa_HTkNictTO6yZ26eMQ8QuGrNGlmGYPOR-4WXck38MESzDel5NhAuFKiGIFqv0gP7LGvlAIi4aF1zbmUdLdxdjht2GFWt1jfV_rfI9C3NDPzvvFJHIP8/s1600/image024.png" /></a></div>
<br />
To be complete, the integration is run one final time and it is back to AGENT3 processing the integration.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTdiBsxEoVytqhB-VyjHJE-7z37HYhSjbSoLXTEGjgfFf7FM_bNsC23ORzTWmEIpDyCXhdf3o_dJu1M0JqHfwfYvGkUC8_nIxj6LcKyisdlHR82YROL6gqoKYtTDeDboyeKxWCOcgixbY/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="235" data-original-width="536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTdiBsxEoVytqhB-VyjHJE-7z37HYhSjbSoLXTEGjgfFf7FM_bNsC23ORzTWmEIpDyCXhdf3o_dJu1M0JqHfwfYvGkUC8_nIxj6LcKyisdlHR82YROL6gqoKYtTDeDboyeKxWCOcgixbY/s1600/image025.png" /></a></div>
<br />
That covers multiple agents running in both asynchronous and synchronous modes.<br />
<br />
Time to move on to cluster assignments, which provide the ability to assign integrations to different clusters. They can be assigned at either Integration (data rule), Location or Target application level.<br />
<br />
As an example, I have created two clusters. One cluster will be designated to run integrations where the source is relational databases, the other will be for cloud data sources.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht6iqMhwgpk2-98kf8GoCijhBiFoLeAMXfqLYZGQDlOfHmyst5ztQZ7GkX_inSObYe8avZbdR_ZbdqoGa4eRh5YTNmq-HO_1YFu_jP4hAvlFtk6frq0iKTeXJeCYImidf1P6q8kEaG5-A/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="216" data-original-width="338" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht6iqMhwgpk2-98kf8GoCijhBiFoLeAMXfqLYZGQDlOfHmyst5ztQZ7GkX_inSObYe8avZbdR_ZbdqoGa4eRh5YTNmq-HO_1YFu_jP4hAvlFtk6frq0iKTeXJeCYImidf1P6q8kEaG5-A/s1600/image026.png" /></a></div>
<br />
It doesn’t matter if the clusters are synchronous or asynchronous. The clusters can be registered with one or more agents and will operate in the same way as my previous examples.<br />
<br />
I am going to keep it as simple as possible and there will be one agent registered to each cluster. The agents will coexist on a single machine. The clusters have been defined in asynchronous mode.<br />
<br />
The cloud agent is configured with the initialisation file to point to the cloud cluster.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtBTfh46A2MZ8DWPYRsOW9dM5m-xwtQfZiGKXCcQzBBVcuGcR1U-cUK6L2EcCk8wcDXAh2kk-kBUeh_oILUD5Mqvi5c4KSDi9WVCl9v54Ue0wcR2H024J_NUb3Z1IP8oKww3K2z1sbUrE/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="92" data-original-width="333" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtBTfh46A2MZ8DWPYRsOW9dM5m-xwtQfZiGKXCcQzBBVcuGcR1U-cUK6L2EcCk8wcDXAh2kk-kBUeh_oILUD5Mqvi5c4KSDi9WVCl9v54Ue0wcR2H024J_NUb3Z1IP8oKww3K2z1sbUrE/s1600/image027.png" /></a></div>
<br />
The agent is started and registers successfully.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrJkN81Ouvkl1cMIGgOR11x6-Ui26U3CZcm2MJnSDKFiRoaXXvYWoUGFCLo__XyTAwJ8GdoVNYhyphenhyphenGXIKTdp60bytTTu0pJrn6POYlEFCOeht-g_xP0VuW21Yc6bugzivYkz5QJk68qvTw/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="271" data-original-width="559" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrJkN81Ouvkl1cMIGgOR11x6-Ui26U3CZcm2MJnSDKFiRoaXXvYWoUGFCLo__XyTAwJ8GdoVNYhyphenhyphenGXIKTdp60bytTTu0pJrn6POYlEFCOeht-g_xP0VuW21Yc6bugzivYkz5QJk68qvTw/s1600/image028.png" /></a></div>
<br />
The SQL agent is configured to the SQL cluster.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3gFIwLIsjT0DJoAsxOs4K8_ZLEkYDG6J3mfq3SaxbLda0Z_l849OTqMZ-UoAJ174t9UteCplo_9_PIMQ5sB-N0Zc5lAFI1yWzyOYgYXiaQQLjLqcedChO9MdbDTLmeIrqO7d9MZVIrf0/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="103" data-original-width="338" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3gFIwLIsjT0DJoAsxOs4K8_ZLEkYDG6J3mfq3SaxbLda0Z_l849OTqMZ-UoAJ174t9UteCplo_9_PIMQ5sB-N0Zc5lAFI1yWzyOYgYXiaQQLjLqcedChO9MdbDTLmeIrqO7d9MZVIrf0/s1600/image029.png" /></a></div>
<br />
The agent is started and registers successfully.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLRDfwfWR6JtVhk-ZKfRT1LhVMjO6pErxqsNE5oBb35zy4os_3iILU1HmBzUdGYCpAh4RoZpC5D0VxeEi0JUgy6GyVRzdBQOuVOKVmuJ10dGR0NawMQmhaxglLKAGESBCPT1pYXX2Kskk/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="214" data-original-width="540" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLRDfwfWR6JtVhk-ZKfRT1LhVMjO6pErxqsNE5oBb35zy4os_3iILU1HmBzUdGYCpAh4RoZpC5D0VxeEi0JUgy6GyVRzdBQOuVOKVmuJ10dGR0NawMQmhaxglLKAGESBCPT1pYXX2Kskk/s1600/image030.png" /></a></div>
<br />
In Data Integration, the cloud agent is shown to be registered to the cloud cluster.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7P3zPufAmJswVgkXn4phvHTGl-XTgjILa110ile302w7YF3QDSfv2GQpPycZyTg7OERVlgAIQ4tIfF0RxUMsXfVesIKWiZsAdEKtLqb2RjTji7aYT0P5iZKmnnD66_wa9gB__qbB2jv4/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="176" data-original-width="574" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7P3zPufAmJswVgkXn4phvHTGl-XTgjILa110ile302w7YF3QDSfv2GQpPycZyTg7OERVlgAIQ4tIfF0RxUMsXfVesIKWiZsAdEKtLqb2RjTji7aYT0P5iZKmnnD66_wa9gB__qbB2jv4/s1600/image031.png" /></a></div>
<br />
The SQL agent is shown to be registered to the SQL cluster.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzpSA3BPuYSjlyNIdO_tW09j1p_4FVbTJv2jBfVQjN6nI-ZUOYl5nTryloV9FqeKG1YoMsajUVI4FHmimNvyiERi3_eJBa6vy52VqaU-z6c10NdivzP_gZA20CzAg2fIU6q8U7uXwPHo0/s1600/image032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="168" data-original-width="544" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzpSA3BPuYSjlyNIdO_tW09j1p_4FVbTJv2jBfVQjN6nI-ZUOYl5nTryloV9FqeKG1YoMsajUVI4FHmimNvyiERi3_eJBa6vy52VqaU-z6c10NdivzP_gZA20CzAg2fIU6q8U7uXwPHo0/s1600/image032.png" /></a></div>
<br />
Within the agent cluster page there is an assignments tab.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcsvnOuTmh4M4NFLdpF2fW3K1DqVSp0V5tyf2J_xIJqeobO4r_gAJGo7ToyWfF27EU6Cpc9IDjiBSl3pSu42c3dtYU5hS445N57XnDzgSqCadtiwy3eHC8Pq6acDQ7ZH-tSHjs9-yMBGc/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="84" data-original-width="495" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcsvnOuTmh4M4NFLdpF2fW3K1DqVSp0V5tyf2J_xIJqeobO4r_gAJGo7ToyWfF27EU6Cpc9IDjiBSl3pSu42c3dtYU5hS445N57XnDzgSqCadtiwy3eHC8Pq6acDQ7ZH-tSHjs9-yMBGc/s1600/image033.png" /></a></div>
<br />
The options available are to assign a type and value. Assignments can also be added or deleted.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5eiDuwbHzw1iZAGosZhmDIxA3W7I3Dw0-YO4vJAocRPeCYTFRv0hUD8vtSBC70R71mt-y7D9NcinUo1boiy2wq-NdcvSupNWjOOzEBe0viNvZ3-YaQNBm0TuoWBQ2MlLxgS2hIlXpXLM/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="242" data-original-width="615" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5eiDuwbHzw1iZAGosZhmDIxA3W7I3Dw0-YO4vJAocRPeCYTFRv0hUD8vtSBC70R71mt-y7D9NcinUo1boiy2wq-NdcvSupNWjOOzEBe0viNvZ3-YaQNBm0TuoWBQ2MlLxgS2hIlXpXLM/s1600/image034.png" /></a></div>
<br />
The type defined the level of integration to assign to the cluster. These can be set at either Application, Integration (data rule) or Location level.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRqhMWv_iFroklAa65OsLmDO8FBwvTBsUXhNjvNM1u9lxn0AfbugFIGYn5Ip2bRq0aKB26tzA4TZUwxMdMu9FR6-RlmcfNHwd8gmDuCXkV8_nLUmhi7DqnNlclxrq-Snnjnr2MrCdi_hc/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="195" data-original-width="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRqhMWv_iFroklAa65OsLmDO8FBwvTBsUXhNjvNM1u9lxn0AfbugFIGYn5Ip2bRq0aKB26tzA4TZUwxMdMu9FR6-RlmcfNHwd8gmDuCXkV8_nLUmhi7DqnNlclxrq-Snnjnr2MrCdi_hc/s1600/image035.png" /></a></div>
<br />
For this first assignment I am going to set it at Location level. Once this has been selected, the available locations are can be selected from the entity dropdown.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLXw5GQCN8UjyWy8DvXu_xGYP7JhydPxVDy4MPqfY22rlm4UVxeiMYN0Eav6sRrDhDXbt9WJ6DqKTB3q3nOW4aa25Qp7RCwgKpzlBii5gyWcvkX6Z3fqTNbcEejtQZoztP9LvSCxoSpRg/s1600/image036.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="259" data-original-width="446" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLXw5GQCN8UjyWy8DvXu_xGYP7JhydPxVDy4MPqfY22rlm4UVxeiMYN0Eav6sRrDhDXbt9WJ6DqKTB3q3nOW4aa25Qp7RCwgKpzlBii5gyWcvkX6Z3fqTNbcEejtQZoztP9LvSCxoSpRg/s1600/image036.png" /></a></div>
<br />
I selected “EPM_AGENT_ORA” which is an integration with a source Oracle database. The integration was covered in part <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-3.html">three</a> </b>of the series.<br />
<br />
I added another assignment at integration (data rule level) which extracts workforce data from a source SQL server database. This integration was covered in part <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-4.html">four</a></b> of the series.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJTYeRxH33BqLcI42BVI0UJOAWyhGiAqyUkmcDW96kC2dZA3DoedWdB_6SBd2JLFER_wVuatp-ejYPgzLPM5CmE4WjT-bLGmgRD_762SU-MqVxshBWLaGZ92hkCTxj98p0Up68qayae5g/s1600/image037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="150" data-original-width="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJTYeRxH33BqLcI42BVI0UJOAWyhGiAqyUkmcDW96kC2dZA3DoedWdB_6SBd2JLFER_wVuatp-ejYPgzLPM5CmE4WjT-bLGmgRD_762SU-MqVxshBWLaGZ92hkCTxj98p0Up68qayae5g/s1600/image037.png" /></a></div>
<br />
This means if any integrations are run at the defined location or integration level, they can be processed by the agents that have been registered to the SQL cluster.<br />
<br />
For the cloud cluster I added an assignment at location level.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgI0FG1uWYVf7FFQJIifVxvM4QsH6fizJDXVxteMzJZO06Oe7DImRxa1_9q0anqP6LlqDHyHYkMAR8zMs1OWsZJbJ7mWRLptwP1jFbmcicubNbsImQNqWbzSav9j3s8VL75MBgkou_8ZU/s1600/image038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="176" data-original-width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgI0FG1uWYVf7FFQJIifVxvM4QsH6fizJDXVxteMzJZO06Oe7DImRxa1_9q0anqP6LlqDHyHYkMAR8zMs1OWsZJbJ7mWRLptwP1jFbmcicubNbsImQNqWbzSav9j3s8VL75MBgkou_8ZU/s1600/image038.png" /></a></div>
<br />
This location includes an integration which extracts exchange rates using an API and was covered in part <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-5.html">five</a></b>.<br />
<br />
Now the assignments have been applied, I ran the integration to extract exchange rates.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMf29O9Oh-eE0IBQD7KN7I5VLzWr0vx0zS5u6HpCK_yK_7SC1Pkj0U-60BokpVc0fdhXOGuRaxpAF1jIkFcP1BlrhJEiTkXDlsgqhTzGHy_aXs-iIUmex2hJrjL23eiZlzT37Y74Pb38c/s1600/image039.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="216" data-original-width="609" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMf29O9Oh-eE0IBQD7KN7I5VLzWr0vx0zS5u6HpCK_yK_7SC1Pkj0U-60BokpVc0fdhXOGuRaxpAF1jIkFcP1BlrhJEiTkXDlsgqhTzGHy_aXs-iIUmex2hJrjL23eiZlzT37Y74Pb38c/s1600/image039.png" /></a></div>
<br />
In the process log you can see the cluster assignments are retrieved and integration is assigned to the cloud cluster.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">22:12:26,732 INFO [AIF]: Getting agent name from assignments...</span></b><br />
<b class="yellow"><span style="font-size: x-small;">22:12:26,732 INFO [AIF]: Getting agent from cluster assignments using Rule Id:77 Location Id:77 Source AppId:68</span></b><br />
<b class="yellow"><span style="font-size: x-small;">22:12:26,733 INFO [AIF]: Retrieved EPM Cluster name:CLOUD_CLUSTER</span></b><br />
<b class="yellow"><span style="font-size: x-small;">22:12:26,734 INFO [AIF]: Retrieved Cluster Mode:ASYNC</span></b><br />
<b class="yellow"><span style="font-size: x-small;">22:12:26,734 INFO [AIF]: Calling agent extract ASYNC mode: BEGIN</span></b><br />
<br />
The queue also shows that the integration has been assigned to the cloud cluster. As the cluster is set up in asynchronous mode, there is no agent shown yet until an agent from the cluster makes a poll to EPM Cloud.<br />
<br />
If the cluster was defined in synchronous mode, an agent would be assigned and the integration would be run directly against that agent.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGqCdNub4w-y5nF3HFWN5XDsEKRiylm0QJfdmxQgql2M29-OF28-v9NoePKSx3S7smHqOYyKekk8z6Kukw1IyiASiONvBnES9y1MnM13jstE96P0e4GF1zVuacVLsgBw4Cdnz6PkC0Yz0/s1600/image040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="111" data-original-width="448" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGqCdNub4w-y5nF3HFWN5XDsEKRiylm0QJfdmxQgql2M29-OF28-v9NoePKSx3S7smHqOYyKekk8z6Kukw1IyiASiONvBnES9y1MnM13jstE96P0e4GF1zVuacVLsgBw4Cdnz6PkC0Yz0/s1600/image040.png" /></a></div>
<br />
The SQL agent makes a poll to EPM Cloud first. As this agent is not registered to the cloud cluster, no job details are returned from the Cloud and no action will be taken.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0_3_KCL3khpbi4RG6HRbleTaeKG5OH9qfhUcLjgRwbquxYDSSDBzRyMh-CIblxBBObZ-EopyESDMkcTzMCSgm9VNBlWvwEk2fPk8zWfuz5nRMjSZAwCcsukmPZiat9gqVELGd35cFDcU/s1600/image041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="86" data-original-width="492" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0_3_KCL3khpbi4RG6HRbleTaeKG5OH9qfhUcLjgRwbquxYDSSDBzRyMh-CIblxBBObZ-EopyESDMkcTzMCSgm9VNBlWvwEk2fPk8zWfuz5nRMjSZAwCcsukmPZiat9gqVELGd35cFDcU/s1600/image041.png" /></a></div>
<br />
As the cloud agent is registered to the cloud cluster, the next time it makes a poll to the queue, job details are returned, and the agent executes the integration process.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBoyOeDlaRwZlGur_b7Td0rYMkYabyBR6jMGjPQgPIsPFjfmwVre0w0fHVbu0REdUWp0S1QpuUH3FtOI5WHaJu_x8ZJ9G3ocjrjOB9iTiO0oO563vQQgSb3i6VDY4Dopb7BZbBsQWP1Ko/s1600/image042.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="162" data-original-width="550" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBoyOeDlaRwZlGur_b7Td0rYMkYabyBR6jMGjPQgPIsPFjfmwVre0w0fHVbu0REdUWp0S1QpuUH3FtOI5WHaJu_x8ZJ9G3ocjrjOB9iTiO0oO563vQQgSb3i6VDY4Dopb7BZbBsQWP1Ko/s1600/image042.png" /></a></div>
<br />
Next to run an integration which extracts data from a source Oracle database. The location the integration is part of has been assigned to the SQL cluster.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOGU0qhfAo_EMeHEMBlr7Rc3PC7SKJpsiiLkwHJLb09lEDhCXqaqlv0L80vEy7qtMlyF1FlHtgOlTwK21o9TK4o-SKwLFcfvX8RoOrsl5Y8lc9vEPBHW09GxuSdyYk562Ouh-ltfy5lBs/s1600/image043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="215" data-original-width="549" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOGU0qhfAo_EMeHEMBlr7Rc3PC7SKJpsiiLkwHJLb09lEDhCXqaqlv0L80vEy7qtMlyF1FlHtgOlTwK21o9TK4o-SKwLFcfvX8RoOrsl5Y8lc9vEPBHW09GxuSdyYk562Ouh-ltfy5lBs/s1600/image043.png" /></a></div>
<br />
The queue shows the integration has been assigned to the SQL cluster.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8QX0xHAt3ZgeLFLqBP0UE7vB3qe_6UGyaY_QUNfNg7dG6c5p19tuYyfCkUKSzOeEKmPlyJBL_cYKvZ3aO0xUKZaIeBU61XL_8AiytVry-WA_Sm_QpwkgSGIxgT1jFqy882GjoHZ_RkGY/s1600/image044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="117" data-original-width="465" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8QX0xHAt3ZgeLFLqBP0UE7vB3qe_6UGyaY_QUNfNg7dG6c5p19tuYyfCkUKSzOeEKmPlyJBL_cYKvZ3aO0xUKZaIeBU61XL_8AiytVry-WA_Sm_QpwkgSGIxgT1jFqy882GjoHZ_RkGY/s1600/image044.png" /></a></div>
<br />
The SQL agent is registered to the SQL cluster, next time the agent makes a poll to the queue, job details are returned, and the agent processes the integration.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNCmELaGGV6x2gW4Gzbz0UCRkZKctZZEBniQeNFLS4yqXlNRvwIEevxh9BNAAvw0B9-QNnjLgV7qaFIuGo09MVtliUWE9H5NS6lpve0YYQYHtAyYxpt_5azxGXQnHC_HRHKVdI4e6y01A/s1600/image045.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="150" data-original-width="549" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNCmELaGGV6x2gW4Gzbz0UCRkZKctZZEBniQeNFLS4yqXlNRvwIEevxh9BNAAvw0B9-QNnjLgV7qaFIuGo09MVtliUWE9H5NS6lpve0YYQYHtAyYxpt_5azxGXQnHC_HRHKVdI4e6y01A/s1600/image045.png" /></a></div>
<br />
Now on to running the integration which extracts workforce database from a source SQL server database.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizdCYpj1HcSZIT3Y6d1NOOpl3V-HPKLsm_nYjeU17XxIJa6lvkr-t5rn3Ti41OZabY9YdyvLQ1-iCtZIMWFgtPVF0ufU4vwes4_NITNsEPY-o3GAFRnk0VzxupWXOY9mos9QMmk0m-jOQ/s1600/image046.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="130" data-original-width="521" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizdCYpj1HcSZIT3Y6d1NOOpl3V-HPKLsm_nYjeU17XxIJa6lvkr-t5rn3Ti41OZabY9YdyvLQ1-iCtZIMWFgtPVF0ufU4vwes4_NITNsEPY-o3GAFRnk0VzxupWXOY9mos9QMmk0m-jOQ/s1600/image046.png" /></a></div>
<br />
This integration has been assigned to the SQL cluster so appears in the queue.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirMZa0-PVXwVa-FMz3tnTPLmsOYWxRlVNEN5X_kbw506L-9l6gMTeCtN8sFdGRI-9yCT3WRyKKGoO4HYILyg1U-n_XXAIi-m4sv9k3ZqTr94oK0AnlulrNv6HEgwkmvRGocEWnMdirvTY/s1600/image047.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="114" data-original-width="369" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirMZa0-PVXwVa-FMz3tnTPLmsOYWxRlVNEN5X_kbw506L-9l6gMTeCtN8sFdGRI-9yCT3WRyKKGoO4HYILyg1U-n_XXAIi-m4sv9k3ZqTr94oK0AnlulrNv6HEgwkmvRGocEWnMdirvTY/s1600/image047.png" /></a></div>
<br />
The next time the SQL agent makes a poll, job details will be returned, and the agent will process the integration.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUU2qwjpgZw9qhBMQcywRxbZ9Zxb6y9g-ZaXPmu8Dl6w4xmOf5Nv0SaTdKObZBBkTj7AqrNN_wrgc5Yya6pWZ_ZYaSlekB7zr7mB_5QG_3WxEJD_vuC914tE9blvVztMUTzY3XInSCrtc/s1600/image048.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="164" data-original-width="612" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUU2qwjpgZw9qhBMQcywRxbZ9Zxb6y9g-ZaXPmu8Dl6w4xmOf5Nv0SaTdKObZBBkTj7AqrNN_wrgc5Yya6pWZ_ZYaSlekB7zr7mB_5QG_3WxEJD_vuC914tE9blvVztMUTzY3XInSCrtc/s1600/image048.png" /></a></div>
<br />
Assignment types have an order of precedence when integrations are initiated. Integration takes precedence over location, location takes precedence over an application.<br />
<br />
To demonstrate this, I added the integration that extracts data from a source Oracle database to the cloud cluster.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgujOnHIY68zJdM5X34FnD_3AVRJmWPldMJppBWZyYqP2XlZC0gZbjUXdCKi0pvX_N4Q2VY9hK5_uKR8RlM4GZpwDV3B05aXm3uVrfHD2mOYm7CI2RmLn2nlejF_ZduuYtVdekEImgUw4Q/s1600/image049.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="231" data-original-width="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgujOnHIY68zJdM5X34FnD_3AVRJmWPldMJppBWZyYqP2XlZC0gZbjUXdCKi0pvX_N4Q2VY9hK5_uKR8RlM4GZpwDV3B05aXm3uVrfHD2mOYm7CI2RmLn2nlejF_ZduuYtVdekEImgUw4Q/s1600/image049.png" /></a></div>
<br />
This means the integration is assigned to the cloud cluster and the location that the integration is part of is assigned to the SQL cluster.<br />
<br />
The integration was run again.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-2wQUfqgIfCjUK4vSTDXdhun4Vb_vu6cLl6078QUBEZ-Y7r7XTDoCaakuDB955OKSq_gRQv_rMxbsdYszVJ45XAkropHIskQCorYVGxOH4tl0BET15a_X-R-wgxMgCiAEMzDpoc7iHiI/s1600/image043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="215" data-original-width="549" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-2wQUfqgIfCjUK4vSTDXdhun4Vb_vu6cLl6078QUBEZ-Y7r7XTDoCaakuDB955OKSq_gRQv_rMxbsdYszVJ45XAkropHIskQCorYVGxOH4tl0BET15a_X-R-wgxMgCiAEMzDpoc7iHiI/s1600/image043.png" /></a></div>
<br />
This time the integration is added to the cloud cluster queue. This is because integration takes precedence over location.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5lYryRF0Z5OecbHcXv2tL91yiFBK8ByohNlSU431Oulfq5DXKBVz1EkMQ34dcL5-Q1XfjwQn-bMLd_kBdaPi5YcCjNjScxWkw-CwJmfwv5dniSogtPRQpr2UrlMYwbaR8bq8TI-KiSyw/s1600/image050.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="108" data-original-width="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5lYryRF0Z5OecbHcXv2tL91yiFBK8ByohNlSU431Oulfq5DXKBVz1EkMQ34dcL5-Q1XfjwQn-bMLd_kBdaPi5YcCjNjScxWkw-CwJmfwv5dniSogtPRQpr2UrlMYwbaR8bq8TI-KiSyw/s1600/image050.png" /></a></div>
<br />
The cloud agent then runs the integration process.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixrKUeyUlspzEkXtWWnYv1cgyocH3RQ7o93xq7CdSPdL8nxGuQ2N36giJZp_vo0lpWHErvX31Zz3DRsAfPiXS3-dsBN30Wjc-1wqlJXaj69EUqjPEGLeEGl2YPl2rlV-Z4zaTObgvvnTI/s1600/image051.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="161" data-original-width="547" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixrKUeyUlspzEkXtWWnYv1cgyocH3RQ7o93xq7CdSPdL8nxGuQ2N36giJZp_vo0lpWHErvX31Zz3DRsAfPiXS3-dsBN30Wjc-1wqlJXaj69EUqjPEGLeEGl2YPl2rlV-Z4zaTObgvvnTI/s1600/image051.png" /></a></div>
<br />
So what happens if an integration is run that does not fall under any of the assignments?<br />
<br />
I removed the workforce extract integration from the SQL cluster.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihkCS5-nT2kYZfWSYFoYqJW8vxYjlVMtKRd4hAC_vyQbLurV0D_O__m_oKNv9fI9kn6Ppe-wp4yNE739FfiAras8bWzNNPdf9VJIukxH4OG-DlSqncegf9n_poE75x0vAlLpgUpLDmdHw/s1600/image052.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="283" data-original-width="484" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihkCS5-nT2kYZfWSYFoYqJW8vxYjlVMtKRd4hAC_vyQbLurV0D_O__m_oKNv9fI9kn6Ppe-wp4yNE739FfiAras8bWzNNPdf9VJIukxH4OG-DlSqncegf9n_poE75x0vAlLpgUpLDmdHw/s1600/image052.png" /></a></div>
<br />
This means the integration is not covered by any of the assignments.<br />
<br />
When the integration is run it instantly fails.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicYWiq9hllHWV-KmfarKBLiTk-rtxvA9EGh8hSZLPtk15_v9ZK6QUJeWgT84u8eE0dJ4vlzhEkS-TORZaHHHq8c7svtLC1IfpDKUiBbAwf0Sq0Ox535db75fyGeOyGxvJXNigMtSTGcsU/s1600/image053.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="119" data-original-width="507" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicYWiq9hllHWV-KmfarKBLiTk-rtxvA9EGh8hSZLPtk15_v9ZK6QUJeWgT84u8eE0dJ4vlzhEkS-TORZaHHHq8c7svtLC1IfpDKUiBbAwf0Sq0Ox535db75fyGeOyGxvJXNigMtSTGcsU/s1600/image053.png" /></a></div>
<br />
Checking the process log highlights that no cluster assignments were found so the process fails.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Getting agent name from assignments...</span></b><br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Getting agent from cluster assignments using Rule Id:75 Location Id:76 Source AppId:62</span></b><br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Retrieved EPM Cluster name:null</span></b><br />
<b class="yellow"><span style="font-size: x-small;">ERROR [AIF]: Cluster not found for process id:1176</span></b><br />
<b class="yellow"><span style="font-size: x-small;">ERROR [AIF]: Unexpected error in importData:Cluster not found for process id: 1176</span></b><br />
<br />
I think that should cover enough detail about running multiple agents and cluster assignments.<br />
<br />
Coming up next, drill down to source data.<br />
<div>
<br /></div>
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-23104556352732267492019-10-21T05:46:00.000-07:002019-10-31T08:54:15.897-07:00EPM Cloud - Integration Agent Part 5 - Events and custom scripting<div dir="ltr" style="text-align: left;" trbidi="on">
If you are looking to extend the default functionality of the integration agent, then events and scripting are there to provide just this.<br />
<br />
It could be that you want to override the SQL or bind variables that have been defined in Data Integration. You may want to extract data from a database that is not currently available with standard functionality such as SAP Hana. You may want to pull data from a cloud provider or other data sources. It could be that you wish to initiate other processes or send email notifications. This can all be achieved with the custom scripting option.<br />
<br />
Groovy or Jython are the scripting languages supported which allow this extended functionality. I went through details of how to configure them with the agent in <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-2-get.html">Part 2</a></b> of this series.<br />
<br />
If you are familiar with on-premise FDMEE then you will no doubt be aware of events and scripting. If you are not, basically during different stages of the integration process a custom script will be executed. With the integration agent there are currently four events and scripts.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj58k9rQwVnjBbJ78XpRN6tZ0DxVoe6I_NWENT1DZs5eW2VFH5UKjNXjNA4TDh6jG1mjyBhyphenhyphenDwrcNU1ZXnDU8ipY-LedoIjdkL_tmfE0rq34kBeshrUYg0w3nZRYnI4aakFUUFM_imehQc/s1600/a1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="176" data-original-width="507" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj58k9rQwVnjBbJ78XpRN6tZ0DxVoe6I_NWENT1DZs5eW2VFH5UKjNXjNA4TDh6jG1mjyBhyphenhyphenDwrcNU1ZXnDU8ipY-LedoIjdkL_tmfE0rq34kBeshrUYg0w3nZRYnI4aakFUUFM_imehQc/s1600/a1.png" /></a></div>
<br />
<b class="yellow">Before Extract</b> - This script is executed before the agent connects to the data source and executes the SQL query.<br />
<br />
<b class="yellow">After Extract</b> - This script is executed after the agent has extracted the data and produced an extract data file.<br />
<br />
<b class="yellow">Before Upload</b> - This script is executed before the data file is uploaded to EPM Cloud.<br />
<br />
<b class="yellow">After upload</b> – This script is executed after the data file has been uploaded to EPM Cloud.<br />
<br />
If Groovy has been installed and the home location been defined in the agent initialisation file,<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicnWTZ2DZZMQ6vb5V-8F8mRVb3tgoWuw131t3JU8yHAfSxe5Iwuk0rUR7NDm_rYmqsvGbxaJXgGPQYaebdMRJTdGestOP2MrdAag1y7t48XCKGrlZufQb-II0ENlrR3An7QWWW0h0jmYE/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="58" data-original-width="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicnWTZ2DZZMQ6vb5V-8F8mRVb3tgoWuw131t3JU8yHAfSxe5Iwuk0rUR7NDm_rYmqsvGbxaJXgGPQYaebdMRJTdGestOP2MrdAag1y7t48XCKGrlZufQb-II0ENlrR3An7QWWW0h0jmYE/s1600/image005.png" /></a></div>
<br />
when an integration is run, the agent tries to execute each Groovy event script. As I have not yet created any scripts, they are not found.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">17:47:14:094 :: --------------- Executing Custom Event :BefExtract ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:47:14:407 :: Script: E:\EPMAgent\appdata\scripts\BefExtract.groovy Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:47:14:705 :: Writing extract output to file: E:\EPMAgent\appdata\data\1016.dat</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:47:14:720 :: --------------- Completed execution for sessionId:1016 ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:47:14:720 :: --------------- Executing Custom Event :AftExtract ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:47:14:720 :: Script: E:\EPMAgent\appdata\scripts\AftExtract.groovy Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:47:14:720 :: --------------- Executing Custom Event :BefUpload ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:47:14:720 :: Script: E:\EPMAgent\appdata\scripts\BefUpload.groovy Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:47:14:720 :: Commencing file upload to cloud for file:E:\EPMAgent\appdata\data\1016.dat</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:47:15:182 :: File Upload successfully complete</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:47:15:182 :: --------------- Executing Custom Event :AftUpload ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:47:15:182 :: Script: E:\EPMAgent\appdata\scripts\AftUpload.groovy Not found.</span></b><br />
<br />
If Jython has been installed and the home location defined in the agent initialisation file,<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkqFWQpEPZGJ5S3a9K3Uvw2UuuCyUC_Pkus_fmc8LHYrROrz9T_VRjfxVMH8nEJ9sZBPoeqQ_iap3V_TitHeuhOw5PabJe6A9Z_qZiElzXrn7jpsjiY2ntcRSKYU_fF7LNZvHBoGNO9MQ/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="56" data-original-width="281" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkqFWQpEPZGJ5S3a9K3Uvw2UuuCyUC_Pkus_fmc8LHYrROrz9T_VRjfxVMH8nEJ9sZBPoeqQ_iap3V_TitHeuhOw5PabJe6A9Z_qZiElzXrn7jpsjiY2ntcRSKYU_fF7LNZvHBoGNO9MQ/s1600/image006.png" /></a></div>
<br />
the log will contain a Jython script execution for each event.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">17:51:28:869 :: --------------- Executing Custom Event :BefExtract ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:51:30:682 :: Script: E:\EPMAgent\appdata\scripts\BefExtract.py Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:51:31:404 :: Writing extract output to file: E:\EPMAgent\appdata\data\1015.dat</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:51:31:417 :: --------------- Completed execution for sessionId:1015 ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:51:31:417 :: --------------- Executing Custom Event :AftExtract ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:51:31:417 :: Script: E:\EPMAgent\appdata\scripts\AftExtract.py Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:51:31:417 :: --------------- Executing Custom Event :BefUpload ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:51:31:417 :: Script: E:\EPMAgent\appdata\scripts\BefUpload.py Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:51:31:417 :: Commencing file upload to cloud for file:E:\EPMAgent\appdata\data\1015.dat</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:51:32:215 :: File Upload successfully complete</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:51:32:215 :: --------------- Executing Custom Event :AftUpload ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:51:32:215 :: Script: E:\EPMAgent\appdata\scripts\AftUpload.py Not found.</span></b><br />
<br />
If I create a before extract script and place it in the application data scripts folder<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGgGTMTD_TJoU6192Z0MJQq81f-RUNm4e857hehOEwTE34dY17JoAqLB1Hy7jZLEpzPqhKOcu2-_N2a1y92oQv-K_n4tjrkwMFR4W7xn5LD3cYTn_dUsIHF8CREzwHMwlvDjPr3JJFCSE/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="112" data-original-width="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGgGTMTD_TJoU6192Z0MJQq81f-RUNm4e857hehOEwTE34dY17JoAqLB1Hy7jZLEpzPqhKOcu2-_N2a1y92oQv-K_n4tjrkwMFR4W7xn5LD3cYTn_dUsIHF8CREzwHMwlvDjPr3JJFCSE/s1600/image007.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
this time in the log the script will be found and executed.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">17:58:40:412 :: --------------- Executing Custom Event :BefExtract ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">17:58:40:412 :: Executing script:E:\EPMAgent\appdata\scripts\BefExtract.py</span></b><br />
<br />
For each scripting type there are API methods available to perform actions. These include writing to the process log, fetching and updating SQL queries and bind variables. There is also the ability to skip the step to extract the data, this allows you to override the default extract process and create your own data file. So you could skip the extract step, write your own code to connect to a different data source, extract data and produce a file that is uploaded to EPM Cloud. The file must contain the exact columns that have been defined in EPM Cloud and be named with the correct format of <b class="yellow"><process_id>.dat</b>. More on this later.<br />
<br />
Similar to on-premise FDMEE there are context functions available. These provide information such as the agent application data directory, Job ID (process id), data filename and delimiter.<br />
<br />
In on-premise FDMEE you would access these functions with <b class="yellow">fdmeeContext[“FUNCTION”]</b>, with the agent you use <b class="yellow">agentContext[“FUNCTION”]</b>.<br />
<br />
In addition to the context functions there is also the API. If you have worked with the API in on-premise then you will know that methods are called with <b>fdmAPI.method</b>. With the agent it is <b>agentAPI.method</b>.<br />
<br />
To demonstrate the available contexts, in the before extract Jython script I added code to iterate through them and print them to the agent command window. The API “<b>logInfo</b>” method is used to write the information to the process log. There is an API method “<b>logError</b>” to log error messages to the process log.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLuLwWQ7N2OArx4alPkC3o4B3g-l5fdvvwEDxbl57dmMj6es3dlvx4-hnJvr9pqjDbiE0wE_Y4_fweQt_G3oOi_FSMfbIyfdLvg0tDjGNYsm76s4VwI1I32_JHp_zaGQHW_S8ncBJXBk8/s1600/a2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="172" data-original-width="507" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLuLwWQ7N2OArx4alPkC3o4B3g-l5fdvvwEDxbl57dmMj6es3dlvx4-hnJvr9pqjDbiE0wE_Y4_fweQt_G3oOi_FSMfbIyfdLvg0tDjGNYsm76s4VwI1I32_JHp_zaGQHW_S8ncBJXBk8/s1600/a2.png" /></a></div>
<br />
In the above script I have also provided an example of accessing a context directly.<br />
<br />
When the integration is executed, in the command window the contexts functions and values are outputted.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmyF_-Mgqzj2sMsI3gBhIQn40DgKlG1yDzluFUbzdjnLQXkWpwaPqKpX3BaSfF2Sd7A5p668GACMzqfS1w0UI7HvHLDFm_21PaK-2En_5haiVKHkShiLF3Q-I8xo_DCei0s7I3gNbdmVY/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="150" data-original-width="530" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmyF_-Mgqzj2sMsI3gBhIQn40DgKlG1yDzluFUbzdjnLQXkWpwaPqKpX3BaSfF2Sd7A5p668GACMzqfS1w0UI7HvHLDFm_21PaK-2En_5haiVKHkShiLF3Q-I8xo_DCei0s7I3gNbdmVY/s1600/image009.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
As well as the command window, the context information has been written to the process log.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFq1gyquKe4EBaLUAc0-x8JRfzFPdxXasYQdb_w-kupJdmU8NPQ98sZbYAtE0bbZZJf7t37GDWFIvCQa6ZatlUWuAe9HK-j5qwwYFptdOzd4EvFWiO33y8YCwwBad4CXMsfAIwhRdnCVU/s1600/a3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="170" data-original-width="630" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFq1gyquKe4EBaLUAc0-x8JRfzFPdxXasYQdb_w-kupJdmU8NPQ98sZbYAtE0bbZZJf7t37GDWFIvCQa6ZatlUWuAe9HK-j5qwwYFptdOzd4EvFWiO33y8YCwwBad4CXMsfAIwhRdnCVU/s1600/a3.png" /></a></div>
<br />
So now let us look at using the API to retrieve the SQL query, then update it before it is executed.<br />
<br />
In Data Integration, the following query has been defined to extract data.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpVx88gzphDf8BnTw7dSFCtEb3x5bDrYIX2rShJtemCSp_ZJCa_s7ng4Rd0tut7xuHhEd1AN_dDQ5yD8JzQrN4c91dvP1dKSgPvHgIkWkA8WRP9BRmdeDheAVm9niGy6EAfouCgp08k_w/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="165" data-original-width="587" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpVx88gzphDf8BnTw7dSFCtEb3x5bDrYIX2rShJtemCSp_ZJCa_s7ng4Rd0tut7xuHhEd1AN_dDQ5yD8JzQrN4c91dvP1dKSgPvHgIkWkA8WRP9BRmdeDheAVm9niGy6EAfouCgp08k_w/s1600/image011.png" /></a></div>
<br />
As an example, the source data includes year and period.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuDnlWX-_XYdA64KvGnKvqNqQQYN2xTF2DuQGFOFFXweClmLv1sqKYCWoxthKmgQC4T6bfMBxZw_R3QTjqMvdxmjaJ42Q09GoLmf08l46LmmgjEHAFzC9mD7OacJhkKWW_wcD63wf71KE/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="229" data-original-width="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuDnlWX-_XYdA64KvGnKvqNqQQYN2xTF2DuQGFOFFXweClmLv1sqKYCWoxthKmgQC4T6bfMBxZw_R3QTjqMvdxmjaJ42Q09GoLmf08l46LmmgjEHAFzC9mD7OacJhkKWW_wcD63wf71KE/s1600/image012.png" /></a></div>
<br />
The query could be updated to include the year and period or have bind variables defined and set in the load rule, but as I want to demonstrate the API functionality, I am going to retrieve the SQL query in the before extract script using the API method “<b>getQuery</b>”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGxFC3HJ-stNk1jduEam-lNAtYbbKTR5ZrnTrZPME-vAd82_nV9KpW1jsu8YxaI7IjKb9LlGdgFh4UE3LZtvQalIK5qghj4jnrse8jDHxJBJunwCZV9grf1YvBym2ke514gKZXMBkJpZ4/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="107" data-original-width="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGxFC3HJ-stNk1jduEam-lNAtYbbKTR5ZrnTrZPME-vAd82_nV9KpW1jsu8YxaI7IjKb9LlGdgFh4UE3LZtvQalIK5qghj4jnrse8jDHxJBJunwCZV9grf1YvBym2ke514gKZXMBkJpZ4/s1600/image013.png" /></a></div>
<br />
When the integration is run, the “BefExtract” script will be executed and the SQL query stored and displayed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBhKs5M9aNyzn5G7n0YTtjD8KQkTUgK6Tw1Y44kfMgaJmgVQ_bKG5GJ4YHXOygSrwg4ic4XEgZjit5BxnH3UyE8kPWSg4kMJSWXLFuMXCx80sk66K3tSYfjzoU8dgIMjPe8d__aPeSWhU/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="80" data-original-width="577" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBhKs5M9aNyzn5G7n0YTtjD8KQkTUgK6Tw1Y44kfMgaJmgVQ_bKG5GJ4YHXOygSrwg4ic4XEgZjit5BxnH3UyE8kPWSg4kMJSWXLFuMXCx80sk66K3tSYfjzoU8dgIMjPe8d__aPeSWhU/s1600/image014.png" /></a></div>
<br />
Let us expand on that. This time I am going generate the current month and year. Retrieve the SQL query and enhance it to filter the data by current month and year. The API method “<b>updateQuery</b>” is then called passing in the updated query, the extract will then be run using the modified query.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1vyxhE0MAb8mo9hSSR1AVeZys4dFHbW1eHn17nboE4qGH9UCIqJNBEXdHJz4dqMOCWV9VIdk_YcjeBWpsMzr3uEbWBh_s0pmHUBSDHkTpY1Vcp53X5Z3jpekFFdQqnaOC3jUgTv8tdKI/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="362" data-original-width="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1vyxhE0MAb8mo9hSSR1AVeZys4dFHbW1eHn17nboE4qGH9UCIqJNBEXdHJz4dqMOCWV9VIdk_YcjeBWpsMzr3uEbWBh_s0pmHUBSDHkTpY1Vcp53X5Z3jpekFFdQqnaOC3jUgTv8tdKI/s1600/image015.png" /></a></div>
<br />
I could have just as easily ignored the query defined in Data Integration. Created a new query and then used the “<b>updateQuery</b>” method to override the original query.<br />
<br />
Running the previous example shows the original query has been updated to filter by current month and year. The updated query is then executed.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk2VYWNMkEl3Q0C06MG5X5Bg10UsF0VE5UrF8J2j-04ua1YJjN5iWzV1NLSuWFNI4OWHUARxyZCLt5n8DG1-c9uvtI_RB19intOqrBSCXaDeKmPMDBhx5ZGFefxOh57Z-RwX66uVshNX8/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="244" data-original-width="580" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk2VYWNMkEl3Q0C06MG5X5Bg10UsF0VE5UrF8J2j-04ua1YJjN5iWzV1NLSuWFNI4OWHUARxyZCLt5n8DG1-c9uvtI_RB19intOqrBSCXaDeKmPMDBhx5ZGFefxOh57Z-RwX66uVshNX8/s1600/image016.png" /></a></div>
<br />
Moving on to retrieving and updating bind variables using the API methods “<b>getBindVariables</b>” and “<b>setBindVariables</b>”.<br />
<br />
A new query was created in Data Integration to include bind variables for year and period. The bind variables were added as application filters in Data Management, please refer to <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-3.html">part 3</a></b> if you are not clear on bind variables.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPy6-0yzO_JQ_zKXpExmFiw4afJ7urnugdk_53iO7BHfXv9fFC8RkFOYAqsohyphenhyphenHz4zqLdHApZ8ze70HxLMupQuVUIDKdjPZCLEPRyFTYcUGrWN3Nr1qzqTp4Cgj9LhFIWg5aUD0yudU8g/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="187" data-original-width="630" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPy6-0yzO_JQ_zKXpExmFiw4afJ7urnugdk_53iO7BHfXv9fFC8RkFOYAqsohyphenhyphenHz4zqLdHApZ8ze70HxLMupQuVUIDKdjPZCLEPRyFTYcUGrWN3Nr1qzqTp4Cgj9LhFIWg5aUD0yudU8g/s1600/image017.png" /></a></div>
<br />
The query was defined at data load rule level and set along with the bind variables in the source filters of the load rule.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkO8RIfxSDCVn7StzENZohYRcnybSrjFJlOC3bYGhTopShH0EQWtiX06x3cnAoxde0DjW0C2OS3YbKYezO_Ze-qtGo8e_H3K8rlX1fvNJw2dx_YCBNbQx589j4whMkxDpTkTHchwlW1x0/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="131" data-original-width="349" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkO8RIfxSDCVn7StzENZohYRcnybSrjFJlOC3bYGhTopShH0EQWtiX06x3cnAoxde0DjW0C2OS3YbKYezO_Ze-qtGo8e_H3K8rlX1fvNJw2dx_YCBNbQx589j4whMkxDpTkTHchwlW1x0/s1600/image018.png" /></a></div>
<br />
To be complete, in Data Integration these are set in the integration option filters.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR1Z1PJzSAV2ctL7WSdpYN2PMIN7imdKhkSCKZd1O3XxHkoCSGdbpEHW2k9h3-fOEjZcyWbXc6lSov7QNWv5HeCWnnSLiV8umpJ_gpEt3OXnI49Lw7gxp3EOnEv4CT-X2AjO86fcO4Lh8/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="297" data-original-width="477" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR1Z1PJzSAV2ctL7WSdpYN2PMIN7imdKhkSCKZd1O3XxHkoCSGdbpEHW2k9h3-fOEjZcyWbXc6lSov7QNWv5HeCWnnSLiV8umpJ_gpEt3OXnI49Lw7gxp3EOnEv4CT-X2AjO86fcO4Lh8/s1600/image019.png" /></a></div>
<br />
Having to manually update the variables is not great and prone to error, so let us go through an example of overriding them with custom scripting.<br />
<br />
Overriding the bind variables defined in the integration can be achieved in the before extract event script.<br />
<br />
The following script generates the current month and year. The bind variables are retrieved using the API method “<b>getBindVariables</b>” and then updated with the current month/year values using the method “<b>setBindVariables</b>”.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ylJ9dzcG839Hg_GTAM8E4HqnSQYl99UN9X5PmZsBlo0XKARhuJ32bMnXQs2_MtLjWaflT16C_mTMpWtU7nEslEpOgty2elIkmhgIRj2wU05axAg_Z8T5Mn3N63MT2q8XDtfJAf1DZsU/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="436" data-original-width="497" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ylJ9dzcG839Hg_GTAM8E4HqnSQYl99UN9X5PmZsBlo0XKARhuJ32bMnXQs2_MtLjWaflT16C_mTMpWtU7nEslEpOgty2elIkmhgIRj2wU05axAg_Z8T5Mn3N63MT2q8XDtfJAf1DZsU/s1600/image020.png" /></a></div>
<br />
If the integration is run, you can see the original bind variables values have been updated with the current month and year.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieqtgZh8E30q4mnHtje2hcKD25YB9wXWs7FoakcD6WqNUHmLZaU0lq33b6Uv4T3OEj6zA2Li2CcuS9DUW6h6Abeg0k_i_EqYf7vH3UjIAyQnLYc_qOdcDT7YmC8ClPx8aJbtIHufGV2nw/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="197" data-original-width="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieqtgZh8E30q4mnHtje2hcKD25YB9wXWs7FoakcD6WqNUHmLZaU0lq33b6Uv4T3OEj6zA2Li2CcuS9DUW6h6Abeg0k_i_EqYf7vH3UjIAyQnLYc_qOdcDT7YmC8ClPx8aJbtIHufGV2nw/s1600/image021.png" /></a></div>
<br />
The example provided a way of updating the variables but does not offer much flexibility, they will always be overridden in the before extract script.<br />
<br />
How about being able to use the values defined in the integration or override them. Also, instead of generating the year and period in the script let them be controlled by substitution variables.<br />
<br />
Let us go through an example of how to achieve this. The following substitution variables for current month and year exist in the target application. These values will be retrieved using the REST API resource for substitution variables.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNmbkp7UDyEWvMvZd5j0ER6-mIq9GxHWIxsKHku6y8nqZpI6i5DC4baNsyzSYLNjID0faJYVTQ9SiirNOavxDw7jL6IwLW3I5UldsWh43OnOflHfSNrH-p-Rpv4MlRnrHlWSuEcOTruwg/s1600/image023.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="182" data-original-width="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNmbkp7UDyEWvMvZd5j0ER6-mIq9GxHWIxsKHku6y8nqZpI6i5DC4baNsyzSYLNjID0faJYVTQ9SiirNOavxDw7jL6IwLW3I5UldsWh43OnOflHfSNrH-p-Rpv4MlRnrHlWSuEcOTruwg/s1600/image023.jpg" /></a></div>
<br />
<div>
In the integration filters, if the values start and end with @ then that means the values should be derived from substitution variables. The sub var name is between the @ signs. If the variable does not start and end with @ then the values in the integration will not be overridden.</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKyU_5I4jPBZiAejkhzcO7W2FYbiI9dcA55M2TlaJA7FfAE0eK52rHUaD1r2HHuT-9H6vQhUoV3Udky-aasaT6ICeHrGGNrEIkoiYCaSlKHjYW9WXd_pmaovtVQXb9PEg1UD3AH52LYfc/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="247" data-original-width="475" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKyU_5I4jPBZiAejkhzcO7W2FYbiI9dcA55M2TlaJA7FfAE0eK52rHUaD1r2HHuT-9H6vQhUoV3Udky-aasaT6ICeHrGGNrEIkoiYCaSlKHjYW9WXd_pmaovtVQXb9PEg1UD3AH52LYfc/s1600/image024.png" /></a></div>
<br />
Let me break the before extract script into chunks and go through it.<br />
<br />
The first section prints the SQL query which will be executed to extract the data.<br />
<br />
The bind variables are retrieved, stored and printed.<br />
<br />
An empty dictionary is created which will hold the EPM Cloud details, these will be read from the agent initialisation file.<br />
<br />
The target application name is defined.<br />
<br />
The modules that are required in the script are imported. urrllb2 for making the REST API call, base64 to generate the encoded authorisation header and json to process the response from the REST API call.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5ILrUY0inxKqPaHtvHJ3k215Y65WTAiUrVhW1iD6RbZxH0cPudSIPuQidne-AIllXxVbGk36LyoRhoR4FBib1ePqPoCbOnVxIZ8NexI20A0F4ODrVGszY57VNm7XHmWIxD8QsCEMln7M/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="318" data-original-width="433" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5ILrUY0inxKqPaHtvHJ3k215Y65WTAiUrVhW1iD6RbZxH0cPudSIPuQidne-AIllXxVbGk36LyoRhoR4FBib1ePqPoCbOnVxIZ8NexI20A0F4ODrVGszY57VNm7XHmWIxD8QsCEMln7M/s1600/image025.png" /></a></div>
<br />
At this point, if the integration is run the query and bind variables will be printed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisOh4G73T-_nERMNuF9yag8CNpvWF43tRM5K9vjpJiK2mlrMiJ3S6Sr4Oz3HZ8OTBl8W6FUHWHn2tJQBFOj4IpEgAXL_-_OK2btlp399kF9SUZGzCeoJK51L4liLNGRE7ivEQf6YcQPfA/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="133" data-original-width="540" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisOh4G73T-_nERMNuF9yag8CNpvWF43tRM5K9vjpJiK2mlrMiJ3S6Sr4Oz3HZ8OTBl8W6FUHWHn2tJQBFOj4IpEgAXL_-_OK2btlp399kF9SUZGzCeoJK51L4liLNGRE7ivEQf6YcQPfA/s1600/image026.png" /></a></div>
<br />
The next section iterates through each of the bind variables.<br />
<br />
If the bind variable starts and ends with @ then this means that substitution variable values should be retrieved.<br />
<br />
If the Cloud details dictionary is empty, then call a function to extract this information from the agent initialisation file. I have not included the function for this example.<br />
<br />
The REST API URL to retrieve sub var information is generated.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSCOXQO77ROg_FCENer2GgWPXeZXnzXHxPUYgbwP0g2Bbaeeog7MkzlMO57Obm7keBjQr51_YygB749w-hh6oCqJkogCSwoemyuGjqK1pHJqtXUZ6k0ekFDO_ntcFrj9njb7LaZmTj3uY/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="388" data-original-width="499" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSCOXQO77ROg_FCENer2GgWPXeZXnzXHxPUYgbwP0g2Bbaeeog7MkzlMO57Obm7keBjQr51_YygB749w-hh6oCqJkogCSwoemyuGjqK1pHJqtXUZ6k0ekFDO_ntcFrj9njb7LaZmTj3uY/s1600/image027.png" /></a></div>
<br />
As the bind variables start and end with @, the first iteration through the variables will retrieve and display the Cloud details. The REST API will be generated and outputted.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfBqk1qoT0erE7BLefSk-LfXALUNKAM3wb0CUNAloVCTuVBs6D2HqxPbXI6_VAabebL-MKTAzplBy9D7Ro7-MFKQozA8HDnSAsAKiY2cNHxUpIHx4qnXLSUc8KA8ehbIsEa1d9WK6cq18/s1600/a4.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="143" data-original-width="407" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfBqk1qoT0erE7BLefSk-LfXALUNKAM3wb0CUNAloVCTuVBs6D2HqxPbXI6_VAabebL-MKTAzplBy9D7Ro7-MFKQozA8HDnSAsAKiY2cNHxUpIHx4qnXLSUc8KA8ehbIsEa1d9WK6cq18/s1600/a4.PNG" /></a></div>
<br />
The final section of the script generates the REST API request to retrieve the sub var details.<br />
<br />
The Cloud credentials are base64 encoded and added to the authorisation header.<br />
<br />
The JSON response from the REST call is stored. An example of the JSON response is:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8FVzt2jhAKUewaRplNwLhvAoNiALh9Dvxo6s_x7QH8F61uUaBxkbcJh4HKZ0N7Hi4kF0wp0erPQJjUQAuvq3FmXO-NylpfIRBrBENdPAt7TEe4kR6YNQ-gUWbniHiH6ekZ3QQ_A1HqYg/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="69" data-original-width="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8FVzt2jhAKUewaRplNwLhvAoNiALh9Dvxo6s_x7QH8F61uUaBxkbcJh4HKZ0N7Hi4kF0wp0erPQJjUQAuvq3FmXO-NylpfIRBrBENdPAt7TEe4kR6YNQ-gUWbniHiH6ekZ3QQ_A1HqYg/s1600/image029.png" /></a></div>
<br />
If the sub var value starts “FY” it is converted into the correct format for the SQL query, for example FY19 is converted to 2019.<br />
<br />
The bind variables are updated with the sub var values and printed. The updated bind variables values will be used in the SQL extract query.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwaztTGfPJNOMdefcRIvfYQOqpzASfYTiQiP6fHjyqiVi7eDYQ4YAWttA5ObzsivHX6jl1S_oi2UHATmIOz6C7DSiboy3FZ_wHAhFBPoXC1lPOemEqQRyEe3-cNZzlvk0grwKS_enfIFo/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="559" data-original-width="506" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwaztTGfPJNOMdefcRIvfYQOqpzASfYTiQiP6fHjyqiVi7eDYQ4YAWttA5ObzsivHX6jl1S_oi2UHATmIOz6C7DSiboy3FZ_wHAhFBPoXC1lPOemEqQRyEe3-cNZzlvk0grwKS_enfIFo/s1600/image030.png" /></a></div>
<br />
Displaying the full output shows that the original bind variables have been overridden with substitution variable values. This means the data extract can be driven by sub vars in the target application.<span style="white-space: pre;"> </span><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDPfR2mN9WEhJ5cS9SDgsjisgWY4bPHQFZCemo3YTbcaO0N6Ve3EAbvTk5qkrIyQhorWWjudJGW_fWqpurtdlRhd0D4EvckaY5wt-SchWsfOxrWBfCnaV9u2qR5y-FGmbmkMzpFB1H620/s1600/a5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="582" data-original-width="489" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDPfR2mN9WEhJ5cS9SDgsjisgWY4bPHQFZCemo3YTbcaO0N6Ve3EAbvTk5qkrIyQhorWWjudJGW_fWqpurtdlRhd0D4EvckaY5wt-SchWsfOxrWBfCnaV9u2qR5y-FGmbmkMzpFB1H620/s1600/a5.PNG" /></a></div>
<br />
On to the final API method “<b>skipAction</b>” which basically allows you to bypass the data extract query being executed in the “<b>BefExtract</b>” script or the file being uploaded in the “<b>BefUpload</b>” script.<br />
<br />
Being able to skip the data extract gives you the power with custom scripting to connect to any data source, for example it could be a database other than Oracle or SQL Server. It could be that data resides within a cloud service and you want to use a web service to extract it.<br />
<br />
The rules around skipping the data extract are that you must produce a data file in the application data directory, it must contain the column headers that have been defined in EPM Cloud and the file should have the naming convention of <b><process_id>.dat</b>. This is so the remaining steps of agent integration process can flow through as normal.<br />
<br />
I am going to go through an example of bypassing the extract step. I will connect to a Web Service API to extract exchange rates. The exchange rates will be returned in JSON format, these will be processed and written to a data file. The agent will upload the data file and the standard integration process will continue to load the exchange rates to the target application.<br />
<br />
The concept will be similar to the one I recently blogged about: using Groovy, enterprise planning and web services. If you want the full details, you can read all about <b><a href="https://john-goodwin.blogspot.com/2019/07/epm-cloud-groovy-and-web-services.html">here</a></b>.<br />
<br />
Up to now, my examples in this post have all been Jython based so I thought I would flip over to Groovy to demo this next one.<br />
<br />
I am going to keep the objective as simple as possible and load latest exchange rates to a target application so they will be visible in the following form.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8GRXLr2ELRCjJlKzVMAZ7StndTUJqdsJK5qHIqsTq9kSWZIBbuKurtcDRxtmTcf1La8A_I-2q2Dv0jNashTYr9nD3YdWmlAhYpjjCLPsbpPGrZfZ29IVn3ST1XWBDlOXL1PuIuut1m5g/s1600/image032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="244" data-original-width="369" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8GRXLr2ELRCjJlKzVMAZ7StndTUJqdsJK5qHIqsTq9kSWZIBbuKurtcDRxtmTcf1La8A_I-2q2Dv0jNashTYr9nD3YdWmlAhYpjjCLPsbpPGrZfZ29IVn3ST1XWBDlOXL1PuIuut1m5g/s1600/image032.png" /></a></div>
<br />
This means I will only need to create a data file with the currency code and exchange rate value which will be like:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIdrV5B8xuUm5qR3BqBmkqokGxm_xxDC_t1lyZrbvk41yV8iD53OcdG2MrExPP3C7mMfyaKUuC2JOKEITBmoMo-8A6OGpD_R0_aUEwAYEsKLvQbeLzQmPW5EhxXAU7VyDn5hS1bhu7VSY/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="114" data-original-width="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIdrV5B8xuUm5qR3BqBmkqokGxm_xxDC_t1lyZrbvk41yV8iD53OcdG2MrExPP3C7mMfyaKUuC2JOKEITBmoMo-8A6OGpD_R0_aUEwAYEsKLvQbeLzQmPW5EhxXAU7VyDn5hS1bhu7VSY/s1600/image033.png" /></a></div>
<br />
The next step is to create the application data source in Data Management which will be based on the headings in the file above. Please refer to <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-3.html">part 3</a></b> or <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-4.html">part 4</a></b> in this series to get in-depth details about creating a data source and setting up an agent integration.<br />
<br />
A new “Data Source” is added.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8KxxR6BwLopo0pOAGfGzVlaHcnW2CuAFeeo9TvpO35J_KCZd4MgJvrQJDdNrQGV8W7MNQ__xZOs9-xZXr1_RhwiqYBigJk0pcucw0vKIVRH2FBbi-4luTJqAs8nJFNdDiiNCoVU2gD6A/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="101" data-original-width="155" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8KxxR6BwLopo0pOAGfGzVlaHcnW2CuAFeeo9TvpO35J_KCZd4MgJvrQJDdNrQGV8W7MNQ__xZOs9-xZXr1_RhwiqYBigJk0pcucw0vKIVRH2FBbi-4luTJqAs8nJFNdDiiNCoVU2gD6A/s1600/image034.png" /></a></div>
<br />
The file containing the headers is uploaded.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcEhSPkdTgvlCrZpwgl8rCtCTd5JmPh7zzQNd1A2EC5vt8_08Okwunl-UqlPB64lYZMB75BtfCjEP817TYjvWEOP-Gypy0F_x1d3lttH_qMDtK4jTmR3eqTjnWGeV2H32DJV6TuX6qjfQ/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="119" data-original-width="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcEhSPkdTgvlCrZpwgl8rCtCTd5JmPh7zzQNd1A2EC5vt8_08Okwunl-UqlPB64lYZMB75BtfCjEP817TYjvWEOP-Gypy0F_x1d3lttH_qMDtK4jTmR3eqTjnWGeV2H32DJV6TuX6qjfQ/s1600/image035.png" /></a></div>
<br />
You still must select the source system as an on-premise database even though it is not. I don’t agree with some of the set up when overriding the default functionality, it may change in the future.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggJ-3640yrWWnIGVWqKNdaaVRccJl7NgHvA0K4Ti3ANDlRIi3v2cNGIsfoQpTfpxFSlVhOMaJkR2RO4Y0zCHEN1fw8qZ81ZJYf5msEu3d5R_EEu75eU1Hfg2fLTeFoFEV-OwNX9UmZ9_k/s1600/image036.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="167" data-original-width="473" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggJ-3640yrWWnIGVWqKNdaaVRccJl7NgHvA0K4Ti3ANDlRIi3v2cNGIsfoQpTfpxFSlVhOMaJkR2RO4Y0zCHEN1fw8qZ81ZJYf5msEu3d5R_EEu75eU1Hfg2fLTeFoFEV-OwNX9UmZ9_k/s1600/image036.png" /></a></div>
<br />
The application data source name will be based on the selected filename.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEhwAsTUw75nteP-WPwoRFnwijcKjH4PtAnPUUV79V5XIwd2UV_2_QUOq3Xts3Ep_AoFwNcPGIRxnNj0EYO1Cg5tqkDqYcZjHY0IUvVWvePJQFqyXk8rI6S9hhGi-yeuwRXyij93_0TVI/s1600/image037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="169" data-original-width="415" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEhwAsTUw75nteP-WPwoRFnwijcKjH4PtAnPUUV79V5XIwd2UV_2_QUOq3Xts3Ep_AoFwNcPGIRxnNj0EYO1Cg5tqkDqYcZjHY0IUvVWvePJQFqyXk8rI6S9hhGi-yeuwRXyij93_0TVI/s1600/image037.png" /></a></div>
<br />
The header columns in the file have been converted into dimension names.<br />
<br />
You still need to assign a query in the application filters. It doesn’t matter what it is if you are overriding. I am going to use the query to provide the details of the column headers that will be generated in the data extract file.<br />
<br />
A JDBC Driver must be selected and URL populated even though they are not going to be used. Something else I don’t really agree with. Any value can be defined in the JDBC URL though.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2wFEqHwn-wWvyPEljFTM0MhyphenhyphenPu3QzE-dRikCneAixli-_vpuM-9dL0LHD_XRAbtZj0byeGVtzfbLWZbC6ShA_nXw8lh5RQzaerLZrhRvqhFhSZKpNUV2Rr1FNYnX2wrtmLNuaLi2jM3A/s1600/image038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="165" data-original-width="333" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2wFEqHwn-wWvyPEljFTM0MhyphenhyphenPu3QzE-dRikCneAixli-_vpuM-9dL0LHD_XRAbtZj0byeGVtzfbLWZbC6ShA_nXw8lh5RQzaerLZrhRvqhFhSZKpNUV2Rr1FNYnX2wrtmLNuaLi2jM3A/s1600/image038.png" /></a></div>
<br />
I defined a query that will just return the header names I need in the extract file. Any query string can be entered as the query because it is not validated.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLnMMyZmqTSGwTXhPF07z8thi91REUooaTBnDRoxkRyD0in83sz5sRtJ3eUbz6HAPdoWVMz4PifsLWW1_XjROEtJBMjsVH-4su2bh6icVe0eKEzrYqeAqK_h4WNYMRE4EkEe4-Qd9f960/s1600/image039.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="172" data-original-width="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLnMMyZmqTSGwTXhPF07z8thi91REUooaTBnDRoxkRyD0in83sz5sRtJ3eUbz6HAPdoWVMz4PifsLWW1_XjROEtJBMjsVH-4su2bh6icVe0eKEzrYqeAqK_h4WNYMRE4EkEe4-Qd9f960/s1600/image039.png" /></a></div>
<br />
The remaining steps for the integration are just the same as a standard file based one so there is no need for me to go over it. I now have the following integration ready.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-d8dIPRbEyDE0OPxN-j2USur3vhQBRX3wC-aQ004XZ7b7GQi2qj-Yad80iTHWJqM4T4WdORnmGlSs2xLDOqzLbZVjH5hyphenhyphenL5CfLwOnqcF8YLr7n85NxHllhgC285irT1XmTFTsxJX8RQM/s1600/image040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="209" data-original-width="505" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-d8dIPRbEyDE0OPxN-j2USur3vhQBRX3wC-aQ004XZ7b7GQi2qj-Yad80iTHWJqM4T4WdORnmGlSs2xLDOqzLbZVjH5hyphenhyphenL5CfLwOnqcF8YLr7n85NxHllhgC285irT1XmTFTsxJX8RQM/s1600/image040.png" /></a></div>
<br />
The next part of the objective is to retrieve current exchange rates for a list of input currencies through a web service API.<br />
I am using a free API which requires the following URL format:<br />
<br />
<b class="yellow">https://free.currconv.com/api/v7/convert?q=<CURRENCY_CODES>&compact=ultra&apiKey=<API_KEY></b><br />
<br />
The currency conversion section of the URL needs to follow:<br />
<br />
<b class="yellow"><FROM_CURRENCY>_<TO_CURRENCY></b><br />
<br />
The base currency is GBP so to convert from GBP to Euro would be “GBP_EUR”.<br />
<br />
Based on the input currencies the URL I need to generate will be:<br />
<br />
<b class="yellow">https://free.currconv.com/api/v7/convert?q=GBP_CAD,GBP_EUR,GBP_SEK,GBP_USD&compact=ultra&apiKey=<API_KEY></b><br />
<br />
This will return a JSON response of:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuhPjV6HQ0U53nQ1ZhcsZS2ezczwimOLwv6NgzW_VUpUU1EhOGmWe-xdl32pO8pG6Gbn8shDjYYB6d8yy9rD2onEihqU5ZbHpjE7jgq9gbCQEueAGZlpKx8xZarQypnuWzy5T3PV-pV6U/s1600/image041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="147" data-original-width="255" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuhPjV6HQ0U53nQ1ZhcsZS2ezczwimOLwv6NgzW_VUpUU1EhOGmWe-xdl32pO8pG6Gbn8shDjYYB6d8yy9rD2onEihqU5ZbHpjE7jgq9gbCQEueAGZlpKx8xZarQypnuWzy5T3PV-pV6U/s1600/image041.png" /></a></div>
<br />
This means the before extract Groovy script will need to generate the URL, make a request using the URL, process the response and write to a file.<br />
<br />
I will give an overview to the script I came up with.<br />
<br />
The base currency, input currencies, API key, and web service mode are defined.<br />
<br />
The data extract filename is generated from the context function “<b>DATAFILENAME</b>”.<br />
<br />
The currencies are then converted into the correct format for the Web Service API.<br />
<br />
The URL to return the exchange rates values is created.<br />
<br />
A request is made to the URL and the JSON response stored.<br />
<br />
The extract data file is created, the headers in the file are based on the query that is retrieved using the API method “<b>getQuery</b>”.<br />
<br />
The rows in the file are created by iterating through the JSON response and writing out the currency code and exchange rate value.<br />
<br />
Finally, and most importantly, the API method “<b>skipAction</b>” is called, which stops the standard extract functionality from being run.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXS4rwElItXfgTzYjoy_9ZnFTRgzaWyq1s28227M3rouJT7R-kne6SHFq6M_7-WTdDZcqy-LoN6E2EZvpqnFK5alzn9m_jppXWYjzln6zlG-BIt8Nv7tyue3z1TCj8DXBHTKsluQSdp4s/s1600/image042.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="829" data-original-width="432" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXS4rwElItXfgTzYjoy_9ZnFTRgzaWyq1s28227M3rouJT7R-kne6SHFq6M_7-WTdDZcqy-LoN6E2EZvpqnFK5alzn9m_jppXWYjzln6zlG-BIt8Nv7tyue3z1TCj8DXBHTKsluQSdp4s/s1600/image042.png" /></a></div>
<br />
Usually I would be writing to the process log and not using print. I have only done this for demoing.<br />
<br />
If the integration is run, you can see clearly from the output what is happening in the process.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtczPno0L7E3fEwhSsetwS7Aa_VW9Svg63pyEbQvRn1nYwE_PBIjC0XuGmCurjxECqt1-8jnKGZujWynwHRA4ZdMhEobmnP8dJQ-rrHska2mhUBHGGzUbpZTlFS4SFKtPE_Bbwv4l8cS8/s1600/image043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="324" data-original-width="596" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtczPno0L7E3fEwhSsetwS7Aa_VW9Svg63pyEbQvRn1nYwE_PBIjC0XuGmCurjxECqt1-8jnKGZujWynwHRA4ZdMhEobmnP8dJQ-rrHska2mhUBHGGzUbpZTlFS4SFKtPE_Bbwv4l8cS8/s1600/image043.png" /></a></div>
<br />
The extract file has been created in the correct location with the required naming convention. The context function pretty much handles all of that.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJrm87no43ZkldHh9PTs_QSQolpn897oY5tesMqC9Ir407lEq5Ati1KdRpaaw79t301-dRIURE6AvYTrkxRZ9Qv3JXatD3AUOIlYNwdVRwM_RSXzvbsoe6GAKs_UN80qWYoJz-yjgFQSI/s1600/image044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="84" data-original-width="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJrm87no43ZkldHh9PTs_QSQolpn897oY5tesMqC9Ir407lEq5Ati1KdRpaaw79t301-dRIURE6AvYTrkxRZ9Qv3JXatD3AUOIlYNwdVRwM_RSXzvbsoe6GAKs_UN80qWYoJz-yjgFQSI/s1600/image044.png" /></a></div>
<br />
The data extract file contains the header, currency codes and exchange rate values.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8KeDE8YPY8TCZWDZysEQo4BtNd69aVp7an3yvhUDmUio1ekAGG6ARUGd83hzNGcEmJewhZ_QiutRCc8VrX5IgLh-GmRG-yxRrrbHq86de2JM758doROCdBPMEofHGGY5jwicPed4OJ18/s1600/image045.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="106" data-original-width="134" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8KeDE8YPY8TCZWDZysEQo4BtNd69aVp7an3yvhUDmUio1ekAGG6ARUGd83hzNGcEmJewhZ_QiutRCc8VrX5IgLh-GmRG-yxRrrbHq86de2JM758doROCdBPMEofHGGY5jwicPed4OJ18/s1600/image045.png" /></a></div>
<br />
The file is automatically uploaded by the agent and the remaining steps of the integration are carried out.<br />
<br />
The process log also shows that the data extract step was skipped.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">13:40:38:308 :: --------------- Executing Custom Event :BefExtract ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">13:40:38:620 :: Executing script:C:\EPMAgent\appdata\scripts\BefExtract.groovy</span></b><br />
<b class="yellow"><span style="font-size: x-small;">13:40:39:464 :: ---------------Completed execution for sessionId:1101 with extract skipped.</span></b><br />
<br />
Process details confirms the integration was successful.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPBZ37EpUWFN0HJKGq7s0-fyf7DBgNMUSpOBhTo8-Ud9t8N36NBGw60PpUw71VaqgmQ3xKV4iAdXPxCu4HA614QbM-JkTQ2sVjqu0dme3jCT0qiC58647k7UlDZujiyjOmzt-gPZLz0bw/s1600/image046.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="159" data-original-width="465" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPBZ37EpUWFN0HJKGq7s0-fyf7DBgNMUSpOBhTo8-Ud9t8N36NBGw60PpUw71VaqgmQ3xKV4iAdXPxCu4HA614QbM-JkTQ2sVjqu0dme3jCT0qiC58647k7UlDZujiyjOmzt-gPZLz0bw/s1600/image046.png" /></a></div>
<br />
Opening the data form again shows that exchange rates have been loaded.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLylBTNRnxEhkHF7W4b_8yIF5ry-sT5KYDwW4yDiXnjrSGKkwrCwzYHl1W3I77bjEmjEamSIo7CQMXfS4ibNByVlRADyZEiRR7vW_kRvcUnc4VgdIItx9Xlool3Cq73YQGuqJXSeABe4o/s1600/image047.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="263" data-original-width="381" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLylBTNRnxEhkHF7W4b_8yIF5ry-sT5KYDwW4yDiXnjrSGKkwrCwzYHl1W3I77bjEmjEamSIo7CQMXfS4ibNByVlRADyZEiRR7vW_kRvcUnc4VgdIItx9Xlool3Cq73YQGuqJXSeABe4o/s1600/image047.png" /></a></div>
<br />
I think that covers events, custom scripting, context functions and all the currently available API methods.<br />
<br />
Next up…running multiple agents and cluster assignments.<br />
<div>
<br /></div>
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-54735494020639516562019-10-14T05:36:00.000-07:002019-10-14T05:37:41.450-07:00EPM Cloud - Integration Agent Part 4 - Extracting data continued<div dir="ltr" style="text-align: left;" trbidi="on">
In the last part I went through extracting data from a source Oracle database using the integration agent. I am going to continue with the same theme, but this time look at extracting data from a source SQL Server database. If you have not read through the last <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-3.html">post</a></b>, then I recommend doing so as I am not going to go into as much detail.<br />
<br />
I am going to extract workforce type data which spans across data types like Dates, Smart Lists and Text.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtp7pVqs7PfSSHDgFly0BajSASEHsvVp4tJ8A2nWx6yz6XEcHrjL4uk2CXsPs0V8omMP6fDM9_z0m9uUNjVMjMQvYQGc5QoY7PmlZDc3idMGwHWv3hY91gNi8D5xxELaQq_vCIiX_ZM54/s1600/a2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="308" data-original-width="506" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtp7pVqs7PfSSHDgFly0BajSASEHsvVp4tJ8A2nWx6yz6XEcHrjL4uk2CXsPs0V8omMP6fDM9_z0m9uUNjVMjMQvYQGc5QoY7PmlZDc3idMGwHWv3hY91gNi8D5xxELaQq_vCIiX_ZM54/s1600/a2.png" /></a></div>
<br />
The data resides in a table named WFDATA within the workforce database.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRf5muedpCcoU1PZ9wwR7jupeP0HVDfnutWBBwABdUPpoksCHE46am6DwzOTLsM-UIROb3YBFJtUMip7VkLP7ONG6lurQPfXSpQ1yBAS50SBewrLaOhIGPDliPAogX0eHKEdtGs3QSi_c/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="128" data-original-width="167" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRf5muedpCcoU1PZ9wwR7jupeP0HVDfnutWBBwABdUPpoksCHE46am6DwzOTLsM-UIROb3YBFJtUMip7VkLP7ONG6lurQPfXSpQ1yBAS50SBewrLaOhIGPDliPAogX0eHKEdtGs3QSi_c/s1600/image002.png" /></a></div>
<br />
I confirmed the machine running the agent could connect to the source SQL Server database.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBRyvOEZFD5WA2uJPVr_0NesHbjQKaMmf_zwduANl3A2APscyFEFjmcGN7x2k0qNh9KhwTAm-AgOJ-eiM-18xWkmiAmORSqW11hgESevEhcekwtL7338odWpQXwwV-o5e4e2OxO9_m50Q/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="164" data-original-width="540" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBRyvOEZFD5WA2uJPVr_0NesHbjQKaMmf_zwduANl3A2APscyFEFjmcGN7x2k0qNh9KhwTAm-AgOJ-eiM-18xWkmiAmORSqW11hgESevEhcekwtL7338odWpQXwwV-o5e4e2OxO9_m50Q/s1600/image003.png" /></a></div>
<br />
Until there is parity between Data Management and Data Integration then it will be a combination of both to work with the integration agent. This means I will be flipping between them and where possible I will demo in Data Integration.<br />
<br />
The SQL query to execute is defined in Data Integration. A new query was defined to extract the workforce data.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXUqTbEU7CuFItr3G3uzolbL-0BnD28aiHpzt_pIbB3sQFPd_9Zzt-KLDzXA7s255sw54_yh4QTwCHUF_0upRSNxNtkN87I4lzp9FXmqZ4RkK1Iebrc24yKPluZtwll8eDy7VFFkj0VLc/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="175" data-original-width="610" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXUqTbEU7CuFItr3G3uzolbL-0BnD28aiHpzt_pIbB3sQFPd_9Zzt-KLDzXA7s255sw54_yh4QTwCHUF_0upRSNxNtkN87I4lzp9FXmqZ4RkK1Iebrc24yKPluZtwll8eDy7VFFkj0VLc/s1600/image004.png" /></a></div>
<br />
I created a comma separated file based on the columns that are going to be returned from the query. This is to generate the dimension names when adding a new data source application in Data Management. Remember that the filename defines the application name in Data Management.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1g8lAGOhqRMkMQn3Qswjo1BV8ChRmQcgX2d07ZKcvn1daXt_4yF3jDdFwilszCZnT-0xIt4sWzqAFcidMZMdDdKPbdTcTfWtC0H0QcIkDUuv0w6aMMVFH2vrOjNtPo7f5zkX1zJgCBc8/s1600/a1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="44" data-original-width="299" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1g8lAGOhqRMkMQn3Qswjo1BV8ChRmQcgX2d07ZKcvn1daXt_4yF3jDdFwilszCZnT-0xIt4sWzqAFcidMZMdDdKPbdTcTfWtC0H0QcIkDUuv0w6aMMVFH2vrOjNtPo7f5zkX1zJgCBc8/s1600/a1.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
In Data Management a new “Data Source” can now be added.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-samJcBeN4OpBLAThlEC7CrlRKraAhyBqdx6L3Yelb1XS3YvzVHW4w6ptirUCDbrVWOxRHWWR3xqorQPqsc9CV66FAqzhh4h0z5d1jvEU57W1ZwuIVanLdn23f7SvsIjZpcGoMzvqqgk/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="98" data-original-width="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-samJcBeN4OpBLAThlEC7CrlRKraAhyBqdx6L3Yelb1XS3YvzVHW4w6ptirUCDbrVWOxRHWWR3xqorQPqsc9CV66FAqzhh4h0z5d1jvEU57W1ZwuIVanLdn23f7SvsIjZpcGoMzvqqgk/s1600/image006.png" /></a></div>
<br />
Select “On Premise Database”, upload the file with the column names defined.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg4QMKM9VXso9xS0YNTez3MP11f8Da9MOHFtxAk5aQl2R5AvleKESekwxhyphenhyphend3yqj3oRCS933ERWKHuwAAeDKFKWRW925NWaO0Y8B0cNBs1nho25tgklDIfFeNBEvZzL3N3uk4q5oDdB90/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="113" data-original-width="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg4QMKM9VXso9xS0YNTez3MP11f8Da9MOHFtxAk5aQl2R5AvleKESekwxhyphenhyphend3yqj3oRCS933ERWKHuwAAeDKFKWRW925NWaO0Y8B0cNBs1nho25tgklDIfFeNBEvZzL3N3uk4q5oDdB90/s1600/image007.png" /></a></div>
<br />
The filename should now be populated as the application name. A prefix can be added if there is already an application with the same name.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJCnILrD0CtuakzgrKxUh7Y9fZc-HBEwYjY5tso6JpICa3v3xNXjfsIQK2oWvgxrjLqMKOLIvnPVT8XBQluCKKohkVYDLdz3dwBBdf1MCl75mOa5viExLtENOJibxAwRsNnyPvj75x4B0/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="166" data-original-width="473" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJCnILrD0CtuakzgrKxUh7Y9fZc-HBEwYjY5tso6JpICa3v3xNXjfsIQK2oWvgxrjLqMKOLIvnPVT8XBQluCKKohkVYDLdz3dwBBdf1MCl75mOa5viExLtENOJibxAwRsNnyPvj75x4B0/s1600/image008.png" /></a></div>
<br />
This will create a new application with the dimensions that match those in the csv file and query.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpv8B_r-G2q-gYFEyPp_RuNYn5RzqJzcFYDHFvA7khsI8x1iJWbdjmK0e3BRW70afqtqa4rJ_eZd0gu0lw2T_b20Lk8RwVHzvG9vUvOm_owiykgee1Myk0aQEJ50phkj53-E9QwiHGSDI/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="229" data-original-width="395" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpv8B_r-G2q-gYFEyPp_RuNYn5RzqJzcFYDHFvA7khsI8x1iJWbdjmK0e3BRW70afqtqa4rJ_eZd0gu0lw2T_b20Lk8RwVHzvG9vUvOm_owiykgee1Myk0aQEJ50phkj53-E9QwiHGSDI/s1600/image009.png" /></a></div>
<br />
The application filters will define the connection details and the query can be populated.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKpTCXwYOKq9tM6Fidj4z-Nle7nq69ZF_CSccJFIj1sjagMeG_IR-0FSwjay_Be1QbOrWr-L7oaQNYz6swCQFrG2ADBHmt_n77yVy1r4Ehj4rHioLZH1DiwC0cA6m7bHkLENClC1BQ6lA/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="235" data-original-width="473" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKpTCXwYOKq9tM6Fidj4z-Nle7nq69ZF_CSccJFIj1sjagMeG_IR-0FSwjay_Be1QbOrWr-L7oaQNYz6swCQFrG2ADBHmt_n77yVy1r4Ehj4rHioLZH1DiwC0cA6m7bHkLENClC1BQ6lA/s1600/image010.png" /></a></div>
<br />
As mentioned in the last post, there are two possible values for the Credential Store.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc2qQ5zdvRmv9ipH8NmBwYlAAnvTYEWBlR2XpRGgQGlnOhTuEZ1004OiaoZzju6i3IsTnW2gCLBuvemyEMmziiLDabLonIUN1UhBOO39vl4UE6CXxYIebjFVwUaYGwMT83AetRnJLpwS8/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="92" data-original-width="137" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc2qQ5zdvRmv9ipH8NmBwYlAAnvTYEWBlR2XpRGgQGlnOhTuEZ1004OiaoZzju6i3IsTnW2gCLBuvemyEMmziiLDabLonIUN1UhBOO39vl4UE6CXxYIebjFVwUaYGwMT83AetRnJLpwS8/s1600/image011.png" /></a></div>
<br />
In the previous blog I went through how to use the Cloud option. This time I am going to go down the route of using a credential file. This means the JDBC Driver, URL, Username and Password do not need to be populated in Data Management. These will be defined in a file which will be stored in the application data config folder.<br />
<br />
The credential file should be named:<br />
<br />
<b class="yellow"><application_data_source_name>.cred</b><br />
<br />
The file will need to contain properties – driver, jdbcurl, username and password.<br />
<br />
The password should be encrypted using the “encryptpassword” script in the agent bin folder.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiByLFjJFGi0sM8yxa1x74aY5ehXi6veov42aCvKAUcHfsUKLo6LHEJrkfj9xoVWlpGlCkFkRQheWD8oibRlxxrstIYoP7wXLqUiXG7bbEK1USJRf2OofWYiFdYD_uHIpP0IxtMQs6tP_o/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="100" data-original-width="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiByLFjJFGi0sM8yxa1x74aY5ehXi6veov42aCvKAUcHfsUKLo6LHEJrkfj9xoVWlpGlCkFkRQheWD8oibRlxxrstIYoP7wXLqUiXG7bbEK1USJRf2OofWYiFdYD_uHIpP0IxtMQs6tP_o/s1600/image012.png" /></a></div>
<br />
The encrypted password will need to be manually copied to the credential file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5FRMbyoe4hkxabpmP1kzFij34LhSFVshHqOXMT96iGsf3mm9g51crEzDQ2B59fm6xZPWNSOy6_DdfftZthDlaSHdeL9tcagnsO980_J_DlK927XYcer6HbnaGEU-R5MKXadwpUk0nFic/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="125" data-original-width="433" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5FRMbyoe4hkxabpmP1kzFij34LhSFVshHqOXMT96iGsf3mm9g51crEzDQ2B59fm6xZPWNSOy6_DdfftZthDlaSHdeL9tcagnsO980_J_DlK927XYcer6HbnaGEU-R5MKXadwpUk0nFic/s1600/image013.png" /></a></div>
<br />
An example of a completed credential file for connecting to the source SQL Server database:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUk5Drsftfk8cO-2kPwU_4BzJt_jKDCsNkcQlYamvsg9l_SB1mhpEEQj0UCvfeaxmgeOkmMryNIvCVf1xal9E7Q4PyA-Mh6jg8fWL1Yi4RoAqXtgDHENFBQrDdIM6iQ0LzkPKwhOEnrm8/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="89" data-original-width="589" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUk5Drsftfk8cO-2kPwU_4BzJt_jKDCsNkcQlYamvsg9l_SB1mhpEEQj0UCvfeaxmgeOkmMryNIvCVf1xal9E7Q4PyA-Mh6jg8fWL1Yi4RoAqXtgDHENFBQrDdIM6iQ0LzkPKwhOEnrm8/s1600/image014.png" /></a></div>
<br />
The credential file should be saved in the application data config folder.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJxx48V71XlGtXweIUOItGkDl11XtMcDPMEvQSBiRZRqOkHCjim-oGkxCVaYMaqd7rvPdQ82UVvLGr28JsdfKzA-8Eog8g8uoVEJiVmYkaXZ7WCi_BdVvrcrON9vARB3FjAG4XkFv6DGM/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="81" data-original-width="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJxx48V71XlGtXweIUOItGkDl11XtMcDPMEvQSBiRZRqOkHCjim-oGkxCVaYMaqd7rvPdQ82UVvLGr28JsdfKzA-8Eog8g8uoVEJiVmYkaXZ7WCi_BdVvrcrON9vARB3FjAG4XkFv6DGM/s1600/image015.png" /></a></div>
<br />
In this example I am going to stick with the query being assigned at application level. The query does not contain bind variables so no need to add any additional application filters.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFDOCPq9yCIB_Cld0EEHkgLWhSZkGDiScv7aseQMGRayuJg_E0sygZ1XxZdn5vb33WDcTO05MGnnwmdLdaRodqJXY9_iz8ZDlsntO3i-qmHb_3J4ucrYcszlOlBcKVFoG4p2MXVo6rcyU/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="232" data-original-width="473" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFDOCPq9yCIB_Cld0EEHkgLWhSZkGDiScv7aseQMGRayuJg_E0sygZ1XxZdn5vb33WDcTO05MGnnwmdLdaRodqJXY9_iz8ZDlsntO3i-qmHb_3J4ucrYcszlOlBcKVFoG4p2MXVo6rcyU/s1600/image016.png" /></a></div>
<br />
The rest of the integration is built up in the same way as a file-base integration. The data source application is added as the source, as the data being extracted is non-numeric the type is set as “All Data Type” and the delimiter should match to one set in the application filters section of the data source application.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJr-guhv8FqaLKNWyRaqQrKTw6Z-EhyphenhyphenoZvZDWhyt6JRHrKzzW24Xzfy3wE6Ac1YF7T_ZhulNrEpnsi3C_5OqhnFCM4FyCovtP0yNwcmBw8oRjDzy-oJRfB3yFiZzGffSqgV8C9wU2ERKs/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="209" data-original-width="527" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJr-guhv8FqaLKNWyRaqQrKTw6Z-EhyphenhyphenoZvZDWhyt6JRHrKzzW24Xzfy3wE6Ac1YF7T_ZhulNrEpnsi3C_5OqhnFCM4FyCovtP0yNwcmBw8oRjDzy-oJRfB3yFiZzGffSqgV8C9wU2ERKs/s1600/image017.png" /></a></div>
<br />
The load method in the rule is defined as “All data types with security”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDmgP-3bSwZblgHWuv4Eg1qRrNqf6KM33UCY4AFoMnUzRyPhvydga6npHICBZvUgPPlhbLXmTbt9e4hxd0iQTWlTHYgVb7f89qwRb9ouIyjUdIHy-3Xg17fXnb6RtJghzO9PhgJLPZiP0/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="31" data-original-width="254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDmgP-3bSwZblgHWuv4Eg1qRrNqf6KM33UCY4AFoMnUzRyPhvydga6npHICBZvUgPPlhbLXmTbt9e4hxd0iQTWlTHYgVb7f89qwRb9ouIyjUdIHy-3Xg17fXnb6RtJghzO9PhgJLPZiP0/s1600/image018.png" /></a></div>
<br />
So on to running the integration. As a test I removed the credential file and the following error was generated.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAn30-_RVnwQMOT7t0tQTgART6V6Q_vYeHJSnsf_Gj8nhUnY1asMBm7RPiwNNB40J0rs9MPspKWAm4MLnQ39M_qehS2APPt2KgH-v1wzr5o3QDULnfWdPt_Hx6nvGVlDxRgbDZu74AgO0/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="102" data-original-width="682" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAn30-_RVnwQMOT7t0tQTgART6V6Q_vYeHJSnsf_Gj8nhUnY1asMBm7RPiwNNB40J0rs9MPspKWAm4MLnQ39M_qehS2APPt2KgH-v1wzr5o3QDULnfWdPt_Hx6nvGVlDxRgbDZu74AgO0/s1600/image019.png" /></a></div>
<br />
The credential file was restored to the application data config folder and the integration run again.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirz8O2bwcbMgKrBUYmpvlCqFkbo1CbVk7Nuj-TyKGUo9VkYnhzfw4IF891dc6UaGe0DUCRo70ZI8SjFSe8ccfQJdQTRfJ4bNRBKlUxXhigjv549urF2CFoBhJE9W3jKsD14ZuvjpC7S7c/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="243" data-original-width="705" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirz8O2bwcbMgKrBUYmpvlCqFkbo1CbVk7Nuj-TyKGUo9VkYnhzfw4IF891dc6UaGe0DUCRo70ZI8SjFSe8ccfQJdQTRfJ4bNRBKlUxXhigjv549urF2CFoBhJE9W3jKsD14ZuvjpC7S7c/s1600/image020.png" /></a></div>
<br />
The integration failed because the agent only contains JDBC drivers for Oracle database and the error means the SQL Server drivers cannot be found.<br />
<br />
The SQL Server JDBC drivers can easily be located and downloaded. The driver file should be placed in the agent lib directory.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgofajf92Sf-16izWjcBTNwYspPVx7foZebRCorU7lBppO26FV1W3tUzaQMswTX-6tpf8Bd-ssyW9ivmM9Odu9lphJVGrWU-rZiE_TxCoAlnjNWu3K46nLsdyt7YTxNRmIJiRL6pFrOfVM/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="84" data-original-width="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgofajf92Sf-16izWjcBTNwYspPVx7foZebRCorU7lBppO26FV1W3tUzaQMswTX-6tpf8Bd-ssyW9ivmM9Odu9lphJVGrWU-rZiE_TxCoAlnjNWu3K46nLsdyt7YTxNRmIJiRL6pFrOfVM/s1600/image021.png" /></a></div>
<br />
In order for the agent to pick up the drivers, the CUSTOM_CLASS_PATH property in the agent initialisation file should be updated to include the driver location.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNGSops4fXDCHvWUQNUutOaPtF-G_i6-LO8apHgcfzZ5IAMxUScD0MRRfsrg2ZueWnH-Evrl5LX4UAr1YZ1PrnowH0hWfRtn1Zb5p3R-1mkv4dAJBBRcGcZAa6ZS0Q2892snMQnf_KGPQ/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="44" data-original-width="544" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNGSops4fXDCHvWUQNUutOaPtF-G_i6-LO8apHgcfzZ5IAMxUScD0MRRfsrg2ZueWnH-Evrl5LX4UAr1YZ1PrnowH0hWfRtn1Zb5p3R-1mkv4dAJBBRcGcZAa6ZS0Q2892snMQnf_KGPQ/s1600/image022.png" /></a></div>
<br />
The file can be explicitly defined or all files in the lib directory can be added to the class path.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwZPASXudK-Fu5xRBvK4tJadW1Uf_-gInZlhPH1O_CaYdDxU8Nasv5XoQlDNJG2BLe1voSvhIDM5pyN1INBuiVIFQ2LTR_rfL1qhbJMkVJ_waKGs2uN3xrbHhVQK40TfLbIUjaMSXPfEw/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="43" data-original-width="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwZPASXudK-Fu5xRBvK4tJadW1Uf_-gInZlhPH1O_CaYdDxU8Nasv5XoQlDNJG2BLe1voSvhIDM5pyN1INBuiVIFQ2LTR_rfL1qhbJMkVJ_waKGs2uN3xrbHhVQK40TfLbIUjaMSXPfEw/s1600/image023.png" /></a></div>
<br />
After making changes the agent will need to be restarted to pick them up.<br />
<br />
Running the integration again proves to be successful.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBngrtqWnfz4IoNA2vzAjFF6XbXTbGVN7mRNNbBhDGlzkzH9nJ3t1SZHSwDksumaGru_nrOamo1v2EBXdPjsyZA-c6sDN8Ynpo3QNkvQtY4v44mrqXXh9ebRhzZShAtbdElU1dpbOyHI4/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="161" data-original-width="688" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBngrtqWnfz4IoNA2vzAjFF6XbXTbGVN7mRNNbBhDGlzkzH9nJ3t1SZHSwDksumaGru_nrOamo1v2EBXdPjsyZA-c6sDN8Ynpo3QNkvQtY4v44mrqXXh9ebRhzZShAtbdElU1dpbOyHI4/s1600/image024.png" /></a></div>
<br />
The data has been imported and mapped.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaSh6JcGQg6pG8Av69ukGD-2kWDR7Ae3hJ9GcYE6eSDAdr0jBLCges37btmP7kWRc6APZGeuNr3oqu9F9UUw8bG6iQ2KNf6xdA2WDIS4NNIoxbpKOULTnYG98NQy_TqJm2AMk0DG_4b5E/s1600/a1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="261" data-original-width="701" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaSh6JcGQg6pG8Av69ukGD-2kWDR7Ae3hJ9GcYE6eSDAdr0jBLCges37btmP7kWRc6APZGeuNr3oqu9F9UUw8bG6iQ2KNf6xdA2WDIS4NNIoxbpKOULTnYG98NQy_TqJm2AMk0DG_4b5E/s1600/a1.png" /></a></div>
<br />
I know I could have shown the workbench in Data Integration but it is not the best for demoing.<br />
<br />
The data is available in the target application.<br />
<div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK5uqRF3kJ1ov0h3llNHiU_krN72rm8AV-skmnw9uwVCsuef3ca7K0_S_XZu_17EdOIfqHEtTp4qdVtpMXmYm9-25cxD2HvZ-r51cocjFWsN7UNGfrH0UBXnurydYQJbnlHSPyXbQ4Zmo/s1600/a3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="246" data-original-width="697" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK5uqRF3kJ1ov0h3llNHiU_krN72rm8AV-skmnw9uwVCsuef3ca7K0_S_XZu_17EdOIfqHEtTp4qdVtpMXmYm9-25cxD2HvZ-r51cocjFWsN7UNGfrH0UBXnurydYQJbnlHSPyXbQ4Zmo/s1600/a3.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
So that now covers both Oracle and SQL Server database integrations. Next on to events and custom scripting.</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-19655872960647692072019-10-08T08:33:00.000-07:002019-10-08T08:33:26.491-07:00EPM Cloud - Integration Agent Part 3 - Extracting data<div dir="ltr" style="text-align: left;" trbidi="on">
Back again to continue with the series looking at the EPM Cloud Integration Agent. In the last part I went through getting up and running with the agent in asynchronous and synchronous modes.<br />
<br />
Now that the agent is running, it is time to look at our first integration. In this post I will go through extracting data from a remote relational database and loading to EPM Cloud.<br />
<br />
The first example will be against an Oracle database, but I will also cover SQL Server in the next post. The good news is you are not restricted to these two database types, you have the power to connect to any source.<br />
<br />
Before starting out, you need to be sure that you can connect to the source database from the machine running the agent. I simply confirmed this by telnetting to the Oracle database server and port.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqnA_vyTA4Cu_Dy3f_SZyEHfHSl0ytXbQIIzDCVcuT8STUayHtvLAZ_ETdUZBaMGbzE2YVYmQxzfsay4y7_npZYS5Ch75nC-Iyojpq4fl8udLmZJwhnaskvnezQBvecON-t-qgJgx7eP8/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="157" data-original-width="564" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqnA_vyTA4Cu_Dy3f_SZyEHfHSl0ytXbQIIzDCVcuT8STUayHtvLAZ_ETdUZBaMGbzE2YVYmQxzfsay4y7_npZYS5Ch75nC-Iyojpq4fl8udLmZJwhnaskvnezQBvecON-t-qgJgx7eP8/s1600/image001.png" /></a></div>
<br />
For simplicity, I have created a database view which queries the tables and data I am interested in and produces the desired output. It doesn’t have to be a view, data can be extracted using a SQL query against the source tables.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5_gltTN5CWcamnY7zrqWd-DlJIhyphenhyphenPPAQthqpBva5ZzjTlp-iC-pNLm13u95O5MlA_ZIaU8bE57ureAactblDeSIaYvFoiAWHweMTQJkFs-hosXEXn7jZJBf60tq3DP8Vw-4man9Vnl4w/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="170" data-original-width="577" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5_gltTN5CWcamnY7zrqWd-DlJIhyphenhyphenPPAQthqpBva5ZzjTlp-iC-pNLm13u95O5MlA_ZIaU8bE57ureAactblDeSIaYvFoiAWHweMTQJkFs-hosXEXn7jZJBf60tq3DP8Vw-4man9Vnl4w/s1600/image002.png" /></a></div>
<br />
The next stage is to create a SQL query in Data Integration that will be executed by the agent to extract the data.<br />
<br />
Go to Data Integration > Actions > Query<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj744tfjcEm1krKxpEhYdPzZ9-nndONaTqKmyfoMLNhJsTDd9nvKgy3MnF2YxGVI78htaXGcVNUR0ZmPzr-gyF53KQPv-Q5n9rk2DRohYSrj15czjfebCzX3ceiOFnVQvNoPuEhCszhOhc/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="218" data-original-width="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj744tfjcEm1krKxpEhYdPzZ9-nndONaTqKmyfoMLNhJsTDd9nvKgy3MnF2YxGVI78htaXGcVNUR0ZmPzr-gyF53KQPv-Q5n9rk2DRohYSrj15czjfebCzX3ceiOFnVQvNoPuEhCszhOhc/s1600/image003.png" /></a></div>
<br />
Add a new query.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_2Ys9W1E4slL-ZIHr-0-aWxiE1M51kwxyPzS3vS0Jt23WjAiHpyKjqA3i-f_d5DciEB0uDxft7QibjYmfds6Xw04tgvTz-RZ5TjCLxjBh64kxMMG3eFyaW94flXnswONk3398TPsiXzU/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="144" data-original-width="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_2Ys9W1E4slL-ZIHr-0-aWxiE1M51kwxyPzS3vS0Jt23WjAiHpyKjqA3i-f_d5DciEB0uDxft7QibjYmfds6Xw04tgvTz-RZ5TjCLxjBh64kxMMG3eFyaW94flXnswONk3398TPsiXzU/s1600/image004.png" /></a></div>
<br />
Enter a new name for the query and the SQL statement.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwQOUCPrW7jy0Nip00Z0dJS9cUBbSbmYgQmrE51xP9yCh37B_SRAOiPm0-pd_vNVH-AIeiRmf_0jFy9ZMTckdoxGD3zML6ei04k6JSPp3u3OMXGtoV8kk9oVTv7X1sxmteR4kcbnDrIj4/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="199" data-original-width="505" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwQOUCPrW7jy0Nip00Z0dJS9cUBbSbmYgQmrE51xP9yCh37B_SRAOiPm0-pd_vNVH-AIeiRmf_0jFy9ZMTckdoxGD3zML6ei04k6JSPp3u3OMXGtoV8kk9oVTv7X1sxmteR4kcbnDrIj4/s1600/image005.png" /></a></div>
<br />
You will notice that I have <b>~SCENARIO~</b> in the SQL statement. This is a bind variable and must be enclosed with a tilde, this allows you to filter the data extract. It is possible to set the value either at data load rule or application level. These can also be updated using custom event scripting and I will provide an example in the next part.<br />
<br />
The most important part about the SQL statement is the column names. They will have to match with what is created in the data source which I will get on to shortly.<br />
<br />
It is possible to use alias names for the column in the SQL query.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzN0eGYHGCONX1ZPCew0gQZYbtCZqHJ53p2on4tOb6kO3WGVF6aKbk9Q0FUazD1Kl-ykzveeVniOEbKDNZvhY2AsZoL1yQ-orC4JuvFkw0TY0DZsAUJOJZ-Di2Mq3VcQtX6Vf50GWl4EI/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="142" data-original-width="455" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzN0eGYHGCONX1ZPCew0gQZYbtCZqHJ53p2on4tOb6kO3WGVF6aKbk9Q0FUazD1Kl-ykzveeVniOEbKDNZvhY2AsZoL1yQ-orC4JuvFkw0TY0DZsAUJOJZ-Di2Mq3VcQtX6Vf50GWl4EI/s1600/image006.png" /></a></div>
<br />
Once the query has been created it is possible to edit, delete or create additional queries.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqlPBzqd1hcQbmxD_e2YzhZmffGP4fUuNQTbAoMJQ0VvuEgESUp4Hm05d-hQjYrqMGRbg5jYtGK4tB-hIzu091b0D-GYShHEfdHOAyYkD6uVfmEz_wpUhazoB2GbpyOAbQ8th9UBoLK6w/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="174" data-original-width="793" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqlPBzqd1hcQbmxD_e2YzhZmffGP4fUuNQTbAoMJQ0VvuEgESUp4Hm05d-hQjYrqMGRbg5jYtGK4tB-hIzu091b0D-GYShHEfdHOAyYkD6uVfmEz_wpUhazoB2GbpyOAbQ8th9UBoLK6w/s640/image007.png" width="640" /></a></div>
<br />
The next step is to create a comma separated file with one line containing all the possible columns that can be returned from various SQL queries. The file I have created has more columns than the SQL query above, this is because I intend to have additional queries that return different data sets.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1hkvvpqI0oYPpjUBMX1pj1vp9go3474UcPhEt_5dPJ7DSA5QCa0DF5IKeX9MSO5G_9IwvYSnwTUY37bK3Tz1B0KYqc0myqvEugPFU8bPYInry0CrBjH5vRVOXvI8dNr5b59VWZLGTckU/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="46" data-original-width="462" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1hkvvpqI0oYPpjUBMX1pj1vp9go3474UcPhEt_5dPJ7DSA5QCa0DF5IKeX9MSO5G_9IwvYSnwTUY37bK3Tz1B0KYqc0myqvEugPFU8bPYInry0CrBjH5vRVOXvI8dNr5b59VWZLGTckU/s1600/image008.png" /></a></div>
<br />
As I just mentioned it is important that the names match to those that will be returned from the SQL queries.<br />
<br />
The name of the file will become the name of the target application in Data Management. I know it is confusing calling it a target application when it is a source.<br />
<br />
The mindset that you need to be in is to treat the integration as a file-based integration even though you are connecting to a relational source. The agent will execute the SQL query against the source database, extract the data and create a file, this file will contain column headers that match the columns in the SQL query. The file will be automatically uploaded to the cloud and imported where the column headers in the file will be matched to what has been defined in the cloud.<br />
<br />
It should become clearer as I go through the full process.<br />
<br />
To create the Data Source, go to Data Management as there is not yet full parity in Data Integration.<br />
<br />
Go to Target Application > Add > Data Source<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_SXcSuiYY8O-OPadGVfgJAJIcWjFyqOqwM7TphAbJM03V818swFl8i73weLlffJuDUruNzQb0ZJUG0W1Q16BoDwRaxOfbUavWxdDCGX8pzVrG6dFPuConuan8GkPvw6GgnO-XoiEL-tw/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="161" data-original-width="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_SXcSuiYY8O-OPadGVfgJAJIcWjFyqOqwM7TphAbJM03V818swFl8i73weLlffJuDUruNzQb0ZJUG0W1Q16BoDwRaxOfbUavWxdDCGX8pzVrG6dFPuConuan8GkPvw6GgnO-XoiEL-tw/s1600/image009.png" /></a></div>
<br />
From the dropdown select “On Premise Database”, this doesn’t mean the database must be on-premise, it can cloud or on-premise if the agent has good connectivity to it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn6ILKHKGKXpWHcXtwA7qMiRZO48xhyphenhyphenWdE2DpUZ3mb9crWrYstRLjab-6U5Jjos2mij8CzR39A1GYCWyukNsLQppv9DSxA90Pfg_ij9ZSZk8SBIcnlcr08Wc5jP9hO7MR2AC3Kk72mSGU/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="135" data-original-width="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn6ILKHKGKXpWHcXtwA7qMiRZO48xhyphenhyphenWdE2DpUZ3mb9crWrYstRLjab-6U5Jjos2mij8CzR39A1GYCWyukNsLQppv9DSxA90Pfg_ij9ZSZk8SBIcnlcr08Wc5jP9hO7MR2AC3Kk72mSGU/s1600/image010.png" /></a></div>
<br />
This will open the file selection window. Upload the file with the column names and select it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeHds2fkHo3Jq5Oc7EtJzHjynVlkN6A23KTHxA41Ya82fyHrDkx-rsrs_f1isKRuyYuZLAiiwTQla4PBJnP_AAi6uSxZvqf4DrraQY4JlpqObPptz-ZRiQ5S-fNtcDI-zI9olCvPSxtpY/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="115" data-original-width="471" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeHds2fkHo3Jq5Oc7EtJzHjynVlkN6A23KTHxA41Ya82fyHrDkx-rsrs_f1isKRuyYuZLAiiwTQla4PBJnP_AAi6uSxZvqf4DrraQY4JlpqObPptz-ZRiQ5S-fNtcDI-zI9olCvPSxtpY/s1600/image011.png" /></a></div>
<br />
The file name now has been converted into the application name. A prefix can be added if there is already an application with the same name.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2wwMUwaHf3cHr5ysFvlGNYCJTVTfEQ8KR9idPjDHILTFnHIhVsm_rOHq4lGmyiT4Gfpci1ArAldK6hO7vhGjgFOpIsngoVlKVSUq4W4a0rTBITwIVFj_vVa9Me_gtGmYe7GX-SpYBvWo/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="168" data-original-width="472" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2wwMUwaHf3cHr5ysFvlGNYCJTVTfEQ8KR9idPjDHILTFnHIhVsm_rOHq4lGmyiT4Gfpci1ArAldK6hO7vhGjgFOpIsngoVlKVSUq4W4a0rTBITwIVFj_vVa9Me_gtGmYe7GX-SpYBvWo/s1600/image012.png" /></a></div>
<br />
An application will be created with dimensions based on the header columns in the selected file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDBb96OTNHk5owKQcfGBl3UKRDlNEwGN4ucbmfVikH-iE1Zue9slrBWrKXLdWBenHZKmABz6gAUyrMs3Cr_C9yzvLmrCgc-abvv5czyIxbwXpZfpvrlIBIaRA9S9FH6c3D99JM-NCgaJA/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="273" data-original-width="493" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDBb96OTNHk5owKQcfGBl3UKRDlNEwGN4ucbmfVikH-iE1Zue9slrBWrKXLdWBenHZKmABz6gAUyrMs3Cr_C9yzvLmrCgc-abvv5czyIxbwXpZfpvrlIBIaRA9S9FH6c3D99JM-NCgaJA/s1600/image013.png" /></a></div>
<br />
I know it is a little confusing because they are really source columns and not dimensions.<br />
<br />
The target dimension class should be left as “Generic” and no “Data Table Column Name” assignments are required. If your SQL extracts are going to include additional columns, then you can manually add them at any point to the application.<br />
<br />
Next on to the Application Filters tab which provides options to configure the connection to the source database.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNhJKVYvtD0fVtL3t-pnqiljtp9djJbT2VqeiCk30u_W2xfG8QxAJZ5jz6vQGfLN2IGPvSrqyT9c7AIGQrOINIeUq9GTa-39VX3nMjF3k4_R0DBAYN1EUlEwIYKVtQLtWVboTHfPCyPxs/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="290" data-original-width="484" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNhJKVYvtD0fVtL3t-pnqiljtp9djJbT2VqeiCk30u_W2xfG8QxAJZ5jz6vQGfLN2IGPvSrqyT9c7AIGQrOINIeUq9GTa-39VX3nMjF3k4_R0DBAYN1EUlEwIYKVtQLtWVboTHfPCyPxs/s1600/image014.png" /></a></div>
<br />
<b>Data Extract Query</b> – This is the name of the SQL query to execute. It is possible to define this at application or rule level.<br />
<br />
<b>Delimiter</b> – This will be the delimiter that is used when the agent creates the data extract file.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_A7ZJXw6E2XaCeHWsG0_DlEfp_blno1tvVkJP3kPA0U2P3q_RPiHr2nT6SADKt7qjJqylWx_HU2Twdeyn4uFtNNrno-KQhh__brePLULAY4Y-ocmcYjq8xwHP20em75r7ey-ty7mm94A/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="136" data-original-width="139" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_A7ZJXw6E2XaCeHWsG0_DlEfp_blno1tvVkJP3kPA0U2P3q_RPiHr2nT6SADKt7qjJqylWx_HU2Twdeyn4uFtNNrno-KQhh__brePLULAY4Y-ocmcYjq8xwHP20em75r7ey-ty7mm94A/s1600/image015.png" /></a></div>
<br />
<b>Credential Store</b> – This provides the option to either store database connection information in the cloud or in a file. If “Cloud” is selected the connection information is entered in the application filters. If File is chosen, a file will need to be created in the agent’s application data config directory in the same location as the agent initialisation file. The database user’s password in the file will require to be encrypted using the “encryptpassword” script.<br />
<br />
For this example, I am going to go for the “Cloud” option and will cover “File” in the next example.<br />
<br />
<b>JDBC Driver</b> – This is the driver for connecting to the source database. Currently there is only “Oracle” and “Microsoft SQL Server”, but I am sure this will increase in future releases. This doesn’t mean you can connect to only those database types though, with the use of event scripting you can connect to pretty much any source.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyQwlxCeMCr5NwRMBg4fcQAwaWieELyYQKDoIVoJKNMAsqrPDia8LUG-6UJBR-zNERX3p3dtT7nDQs_yf_UsJaeCqAxpLvcwLpYZolM9o8vd5px8HHhmhitlRgLSJ1MWAHpKia6RZGaSc/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="88" data-original-width="139" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyQwlxCeMCr5NwRMBg4fcQAwaWieELyYQKDoIVoJKNMAsqrPDia8LUG-6UJBR-zNERX3p3dtT7nDQs_yf_UsJaeCqAxpLvcwLpYZolM9o8vd5px8HHhmhitlRgLSJ1MWAHpKia6RZGaSc/s1600/image016.png" /></a></div>
<br />
<b>JDBC URL</b> – This is the database connection string. The Oracle syntax I will be using is<br />
<br />
<b class="yellow">jdbc:oracle:thin:@dbhost:port/service</b><br />
<br />
Username/Password are for the user you want to connect to the database with.<br />
<br />
<b>Fetch Size</b> – This is the number of records that the JDBC driver fetches with each call to the database when executing the SQL query.<br />
<br />
This is my completed set of property values.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSZVbM6pMFTcjrqnHhdMxJXQ9OKNkbqEJ0kwtutQByl2tEjpCViNvWn_WLokVFn8pmLjBGastzdNUTuAoBUOZ8LCIKIC8z-tomYmD343LbbF_QWOEHcU8SsUF-Yle7i4bQJ01Zai1O2hM/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="228" data-original-width="450" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSZVbM6pMFTcjrqnHhdMxJXQ9OKNkbqEJ0kwtutQByl2tEjpCViNvWn_WLokVFn8pmLjBGastzdNUTuAoBUOZ8LCIKIC8z-tomYmD343LbbF_QWOEHcU8SsUF-Yle7i4bQJ01Zai1O2hM/s1600/image017.png" /></a></div>
<br />
In my SQL query I was filtering on scenario and included a bind variable. To create a bind variable, select “Edit”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzTNn8xMP4hz5Wl0AvSVKKvbbaQuyXsIXVXUMJo73J2tRmfNl-f2eg0k_98qy7JVlc5GpW6Xtz68xr95yb2fH_kFa09JYu1iXM_xSVAbfuPNqSEYbh-cOCi88IbF0ZffdVR9O-z0fVNGg/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="47" data-original-width="233" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzTNn8xMP4hz5Wl0AvSVKKvbbaQuyXsIXVXUMJo73J2tRmfNl-f2eg0k_98qy7JVlc5GpW6Xtz68xr95yb2fH_kFa09JYu1iXM_xSVAbfuPNqSEYbh-cOCi88IbF0ZffdVR9O-z0fVNGg/s1600/image018.png" /></a></div>
<br />
This will then display all the application filters.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRu9ZWHG19qP7O83ACMDHH69D4MH_HKpBfsbOQffiPLRft7hFjlUzVYG2WW1B1H2CQRhe28hkytVCIE8L8EAgFbgaO97yT87L9z7cssoZ9VVun0f2nzf-kK9zmknY68gD3HYXQMRLOXKw/s1600/a1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="240" data-original-width="715" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRu9ZWHG19qP7O83ACMDHH69D4MH_HKpBfsbOQffiPLRft7hFjlUzVYG2WW1B1H2CQRhe28hkytVCIE8L8EAgFbgaO97yT87L9z7cssoZ9VVun0f2nzf-kK9zmknY68gD3HYXQMRLOXKw/s1600/a1.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
A new filter is added for the bind variable. The name must match to that in the SQL query. The prompt will be displayed at the display level, which can be application/rule.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgykIoUh_jZTTGosHhXkrlMZ3eIfZCehVNEdXUKKjcxg3LlhHDMREK_dAAO2VKIu7HQRHtuIq6Dcu1hA7crGU5Y-0mzUOc1F6KdXohYAtZjuaawE9eOXpup5aFcm7Vw6cyH3Ikk7JvCggE/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="117" data-original-width="672" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgykIoUh_jZTTGosHhXkrlMZ3eIfZCehVNEdXUKKjcxg3LlhHDMREK_dAAO2VKIu7HQRHtuIq6Dcu1hA7crGU5Y-0mzUOc1F6KdXohYAtZjuaawE9eOXpup5aFcm7Vw6cyH3Ikk7JvCggE/s1600/image020.png" /></a></div>
<br />
The display order should be a value which is not already being used. It will be the order they are displayed in the UI. The validation type should be set to “None”.<br />
<br />
I also updated the display level for the data exact query to be “Application and Rule”. This will mean you can override the query defined at the application in the data load rule.<br />
<br />
The integration can now be built up as if building a standard file-based one.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitV4w1jwd7NiaapVPj936XT_stHfqr5E7ELo9lVacVJ_ebr97exGjdUvhjj4xRrqdSJ95PeDB44Zix23GSzcFLu6nV9an-xq4pFtLysfMLdD3iuAeTft-VkjzZk7-hjwi9ykBsyHnSvMY/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="440" data-original-width="700" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitV4w1jwd7NiaapVPj936XT_stHfqr5E7ELo9lVacVJ_ebr97exGjdUvhjj4xRrqdSJ95PeDB44Zix23GSzcFLu6nV9an-xq4pFtLysfMLdD3iuAeTft-VkjzZk7-hjwi9ykBsyHnSvMY/s1600/image021.png" /></a></div>
<br />
The delimiter should match what has been set in the application filters.<br />
<br />
To keep things simple, I have used <b><a href="https://john-goodwin.blogspot.com/2018/11/new-functionality-was-added-in-epm.html">expressions</a> </b>to map the source values directly to the target so no need for member mappings.<br />
<br />
The data load rule includes the bind variable and data extract query as they were set at rule level.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOZLpm5MuzFwhHKDdy8-8Ps5gkpNwTmLHrLi6mctORxJJIXn8dIiGVhON96wu6mV6vHynXmd_RWWGWW97VQpdulxWOG48uGzdX9x022tkcOXZ7FYY6vU9sCDPrCrCDtSQt59XNuCoWrJI/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="239" data-original-width="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOZLpm5MuzFwhHKDdy8-8Ps5gkpNwTmLHrLi6mctORxJJIXn8dIiGVhON96wu6mV6vHynXmd_RWWGWW97VQpdulxWOG48uGzdX9x022tkcOXZ7FYY6vU9sCDPrCrCDtSQt59XNuCoWrJI/s1600/image022.png" /></a></div>
<br />
I set scenario to “Actual” which will mean when the SQL query is executed this value will be used as the bind variable.<br />
<br />
The equivalent in Data Integration is in Options and part of the Filters tab.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5HPdQiwM7FYm8VVaI0zBgdLLp5BVonlUt6RKkjG8CSEhXMK4uN8XHQIsx-cKfk-IPeBHvrD1Y5stcI0E3VHTAI_E0xIh-bHsnmi1vwgeEA5p9SPoVUr-vv3N4C1tmEeJileUrruohKdw/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="257" data-original-width="586" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5HPdQiwM7FYm8VVaI0zBgdLLp5BVonlUt6RKkjG8CSEhXMK4uN8XHQIsx-cKfk-IPeBHvrD1Y5stcI0E3VHTAI_E0xIh-bHsnmi1vwgeEA5p9SPoVUr-vv3N4C1tmEeJileUrruohKdw/s1600/image023.png" /></a></div>
<br />
Now we are ready to run the data load rule. The agent is currently running in asynchronous mode and polling the cloud every 30 seconds.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf2JVaLPQduUBTUKsRIoox_Ijnp9ATYAX5V90UvwWIEmiDo1BctCKcQJ6-w9B6xwEzRHPekR7py6EhEGHoTHrym_e1_2lth40SAUUl3MrethI0nPSRb9vopJpfeE7HokHOg5p3Sif2xpY/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="305" data-original-width="711" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf2JVaLPQduUBTUKsRIoox_Ijnp9ATYAX5V90UvwWIEmiDo1BctCKcQJ6-w9B6xwEzRHPekR7py6EhEGHoTHrym_e1_2lth40SAUUl3MrethI0nPSRb9vopJpfeE7HokHOg5p3Sif2xpY/s1600/image024.png" /></a></div>
<br />
The import stage for the integration is run.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG9v8F15eccXzezYu4It0Uyz2FZ9EQWSh1sSC7u-nEGRezbAo8-t8eBy-RT1r1QTeSixeA80Z1mdGjmi_73wOJYpY3Soot8exJo6gjcW4ffjQh96XphT8RHZerjdUjRweQ3RnwLwxKLCM/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="256" data-original-width="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG9v8F15eccXzezYu4It0Uyz2FZ9EQWSh1sSC7u-nEGRezbAo8-t8eBy-RT1r1QTeSixeA80Z1mdGjmi_73wOJYpY3Soot8exJo6gjcW4ffjQh96XphT8RHZerjdUjRweQ3RnwLwxKLCM/s1600/image025.png" /></a></div>
<br />
In process details you will see the process is running.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGTwk11KIFbsh0lPSlB-67mfd6GjBIWOmT3qp64Yi0AyfcqIX8StR2kmCPsNN9GRjXuECxvUlPmBvTjUA1i7BQm6N2yc9EF7lvq43wUYzpEz2Lixbpu7YzXB5uEbmxZJM9GwvB0uCsYRU/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="175" data-original-width="493" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGTwk11KIFbsh0lPSlB-67mfd6GjBIWOmT3qp64Yi0AyfcqIX8StR2kmCPsNN9GRjXuECxvUlPmBvTjUA1i7BQm6N2yc9EF7lvq43wUYzpEz2Lixbpu7YzXB5uEbmxZJM9GwvB0uCsYRU/s1600/image026.png" /></a></div>
<br />
In the process log you can view the database extract process.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,078 INFO [AIF]: ************************************************************************************</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,078 INFO [AIF]: *On Prem DB Extract: Started *</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,078 INFO [AIF]: ************************************************************************************</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,203 DEBUG [AIF]: Adding DB credentials</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,204 DEBUG [AIF]: Adding DB bind variables</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,205 DEBUG [AIF]: Adding DB query</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,207 INFO [AIF]: Original Extract Query:SELECT ENTITY,PRODUCT,ACCOUNT,AMOUNT </span></b><br />
<b class="yellow"><span style="font-size: x-small;">FROM V_ACTDATA </span></b><br />
<b class="yellow"><span style="font-size: x-small;">WHERE SCENARIO=~SCENARIO~</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,207 DEBUG [AIF]: Adding delimiter</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,208 DEBUG [AIF]: Adding fetchSize</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,212 INFO [AIF]: Retrieved EPM Cluster name:EPMAGENT_ASYNC</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,213 INFO [AIF]: Retrieved Cluster Mode:ASYNC</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,216 INFO [AIF]: Calling agent extract ASYNC mode: BEGIN</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,216 INFO [AIF]: Request Payload Length:469</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,231 DEBUG [AIF]: Updating process steps: QUEUED</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:00:56,234 DEBUG [AIF]: Agent Status: QUEUED</span></b><br />
<br />
The database credentials, SQL query and bind variable, delimiter and fetch size are collated. This information will be passed to the agent once it requests the information.<br />
<br />
The cluster name and mode are retrieved, the process is queued until the agent makes the next poll to the Cloud.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjua25nzBkOolSoJBmR2Y5yxAG7H5A3YweV9oER-bkQXqJ9TZYutE7mzAiD3mzsK0jTDpKGk3wJtm3I5SSSaW8oEhMepCIvwz7kkf40EemHAKZIdTYeU92qmc9uq6byAxQSsE1qpJ8UWaY/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="159" data-original-width="605" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjua25nzBkOolSoJBmR2Y5yxAG7H5A3YweV9oER-bkQXqJ9TZYutE7mzAiD3mzsK0jTDpKGk3wJtm3I5SSSaW8oEhMepCIvwz7kkf40EemHAKZIdTYeU92qmc9uq6byAxQSsE1qpJ8UWaY/s1600/image027.png" /></a></div>
<br />
The agent makes a poll to the Cloud and as a process has been initiated, the response from the Cloud will return the Process (Job) ID.<br />
<br />
As a Process ID has been returned the agent now makes a request to the Cloud for the details of the job. The information collated earlier is returned to the agent (all encrypted).<br />
<br />
The agent will connect to the source database, execute the SQL query with the bind variable value, create an extract data file, upload the file to the Cloud, and upload the process log.<br />
<br />
The details of this process are contained in the agent process log. The log includes the SQL query and the bind variable value.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">10:01:06:086 :: *************** Starting execution for sessionId:945 at: Oct-06 10:01:06:086***************</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:06:086 :: Process Extract Request with data:--------------Executor Request Data--------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> jobType:EXTRACT</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> sessionID:945</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> Data Source Name:EPMAGENT_ORA_DEMO</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> credStore:CLOUD</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> query:SELECT ENTITY,PRODUCT,ACCOUNT,AMOUNT </span></b><br />
<b class="yellow"><span style="font-size: x-small;">FROM V_ACTDATA </span></b><br />
<b class="yellow"><span style="font-size: x-small;">WHERE SCENARIO=~SCENARIO~</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> outputType:FILE</span></b><br />
<b class="yellow"><span style="font-size: x-small;"> delimiter:,</span></b><br />
<b class="yellow"><span style="font-size: x-small;">--------------Bind Variables--------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">Name: SCENARIO, Value:Actual, Type:STRING</span></b><br />
<b class="yellow"><span style="font-size: x-small;">--------------------------------------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:06:086 :: --------------- Executing Custom Event :BefExtract ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:09:539 :: Script: C:\EPMAgent\appdata\scripts\BefExtract.py Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:10:148 :: Adding String Bind Variable: SCENARIO with value: Actual</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:10:227 :: Writing extract output to file: C:\EPMAgent\appdata\data\945.dat</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:10:258 :: --------------- Completed execution for sessionId:945 ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:10:258 :: --------------- Executing Custom Event :AftExtract ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:10:258 :: Script: C:\EPMAgent\appdata\scripts\AftExtract.py Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:10:258 :: --------------- Executing Custom Event :BefUpload ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:10:258 :: Script: C:\EPMAgent\appdata\scripts\BefUpload.py Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:10:258 :: Commencing file upload to cloud for file:C:\EPMAgent\appdata\data\945.dat</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:11:602 :: File Upload successfully complete</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:11:602 :: --------------- Executing Custom Event :AftUpload ---------------</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:11:602 :: Script: C:\EPMAgent\appdata\scripts\AftUpload.py Not found.</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:12:148 :: Commencing file upload of log file:C:\EPMAgent\appdata\logs\945.log</span></b><br />
<b class="yellow"><span style="font-size: x-small;">10:01:12:242 :: *************** End execution for sessionId:945 ***************</span></b><br />
<br />
The agent has been started with the Jython home variable populated.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB2BgSNLxiofnwn8ZLzlOv1jhk59t3AO-oP-_8bRhrtMteAm_c_Rsa3ytI8YDmiAu6pGccGlAFkSA5PCpQMAYEJxW0Y0QvZgc06MquutXNvZJ1YoCK9_zvdgNAmt8TG24nladPF6z5mCQ/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="43" data-original-width="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB2BgSNLxiofnwn8ZLzlOv1jhk59t3AO-oP-_8bRhrtMteAm_c_Rsa3ytI8YDmiAu6pGccGlAFkSA5PCpQMAYEJxW0Y0QvZgc06MquutXNvZJ1YoCK9_zvdgNAmt8TG24nladPF6z5mCQ/s1600/image028.png" /></a></div>
<br />
As this has been populated the agent will attempt to run the four event scripts. I have not created any event scripts yet so no events will be executed. I will be starting to introduce event scripts from the next post.<br />
<br />
If the Jython home property was left blank the agent would not attempt to run the scripts.<br />
<br />
If the Groovy home property was defined, the agent would attempt run four Groovy event scripts.<br />
<br />
The process log is generated in the application data logs folder along with the main agent log. The format for log is <b><process_id>.log</process_id></b><br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsVvE-CqPO34hj0Ld-ZFuAiz2ldjWKiZudqlR9GhA8MqbGYOBsbTrU_IHv4kpnqPE1cQjDgJq2tSM-w0Ovlh2bZrzO4U7_GAObMIqS7foYjGfvW003CkfTVVKZLG3SXUUOswa02yk2QcM/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="109" data-original-width="184" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsVvE-CqPO34hj0Ld-ZFuAiz2ldjWKiZudqlR9GhA8MqbGYOBsbTrU_IHv4kpnqPE1cQjDgJq2tSM-w0Ovlh2bZrzO4U7_GAObMIqS7foYjGfvW003CkfTVVKZLG3SXUUOswa02yk2QcM/s1600/image029.png" /></a></div>
<br />
The agent process log is uploaded to the Cloud and appended to the main process log.<br />
<br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Appending EPM agent log to process: BEGIN</span></b><br />
<b class="yellow"><span style="font-size: x-small;">INFO [AIF]: Appending EPM agent log to process:: END</span></b><br />
<br />
The data extract file is generated in the application data folder. The format for the data file is <b><process_id>.dat</process_id></b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjfNcbXRn6SCMqmjU1x4ABxIujExNfbLWALcO2lQ64wcElZGUsAN7ZtcaJFK8PcDL00nbI2G3tWYojDhrrrga7vt51oCsPShusELR6wx13DU_MWTysTUUtsD3v0YtZbZtTirDnePvtVAE/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="85" data-original-width="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjfNcbXRn6SCMqmjU1x4ABxIujExNfbLWALcO2lQ64wcElZGUsAN7ZtcaJFK8PcDL00nbI2G3tWYojDhrrrga7vt51oCsPShusELR6wx13DU_MWTysTUUtsD3v0YtZbZtTirDnePvtVAE/s1600/image030.png" /></a></div>
<br />
The extract file will include column headers.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhznP3F0yDti36QsuTLRrgvgBByuEtIY3Up-C8SxfnSdeeM-q6xTA9fiDWPSx0TczmjtrazWzSJEuQVTjppa7yLUimmZIcpmPr63DH73RdkXQtWvE1wIPgObDNKt3A3gGb1hsVKPnWrRNY/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="106" data-original-width="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhznP3F0yDti36QsuTLRrgvgBByuEtIY3Up-C8SxfnSdeeM-q6xTA9fiDWPSx0TczmjtrazWzSJEuQVTjppa7yLUimmZIcpmPr63DH73RdkXQtWvE1wIPgObDNKt3A3gGb1hsVKPnWrRNY/s1600/image031.png" /></a></div>
<br />
The column headers are matched in the Cloud. This is why it is important that the columns returned by the SQL query are the same as the ones defined in the application.<br />
<br />
<span style="font-size: x-small;"><b class="yellow">DEBUG [AIF]: EPMFDM-140274:Message - Datasource Column Position in header: AMOUNT -> 4</b></span><br />
<br />
The remaining steps of the import and validate process will be same as file-based integration.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWeafOW9uOX1D8gSvtLjCysRdvTRSNpdu4Az0LuFbyBwJMzGXRTnS9TxQ8A90fkePKkMlUfFAX1Rz0aps2dXkQw2WEawqtyz63eZpgmUO81qlrLMTCwqMA5QnrBUsF5nWCji3ixKqEutg/s1600/image032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="370" data-original-width="551" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWeafOW9uOX1D8gSvtLjCysRdvTRSNpdu4Az0LuFbyBwJMzGXRTnS9TxQ8A90fkePKkMlUfFAX1Rz0aps2dXkQw2WEawqtyz63eZpgmUO81qlrLMTCwqMA5QnrBUsF5nWCji3ixKqEutg/s1600/image032.png" /></a></div>
<br />
For each cluster there will be additional queue and process information available in Data Integration.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeBCTd3Zc_cBmATL6_pzhAHe7IuQpOJlAgRB1uFQ2YqCaWNWYh_evFocH1NuFP3vNamQajXqOLGgAj9jdSbRtrLcwUN-_60FbDn-EwuCbu_86hJ61rIb37ugbUHjcOnj40YS2o79a7vuo/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="130" data-original-width="498" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeBCTd3Zc_cBmATL6_pzhAHe7IuQpOJlAgRB1uFQ2YqCaWNWYh_evFocH1NuFP3vNamQajXqOLGgAj9jdSbRtrLcwUN-_60FbDn-EwuCbu_86hJ61rIb37ugbUHjcOnj40YS2o79a7vuo/s1600/image033.png" /></a></div>
<br />
If the agent is running in synchronous mode, the only difference would be the Cloud makes a direct call to the agent through the Web URL to execute the job. There, process ID is sent directly to the agent so there is no waiting for a poll.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnNiub_fkmXqBenHjdCT9ILRjMqYSefP9zIu721aGg2p8LxVgdNY7QUwfZH2EQSgaDZSELohT69pzc5VXiC35ZACS5hylsnckBP5FVt_VmrzDz1H8vDMYMhebvUHKUZjKH2hoowT-YeXk/s1600/a2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="391" data-original-width="708" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnNiub_fkmXqBenHjdCT9ILRjMqYSefP9zIu721aGg2p8LxVgdNY7QUwfZH2EQSgaDZSELohT69pzc5VXiC35ZACS5hylsnckBP5FVt_VmrzDz1H8vDMYMhebvUHKUZjKH2hoowT-YeXk/s1600/a2.PNG" /></a></div>
<br />
So now we can extract data from a remote Oracle database and load this to EPM Cloud. This is all done using default functionality and no custom scripting.<br />
<br />
In the next part I will extract data from a SQL Server database and start to look at event scripts.</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com1tag:blogger.com,1999:blog-6575283218005807475.post-41054911468971149302019-10-06T08:57:00.000-07:002019-12-09T05:15:32.072-08:00EPM Cloud - Integration Agent Part 2 - Get up and running<div dir="ltr" style="text-align: left;" trbidi="on">
Moving swiftly on to the next part in this series on the EPM Cloud Integration Agent. In the last part I went through an introduction to the agent and in this post, I am going to dive straight in and go through the process of getting the agent up and running.<br />
<br />
I will be going through an example on a Windows machine, but the concept will be similar on Linux/Unix type operating systems.<br />
<br />
A summary of the tasks is:<br />
<ul style="text-align: left;">
<li><b class="yellow">Install JRE 8+</b></li>
<li><b class="yellow">Install Groovy or Jython (optional)</b></li>
<li><b class="yellow">Download Agent</b></li>
<li><b class="yellow">Extract Agent</b></li>
<li><b class="yellow">Create application folders</b></li>
<li><b class="yellow">Generate encrypted password for EPM Cloud</b></li>
<li><b class="yellow">Populate agent initialisation file</b></li>
<li><b class="yellow">Copy EPM Cloud SSL certificate to agent folder</b></li>
<li><b class="yellow">Start agent</b></li>
</ul>
The agent requires a Java Runtime Environment (JRE) 8+ to run. JRE 1.8 update 221 was <b><a href="https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html">downloaded </a></b>and installed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD5xzNb8THPvSetACpwc0mOZlq1EcHnOBZsWf_cOmQU7hONtNQT3KGFg4ForHPdPuj0xXxjjO7oIAd40RktHr32wFEjguK9N2cilNW6CtRfZqZ75luqELSbF9zuWH9l0cPrK45CXr50tk/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="140" data-original-width="612" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD5xzNb8THPvSetACpwc0mOZlq1EcHnOBZsWf_cOmQU7hONtNQT3KGFg4ForHPdPuj0xXxjjO7oIAd40RktHr32wFEjguK9N2cilNW6CtRfZqZ75luqELSbF9zuWH9l0cPrK45CXr50tk/s1600/image001.png" /></a></div>
<br />
If you want to use custom scripting and override default functionality in the form of event scripts, then either Groovy or Jython can be installed. If you want to stick with the default functionality and no scripting, then there is no need to install. It is also possible to implement your own Java classes without the need for Groovy/Jython.<br />
<br />
I am not going to say which to install as it is personal preference or maybe company policy that defines this. If you work with on-premise FDMEE then you are probably going to be more used to Jython, for this reason I am going to install Jython but will no doubt cover both in future blog posts.<br />
<br />
Currently the latest version of Jython is 2.7.1 and can be downloaded <b><a href="https://www.jython.org/download">here</a></b>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmYbbswmiBVTLamvhlxczF1j5p5MORiqo-Eo2ePDaajyGfvJoIelA0x6HEir72tuCUOZFooxRpvVV2D0g3cTLpE1Q3172qBupxvt2MFXDPKIZqZ0QawtPdn4Nei94BVYLOxZEkzJAQ5zY/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="48" data-original-width="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmYbbswmiBVTLamvhlxczF1j5p5MORiqo-Eo2ePDaajyGfvJoIelA0x6HEir72tuCUOZFooxRpvVV2D0g3cTLpE1Q3172qBupxvt2MFXDPKIZqZ0QawtPdn4Nei94BVYLOxZEkzJAQ5zY/s1600/image002.png" /></a></div>
<br />
To install Jython, the jar file can simply be executed, and the installation steps followed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1vBqtXjN-mwfs-ValE2iX7rIugKQPkhElssTImbD3OUoZCffZjSumHm4C2wn3vPG6IboNdcJQLjQugcGu_A7Ez4-Bw4lXy14U-Qw89VeIGqGRzQWg7UfJcmykkKBEQnQ1qXppQx3MmDU/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="251" data-original-width="712" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1vBqtXjN-mwfs-ValE2iX7rIugKQPkhElssTImbD3OUoZCffZjSumHm4C2wn3vPG6IboNdcJQLjQugcGu_A7Ez4-Bw4lXy14U-Qw89VeIGqGRzQWg7UfJcmykkKBEQnQ1qXppQx3MmDU/s1600/image003.png" /></a></div>
<br />
Next, the agent needs to be downloaded from Data Integration.<br />
<br />
Go to Data Exchange.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnk88V1KZDrz4fd13KZEinV0KfEvNRIJstkpcwyQUnPcMY5c1gOholeX07PcKFJGqsGlpN4Ps1MnVkn6eEeBsYNCB1vCoqYLL8JsdKr8ROA5Whh63b_KgcaqrYtqqfmCeSCdG9Hz5SDhg/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="24" data-original-width="129" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnk88V1KZDrz4fd13KZEinV0KfEvNRIJstkpcwyQUnPcMY5c1gOholeX07PcKFJGqsGlpN4Ps1MnVkn6eEeBsYNCB1vCoqYLL8JsdKr8ROA5Whh63b_KgcaqrYtqqfmCeSCdG9Hz5SDhg/s1600/image004.png" /></a></div>
<br />
Select Actions and there will be an option to download the agent.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMvJ6pDetNjjLirYmB6AiygieUPLiSMEAaeEVCk65bxX36WQqjifSOBFW2B4pErRv8-kYuEwVLEzhT_7jncLi5bXE5lgHWoHyZbvqzVNVvYtU9GfN1K4AqgyDBEJkRUlPlK18cWNhH-FM/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="245" data-original-width="389" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMvJ6pDetNjjLirYmB6AiygieUPLiSMEAaeEVCk65bxX36WQqjifSOBFW2B4pErRv8-kYuEwVLEzhT_7jncLi5bXE5lgHWoHyZbvqzVNVvYtU9GfN1K4AqgyDBEJkRUlPlK18cWNhH-FM/s1600/image005.png" /></a></div>
<br />
Once downloaded, the zip file simply needs to be extracted to a suitable location.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIa0T-w0dBV2KpBNjVN7-7rnmNfEqfj7xgoCjfPTrrgaTPM4LM9oy5ezKFraHPxD20kLW9Xdd9x7_rKyWjdtxLZDFp9kQlLpwq9uQJeJOEorAMCQ7acW7WEakDw2_rE9PFbTGPrFEKVnI/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="148" data-original-width="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIa0T-w0dBV2KpBNjVN7-7rnmNfEqfj7xgoCjfPTrrgaTPM4LM9oy5ezKFraHPxD20kLW9Xdd9x7_rKyWjdtxLZDFp9kQlLpwq9uQJeJOEorAMCQ7acW7WEakDw2_rE9PFbTGPrFEKVnI/s1600/image006.png" /></a></div>
<br />
The bin directory is where you need to start to configure and run the agent. There are scripts available for both Windows or *nix type platforms.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7DcstDur-HC0pRR18bZYyIS0kNopAKVznHh5_269xe74lSZxalq9JFjEh1T_eMkFx_1IERAV9nMgGGaEb1eo1Wt4sIZUrkpIrYVRSnH8sEJILTDRDxItXcsWlklAlYC_LtYcEoS49if4/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="291" data-original-width="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7DcstDur-HC0pRR18bZYyIS0kNopAKVznHh5_269xe74lSZxalq9JFjEh1T_eMkFx_1IERAV9nMgGGaEb1eo1Wt4sIZUrkpIrYVRSnH8sEJILTDRDxItXcsWlklAlYC_LtYcEoS49if4/s1600/image007.png" /></a></div>
<br />
“<b>createAppFolder</b>” – will create the application folder structure, it can be generated within the same or separate location to the agent. It is possible to create multiple application folders if you want to run more than one agent and keep them segregated.<br />
<br />
For simplicity, I am going to create the application folders in the same location as the agent in a directory named “<b>appdata</b>”.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWhG7oQy3HkrTu9FNATVtC9KtxXFTlyYT4QzFcunsRHMuedsycKImUBw2faCJwLEc3ZGP85MqBksEa3jy4lK3LnFHpsBk2k7okPA58YQHzu3fAM54_2Z2voLgifDEw9HN2RKq_AOcJwKI/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="99" data-original-width="505" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWhG7oQy3HkrTu9FNATVtC9KtxXFTlyYT4QzFcunsRHMuedsycKImUBw2faCJwLEc3ZGP85MqBksEa3jy4lK3LnFHpsBk2k7okPA58YQHzu3fAM54_2Z2voLgifDEw9HN2RKq_AOcJwKI/s1600/image008.png" /></a></div>
<br />
Running the script will create the following structure.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyPLcOvfNGdNLJNgfr0q1yYPuWfiszp1Wcz3PlEPH657xX6IK856lUY-3aUNNwOpyWcxQy_ciU7YW9sNX0PXvR8ZJ-m7sOKYJWO3i-BS3B0H4sdSBPCCzILnjwVKcpT3sG46o0Hpnc6Go/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="179" data-original-width="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyPLcOvfNGdNLJNgfr0q1yYPuWfiszp1Wcz3PlEPH657xX6IK856lUY-3aUNNwOpyWcxQy_ciU7YW9sNX0PXvR8ZJ-m7sOKYJWO3i-BS3B0H4sdSBPCCzILnjwVKcpT3sG46o0Hpnc6Go/s1600/image009.png" /></a></div>
<br />
The config directory contains an initialisation file for the start parameters of the agent, this will need populating before starting the agent, I will get on to that shortly.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6FZn3p2s-Lli8FbnfZlXTk6GGlOCXFEN-TGJ9aBb3DW7q795fTFO6Z1yDrILDXF_g3MjNtFxBFXXDuoExS_zo8oVcQeFHKtpIjmTSKyE6jvXvcTDqZeqYX4JgPGZzhHZpuGclT_0OHuY/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="86" data-original-width="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6FZn3p2s-Lli8FbnfZlXTk6GGlOCXFEN-TGJ9aBb3DW7q795fTFO6Z1yDrILDXF_g3MjNtFxBFXXDuoExS_zo8oVcQeFHKtpIjmTSKyE6jvXvcTDqZeqYX4JgPGZzhHZpuGclT_0OHuY/s1600/image010.png" /></a></div>
<br />
The data directory will hold the data files that are created after extracting the source data. The files will be uploaded to EPM Cloud as part of the integration process. You will need to consider housekeeping to maintain this directory over time.<br />
<br />
The logs directory will contain a log for the agent and each process, the process log also gets uploaded to EPM Cloud and appended to the main process log.<br />
<br />
I will be covering the data and logs in the next part when I look at extracting data.<br />
<br />
The scripts directory can contain any of the four available event scripts. As I mentioned earlier, event scripts are optional and once again I will be covering them in a later post.<br />
<br />
Back to the agent initialisation file, which from now on I will refer to as ini file.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil9aIRF1WI_UtnZUzX8VW8GBy8W_GPOmAAR3S3O8uThLqNt6TIL4GyqrM8KBBk05XZzdOWgtL9TlBOndFJkGpbkCH7xEMvkxjpzTWMPX-RWzOQjeALU9VboVCE0Rf89sASulRYIwiDTYE/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="333" data-original-width="363" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil9aIRF1WI_UtnZUzX8VW8GBy8W_GPOmAAR3S3O8uThLqNt6TIL4GyqrM8KBBk05XZzdOWgtL9TlBOndFJkGpbkCH7xEMvkxjpzTWMPX-RWzOQjeALU9VboVCE0Rf89sASulRYIwiDTYE/s1600/image011.png" /></a></div>
<br />
The file will be automatically populated with the EPM_AGENT_HOME and EPM_APP_DATA_HOME property values.<br />
<br />
The <b>EPM_APP_DATA_HOME</b> directory is the one created earlier with the “createAppFolder” script.<br />
<br />
<b>AGENT_NAME</b> is a unique name for the agent and can only contain alphanumeric characters. It is optional to define it in the file as it can set at runtime.<br />
<br />
<b>CLUSTER</b> defines the name that the agent belongs to. Multiple agents can belong to a cluster and there can be one or many clusters. Like the agent name it can only contain alphanumeric characters.<br />
<br />
Clusters provide a way of organising integrations. It may be that you want to use a cluster for only certain integration types, for example one cluster for extracting data from an Oracle database and another for connecting to other cloud providers. You can assign rules, locations or target applications to clusters. I plan on covering this in more detail in a future post.<br />
<br />
Clusters are created in Data Management and can either be defined to operate in synchronous or asynchronous modes. I gave an overview of these modes in the previous post.<br />
<br />
A cluster must exist before starting the agent. By default, the ini file will be populated with a cluster named “EPMCLUSTER”, this cluster also pre-exists in Data Integration.<br />
<br />
Just for demo purposes I am going to have two clusters, one for each type of mode.<br />
<br />
To create, view, edit and delete clusters, first go to Data Exchange.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOde86cydeW5GFdUXOXJw6GpIbGbLb8ptRkYpLJppAC9Ch8kQepE3N0ujduuKwq4eqW8d4bMrCvMtC9KTP_ZoS8ExBBx-QJefbEMkxYpWfV34tcBKdgzZjObIBxJTYuqbKuEtoCs5_9FU/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="24" data-original-width="129" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOde86cydeW5GFdUXOXJw6GpIbGbLb8ptRkYpLJppAC9Ch8kQepE3N0ujduuKwq4eqW8d4bMrCvMtC9KTP_ZoS8ExBBx-QJefbEMkxYpWfV34tcBKdgzZjObIBxJTYuqbKuEtoCs5_9FU/s1600/image004.png" /></a></div>
<div>
<br /></div>
<div>
Then select Agent.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz1iv-MEA3Fnd9Re5yMtrG-bWi4FJ6PYBdYM_SNe9m6Uyh_8ZrHzacOaRYLmhSVYcTaauv2fLF5d_3SVmJB_zzeCXzxpybX8w4xe_8kARIW2ImNdv1FfOr_FuyffUevI5IRnzw7SRQfo0/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="173" data-original-width="314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz1iv-MEA3Fnd9Re5yMtrG-bWi4FJ6PYBdYM_SNe9m6Uyh_8ZrHzacOaRYLmhSVYcTaauv2fLF5d_3SVmJB_zzeCXzxpybX8w4xe_8kARIW2ImNdv1FfOr_FuyffUevI5IRnzw7SRQfo0/s1600/image012.png" /></a></div>
<br />
There will already be “EPMCLUSTER” created, which has been assigned to asynchronous mode. I deleted this cluster, but it is your choice if you want to keep and use it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiztf9cmyUbKusgQB8PyAvuk12VUqLolMmthneP5RJt2ZiD7_Ajf3Wzfu6RfFB2NsEgzAo7fd5S22SaeWBh5ZdonMYy9h-0uNTfDOYvFP0kSdglDK14-g13vKUQ9avKJ7l40JrIFtcIV6c/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="205" data-original-width="560" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiztf9cmyUbKusgQB8PyAvuk12VUqLolMmthneP5RJt2ZiD7_Ajf3Wzfu6RfFB2NsEgzAo7fd5S22SaeWBh5ZdonMYy9h-0uNTfDOYvFP0kSdglDK14-g13vKUQ9avKJ7l40JrIFtcIV6c/s1600/image013.png" /></a></div>
<br />
Now a cluster can be added.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYagOQWGZMPBsYkBYGZ9lBVmUYE6559onIcFBHtW40ozeQjkN8qdhuBMMY1AKWECQQ-4UMrHWFnmfqm4VlDk2EdZDhkC53DCZeA_eGvBYaQs7Gbk3fae-qqOOdrZ9azjcL7hvYmuYqT1M/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="122" data-original-width="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYagOQWGZMPBsYkBYGZ9lBVmUYE6559onIcFBHtW40ozeQjkN8qdhuBMMY1AKWECQQ-4UMrHWFnmfqm4VlDk2EdZDhkC53DCZeA_eGvBYaQs7Gbk3fae-qqOOdrZ9azjcL7hvYmuYqT1M/s1600/image014.png" /></a></div>
<br />
Two clusters were created, one for each mode.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbxNTZceXy3SA25z_D2JP6rfOuYIsDanYSHXtAjclDMvWr6WsL0nun7PRvkBwTFYC6K06mPnYmjvwet1BpTPVIENW9sfAN3_KAi6onx1ZD7qaKwA34jykWb6N42qqqDLrK6b5yk0NrIjg/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="250" data-original-width="575" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbxNTZceXy3SA25z_D2JP6rfOuYIsDanYSHXtAjclDMvWr6WsL0nun7PRvkBwTFYC6K06mPnYmjvwet1BpTPVIENW9sfAN3_KAi6onx1ZD7qaKwA34jykWb6N42qqqDLrK6b5yk0NrIjg/s1600/image015.png" /></a></div>
<br />
I am going to keep it simple and configure the agent in asynchronous mode first, then update the ini file and restart the agent in synchronous mode.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPgwQUo-VUZ6chiqN3YBFsxzYGFadabU4QY-lgyJajVsiyFfwODUQFsO4LoFc1bopv5kt1zsrZKUj02nPDx-KVWBZ16VsdEx6y5LwBfCLnLpU-nCszZtmVA09DTvzHr8xQxuLPYKNFo6o/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="87" data-original-width="363" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPgwQUo-VUZ6chiqN3YBFsxzYGFadabU4QY-lgyJajVsiyFfwODUQFsO4LoFc1bopv5kt1zsrZKUj02nPDx-KVWBZ16VsdEx6y5LwBfCLnLpU-nCszZtmVA09DTvzHr8xQxuLPYKNFo6o/s1600/image016.png" /></a></div>
<br />
I could have easily had two ini files, one for the agent in asynchronous and the other for synchronous.<br />
<br />
Moving on to the next property in the ini file.<br />
<br />
<b>PORT </b>is the port the agent will run on and the default is 9090.<br />
<br />
<b>CLOUD URL</b>, <b>DOMAIN </b>and credentials should be easy to understand.<br />
<br />
You will, however, need to encrypt the users’ password with “<b>encryptpassword</b>” script in the agent bin directory.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjinGRFl12zMV-z-C9A9JdrvF-Qo5T3v0MYJdUj4cvup_Cmb1_m2_Rf0cZfCK-fZMwKTCtbHr9lSa75SD4jhe5gcVDdI-ooGtiFfobOCTiH8U4TXXJ0K3-RvqkzftK-YanO4frwu7Dmww/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="152" data-original-width="582" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjinGRFl12zMV-z-C9A9JdrvF-Qo5T3v0MYJdUj4cvup_Cmb1_m2_Rf0cZfCK-fZMwKTCtbHr9lSa75SD4jhe5gcVDdI-ooGtiFfobOCTiH8U4TXXJ0K3-RvqkzftK-YanO4frwu7Dmww/s1600/image017.png" /></a></div>
<br />
The encrypted password must be manually copied to the ini file. It is worth noting that every time the cloud password expires or is changed, the password will need to be encrypted again and the ini file updated.<br />
<br />
It is a shame that the encryption method is not the same as EPM Automate. This means if you are running EPM Automate on the same machine as the agent, you will need to manage multiple encrypted passwords. In a perfect world, the encrypted password could be held in one place and be shared between the agent and EPM Automate.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVic0IcuRPKuIarDdjU6tvxSogZBXYLAKlHTaf-mFlPkxXbFtKi7VZTTuGs2wbyftI0N5LwuVQQP7gE_b5uW021ebUfzvNrek98dP-4NDF9v8EkH8psysmt5dXqq-2U_FdycQUiJCpZ5A/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="78" data-original-width="396" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVic0IcuRPKuIarDdjU6tvxSogZBXYLAKlHTaf-mFlPkxXbFtKi7VZTTuGs2wbyftI0N5LwuVQQP7gE_b5uW021ebUfzvNrek98dP-4NDF9v8EkH8psysmt5dXqq-2U_FdycQUiJCpZ5A/s1600/image018.png" /></a></div>
<br />
On to the remaining properties.<br />
<br />
<b>LOG_LEVEL</b> can be either ALL, INFO or ERROR.<br />
<br />
<b>POLL_INTERVAL</b> is for asynchronous mode only, it is the time interval in seconds that the agent checks whether a process has been initiated in the cloud.<br />
<br />
<b>REGISTER_WITH_IP</b> defines whether to register the agent against the host name or IP address.<br />
<br />
<b>EXECUTION_POOL_SIZE</b> is the number of executions that the agent can run in parallel.<br />
<br />
<b>JYTHON_HOME</b> and <b>GROOVY_HOME</b> is optional, they specify the installation location. Earlier I installed Jython to C:\jython2.7.1\ so this is used for the JYTHON_HOME parameter value.<br />
<br />
<b>CUSTOM_MEM_ARGS</b> sets the minimum and maximum JVM memory sizes. The default values are just a guide and can be tuned after monitoring memory usage from running integrations.<br />
<br />
<b>CUSTOM_JAVA_OPTIONS</b> allows you to add additional Java parameters, for example if the agent needs to go through a proxy to reach EPM Cloud.<br />
<br />
<b>CUSTOM_CLASS_PATH</b> provides the option to add additional jar files to Java classpath, for example additional JDBC drivers.<br />
<br />
<b>CUSTOM_INTERFACE_CLASS_NAME</b> is only required if custom Java classes are implemented to override default functionality through events.<br />
<br />
Here is an example of my completed ini file.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz6-gUziFf-k3wwA07em7kGFkGBz86Y8NGk6y3QsYwFdEfvLRhoQnxdt8GoPmoGaeLSU9bCS6okHEd9tDpGoTJ8GxtPngxjhItEF90dm9s2jHlBQmG2gXbTHrbmBMKziczqJAy5bN_qD4/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="329" data-original-width="463" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz6-gUziFf-k3wwA07em7kGFkGBz86Y8NGk6y3QsYwFdEfvLRhoQnxdt8GoPmoGaeLSU9bCS6okHEd9tDpGoTJ8GxtPngxjhItEF90dm9s2jHlBQmG2gXbTHrbmBMKziczqJAy5bN_qD4/s1600/image019.png" /></a></div>
<br />
There is one remaining task required before being able to start the agent. The EPM Cloud SSL certificate needs to be exported and copied to the agent cert folder.<br />
<br />
I am going to use an example using Chrome, but it is a similar process for other browsers.<br />
<br />
Log into one of your EPM Cloud instances and click the padlock icon.<br />
<br />
Select Site settings > Certificate<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDWCwkaM9qPfYhOqmraq1m3lqrherSbd2Q7R0dttzIR9IOraGCawUPVpB4jBPhJHrsHQRsHMhzjRJeiwDEKddRCMOpywLXLMd1Tys_viqZTOy95Fj0n48WIaMOw9SI1sxTa6blvlnhNEU/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="276" data-original-width="435" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDWCwkaM9qPfYhOqmraq1m3lqrherSbd2Q7R0dttzIR9IOraGCawUPVpB4jBPhJHrsHQRsHMhzjRJeiwDEKddRCMOpywLXLMd1Tys_viqZTOy95Fj0n48WIaMOw9SI1sxTa6blvlnhNEU/s1600/image020.png" /></a></div>
<br />
This will open the certificate<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiavIi32-MCsIFqNPDTGGlNz8S4RFqZL5V9BezZ9eRPiUTnBODmyBgCcQec8Dsa1bwMJGCGDKTSOM7nVKEz1uhyphenhyphenQJSNscj9_tHpXPnOOCmOKdkmyImGUWyDvBwyrVeO88Uji4J9L-zQPFU/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="361" data-original-width="405" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiavIi32-MCsIFqNPDTGGlNz8S4RFqZL5V9BezZ9eRPiUTnBODmyBgCcQec8Dsa1bwMJGCGDKTSOM7nVKEz1uhyphenhyphenQJSNscj9_tHpXPnOOCmOKdkmyImGUWyDvBwyrVeO88Uji4J9L-zQPFU/s1600/image021.png" /></a></div>
<br />
Click the Details tab and select ‘Copy to File’.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirzfj3ghl1ZfBwxm4W_u9p1VVvfBad-Fo7jh0kOSmi8LNoyim2pquE8x2VW_4jt7pOY_nZWscVMnZwBTh6K0uQXXOroQYSw-BUhiNzsL1wgR9ptlP2sdHH7cpZFWhXOOa3qrg7t88hWwE/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="212" data-original-width="341" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirzfj3ghl1ZfBwxm4W_u9p1VVvfBad-Fo7jh0kOSmi8LNoyim2pquE8x2VW_4jt7pOY_nZWscVMnZwBTh6K0uQXXOroQYSw-BUhiNzsL1wgR9ptlP2sdHH7cpZFWhXOOa3qrg7t88hWwE/s1600/image022.png" /></a></div>
<br />
Save the file to the agent cert folder.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwQu9OFaGfWhv4mxXfCCURTd7Cz79oMAJYjaAGuXG_IM1dmX8RIw8fxi7YhrDDqfummyPFoeMHtlWlGpgjx6lGsuUCdt-4SvOXe-dc9SnH7V-9RfCPLCqrGnV3olbAxWr0d7-YLfT_YKw/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="83" data-original-width="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwQu9OFaGfWhv4mxXfCCURTd7Cz79oMAJYjaAGuXG_IM1dmX8RIw8fxi7YhrDDqfummyPFoeMHtlWlGpgjx6lGsuUCdt-4SvOXe-dc9SnH7V-9RfCPLCqrGnV3olbAxWr0d7-YLfT_YKw/s1600/image023.png" /></a></div>
<br />
Please be aware that the SSL certificates will expire so make a note of the valid date, you will need to replace it close to the expiration date or the agent will stop working.<br />
<br />
Now we are ready to run the agent in asynchronous mode.<br />
<br />
<b class="yellow"><span style="font-size: large;">Update 19.12 release</span></b><b> - The agent can now be run as a windows service. I have put together a post about this and you can read all about it <a href="https://john-goodwin.blogspot.com/2019/12/epm-cloud-integration-agent-update.html">here</a>.</b><br />
<br />
If you want to start the agent from command line, then you can use the “epmagent” script in the agent bin directory.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihWnTS9XdCX861X5Ssdk4isNxoUqHEV771sG2K5EK9NMZnA93zOzz-pxUCJ1G0Np0PSFCZrvo6mH6j9HSEseYSyUjDJBJV0JaOo2lHRH1EFFp9q14FdBiLpQzDze_yW3JKOpT2cLsZtdM/s1600/imag0.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="124" data-original-width="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihWnTS9XdCX861X5Ssdk4isNxoUqHEV771sG2K5EK9NMZnA93zOzz-pxUCJ1G0Np0PSFCZrvo6mH6j9HSEseYSyUjDJBJV0JaOo2lHRH1EFFp9q14FdBiLpQzDze_yW3JKOpT2cLsZtdM/s1600/imag0.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
The syntax is:<br />
<br />
<b class="yellow">epmagent <path to ini></b><br />
<br />
if the agent name is not defined in the ini file or you want to override it, you can set the agent name at runtime with the following syntax:<br />
<br />
<b class="yellow">epmagent <agent name> <path to ini></b><br />
<br />
When the agent starts up, the initialisation file and SSL certificate will be read. The agent will be registered in the cloud against the cluster.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTxPiphOVRlrQSE-_NRhfIbq7nVbosCbm-kJ3CFXEAFQ3AiNclqo61eFDt8MgtOC9p10qKf-nIax1kOclN1YYerz9O0c9SEmaCNs1URrX1nWPKURL64HdLXoNgm7Nr4KzoDUTLAMNgrwY/s1600/imag1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="294" data-original-width="705" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTxPiphOVRlrQSE-_NRhfIbq7nVbosCbm-kJ3CFXEAFQ3AiNclqo61eFDt8MgtOC9p10qKf-nIax1kOclN1YYerz9O0c9SEmaCNs1URrX1nWPKURL64HdLXoNgm7Nr4KzoDUTLAMNgrwY/s1600/imag1.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
If you go back into Data Integration and select the cluster you will see the agent has been registered.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHtpA5S896c6b55Y0zy2vYHi2x5pSACtagol2knvmIOkUPOb0qBL9m3I7zO5S-cMSLlqglU1QvF-q9cis4WvlYZbcLjPhnTaEeeDYcwbNErzSGWsAmMI6ZFFyt9qvKS3ePdnojF_vs9Ew/s1600/agent1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="180" data-original-width="701" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHtpA5S896c6b55Y0zy2vYHi2x5pSACtagol2knvmIOkUPOb0qBL9m3I7zO5S-cMSLlqglU1QvF-q9cis4WvlYZbcLjPhnTaEeeDYcwbNErzSGWsAmMI6ZFFyt9qvKS3ePdnojF_vs9Ew/s1600/agent1.PNG" /></a></div>
<br />
The Physical URL will be the machine and port the agent is running on.<br />
<br />
In asynchronous mode the Web URL is not important, this only comes into play with synchronous mode, which I will get on to shortly.<br />
<br />
As the agent is running in asynchronous mode, it will poll the cloud to check whether any processes have been initiated. I had set the interval poll to be 30 seconds.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCQ-5myTxViU4wnifmHdke6MeUdU654O6goV8PyQixbC3WkaBIc9JzUgNSQxUhCnR2wgCLLpsjL7fggkvkX4cs0Cv2xCSygMgDMnV8mVX6DwIxczlDmxxfLPI4rUUT7OpJK76UiQgMsO0/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="123" data-original-width="553" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCQ-5myTxViU4wnifmHdke6MeUdU654O6goV8PyQixbC3WkaBIc9JzUgNSQxUhCnR2wgCLLpsjL7fggkvkX4cs0Cv2xCSygMgDMnV8mVX6DwIxczlDmxxfLPI4rUUT7OpJK76UiQgMsO0/s1600/image027.png" /></a></div>
<br />
Each time a poll is made the “Last Ping” will be updated in the Cloud. At least this gives some indication that agent status is healthy.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpJcWogZIMAiJwlVa5YKFgThptcf9DqpOJtT44Lfe6ZWVrFK0fuY4J6ZQYv6tpYzUCcpBZZsli8wUjntKcnrMGfyb5-fx-nT48DLLMxCQBYVCyiFdI8lMeze7XqBcmAtB0IA6sokGMoAM/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="84" data-original-width="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpJcWogZIMAiJwlVa5YKFgThptcf9DqpOJtT44Lfe6ZWVrFK0fuY4J6ZQYv6tpYzUCcpBZZsli8wUjntKcnrMGfyb5-fx-nT48DLLMxCQBYVCyiFdI8lMeze7XqBcmAtB0IA6sokGMoAM/s1600/image028.png" /></a></div>
<br />
The agent name can be defined at start-up which will override the ini file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhE_Y9pesgXFtxyLtwKKnk-U7pItSzzev2e4zC4r1dAiak5y2Vzla-LpK1yUvPzUo9XPmb1c16ozIEODZ9WdU6WGVzzpv484G90-SzqdhkFygDEyNulYTGYWDDaH5hNQeqf7A4KZ5326M/s1600/imag2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="261" data-original-width="711" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhE_Y9pesgXFtxyLtwKKnk-U7pItSzzev2e4zC4r1dAiak5y2Vzla-LpK1yUvPzUo9XPmb1c16ozIEODZ9WdU6WGVzzpv484G90-SzqdhkFygDEyNulYTGYWDDaH5hNQeqf7A4KZ5326M/s1600/imag2.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
There will now be two agents registered against the cluster even though only one is running.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib-8rX000X2ok3gc_e95k_SCKLF6Mec10RIMZnhgHzJk7LcdwjR_t_Y7juyHhtxkGWDSJ1-REMNtDhu0IFHPYiPtVpQFF3ZBonP9AEMvaHtW6JuW-zaQlk06Ryv9jNMYp1tJabDYmJdgU/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="248" data-original-width="505" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib-8rX000X2ok3gc_e95k_SCKLF6Mec10RIMZnhgHzJk7LcdwjR_t_Y7juyHhtxkGWDSJ1-REMNtDhu0IFHPYiPtVpQFF3ZBonP9AEMvaHtW6JuW-zaQlk06Ryv9jNMYp1tJabDYmJdgU/s1600/image030.png" /></a></div>
<br />
Agents will stay registered against a cluster, if they are no longer required, they can be simply deleted from the cluster in Data Integration.<br />
<br />
You might be wondering whether there is an option available to run the agent as a Windows service. I have raised this and apparently it is being looked into, so it might appear in a future release.<br />
<br />
Let us move on to synchronous mode. I am just going to update the ini file to change the cluster name. I could have run both the agents at the same time, but I will be covering multiple agents, clusters and assignments in more detail in a future post.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2RceYo9l8EMCe8wtgw_Q2KA3E-bNNI3pf4bGh6H_FbQRvhNx0JTdeckub87znXwYxzmdzmvwQ84PzvrElm_bROP8lPqXg_hMkIM97TSIXHcIsUMt5xxB2Z370CRA_lHb2uyOJGDfRg1E/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="89" data-original-width="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2RceYo9l8EMCe8wtgw_Q2KA3E-bNNI3pf4bGh6H_FbQRvhNx0JTdeckub87znXwYxzmdzmvwQ84PzvrElm_bROP8lPqXg_hMkIM97TSIXHcIsUMt5xxB2Z370CRA_lHb2uyOJGDfRg1E/s1600/image031.png" /></a></div>
<br />
I restarted the agent so it will pick up the new cluster name.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP-k1RnBHWOWzWvkscBGV40wn-4SCYHWEseg_k9zaIVurnPI2ZPthQBTYHx7dph5z6Qg0ef0-kBjl4m4MhhWNka4apub15qjF7yi7TTIH3ImwyAWd3qEcHsOztSGuJmgCra8E5pNDF_zY/s1600/image3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="306" data-original-width="708" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP-k1RnBHWOWzWvkscBGV40wn-4SCYHWEseg_k9zaIVurnPI2ZPthQBTYHx7dph5z6Qg0ef0-kBjl4m4MhhWNka4apub15qjF7yi7TTIH3ImwyAWd3qEcHsOztSGuJmgCra8E5pNDF_zY/s1600/image3.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
You can see that the agent mode is now synchronous.<br />
<br />
In Data Integration the agent will be registered.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgegVyaxrozNClQ6hZyOnl1vqtn8FfvJtwZjhibx67tDPW7sXRki1WXSdfp02T93vwc8KiuO6sbfOERNeg_2PyRA6hCC6N19zTpU1oQdqhem3bZV0aiIm6zqwpZ9g2qBrD9RlqhPhPSCYs/s1600/agent2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="167" data-original-width="665" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgegVyaxrozNClQ6hZyOnl1vqtn8FfvJtwZjhibx67tDPW7sXRki1WXSdfp02T93vwc8KiuO6sbfOERNeg_2PyRA6hCC6N19zTpU1oQdqhem3bZV0aiIm6zqwpZ9g2qBrD9RlqhPhPSCYs/s1600/agent2.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
In the last post I provided an overview of the two modes so please refer to that for more details, but as the agent is running in synchronous mode the cloud requires an inbound connection over HTTPS to the agent. This would usually be achieved by running a load balancer or https with an internet facing URL which will proxy to the agent and port.<br />
<br />
In my testing, I have a domain name routing to an AWS application load balancer. The Load Balancer has an SSL certificate applied which is registered against the domain name. The load balancer has been configured to only accept HTTPS traffic from Oracle Cloud, this is then proxied to the machine running the agent. The machine running the agent only accepts traffic on the agent port from the Load Balancer.<br />
<br />
As you can see, when the agent is first registered with the cloud the Web URL is the same as the Physical URL. The Web URL can be updated by typing the internet facing URL for the agent.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiar9xtm2lnQ0A8vCrYAc06XNmIFlcmnXuLdE8GTA5KJ2XomB38HWOy7hOJghNYRdsMxsZx9913KhK1OPw5IbtD-_dk7zrmRNG0lruouA9m3RBm85gzoUXcIA7cqAQMDnFTxxiJLdxpvcA/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="203" data-original-width="553" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiar9xtm2lnQ0A8vCrYAc06XNmIFlcmnXuLdE8GTA5KJ2XomB38HWOy7hOJghNYRdsMxsZx9913KhK1OPw5IbtD-_dk7zrmRNG0lruouA9m3RBm85gzoUXcIA7cqAQMDnFTxxiJLdxpvcA/s1600/image034.png" /></a></div>
<br />
It would be good if there was an option to also set the Web URL from the agent side when it starts up. It is possible to update using REST which will be covered in a separate blog post.<br />
<br />
At this point there is no option to check whether EPM Cloud can connect to the agent. It is not until the point when you run an integration that you will find out, though to be honest depending on the problem there is not a great amount of detail in terms of logging. Personally, I think there should be an option to test the agent and check the connectivity. Maybe one for a future release?<br />
<br />
It is possible to put the internet facing URL for the agent into a browser and check whether you get a valid response, this doesn’t guarantee that it will work from the cloud though.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYNrSDZ44B7ulTUjj5thSXzizTVdQWVgaZvy_4GTxwAWuTsgFuGjI5adcjhXP55nlAM9dWmTAsvSLxyHIZ785lWtMSJY_KCUOxSFHz9PZjW9twlenI4Od6ceJKw4291xF2TggGa1zYZ_s/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="202" data-original-width="542" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYNrSDZ44B7ulTUjj5thSXzizTVdQWVgaZvy_4GTxwAWuTsgFuGjI5adcjhXP55nlAM9dWmTAsvSLxyHIZ785lWtMSJY_KCUOxSFHz9PZjW9twlenI4Od6ceJKw4291xF2TggGa1zYZ_s/s1600/image035.png" /></a></div>
<br />
You really need to decide whether you need synchronous over asynchronous. Are you happy to wait for polling the interval which can be set or do you have to run processes instantly? Synchronous mode will certainly require working closely with a network team.<br />
<br />
Anyway, now that we have the agent running it is time to move on to extracting data. Watch out for the next part arriving very soon.<br />
<div>
<br /></div>
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com6tag:blogger.com,1999:blog-6575283218005807475.post-54448374844378584112019-10-04T05:24:00.000-07:002019-11-07T08:24:29.678-08:00EPM Cloud - Integration Agent Part 1 - Introduction<div dir="ltr" style="text-align: left;" trbidi="on">
One of the problems with data integration in EPM Cloud is that the list of data sources has been quite limited. Unless you want to integrate with an Oracle source like Financials, HCM or NetSuite then you are restricted to generating a file in the correct format and uploading. If there is the option of on-premise FDMEE then the hybrid functionality is a workaround for these limitations. Unfortunately, this is not viable for the majority of EPM Cloud customers.<br />
<br />
These limiting factors have almost all been eliminated with the release of the Integration Agent which has arrived in EPM Cloud 19.10.<br />
<br />
Here is an excerpt from the 'What’s New' documentation providing an insight to the details of the agent.<br />
<br />
<i><b class="yellow">“The EPM Integration Agent, which provides connectivity between the EPM Cloud and on-premises sources including SQL data sources like Oracle and Microsoft SQL Server, E-Business Suite GL, and PeopleSoft GL, is now available:</b></i><br />
<br />
<i><b class="yellow">In addition to easy access and setup for these sources, the agent may also be extended using scripting to connect to virtually any data source including 3rd party REST API based systems, or systems that can be accessed using a Jython or Groovy script. The agent, implemented as a data source for Data Management and Data Integration, responds and provides the specified information when a user executes data load rules. Agent based integrations may be scheduled like any other data rule which provides users the flexibility to define integrations to any source in an automated fashion.”</b></i><br />
<br />
One thing I disagree with in the first paragraph of the above statement is the reference to on-premise. The SQL data source can be in the cloud or on-premise, it doesn’t matter as long as the agent has good connectivity to it. The same goes for the agent, it can be run in the cloud or on-premise with the basic requirement that it has HTTPS connectivity to EPM Cloud.<br />
<br />
The beauty of the agent is that with either Jython or Groovy custom scripting it goes beyond the default functionality of connecting and extracting data from SQL sources. It has opened up a whole new area of possibilities and I know there is going to be a lot of interest in it.<br />
<br />
I personally think the release of the agent is one of the biggest enhancements in a long time for EPM Cloud integration.<br />
<br />
In this first part I am going to give a quick overview of the agent before moving on to getting up and running with it. There is no point in overloading with too much information at this stage as it will all start to make more sense from the next post. There is a lot to cover so I am unsure how many parts there will be.<br />
<br />
The agent is a lightweight Java application which is similar in concept to EPM Automate. As it is Java-based, it can run on most operating systems. Currently it stands at just over 6MB in size. The agent acts as a HTTP server and servlet engine with the use of <b><a href="https://en.wikipedia.org/wiki/Jetty_(web_server)">Jetty</a></b>, no surprises that the bulk of the functionality is built around a REST API.<br />
<br />
In my testing I have been running the agent on a low tier AWS machine which has network connectivity to EPM Cloud and various data sources.<br />
<br />
The agent requires a JRE to run which should be version 8+ and is not included in the download. This means either a supported JRE will need to be installed before running the agent, or if you are concerned about Java licensing restrictions and EPM Automate has been installed on the same machine, it is possible to point to the version of Java that is deployed with EPM Automate. I can imagine in a lot of cases the agent will be run on the same machine as EPM Automate.<br />
<br />
There are configuration parameters for the agent that are defined in a file, I will be covering this in the next post.<br />
<br />
The agent can currently be downloaded from Data Integration but I believe the longer-term plan is to move it into the downloads section but we will see.<br />
<br />
By default, the agent will connect to relational data sources using JDBC and execute SQL queries to extract the required data set. A data extract file will be generated which is uploaded to EPM Cloud. The SQL query is defined in Data Integration. The database connection can either be set up in Data Management or in a file stored in the agent config directory.<br />
<br />
There is also the option to extract data from EBS and Peoplesoft which are basically pre-seeded SQL queries. Though to be honest it might be better to fine tune the SQL to fit your requirements and use that instead.<br />
<br />
There is no requirement to use the custom scripting option if you want to stick with default functionality to extract data. To be able to use custom scripting then either Jython or Groovy will need to be installed on the machine hosting the agent.<br />
<br />
If you have used custom scripting in on-premise FDMEE then it is very similar to event scripts. The scripts allow you to override the default functionality and connect to any data source. I will cover this in a future post.<br />
<br />
There are four events where custom scripting can be applied:<br />
<ul style="text-align: left;">
<li><b>Before extract</b> – Before the agent connects to the data source and executes the SQL query</li>
<li><b>After extract</b>- After the agent has connected to the data source and produced an extract data file</li>
<li><b>Before upload</b> – Before the data file is uploaded to EPM Cloud</li>
<li><b>After upload</b> – After the data file has been uploaded to EPM Cloud.</li>
</ul>
Processes are executed in the same way from either Data Management, Data Integration, EPM Automate or REST.<br />
<br />
It is possible to run multiple agents and cluster agents, once again I will cover this in a later post.<br />
<br />
The agent can run in two different modes, the first being:<br />
<br />
<b class="yellow"><u>Asynchronous mode </u></b><br />
<br />
This is probably going to be the most common type of deployment as the agent only requires outbound connectivity over HTTPS to EPM Cloud, similar to EPM Automate requirements.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhThPFXBZjGiyxDIPgNZKIOw4jW1DjcyRtv7KEuhm_PZv2qJVLvAIwg1_VwO8BCoG6OWneCxsHkwYYxNxbezXsXNTNCKis1uU1XDaPOcbqnDRyzU4-vkU3AUQL7o23T9QTj0_Dh5gz2iH4/s1600/bground1.2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="570" data-original-width="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhThPFXBZjGiyxDIPgNZKIOw4jW1DjcyRtv7KEuhm_PZv2qJVLvAIwg1_VwO8BCoG6OWneCxsHkwYYxNxbezXsXNTNCKis1uU1XDaPOcbqnDRyzU4-vkU3AUQL7o23T9QTj0_Dh5gz2iH4/s1600/bground1.2.PNG" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
In this mode the agent will poll EPM Cloud using REST to check whether a load rule has been executed. The poll interval is defined in the agent configuration file.<br />
<br />
If no rule has been executed the REST response will not return a Job ID, nothing will then happen until the next time the agent polls the cloud.<br />
<br />
If a rule has been executed a payload is returned containing the Job ID. The agent makes another REST call with the job ID and the response contains the connectivity information, the SQL data source and the SQL query to execute.<br />
<br />
The agent will then connect to the data source, execute the query and generate a data file. This file is uploaded to EPM Cloud using REST.<br />
<br />
A REST call is made to inform that the process was successful.<br />
<br />
The agent process log file is also uploaded to the cloud and appended to the main process log.<br />
<br />
Standard functionality then takes over and the data file will be imported and validated.<br />
<br />
<b class="yellow"><u>Synchronous mode </u></b><br />
<br />
This requires EPM Cloud to connect over http(s) to the agent. This would usually be fronted with an internet facing load balancer or HTTP server which directs traffic to the EPM Agent on the designated port. The machine running the EPM Agent would not need to be internet facing and would be configured to only accept traffic from the load balancer/HTTP server.<br />
<br />
An example being:<br />
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZlgmkn4GhyQ4nZwW6K4siwKVwHeXfBg1iLBStix6FJHcYHskiw7Yub6YU01qmPXHlaByD0dt-jmu7rnM9UcIRAJLlwySOsMJW8Gjd6gb6TpF2120V0IumaqpzBVwU-GWgwqvGt5szHpo/s1600/bground2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="573" data-original-width="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZlgmkn4GhyQ4nZwW6K4siwKVwHeXfBg1iLBStix6FJHcYHskiw7Yub6YU01qmPXHlaByD0dt-jmu7rnM9UcIRAJLlwySOsMJW8Gjd6gb6TpF2120V0IumaqpzBVwU-GWgwqvGt5szHpo/s1600/bground2.PNG" /></a></div>
<br />
It does not have to follow the above design, there could be just a load balancer or a HTTP server or both. It is even possible to connect directly to the agent but that is not something I would promote for security reasons.</div>
<br />
In my testing I ran an AWS application load balancer over HTTPS, this proxied requests to the EPM Agent machine and port. The machine hosting the agent was configured to only accept traffic from the load balancer.<br />
<br />
What I will say is currently there is not much in the way of functionality or logging when testing the agent in synchronous mode. If you are considering this option, then you will need to work closely with a network team to configure, and put monitoring in place in case of configuration issues.<br />
<br />
In Synchronous mode when a data load rule is executed, a REST request is made from EPM Cloud to the internet facing URL for the agent. The payload of the REST call contains the job ID. The agent then operates in the same way as Asynchronous mode. A request will be made based on the Job ID for the SQL connectivity and query information. The query is executed, file produced, uploaded to the cloud. The process status is updated, and process log file uploaded.<br />
<br />
I think the decision of which mode to use really depends on whether you want to go down the route of configuring an internet facing solution and being able to run a process instantly or can wait for the poll interval. Remember the poll interval can be defined at agent level.<br />
<br />
I will go into much more detail of how the asynchronous and synchronous modes work in a future post.<br />
<br />
Communication between the agent and EPM Cloud is not only secured using HTTPS and TLS but also the REST payloads are encrypted using a public/private key management system.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHB-pmMEL5cJE0YcBBCdznW210VRhqaK3i-HUwZ820IwObbg5T7EG67k0Fdv-YeCiZF22aOgGzWK-IgcBDuIZBBdJAUi_QDBUgyYcSuxJ7UBU91p7RM06cm3yR_pDhqAJOPfJ9VcIP-fw/s1600/bground3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="404" data-original-width="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHB-pmMEL5cJE0YcBBCdznW210VRhqaK3i-HUwZ820IwObbg5T7EG67k0Fdv-YeCiZF22aOgGzWK-IgcBDuIZBBdJAUi_QDBUgyYcSuxJ7UBU91p7RM06cm3yR_pDhqAJOPfJ9VcIP-fw/s1600/bground3.PNG" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
Each time the agent is started it will generate a private and public key pair.<br />
<br />
The private key is stored in the agent’s memory. The public key is uploaded to EPM Cloud and stored.<br />
<br />
The REST payloads from EPM Cloud are encrypted using the public key. This can then be decrypted with the private key of the agent.<br />
<br />
This means the agent can only be paired with one EPM Cloud instance and any attempt to communicate with the agent without the key and encryption will not work.<br />
<br />
With that brief intro covered it is time to move on to the good stuff and get the agent up and running. Part two is available <b><a href="https://john-goodwin.blogspot.com/2019/10/epm-cloud-integration-agent-part-2-get.html">here</a></b>.<br />
<div>
<br /></div>
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-15735350365892050622019-09-27T05:56:00.000-07:002019-09-27T05:56:31.144-07:00Data Management/FDMEE – Extracting data and member aliases<div dir="ltr" style="text-align: left;" trbidi="on">
I was recently asked whether Data Management could display the alias for account members where the source is Oracle Financials. The reason behind the request was the users found it easier to understand and map data based on the source Financials account alias.<br />
<br />
I am going to go through a possible solution and lead on to extracting data from a source application and producing an export file with alias members.<br />
<a href="https://www.blogger.com/u/1/blogger.g?blogID=6575283218005807475" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
This post is going to be based on EPM Cloud but most of it can be replicated with on-premise FDMEE.<br />
<br />
At first, I thought maybe the alias information was being pulled through from the source. If all columns are displayed in the workbench there is quite a bit of additional information available which is held in attribute columns.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/u/1/blogger.g?blogID=6575283218005807475" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/u/1/blogger.g?blogID=6575283218005807475" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/u/1/blogger.g?blogID=6575283218005807475" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfcSrYXsUMHQJLpQJV_MkfwFtNiaPC2oyyYpVncJ1XbpyrB1MpmHCm-Ogg3foY9LUSJnkB_vSk3SkjEBrX3GI06giGpxloxbbRsNmcDEeoaeu-aCwn3_qKWuInfPeeyRY1T1BixRIvttE/s1600/image01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="517" data-original-width="673" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfcSrYXsUMHQJLpQJV_MkfwFtNiaPC2oyyYpVncJ1XbpyrB1MpmHCm-Ogg3foY9LUSJnkB_vSk3SkjEBrX3GI06giGpxloxbbRsNmcDEeoaeu-aCwn3_qKWuInfPeeyRY1T1BixRIvttE/s1600/image01.PNG" /></a></div>
<br />
This does not include any member aliases though.<br />
<br />
In the source filter of the load rule there is an option to define the members to extract data for.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwd4pKcWL2hKf-i8Yx_3AdY2KCbUMfgmBbiiSTnmy1tfVgYOT8qyn5ESOIz2TFiGi_FWjmxuv0hCCMP_fGdC9ZW753IYVyPc1y1T9QQcByhpczu5Qy3FW-rjQ_LO0K38SIGRL0FEPSCxo/s1600/image2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="140" data-original-width="531" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwd4pKcWL2hKf-i8Yx_3AdY2KCbUMfgmBbiiSTnmy1tfVgYOT8qyn5ESOIz2TFiGi_FWjmxuv0hCCMP_fGdC9ZW753IYVyPc1y1T9QQcByhpczu5Qy3FW-rjQ_LO0K38SIGRL0FEPSCxo/s1600/image2.png" /></a></div>
<br />
If the filter condition is selected this will open the member selector. Selecting List View will display the member and description.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGTUZsq9DzQhfGHUIdXdYu0lxyklGQ8VkvrvQ0iTZesINtzoK1LiRywE9e9-3PTOC9m-IcA01A_c9G1xyxmI7npAdY2sXXbNizlLSHkCTrS0NNH60zzfc0p8KLwQA_6onwGD4Nc4DB_gM/s1600/image3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="254" data-original-width="293" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGTUZsq9DzQhfGHUIdXdYu0lxyklGQ8VkvrvQ0iTZesINtzoK1LiRywE9e9-3PTOC9m-IcA01A_c9G1xyxmI7npAdY2sXXbNizlLSHkCTrS0NNH60zzfc0p8KLwQA_6onwGD4Nc4DB_gM/s1600/image3.png" /></a></div>
<br />
So the type of member information I am after is being stored. Populating the member information is controlled by selecting “Refresh Members” from the target application.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkyARKSpYMqS_GRjDeUAaAthgC-U3wPQR-en-RDMIpc9fyUfJzc5CIGDgGaPpn99vhHYANJ-g8Wr930U7XT3ceJUwwsz6XBuieKCEmNu-yvd8VBgOp9H_f0TNBhgazAK8uIMxEGjnLPvo/s1600/image4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="105" data-original-width="489" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkyARKSpYMqS_GRjDeUAaAthgC-U3wPQR-en-RDMIpc9fyUfJzc5CIGDgGaPpn99vhHYANJ-g8Wr930U7XT3ceJUwwsz6XBuieKCEmNu-yvd8VBgOp9H_f0TNBhgazAK8uIMxEGjnLPvo/s1600/image4.png" /></a></div>
<br />
It is a shame that the source values can not be selected in the Data Load Mappings even though they are being stored, it is only possible to select target values.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZb0jEEr0KaAk5q7EkkyxmAdgQF1eNcksiucgnFxop-jfe3JzIrWyHB-974T6ya-rj8DaHhPxHZTU7kmR7LydDodummsG1lWzFKc5vQPiWN2O1itbXvKmWnox4dmqjsvc8tmC-eIwbODU/s1600/image5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="219" data-original-width="508" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZb0jEEr0KaAk5q7EkkyxmAdgQF1eNcksiucgnFxop-jfe3JzIrWyHB-974T6ya-rj8DaHhPxHZTU7kmR7LydDodummsG1lWzFKc5vQPiWN2O1itbXvKmWnox4dmqjsvc8tmC-eIwbODU/s1600/image5.png" /></a></div>
<br />
Anyway, the member information is being stored in a database table named “AIF_TARGET_APPL_MEMBERS”. There is no access to this table in EPM Cloud, but it is possible to track down the details in on-premise.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJCYiT2OEARVXxPnojyuvMf3PfjboQBYV2bQVrYQisVEssHR2J7PKcVWhDtQf-eSOsI2y2ChUw_KQFNWmquBCkBqqLsy5ZDlSCF3Nz9g40sLMDwdr9-ztwYd3eGTBINWnqFigJPcRMXBc/s1600/image6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="206" data-original-width="696" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJCYiT2OEARVXxPnojyuvMf3PfjboQBYV2bQVrYQisVEssHR2J7PKcVWhDtQf-eSOsI2y2ChUw_KQFNWmquBCkBqqLsy5ZDlSCF3Nz9g40sLMDwdr9-ztwYd3eGTBINWnqFigJPcRMXBc/s1600/image6.png" /></a></div>
<br />
There is currently no scripting available in Data Management, but there is an option to use SQL mappings, which means it should be possible to query the member name and return the alias.<br />
<br />
To achieve this, you could add a lookup dimension to the target application. This dimension will hold the account alias members. As it is a lookup dimension it will not be loaded to the target.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheADp36yBH-dskPF3zC0DLH6p5eyHViqpAdHnBukQqKaeO2WNH3fOsoaCbHf8T_5foXqztQUuKvvECJZ7ELeU7SrsnK8rMBtnwaiAAzhSNNQRTYmdXn6DOIOQG_cH0S7lvkpmXAa5hJJc/s1600/image7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="170" data-original-width="407" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheADp36yBH-dskPF3zC0DLH6p5eyHViqpAdHnBukQqKaeO2WNH3fOsoaCbHf8T_5foXqztQUuKvvECJZ7ELeU7SrsnK8rMBtnwaiAAzhSNNQRTYmdXn6DOIOQG_cH0S7lvkpmXAa5hJJc/s1600/image7.png" /></a></div>
<br />
The lookup dimension does not need to be mapped in the import format.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPy-feuNqZOes-83WDHQN4D_kdSpASg3CH97biEOEnurDTUaoy9SK38zohXEthlzGoe7FV-dNnBno5O7fnnL6pPU-_EyyGUEEcF-swRYARWy6EnF6vNHgisxRa_bX8YOcpMbfEal97k5U/s1600/image8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="109" data-original-width="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPy-feuNqZOes-83WDHQN4D_kdSpASg3CH97biEOEnurDTUaoy9SK38zohXEthlzGoe7FV-dNnBno5O7fnnL6pPU-_EyyGUEEcF-swRYARWy6EnF6vNHgisxRa_bX8YOcpMbfEal97k5U/s1600/image8.png" /></a></div>
<br />
A SQL mapping can be added to the lookup dimension. The SQL will return the alias member based on the source account member.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk4MHCPW9buZaKU-IjLdVKZ45OFkDzFy7ED_CxMOi5CfgEbxX6ePwFn6WmZ1dEhnF901R4s0UA7c3rkJUijQJshKcMouZqKnVu-SLPSXwxUaGt_mrbG5-pSLOggS-xEKWwnF6vyeAjhpU/s1600/image9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="216" data-original-width="700" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk4MHCPW9buZaKU-IjLdVKZ45OFkDzFy7ED_CxMOi5CfgEbxX6ePwFn6WmZ1dEhnF901R4s0UA7c3rkJUijQJshKcMouZqKnVu-SLPSXwxUaGt_mrbG5-pSLOggS-xEKWwnF6vyeAjhpU/s1600/image9.png" /></a></div>
<br />
I am sure the SQL could be improved, this is a simple example of how to go about it, and I am not saying it is the only or right way.<br />
<br />
Once the mapping has been created the validation can be run again.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6SxwoEybkVQjrFtnepJpF77hi9MVoOE87hB9V3J4adTxNzqtC5fkXqFDnHh2nKEt4UbE4JexiGBLOoD7RMG6iiAvP9UOwP7MKYdoUHOa1-2KRSkFZQMRSLQnfJzrXa9pFW-fIm2yIz3Q/s1600/image10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="448" data-original-width="391" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6SxwoEybkVQjrFtnepJpF77hi9MVoOE87hB9V3J4adTxNzqtC5fkXqFDnHh2nKEt4UbE4JexiGBLOoD7RMG6iiAvP9UOwP7MKYdoUHOa1-2KRSkFZQMRSLQnfJzrXa9pFW-fIm2yIz3Q/s1600/image10.png" /></a></div>
<br />
Now the data in the workbench contains the Financials account and alias. To keep the source information up to date then it is important to run refresh members.<br />
<br />
This leads me on to a question that has been raised on numerous occasions; which is whether it is possible to extract data to a file, but populate with member alias instead of member name?<br />
<br />
Based on the logic that I have just gone through then it should be possible. Currently in the cloud or on-premise there is no option to extract data by member alias, yes you can argue that mappings could be added to map the members in the extracted data to alias. This would require a process to keep them in sync and there is nothing wrong with going down that route. I just want to provide an alternative.<br />
<br />
So, let us go through an example of extracting data from a source EPM Cloud Planning application and generate an output file including member alias.<br />
<br />
I am going to base it on the “Data Export to File” which I went through in a previous blog <b><a href="https://john-goodwin.blogspot.com/2019/06/epm-cloud-data-management-new-data.html">post</a></b>, if you are not aware of all the functionality it offers then have a read of the post. It should also be possible to use a custom target application.<br />
<br />
I have created my target application which includes a dimension for account alias.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFCDva3r_6qIfLsIKWXcLO96DA2cMPPAu4pnqBJuVfOWTki5OdI4XyXsH3S1UqXCYTL-qsbXHksFPm2qaHet-NkF8iLeGHlQSttHqlCSRnHfp38kcYncKLtu0vVG8sSTzpOqbG9MTawTs/s1600/image11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="161" data-original-width="515" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFCDva3r_6qIfLsIKWXcLO96DA2cMPPAu4pnqBJuVfOWTki5OdI4XyXsH3S1UqXCYTL-qsbXHksFPm2qaHet-NkF8iLeGHlQSttHqlCSRnHfp38kcYncKLtu0vVG8sSTzpOqbG9MTawTs/s1600/image11.png" /></a></div>
<br />
As with my previous example, I have added a SQL mapping to map the member name to alias.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFQby4GMDmvrmaZ4GW3sh2HfYYOBYx2kpxAshZ7QJrxEarBsVWdZoHnpv3BakVdgoyku2iEcCAOlbfqYkGdS41atuLkfV2gs5EoTkLPH1Qoal70Y-9CxBeuq3t6XlC8hosVYlxqCF7pUQ/s1600/image12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="214" data-original-width="699" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFQby4GMDmvrmaZ4GW3sh2HfYYOBYx2kpxAshZ7QJrxEarBsVWdZoHnpv3BakVdgoyku2iEcCAOlbfqYkGdS41atuLkfV2gs5EoTkLPH1Qoal70Y-9CxBeuq3t6XlC8hosVYlxqCF7pUQ/s1600/image12.png" /></a></div>
<br />
In the data load rule, I have defined a download file name. You don’t have to do this if you are happy with downloading the .dat file version.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOEkhDcCVf9e7EQWjSEAqQTZQKttraX_LQvcGyNxKBuI-__MOfzALR4RxQ2Opt1ugSB1fyKRa6GK4fGVFWrJnZaGlG9s9zGMBvT2Da-ihnqFeqm-T1746hHP930p3fJQdFA1DKk1RNTsM/s1600/image13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="191" data-original-width="530" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOEkhDcCVf9e7EQWjSEAqQTZQKttraX_LQvcGyNxKBuI-__MOfzALR4RxQ2Opt1ugSB1fyKRa6GK4fGVFWrJnZaGlG9s9zGMBvT2Da-ihnqFeqm-T1746hHP930p3fJQdFA1DKk1RNTsM/s1600/image13.png" /></a></div>
<br />
Once the rule has been run, the data in the workbench includes the account alias.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdgjGQCS9RpfAuBxATqCo_aytt8dubrzwVB53Tm9NM7T8IMY6BxqwTDlQIvjQXl27bBVYuNaDGpAzltasIBM_z8o2Ir1OM8V7dK628mjl4XYGK4h3CssCnxNr_tjg-8hxoRdOL6Axl_3s/s1600/image14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="317" data-original-width="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdgjGQCS9RpfAuBxATqCo_aytt8dubrzwVB53Tm9NM7T8IMY6BxqwTDlQIvjQXl27bBVYuNaDGpAzltasIBM_z8o2Ir1OM8V7dK628mjl4XYGK4h3CssCnxNr_tjg-8hxoRdOL6Axl_3s/s1600/image14.png" /></a></div>
<br />
The output file can be downloaded from Process Details, the filename will be in the format of <br />
<b><TARGET_APPLICATION>_ <PROCESS_ID>.dat</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTVeBExNP0c9nEQrfXxHWzXOXBOVCaB71W9zfP_XNxjOvPiGeRaL8Q415qs770steLKzXgNsv8mZjgqyM_AEt6NU6EUpxepGIBxrInqedV4dqGeQ2hlLwEz5vABNZs3g425kd6FMOMl5E/s1600/image15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="115" data-original-width="494" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTVeBExNP0c9nEQrfXxHWzXOXBOVCaB71W9zfP_XNxjOvPiGeRaL8Q415qs770steLKzXgNsv8mZjgqyM_AEt6NU6EUpxepGIBxrInqedV4dqGeQ2hlLwEz5vABNZs3g425kd6FMOMl5E/s1600/image15.png" /></a></div>
<br />
As a filename was specified in the data load rule options, it can also be downloaded from the inbox/output explorer.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG6MLHlzas8nIN1meSPoAQMoG-uYoTbT4AfdbrksSgilexSHBitwmXMgRJUo9gRwPNT7BYHkIXlhNjPtcdqGz1RtCxiX_rH7TW3Yma2zKOBwo32rdYMnQ6AoqKTUvZaE61gIuPZ6EaUTo/s1600/image16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="174" data-original-width="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG6MLHlzas8nIN1meSPoAQMoG-uYoTbT4AfdbrksSgilexSHBitwmXMgRJUo9gRwPNT7BYHkIXlhNjPtcdqGz1RtCxiX_rH7TW3Yma2zKOBwo32rdYMnQ6AoqKTUvZaE61gIuPZ6EaUTo/s1600/image16.png" /></a></div>
<br />
Alternatively, it can be downloaded using EPM Automate or REST.<br />
<br />
The target file includes a column for account member name and alias.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGK60iD20RUTCuqsT1xkWY-wmTnZE0NbO-MhkDHEE5I7cf-SA3U5Ny4IUc5mlKjJ-Sihd5CQonuzF94sjSlrbGKHFQhkfwk7wziTNwbOGt-pUVh9Op2q09jzEr9PwZ9ZnoRq2__WA-Rxw/s1600/image17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="217" data-original-width="608" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGK60iD20RUTCuqsT1xkWY-wmTnZE0NbO-MhkDHEE5I7cf-SA3U5Ny4IUc5mlKjJ-Sihd5CQonuzF94sjSlrbGKHFQhkfwk7wziTNwbOGt-pUVh9Op2q09jzEr9PwZ9ZnoRq2__WA-Rxw/s1600/image17.png" /></a></div>
<br />
If I only wanted to include the member alias the target application would only need to contain the required dimensions.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNwEkgcR_yp-MZGVHLQ2AnAa5VR1BWRY-i6JJmQyUiIbilTgkjh0WLZkhGOD8OjspIW1y8Epj-Mlg6CUf_OPDos6s4AWFkv0BFlf2JQ1NCpnBhnrbEDargwgTIPxJ9ci7hZZk81uZXPJM/s1600/image18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="222" data-original-width="493" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNwEkgcR_yp-MZGVHLQ2AnAa5VR1BWRY-i6JJmQyUiIbilTgkjh0WLZkhGOD8OjspIW1y8Epj-Mlg6CUf_OPDos6s4AWFkv0BFlf2JQ1NCpnBhnrbEDargwgTIPxJ9ci7hZZk81uZXPJM/s1600/image18.png" /></a></div>
<br />
A similar SQL mapping can be added for each dimension.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMPzHcWV_L5D8d1Kx0pbFRtX4Jm3OR1VnHjVHsDKSIfqPNz7SfmwTWDodyzIhB-PYBzp6rVbOf3zYuX5zvZDV0lENGrlwGZOZruIUNEUY1z8iWGUkjuh7uwdnFiegHUg7-1A7RUn_9hg8/s1600/image19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="220" data-original-width="697" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMPzHcWV_L5D8d1Kx0pbFRtX4Jm3OR1VnHjVHsDKSIfqPNz7SfmwTWDodyzIhB-PYBzp6rVbOf3zYuX5zvZDV0lENGrlwGZOZruIUNEUY1z8iWGUkjuh7uwdnFiegHUg7-1A7RUn_9hg8/s1600/image19.png" /></a></div>
<br />
The workbench includes both the source member and the alias as the target.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin-3aHKEYaDFQUgNanOKcFPQ9zJlBsmwPnJi0qzvC-ObiqYV1MTMANfRfV7nFeWSZDDhHdVIpMxAwx6Xq3lnHsSbM3AgfNnjb6wWf4zkIpHpB_seiLKgeglSys4nNzwB3zb5YRjJ5S-5M/s1600/image20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="322" data-original-width="688" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin-3aHKEYaDFQUgNanOKcFPQ9zJlBsmwPnJi0qzvC-ObiqYV1MTMANfRfV7nFeWSZDDhHdVIpMxAwx6Xq3lnHsSbM3AgfNnjb6wWf4zkIpHpB_seiLKgeglSys4nNzwB3zb5YRjJ5S-5M/s1600/image20.png" /></a></div>
<br />
The output file will only contain the member aliases. I also defined pivot by period in the data load rule options.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBzmb6eNvfPXWg4CHXC9ExssIAFCHnEVSlIcXpUI7MPP7uEczYEOKVg86C91F-tJVchT6NSmpyOTwj1XzpizDdQw90rO2KDu1ocKVlwS35vAKYgMISfgWdeOJd_Z92YzvGgyUwv_LyEs0/s1600/image0.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="219" data-original-width="635" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBzmb6eNvfPXWg4CHXC9ExssIAFCHnEVSlIcXpUI7MPP7uEczYEOKVg86C91F-tJVchT6NSmpyOTwj1XzpizDdQw90rO2KDu1ocKVlwS35vAKYgMISfgWdeOJd_Z92YzvGgyUwv_LyEs0/s1600/image0.PNG" /></a></div>
<br />
Nice. How about automating refreshing the member information so it is in sync with the source application.<br />
<br />
This is possible using REST. A post request can be made containing the application name in the body.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_euH_TkN8HZ0MSYyrBy8lBfeqAYYzyD2UgIrgQ2lpkYWziNZmdTnvXeY31CHRmW0dntlBEjAHk08WRuNeV6ENh2S8KcjkyXvPySblwu06SoT2msfeUxzmSmoCS2U59kzVf02Ar3I0osQ/s1600/image22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="151" data-original-width="367" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_euH_TkN8HZ0MSYyrBy8lBfeqAYYzyD2UgIrgQ2lpkYWziNZmdTnvXeY31CHRmW0dntlBEjAHk08WRuNeV6ENh2S8KcjkyXvPySblwu06SoT2msfeUxzmSmoCS2U59kzVf02Ar3I0osQ/s1600/image22.png" /></a></div>
<br />
Unfortunately, this doesn’t work for Oracle Financials as ‘refresh members’ is processed in a different way, it should work for most EPM type applications.<br />
<br />
This can be scripted and automated using a language of your choice.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOfKHa4x3SeeOwVrxMNpGUZq4TdOoaqkb3INjawngHbp1uhYhBqolHyQxhUGRhvH-JxECtvrx5Kj7oss5NC0EP_ulg0KdIt-5iUhQ4D3znB_D403eBGzLnmY3cdql14tC_7JNy8aw5ZDk/s1600/image23.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="482" data-original-width="668" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOfKHa4x3SeeOwVrxMNpGUZq4TdOoaqkb3INjawngHbp1uhYhBqolHyQxhUGRhvH-JxECtvrx5Kj7oss5NC0EP_ulg0KdIt-5iUhQ4D3znB_D403eBGzLnmY3cdql14tC_7JNy8aw5ZDk/s1600/image23.png" /></a></div>
<br />
After executing the script, you will be able to validate the refresh members process has been run in Process Details.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgp_mFIT13K52Vy20nLq4-AhTD01Nku8sQ7YNYRcqEFRv27KlnP4I95Iiu3ZO9H0qp4IIcaz-S1LZyhQPpVq9aKz6fT0JW0pK549bH92pzGoRcjwfHpxrCB1A-dAI-6tdbmu22qWzLb0/s1600/image24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="113" data-original-width="436" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXgp_mFIT13K52Vy20nLq4-AhTD01Nku8sQ7YNYRcqEFRv27KlnP4I95Iiu3ZO9H0qp4IIcaz-S1LZyhQPpVq9aKz6fT0JW0pK549bH92pzGoRcjwfHpxrCB1A-dAI-6tdbmu22qWzLb0/s1600/image24.png" /></a></div>
<br />
If you have Enterprise planning, you can use Groovy and the REST API to run the refresh members process. I wrote a post detailing how to use the REST API with Groovy which you can read all about <b><a href="https://john-goodwin.blogspot.com/2019/07/epm-cloud-recent-web-service-and-groovy.html">here</a></b>.<br />
<br />
In summary a Groovy business rule can be created which makes a REST call.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjofwe_siputsqEhQ78CIVMFft2i5nlymHOfsjr_-lWfvcgYJY9-rbtGofRAd2id4yYPghbXuds4MDKdjkFJlHvi6owRw1VMGFiuauOvY705Q2kfh8svT64s9PszzzyiL7hZapXbnVdk0w/s1600/image25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="290" data-original-width="546" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjofwe_siputsqEhQ78CIVMFft2i5nlymHOfsjr_-lWfvcgYJY9-rbtGofRAd2id4yYPghbXuds4MDKdjkFJlHvi6owRw1VMGFiuauOvY705Q2kfh8svT64s9PszzzyiL7hZapXbnVdk0w/s1600/image25.png" /></a></div>
<br />
Once deployed the rule will be available in planning.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwFAWpPxZaffRet7Y8ep08tcV1EY-Ch8UoGtSno4CKxGmTGj6XgxHu6YMpxhgTdU1-40Nf958YCmg3P9oHhjFj6vY6hPEdqK8AA45iEzxLnW1mD3uNeie_Ocozq7k0gKUKOkZcsQgZreE/s1600/image26.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="194" data-original-width="361" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwFAWpPxZaffRet7Y8ep08tcV1EY-Ch8UoGtSno4CKxGmTGj6XgxHu6YMpxhgTdU1-40Nf958YCmg3P9oHhjFj6vY6hPEdqK8AA45iEzxLnW1mD3uNeie_Ocozq7k0gKUKOkZcsQgZreE/s1600/image26.png" /></a></div>
<br />
After running, Job Details contains some of the response from the REST call.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDD6yPpSFCjq_1dYepdL6EXUXOHTLCCwtqO03PtJR5tawTt5i3aa03_FLGAiWUhAK9dYUw_xOIdqZs8sz8YDr3CHQeWRiLQmBS_iXODJ99Qpe_yZhinGG28USpUTM_l8rGWKQsUaIB3_w/s1600/image27.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="94" data-original-width="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDD6yPpSFCjq_1dYepdL6EXUXOHTLCCwtqO03PtJR5tawTt5i3aa03_FLGAiWUhAK9dYUw_xOIdqZs8sz8YDr3CHQeWRiLQmBS_iXODJ99Qpe_yZhinGG28USpUTM_l8rGWKQsUaIB3_w/s1600/image27.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnQNGSxMKWISZLucxCKDRpGpdPgYrNsUjmFOSjw4cQjHCRhvS086GE_Mj7FpH2vle_9JtqKWMG5Hdh9w-rfwgFkXg258fMHohV_u4c6Se8iN1a22sbD7TnD1sek6OUHCfnxlxflWXmIC0/s1600/image28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="224" data-original-width="697" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnQNGSxMKWISZLucxCKDRpGpdPgYrNsUjmFOSjw4cQjHCRhvS086GE_Mj7FpH2vle_9JtqKWMG5Hdh9w-rfwgFkXg258fMHohV_u4c6Se8iN1a22sbD7TnD1sek6OUHCfnxlxflWXmIC0/s1600/image28.png" /></a></div>
<br />
The process ID can be matched to confirm the refresh members process has been run.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZzUTaTsbnez5a-UNTR6eeFpshyphenhyphenF1Fi1TW6_DE2t2EeMeZpFgLNNxB3rsXPK2wT2GNW5ppErYrdkUT66lIUrGM98MfYa5TPACUFtxUsxB6afIdeTdU4aXQTZIWO8AuBiD2-_ssFBoF28I/s1600/image29.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="112" data-original-width="461" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZzUTaTsbnez5a-UNTR6eeFpshyphenhyphenF1Fi1TW6_DE2t2EeMeZpFgLNNxB3rsXPK2wT2GNW5ppErYrdkUT66lIUrGM98MfYa5TPACUFtxUsxB6afIdeTdU4aXQTZIWO8AuBiD2-_ssFBoF28I/s1600/image29.png" /></a></div>
<br />
To keep the member information in sync then the rule can be scheduled to run on a regular basis.<br /><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfUBsKnwztcW8bsQzBrNyrlrYaQhYKHIfHr0hGBMeV8cNrS45VzRRqyWqwBqsUUFbyzdWGHP8BNYs3wMHj7H-W3GYfwF_wsOs8KIfggNzFZnWNPezgFQ27HgSrTprhygUlwDyOTzltuoE/s1600/image02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="336" data-original-width="670" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfUBsKnwztcW8bsQzBrNyrlrYaQhYKHIfHr0hGBMeV8cNrS45VzRRqyWqwBqsUUFbyzdWGHP8BNYs3wMHj7H-W3GYfwF_wsOs8KIfggNzFZnWNPezgFQ27HgSrTprhygUlwDyOTzltuoE/s1600/image02.PNG" /></a></div>
<br />
This means that when the data extract is run it will be populated with up to date member aliases.<br />
<br />
I am going to leave it there, hopefully you have found this useful. Until next time…<br />
<div>
<br /></div>
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com1tag:blogger.com,1999:blog-6575283218005807475.post-14946149544513743682019-09-09T00:46:00.000-07:002019-09-09T00:46:43.801-07:00EPM Cloud – Managing journals with REST<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
I previously put together a series of posts covering journals in EPM Cloud Financial Consolidation and Close. The posts provided an overview of journals and detailed the workflow process before moving on to look at the options for loading journals through the simplified UI and Data Management.<br />
<br />
If you have not read the posts and are interested they are available at:<br />
<br />
<b><a href="https://john-goodwin.blogspot.com/2018/12/epm-cloud-journals-and-data-management.html">EPM Cloud - Journals and Data Management - Part 1</a></b></div>
<b><a href="https://john-goodwin.blogspot.com/2018/12/epm-cloud-journals-and-data-management_28.html">EPM Cloud - Journals and Data Management - Part 2</a></b><br />
<b><a href="https://john-goodwin.blogspot.com/2019/01/epm-cloud-journals-and-data-management.html">EPM Cloud - Journals and Data Management - Part 3</a></b><br />
<b><a href="https://john-goodwin.blogspot.com/2019/01/epm-cloud-journals-and-data-management_14.html">EPM Cloud - Journals and Data Management - Part 4</a></b><br />
<br />
At the time of writing them there were no options to manage journals through the REST API or EPM Automate. In the ever-evolving world of EPM Cloud, recent functionality has been added which allows you to interact with Journals through the REST API. I am sure related commands will be introduced to EPM Automate in a future release.<br />
<br />
It is now possible to carry out the following actions through the REST API.<br />
<ul style="text-align: left;">
<li><b class="yellow">Retrieve Journals</b></li>
<li><b class="yellow">Retrieve Journal line item details</b></li>
<li><b class="yellow">Submit, Approve, Post, Unpost and Reject Journals</b></li>
<li><b class="yellow">Open or close Journal periods.</b></li>
</ul>
As I have a keen interest in REST and have been covering the rise of the APIs for the last four years, I thought it would be worth having a look at what is currently possible with journals.<br />
<br />
I am not going to go through the basics again so there will be an assumption you understand what REST all is about. For demo purposes I will be using a free browser-based REST client and for scripting it will be PowerShell. Please feel free to select your preferred option as I am not suggesting those are the ones to use, you can work with REST APIs in most scripting languages so pick the one that you feel most comfortable with.<br />
<br />
To start off, I have created three journals which have the status of “Working”. Workflow is enabled so the journals will need to go through the different states before being posted.<br />
<br />
<div style="text-align: center;">
<img alt="" height="315" src="data:image/png;base64,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k48f/eRnv3j2H5Vz18/fKx/lcme/mjp69dYGJfWnXr58GbFrAACAdulExv37f/ji8upNZ8a9cv3Wl//4VflEr1hZFzHjvm6q0qBtME+fPp2fn19dXX358uW3vvWtXq/X6/UmJia+/vrrWOMBAABIWScybr/f/6d/fnr91j0h4K7dffhvv/j3ylm2jFu/s+ssscXTck1Nv8ZGyuXPnz9/++23X+fax48fP3/+/N13352amur1el988YViqQAAAFqvKxm33+8//8//uv+Dx8aA++gv/vLFf/9P/RThRqwQSY3RM6BOvb6zkVevXr3zzju9kidPnvT7/XPnzpFxAQBAd3Qo4/b7/V//+n9/XPti7s/+6q9/85vf2E6p32QdlAun1Osov2YgN2j7uVz4y1/+8rPPPuv1emfPnn327NnrqZFxAQBApxSTC5fTPCb2X5rYe3HDBx9ABQf/AAAYOklEQVS/EfXfVfjtb3/72ed/Mwi4T/727373u99pTqx/FcFWwSvj1ls2di3/XDn3q6++6vV6p06dGpSQcQEAQKd0LuO+Nsi4vifaYqUzegr1nYX1Qx7MF1980ev1zp071+/3X7169ezZs7Nnz/Z6vc8+++z58+eaaQIAALQaGVei/HcVmnwfN6DQK+P+/Oc/L389d9euXa9evar3AgAAkJNicuFKmsfE/ssTe5c3fPDJG9/50+jTHl7G1XxXQfl9BmNJuVzOuFNTU++8886zZ88eP378OuDOzc09ffrUPFUAAICMFJMHrqR5TCxcnti3vGH3J2+8O7aM2xd/B4TxXwrr/2H0dNapV+vbw2ulgq3a119/vX79+te59pvf/ObLly9XV1enpqa+/PJL53wBAAAyQMbthFevXr148WLcowAAABgRMi4AAABy09GMCwAAgIyRcQEAAJCbYtOBK2kekwuXJ/Ytb9z9yToyLgAAAHyQcQEAAJAbMi4AAAByU2w6sJLmMblwZWLf8sbdn65798/GvUoAAABok2LTwZU0j8kDVyb2L2/c8+m698i4AAAA8EDGBQAAQG7IuAAAAMgNGRcAAAC5IeMCAAAgN2RcAAAA5KaYOriS5rHpwJXJ/csTez5dT8YFAACADzIuAAAAckPGBQAAQG7IuAAAAMhNMXXwaprHpgMrk/svTew5v/69Px/3KgEAAKBNiqnFq2kemw6uTC5cmthL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" width="640" /> </div>
<br />
To retrieve the list of journals there is a REST resource available. A GET request can be made against URL format:<br />
<br />
<b class="yellow">https://<cloud_instance>/HyperionPlanning/rest/v3/applications/<app_name>/journals?q=<filter></b><br />
<br />
The filter, which is in JSON format, defines which journals to return; it must include scenario, year, period and journal status. The status depends if workflow is enabled but the possible values are Working, Submitted, Approved and Posted.<br />
<br />
The query filter can also include entity, label, description and group.<br />
<br />
To retrieve the journals I have created, I can make a request to the following URL:<br />
<br />
<b class="yellow">https://<cloud_instance>/HyperionPlanning/rest/v3/applications/Vision/journals?q={"scenario":"Actual","year":"FY19","period":"Sep","status": "WORKING"}</b><br />
<br />
Using a REST client this provides a response of<br />
<br />
<div style="text-align: center;">
<img alt="" height="587" src="data:image/png;base64,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" width="640" /> </div>
<br />
As you can see there is a lot of useful information returned for each journal which can then be processed, for example you could generate a list of journals by label and description which have been posted for the current period.<br />
<br />
By default, 5 journals will be returned. This can be controlled by including a limit parameter in the URL. If 10 journals are to be returned the URL could be:<br />
<br />
<b>https://<cloud_instance>/HyperionPlanning/rest/v3/applications/Vision/journals?q=<filter>&</b><b class="yellow">limit=10</b><br />
<br />
The response will include a maximum of 10 journals.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIdY_6Zwrib8CEEQCqO82Mxhb2GLpocUyUn1bXt4i8lB8aah2PkrMugS-buOjBs6sUFzswQOixgXMGm1m6IeENW7ydAj4P-zGP50uJAS3DgdzoIBctX5S-zr8EDuXrpRWnB4-0AYp8HwM/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="141" data-original-width="194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIdY_6Zwrib8CEEQCqO82Mxhb2GLpocUyUn1bXt4i8lB8aah2PkrMugS-buOjBs6sUFzswQOixgXMGm1m6IeENW7ydAj4P-zGP50uJAS3DgdzoIBctX5S-zr8EDuXrpRWnB4-0AYp8HwM/s1600/image003.png" /></a></div>
<br />
If there are more journals than the limit, the “hasMore” parameter value will be “true” and you can use “offset” or increase the limit to return the remaining journals.<br />
<br />
The journal URL that is returned is a direct link to the journal. If you enter the URL into an authenticated browser it will open the journal and display the line items.<br />
<br />
For example:<br />
<br />
<div style="text-align: center;">
<img alt="" height="272" src="data:image/png;base64,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duiTdfAUvh47NDt79uwbb7yxyExKaFX5bat/PXv2rKwJAIBdVsmaJhXnzp17880333333T//+c8bb8wWta3eVFkTAAC7bJ41Xb9+/a9//ev7779/5cqVCxcunDt37uzZs2fOnDm9i86cOXP27Nlz585duHDhypUr77333gcffPDBBx+89957b7/99mYvv+S2JZoqawIAYJfNs6a9vb2//e1vH3744dWrV69cuXLp0qWLFy++sbsuXrx46dKlK1euXL169YMPPvjLX/7yn//5n//xH//xpz/9aeOXX3LbKhZNlTUBAACkyJoAAABSZE0AAAApsiYAAIAUWRMAAECKrAkAACBF1gQAAJAiawIAAEiRNQEAAKTImgAAAFJkTQAAACmyJgAAgBRZEwAAQIqsCQAAIEXWBAAAkCJrAgAASJE1AQAApMiaAAAAUmRNAAAAKbImAACAFFlTCCHccedxIcS2xKYnjC2z8fESYttj0w/xZmy824UoJ+YPhawphBDumOqcCFvH09qVHoOFh7ub7BM02Qtntw2ZBGRNIZgaYHt4WrvSY7Dw8MMPX+lC1gQ7ZsgkIGsKwdQA28PT2pUegwVZU77JXji7bVuzptms29lXt7+pAbZF5tPadboYS/S8s5i1Ncn8BguypnyTvXB2W9FZ0/ce+tX3HvpVdJOsCejqjjuPJ2aVhaKypsytK2J+gwVZU77JXji7bQezpuh3ZOevo9+pTeyfIzo1jPJd4ZxjE9+HHn2N1VrhwFOvdFG4qXUwRemRNeXMD5U7f7HzuNNOes9+Z2xVn9+aJpzhPKQUbouypv92o/U3QNbETio0a5qvbJajskPT52tiNRNdc6RXPzmiq4qcprbKzJqGHN61Mfmrut6nWBELMlpnlYWu80Ninhlx2snMmjqdsVXr/NaptjQPKYXblqypniatP3GSNbGTCs2awo1LnPrWzM/XIaufzHZWpobogfWFVOI7wZWj0t/Qzcya6idtWoGlTxRdMC2qrVeeWKvV21OvavltosdaO62pz5manJQpjDdvpN+2Ht60W/3twIYlyJpgYXnB9MQTT9RXSJXCjWRNTQnSonz+YvlnUNGfSlXqiR6eSMZkTeykIZNAuVlTOkkINy4mKnLqX5aTNTVtTecw0XwgXWFr5Yu3TTWnF3atWVDOqZvOmKitU805q0mmqaisqeu0MzBr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" width="640" /> </div>
<br />
To convert this into scripting does not require much effort. The following script returns journal for a month which having the “Submitted” status, only the journal label and description are outputted.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3vlzIAyEuSfdGBq2ipgXg7qP2Oy7exKfTumJbUCx3Tn-yqQ4Jo-n45V-e2soULNgxqo_I3_WiQx1ppVuXzyZn3RRPgrktVW65pMlpdXu3gS9x_GqjHLqH3IdgbV5mNtxBaSRdK-AZQQo/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="688" data-original-width="662" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3vlzIAyEuSfdGBq2ipgXg7qP2Oy7exKfTumJbUCx3Tn-yqQ4Jo-n45V-e2soULNgxqo_I3_WiQx1ppVuXzyZn3RRPgrktVW65pMlpdXu3gS9x_GqjHLqH3IdgbV5mNtxBaSRdK-AZQQo/s1600/image005.png" /></a></div>
<br />
The script can be easily updated to output any of the details returned in the response. This information could be processed further or possibly sent to a list of people.<br />
<br />
Just to highlight, if you don’t include the status in the filter section of the URL then the response returned is:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgXRXGhQD4JwlyXIk1xtcrQfEVNkhNrDjGLxQzDddGqEx-8PH9KSxEwrEKFBdZDZY0Kc-DDRXIgxrhCUT_mIQWI1ru9QT2R66BjezHfq79xcafmvrXmFsuYmBc7BrAgkNAXNJIavyHE98/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="136" data-original-width="614" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgXRXGhQD4JwlyXIk1xtcrQfEVNkhNrDjGLxQzDddGqEx-8PH9KSxEwrEKFBdZDZY0Kc-DDRXIgxrhCUT_mIQWI1ru9QT2R66BjezHfq79xcafmvrXmFsuYmBc7BrAgkNAXNJIavyHE98/s1600/image006.png" /></a></div>
<br />
If one of the required dimensions is not included in the filter:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ5ch-0bwOy3-OCZcCa2qU5S5ufq9IfPZfX74yZEdai2KuS_PMB8eYhh74-BxZGCwkIBhEp-Ux0SDBjbneTWmluVWOdCfyjVamUa94pEPOYAYOj5Qa7F3uGmto00SA9vnhmzCThfAHX14/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="146" data-original-width="634" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ5ch-0bwOy3-OCZcCa2qU5S5ufq9IfPZfX74yZEdai2KuS_PMB8eYhh74-BxZGCwkIBhEp-Ux0SDBjbneTWmluVWOdCfyjVamUa94pEPOYAYOj5Qa7F3uGmto00SA9vnhmzCThfAHX14/s1600/image007.png" /></a></div>
<br />
This REST resource only provides summary journal information, if you require the line item details then there is another resource available.<br />
<br />
A GET request can be made to a similar URL which includes the journal label, the format for this is:<br />
<br />
<b class="yellow">https://<cloud_instance>/HyperionPlanning/rest/v3/applications/<app_name>/journals/<journal_label>?q=<filter>&lineItems=true</b><br />
<br />
If you don’t include the “lineItems” parameter then the default is false, this means it would only return summary information like the previous resource.<br />
<br />
The filter must include scenario, year and period.<br />
<br />
As an example, let us take the journal “Rent Expense Adjust” which has the following line items.<br />
<div>
<br />
<div style="text-align: center;">
<img alt="" height="271" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABHUAAAHkCAIAAAA/8oQ7AAAgAElEQVR4nO3dWbccxZko7PpP/AXZBjz2ja+/W99/N98voPs0x9ahT5vTHzaeZDGYwYDBmHnQ6bbblmTLDEJGCLUxFi2vA8tNg6WtvfNclKkuMiMjI4fKjMx6nvWuvaoiMyMjIzKj4tUetCoAAAAYwmrqBgAAACyE/AoAAGAY8isAAPbO0dHR0dHR4SduLN3mSo+2ZHL5ObetZNOqyK0lvwIAYL+sl+83btw4ODi4fv36tWvXrl279pflWl/g9evXDw4ONnlCJpefc9tKtpsaubvkVwAA7JF1cnXi2Grf4sMPP/zoo4+uXbt2cHAweWNm1LZgUyM3mPwKAIA9cnR0dOPGjRPHVi//zeqlr+zL1xPHVlevXv3ggw8+/PDDjz/++MSxLFqVf9tKXzdNjdxg8isAAPbF+ptX62+SvPiVPYoTx1aXL1++cuXK+++//+c//zmry8+5bXVNjdxj8isAAPbFOr+6fv36iWOrF76yev7L+/L1xLHV+fPnL1++/N57773//vsnjmXRqvzbVvq6aWrkHpNfAQCwL9b51bVr104cWz335dXzX96XryeOrc6dO/fmm2++++67f/rTn9Y5zOStyr9tpa/rpl68eDFyj7XIr774/31rHb1v7MmkXMJmn2r0PHWHQ7bPu+v+H/Z64zXv4iyRs/ds4dxv+6F07pDqISPczOl7rneONKnbprZazU79T1dX+S5qBshKKb969kurZ7+8evZLf329/XVh5SeOrc6ePfvGG2+88847V69ePXEso3YG25ZJv5XK1029cOFC5B6TX9XuM+A6u9uBY+ZXO00qJkxdEuuXX6WYS36VXnPi87Un+VUhxQL2w/qPW/zlL385cWz1zJf2KE4cW505c+b8+fObHGbyJs2ibcGmvvHGG5F7TH5Vu89QS+3O/TZaflW9tGHziqmyl/TK5VcpZpFftao5pVWRqx72KuRXAOPYzq+e/tLqqS/uy9dNDvP73/9+ncPk0Kr821b6Kr8q67OCGT+/2lE9iTXvIr9qtWmn5x2zGcuw3UVtu2vM7u0z6PnnV7uWQxsAdm07v/rZF9tFURQjHLKjOHFsdfr06e0cJqXx27Jq23bzxuzwdVPHyK/i/7CdWF63gKvbLaUlHdZDiZUnbkpsT0prO9SQeMlBk+dX6RcV3LOxZxKbkbJnyp0cqbznlba95MQ+ibSk7RVFRif4tm63xsvsOeiR022/iO9fbUbkvI29Gu+oVrdHdYfEHgBYmO386skvrp78QurXoig2X1P2TK95nK/VHKbtVezuutq27ckvrIqiaHy9i69j5FfVBU36Z3ZkcRBcBMTPEtmzsSWNlxnZGj9pq7VgvLUdaki85A79MFRVPcexW8/3udiUTt7FHdu/qsR9Ui48ZUB73tt15YMPeuLpGrc2Xn58n7b1t+rtDntG+g1g7rbzqye+sPrpJ9H4uiiKJ76wKoqicf+UfcZ/Xc1hUq53nOsasG2bFzvqz1Hzq1YlwfKUlUGksNUp2l5m+tUlXn6H1qZcS3rnx3U7qrG2lOVd9ewpox8sTL+KVi3s2bzRrrTDvdrYP/HL6dwbne+EzhfV4Yx1V5F4+fEO6XmxHW6/xGYALE8pv3r886lfi0/yq2r52rpk83b7qOCe23Vu9q/bs//Xag6Tcr2RraWr3mzdvvbEqxiwbaWWJPZtcM/g153nV31WRZ13ayzvcIr0ane34Gs8sHO1bdUtvAapMBjBnSOFPe+oni0M7t94CYnN292Vtmpq47F9Lnz8y0zfLXjG0tbEi+pzsQNWlb5bfGeAxdjOr37y+dQoiiL9davC6g6R+iMaL6Gaw6RcdbDyagtTSgZsW6TCbqPQtql7ml9tr30HXJ+lVNjnpJED694OuxjadZ2Nze7TpR16vrGF8RO1WqEOePN0uBlaNbXx2D4XPv5lpu+2XR5vdmKfdLjYlBtv2DOm9AzAYmznV499fvXorUlfi6JofL35WhRF9XXwqMY9qzUHpVxFNYdJvPbNeeM9s25//HqHatt2v8Xbk9K3wT3rvu5jfhVcozSeIuV08TZ3O2mrAyP937joTJdeT/qp0++cYLXpXdphuNvuGWxnYm0D3jwdboaU0zVeafzYDq3d3WVGrijxjPFmd778xt3Sb61hd4vvDLAY2/nVI7esHr119citq0dv/evrR7deb8qD9az3KYoiuP+jW6/X5ZvC/zrq1tWmnke3Xq/L16rtCbSkqf3rwmAOE9m/8bpKjVy3f/t6S/tE6g+2LbL/dr9V+yfYn9v9XOq3Vv3ZPb9K/NydcBEQb09dna1WkylbU9adKcuplNbGByWyJkvXqob086aMVKTaDl3a9nI6dF3KJSQ2r/+VRiqMb231RDQem97aES4zckXx3Tbl8cojDYufK+XOb7z2Yc+Y2DMAy7CdX/34ltWPb1k9cuvqx7esHtl6XSoviqJUXhTFev+iKOL7b16v9yy93tSzfl1tT139GyntX7+u5jDx/avtabyWuutt7OdI24L7b/dbXT9vt7+6/3/tGRrfSH/uV37VZzmScrqisgDqU2GH1sbPVbfcTNf28Mgat27PlNP1GaMOo9N2z2rj0y9hwLuxw83Q+d6oXmzdtae3NrFtu7vMxMc80qTBxz1ltwGrSjwFwPJs51cP37x6+JaGr0VRRMq3t25eF0Wx2XPzuuee1bNvH5vytZrDxPev1l9t4V+bEWptylV0blvKuXqOQt3XAfKr6id0h+XULhYBiYd3WHulrKviO3doWMqBfRrfKLKg7K//8m7YOyq9hY37t1qhDnjHdrgZWjU1cYfOrR35MltdV2Rk41t73paNvdS5qv4PIMCSbOdXD928evDmhq9FUcTLNzVvtq7fbl6Xykslda9Le/b/Ws1hUq592/bWTcl2eXCflKvo0La6+kvtqWt59ajqnsGvvX7/qrqC7L8miBe2XWM1Hp5+ipQLT1xUpXRIt9amXEvi2SNXHd+tm5SlamT/9IvqMNzVljQOeocbr64xO73SDi2P9Ezi1m69Ed+n1WX2v+Hrxr3V1lYlnY8dpKrG2wZgYbbzqwc+t3rw5tUDn1s9cPPyXwdzGG1r+3rU/Cq+Z2S3DmuFuvLOp0hvanoP1O3QubXpNaT0XvolRw5MFKmq1d3SWGFdj/Uf9PgtFD9vyuj0vNKUqhL3aTxRt2Y0XlfbAxN3aLy0Qa465SoaD291a7Wtqu09GbxwgGXYzq9+9LnVjz63euBzqx999q+vf7T1emHl1Rwmn3YG25ZJv5XKB/j7gW0XYSmLks0+ndcKkfJqMyJnTGlnhx5I39qqtY01tOq9xEseZKXVoWcSNzWWd7uBI/0QH4Xq25QGDHKlwatoe7rEs7dqSXCflPZ3vsy2g972wlsN6FBjmvI2/RStxgVgYbbzq/s/+0l8rvJ1ceXVHCafdgbalk2/lcoH/vvsQAqL1EY5dFEObZiW/ArYT9v51X2fXd37mdV9n13d+9mt159ZZnk1h8mnnbVty6DfSuXyK5iARWqjTLoohzaMIOV7jNuFozcQYFTb+dU9n1nd89nVPZ/5JBb9+sSx1ZkzZ7ZzGG3r8HrdVPkVjCqT5CFDiT/BOHJ7pm3DCKrdXjcEe9IhwJ7bzq9OfmZ18tjq5GdWP1y//szW68WVb3KYd955Z53D5NPOQNuy6bdSufwKJpBJ8pChrJKrtXxasmuSK4C1o6Ojw8PDa9eunTi2OnHsryvmffh64tjq7Nmzb7zxxiaHyaFV+bet+vXs2bMXLlyI3GPyKwAA9kUpv9qrOHfu3Jtvvvnuu+/+6U9/mrwxM2pbtakXL16M3GPyKwAA9sU6v7p+/fqHH3549erVy5cvnz9//ty5c2fPnj1z5szpJTpz5szZs2fPnTt3/vz5y5cvv/fee++///7777//3nvvvf3229Nefs5tizc1co/JrwAA2Bfr/Org4OCjjz764IMPrly5cvny5YsXL164cOGN5bpw4cLFixcvX7585cqV999//89//vN//Md//J//83/++Mc/Tn75ObetZLupkXtMfgUAADAM+RUAAMAw5FcAAADDkF8BAAAMQ34FAAAwDPkVAADAMORXAAAAw5BfAQAADEN+BQAAMAz5FQAAwDDkVwAAAMOQXwEAAAxDfgUAADAM+RUAAMAw5FcAAADDkF8BAAAMQ34FAAAwDPkVAADAMORXAAAAw5BfAQAADEN+VXbHnSeFEHOJqSeMmZl8vISYe0z9EE9j8m4XIp9IeWTkV2WJHQdMztPalh6DjQfb29snaG8vnGXb3SQgvyozicBceFrb0mOw8eCDD15uQ34FC7O7SUB+VWYSgbnwtLalx2BDfpVuby+cZVt+frVatWvJ7vY3icBcpE5zLaeLoQTPuwoZrUnmN9iQX6Xb2wtn2RaSX33rgV9864FfhNshvwJauuPOk5FZZSOr/Cpx646Y32BDfpVuby+cZdvr/Cr4r7zr18F//Y3sn6LUccP+Y3PdsdP+k3ZnjY3c7NDtcmbRCUyoQ36VMj+U7tvNzsNOO/E9u52xUfWDYXczj+eXzM0ov/p/P238BtRd+LwWLVAy+/xqvQbajnI76hOP4Nu6dUx8nZSiml81tipd4mXOwvb6L75Pz1NAUOOsstF2fojMMwNOO4n5VaszNgrmV40l3Xh+ydxc8qtqQjV+ihW88M4TEWRi9vlV8enFUKAdaY9ln3VSYjvb5leRf7culUf+madVehmsvG1jSvs3VlLXtuC1bI6t9n9kOk7vLlhLSa6K4eaNxMVE4rQTfxb6NCxCfgUb20urxx57rLqWKhVOkl/VpVKb8vWL7e9rBb/TVaoneHgkbUuZOuoKIVu7mwTmkV9Vl9qRZUdJSv3bWuVX8WY07h8/S92xiZW32r/Dui2YX1XzpfRGNjYGSrLKr9pOOz3zq+BE16htfhWsf1OS/vxW6wlOIDCmzdLq1Vdf/epXv3rXXXdtL6Tuuuuur371q6+++mqe+dX2Dul5VLA8cvhG2/xq84DXzZO11wMj2t0kMGp+VXrxqXYkJBhF2rKjsZK4ofKrts2rWzB1S1E6Nya+ggyW173u0/j42WEtPqtsDP7sVN+mTFN1rSqVtHqg2mqVX8UvKjhN1e0Z3OoBZ1rb/3RdWl1V11U551cpb9uWl3TIrxKnApjQ7iaBXO7vxLxokvyqLvMJbt1F86onrau8VWO2D2m8okiDWy0H2zYmeHZYi0xz8RV/z/Juh0dauF3S6oFqq9Xft2jsw/TCAS8BhlL61YvN6iq4rsokv6r+7F+2+VW8EHKwu0kgl3s9cR1fyiWqu/VfjkS+f1W3Hoo3O6UZjeuwPkuu+BoxsZJqe4Jrsj75VbfGsM92kV+l3M/dDo+0cLukrraUC2kUXyRVq40/460K43MFjK/6q+3r1VVwXZVJflUtn1F+VYT+IRUmtLtJIJdbPL5k37wtPbrBB7VaQ9Fj/ZG4wKpeTvBt4v7xY3tWnj4nNjap8fD0xnduDPssPs2lzw+lnRNv17pFQ+INHL/5t9+2upC4xkVS47QZ3CFe2HgITCL4p8NeffXV4LpKflUqSf/4TpnrYBK7mwTc32WNv38VmTWGSoHix9aljn0ak57/xC+huuKMn9QKjD6W919epvwDRB+d86v4RJSYX9UdApNYxt9n75BfVf/YYORca23/PnvKAiB4IhjTEv4++1wM+PfZq2/r/r15FVJXz+ZrtapWjWlVSV1t8WuMpFXVCwy2vK4ZUMiv2tvR3w8sQvNGdWtRMyfAJOaSXxXR/184mH3V7bkp7P/32dfqFgzbC5Xg/tHLhZHIr8aT/4ptjhPTHNtM/vJ/WtMF1xwj5Fd9eK6ZtRnlV7vT+PcJ19peuMmBWZBfjSf/2XOO09Yc20z+8n9ac9O/xyLfG4d5kV8V8iv2m/xqPPnPnvOatvwkALuT/9Oam0F6zE/4sAzyq0J+xX6TX41nebMnLJWntS09Bhvyq3R7e+Esm/xqPCYRmAtPa1t6DDYebG9vn6C9vXCWbXeTgPyq7I47Twoh5hJTTxgzM/l4CTH3mPohnsbk3S5EPpHyyMivAAAAhiG/AgAAGIb8CgAAYBjyKwAAgGHIrwAAAIYhvwIAABiG/AoAAGAY8isAAIBhyK8AAACGIb8CAAAYhvyq7I47TwohxPJi6skVAPaC/KrMKgRYHjMbAIxDflVmFQIsj5kNAMYhvyqzCgGWx8wGAOOI5Verit02pan+7R121xirEGB5zGwAMI6G/KqxZEzjnL20CqkmmdN2QqO65o2TnTZKOXXmPdzWIJezsD7JxF71qvwKAMbRLr8qKsv0YMqRWLh+vSncbNou3y7cLmlsRrCSFHWrkLksxeRXuZFfZWuvelV+BQDj6J5fVdOnanljYdvyVs3ollEk5lcp386K55mNqWYkvaw7ReNu1frbXldi24KnqO4ZOTbSn6vo6Le9upT9W3VR6cB4a1PqTOy3xqPiF9t4xuo+iSeKnzf9XNU6E0cnuH9KHy6J/AoAxrHb/Cqxqg41t21G+hIqJb9Kqbxta0v7p5wu5RR17WnVvFJhYtsaT9HnFqru3OrUnZvaYegHuVf73H5FwsU2HlvdM1je9pZue65g/YMM8eLJrwBgHL3yq5LtfTov4xLLB1mzBu0iv2o8MF5hnzwkWD7UQr9DVZGBaHVdkbV1zyZ1a0arpiaW1xV2uLcHGeIBH8DGu7TxXIM0Rn4FAAyuV37VXHu/FXOkfN/yq2Aqu4v8Knii/m2LtDn9uuraVn3b6uoinV93rrZd1K1hkVZFTlfalH6xrdrfp1eDbyOHxwv7NCbSdcsjvwKAccivyvLMrxqb1GrnPsvNbm1LudJWd0tpU5+razWafbpoqG7vMASD5Feb15HGJDayMVNqPFf6nRM5u/wKABhcu/yq7Sq2c2o0SCXxa6kjv4obML9q1YzGE3VOYxaZX/V5LsbMrzqfS37VlvwKAMbRkF+VRHYIlscL44ue4P6bkmB52zVo0FR/3yJSYatcJWWJuaPFd0pVkSVy/BIaK9x+MUjnt6qkrrDuuiLXm3479WxDyrGd3wYf//huwX0iN0zKSVuVL5v8CgDGkePyYtpFz4R/n73ubeR0waqCrdouj5yu8boS2xZZ0ZaW+9VWRU5dPbx6ls3X/p2fXkldUyMVtu32YL+1bUPkYhOvMViS2Kvx/mxsXl39jT1ZV09jHy6J/AoAxpHjwmLa5Y5VyNztyXJ5XroNiqEckJkNAMaR4/JFfkUfFuUZkl9NzswGAOOwfCmzCpk7i/IMtR2U/fmxvdGY2QBgHFYwZVYhwPKY2QBgHPKrMqsQYHnMbAAwDvlVmVUIsDxmNgAYh/yqzCoEWB4zGwCMQ35VZhUCLI+ZDQDGIb8qswoBlsfMBgDjkF+VWYUAy2NmA4BxyK/KrEKA5TGzAcA45FdlViHA8pjZAGAc8qsyqxBgecxsADAO+VWZVQiwPGY2ABiH/KrMKgRYHjMbAIxDflVmFQIsj5kNAMYhvyqzCgGWx8wGAOOQX5VZhQDLY2YDgHHIr8qsQoDlMbMBwDjkV2VWIcDymNkAYBzyqzKrEGB5zGwAMA75VZlVCLA8ZjYAGIf8qswqBFgeMxsAjEN+VWYVAiyPmQ0AxiG/KrMKAZbHzAYA45BflVmFAMtjZgOAccivyqxCgOUxswHAOORXZVYhwPKY2QBgHPKrMqsQYHnMbAAwDvlVmVUIsDxmNgAYh/yqzCoEWB4zGwCMQ35VZhUCLI+ZDQDGIb8qswoBlsfMBgDjkF+VWYUAy2NmA4BxyK/KrEKA5TGzAcA45FdlViHA8pjZAGAc8qsyqxBgecxsADAO+VWZVQiwPGY2ABiH/KrMKgRYHjMbAIxDflVmFQIsj5kNAMYhvyqzCgGWx8wGAOOQX5VZhQDLY2YDgHHIr8qsQoDlMbMBwDjkV2VWIcDymNkAYBzyqzKrEGABnn/++eeff37z1swGAOOQX5VZhQALIL8CgEnIr8qsQoDlMbMBwDjkV2VWIcB8bb5t5ftXADAJ+VWZVQgwX/IrAJiW/KrMKgRYHjMbAIxDflVmFQLMTvXbVr5/BQCTkF+VWYUAsyO/AoBMyK/KrEKA5TGzAcA45FdlViHA8pjZAGAc8quyO+48KYQQy4upJ1cA2AvyKwAAgGHIrwAAAIYhvwIAABiG/AoAAGAY8isAAIBhyK8AAACGIb8CAAAYhvwKAABgGPIrAACAYcivAAAAhiG/AgAAGEYgv3rt0rtCCCGEEEIIIeqiXX41ZAZHD8YiH8YiH8YiH8YiH8YiH8YiH8YiaBbdkn8j5VdzZSzyYSzyYSzyYSzyYSzyYSzyYSyCZtEt+TdSfjVXxiIfxiIfxiIfxiIfxiIfxiIfxiJoFt2SfyPlV3NlLPJhLPJhLPJhLPJhLPJhLPJhLIJm0S35N1J+NVfGIh/GIh/GIh/GIh/GIh/GIh/GImgW3ZJ/I+VXc2Us8mEs8mEs8mEs8mEs8mEs8mEsgmbRLfk3Un41V8YiH8YiH8YiH8YiH8YiH8YiH8YiaBbdkn8j++ZXq08buHXtZdKMEZTGonrh+9MVkwuORf/notuxez7uwRlt8jlq+9SRZiS2cHufnId7eyyC7dwU5nwVy5Dnc7Gfhvq86PzpYNA38l+jT2IW3ZJ/I3vlV9V5wRM7GvlVPrJ6LvZ83Bv/DWiSzklPnBp3m9H4xueoGV3IAuT5XOynQT4vOgyZBVtV/mv0ScyiW/Jv5AD5Vd3bYut5LlcdKt+URLbWnbH6orENc1f3eVl9vV0SGYt4x9btSTHQc9HzZo4ctVfq1i7Bt42FjYdEHqhgbUX9sFY3Vc+y+rRIba0uZ0fSn4uUq6i+rdtEVavnImWkIi+CdQYPr45aekvmK+W5CJZUx6uuMHjexs6MD1n1bauhj5RPKP81+iRm0S35N3LI/Kp8fGgKSC+PzCZ15dUm1Z1rAVr9vEd6n9ftX7cnRcv8KnEs0g+sbtrn0Un5vm51h8bh2N4a6e14ebBJrc5SV9Lncnanc34V6ZDSDsHDqWr1XDSOVPyerCusljeOe6Ql89XqZ0+C3dVYEuyleO/FByWlbSn1RJo3ifzX6JOYRbfk38iBfz6wtCn+Oripbs+UQyJbc3uq+0vPr+Jvg+WNlbAt/ec90u//yNZgnUu9z9vq9m9ARbRXi+gkll5b3evGsetwC6Vfzu5EvsfeeBXxTdUr3eV1LEGH5yL4tnqX1pWkHN7q9WIGuvPP9ic+wvHDt1U3FU1zRcrN0NjafIYy/zX6JGbRLfk3cuC/b9H48Ff3T38CU84yi0d6EHUjF++36oRYtOnY4OG0/XeHlPu/SL6Zl32ftzXsOjKyqW5wG2trNXaN90nON0mf/CrYyduHb38d4VrmbkfPRaQkPoIpNZfKFzPQHfKrxp6s2y2yQ7dxaXsz1J03k6HMf40+iVl0S/6NHPLvs6fPlW2f8KJmko0/3vEK526o/CqxY6v1DHkxM5e+dkm//4uuH3J7PjrD/hxUfM/4CNZtanuW9ENyu0nkV/nY0XMRKYmPYErNpfLFDHTb/CrYA5GjEjuq27i0vRm2y4O3xLTyX6NPYhbdkn8jd/X3LVJel883RG3VrdszTiaP9CDa5leNOycOU+PWPdQ2v0rclHgzL/s+b6vD7/FHerVUT/V0HWob5JA+DYhczrDiP8NcLUxpW+Qaiej89y3iN1JiSd2mVjf8Ysa61d+3SHkd3xQ/UfWkQ90MKU2aXP5r9EnMolvyb+QO/z57Ynn6fNF4SF0l1TYsQHp+VTR1YHrHLrUze+rzd18GuZmNzkbbv0NdtynyNlJhSm3xQxrPUirp0IDq2x3pll8VaT1cVxVBrZ6L6qZV8jQVrzzltowP+gL0WUetovNAsIZuJ0o5KniithcyrfzX6JOYRbfk38jd/v/CjeXVxy/+dvXpJUW18rqSTB7mAbXKr4qaPi+SOzZSA63yqyLt/o+URMY35ezL1uH/UY08F/G38cekrrbI1rqzBGuoG+4Ol7MjnfOromm+ihxIUNvnIn7vVfdMrLxx+CKDvpiBbvv/C8fHIvg2ZVDiJ0pvQOQskbMHe2Z8+a/RJzFIt7x58a3r16/3r6dOz0aee/XV224/ftvtx8+9+upQTSoZ8vevGJOxyIexyIexyIexyMesxyK3RXlPsx6LhTEWQYN0yyuvvX7hzTd3l2J1aOS1a9feuPDm4eFhURRPPvP8Or968pnni6I4PDx848Kb165dG6eF8qusGYt8GIt8GIt8GIt8zHoslpRcFTMfi4UxFkFD5VevvPb6hTcvHhwc9K+tqm0jP/744++dvO+2248/+PBjv/7Nb++86+51fnXnXXf/5twr9z748G23H//hfT8aMMWSX82VsciHsciHsciHscjHfMdiYd+8KuY8FstjLIIGzK9eee31N99668aNG/0rLGnbyNfPX1gnVPF47cLvRmih/CprxiIfxiIfxiIfxiIfxiIfxiIfxiJo2Pzqlddef+vS2+ufyhtQ20YeHBysv0m1jm9998QzL7z4zAsvfuu7JzaFP3rwkQHbKb+aK2ORD2ORD2ORD2ORD2ORD2ORD2MR1KpbLl56ezuVqotLly8fHh1N1ci1c6++vs6jnn3p1CaPOjw8fPalU5/8rYvXx2mh/CprxiIfxiIfxiIfxiIfxiIfxiIfxiKoVbekJFfruPxvvz8aLsVq1chf/+a3jz/59Pp3ru7+/snqDnd//+T6d7Eef/LpX//mt7tuofwqa8YiH8YiH8YiH8YiH8YiH8YiH8YiaEf51Suvvf77P/xhkkZu/4bVCy//7+oOL7z8v7f32XUL5VdZMxb5MBb5MBb5MBb5MBb5MBb5MBZBO8yv3pFfFUV6ftX4h306/OWfJf2xoB2J/x+FRagPV5/+jx2rWxf2Z5pGE/9/tydp0vFX6/sAACAASURBVN5q+393lnaue9F4SE+LvE8a56hE6TunD9y+Gfm5KJ2lU5MXq27VNVpHxdcGw9acOflVkJ8P3HULk/KruqV8dZ9WZveUjq/6eVndpy6hqn7mxVMv4uJjoT/HlPJc1Omw7NjbdUmK8Z+LRXbjIEZ+LgqfKfXkV/mQXwW16pa35vT3LV5t+vsWr47Twu751fbyfftfsOLLfdNxK53zq7ohi1dFRPo6su5W96+8Q0lcR1a7vTpTBf91v25wg+MYKazusLwbYJDnonHPYquHS8NR2rrPpnouqiWNn0rVoUycM0vNbrzYqaTkV/EejvdbsFviHbK385j8Kmipf5/9Rw8+sv332Z996dSzL53K9++zBz//Gl+0KiSo7edlsDz4Vue31WosSq/r1gR0kz4WKTNVZH6r7hk8vMM0uBiJ+VX6c9H4QZP46bOHpnougqeovi6dt8+90di2yTXmV61WSoPMNns7j8mvgob+/4Uv+f+FS5rzqw6PbvDYlEooifw8fWnPeFeX3gZrIC7x96/SPzXpLPH3TOJjkbJoq9uzf+FiJP7+1YBdF18F7rOpnouqVtNgnyeorm2TGza/qhYWNVfd2Ff9T51hb8fJr4IGzK9+d/Gtg4OD/rVVtW3kxx9//L2T9912+/F7H3z4zK/PrX8Xa/07V2d+fe7eHz142+3Hf3DP/deuXRuhhUn5VXyCLpVE5oLGSihJ/3n6+FS7XZLtB1Lm4s/59l2duKChs57fS4y/sC5ppdX3TFot9NMLF9mxHUz1XLQ9RfV1h3sj3rbJjZxf9V+kLXgek18FDZVfXXjzzevXd5JcFZ0a+fHHH79+/sI633vymefX+dWTzzxfFMXBwcHr5y98/PHH47QwKb+qvh780SVo8PwqZRNBHX4OKriznu9PfpWPDmMRLJRf9Td5ftU/T0hsZGlThjfA9lgMOG/0mW32dh6TXwUN0i1vvvXW9evX+9dTp2cjf3PulXV+9ZtzrwzVpJLu+VXjdBb/qAtune9TOr5h8yur/D4G/z0TOtvROrKuqg6Du4x1SYpBxqJn4bJ7ON3Iz0Vkn875VYeMOs9BnyS/in/Q7O08Jr8KmkW35N/I4fOr4tNPY1F5ODeqO8z3KR3fjn4+UM93kP7/XwVv/qLyyNBZz98zqU5E8UkpZbURuQ3q5sxlaDVHBZ+L4OvE/ixt7XoRCzHyc1E6S115/Lx1lcTvjdKxdW2bUN1YpBc29luwWyJD1ngDFDXdW21Pnn1eJ/81+iRm0S35N3KA/1+YSRiLfPQZi3l9GuVvd89Fh5Ha88E1R+Ujq+diNHm2bXbPRZ7dOIjZjcU4ZtEt+TdSfjVXxiIf8qt87Oi56DZMez645qh8ZPVcjCPbts3uuci2J/ub3ViMYxbdkn8j5VdzZSzyYSzyYSzyYSzyYSzyYSzyYSyCZtEt+TdSfjVXxiIfxiIfxiIfxiIfxiIfxiIfxiJoFt2SfyPlV3NlLPJhLPJhLPJhLPJhLPJhLPJhLIJm0S35N1J+NVfGIh/GIh/GIh/GIh/GIh/GIh/GImgW3ZJ/I+VXc2Us8mEs8mEs8mEs8mEs8mEs8mEsgmbRLfk3Un41V8YiH8YiH8YiH8YiH8YiH8YiH8YiaBbdkn8j5VdzZSzyYSzyYSzyYSzyYSzyYSzyYSyCZtEt+TdSfjVXxiIfxiIfxiIfxiIfxiIfxiIfxiJoFt2SfyNb51dCCCGEEEIIIeqiRX4FAABAB/IrAACAYcivAAAAhiG/AgAAGIb8CgAAmN7RrNRdhfwKAACY0jpjOfzEjYxtGll3LfIrAABgMuvM6saNGwcHB9evX7927dq1a9f+kqV1265fv35wcFB3OfIrAABgGuvk6sSx1Yziww8//Oijj+quSH4FAABM4+jo6MaNGyeOrV76yurlv1m99JXVS3/zX6+3v2ZSfuLY6urVqx988EHdFcmvAACAaRweHh4cHJw4tnrxK/OIE8dWly9fvnLlSt0Vya8AAIBpHB4eXr9+/cSx1fNfXr3wlRl8PXFsdf78+cuXL9ddkfwKAACYxuHh4bVr19b51XNf/tTX5yolOZSfOLY6d+7cxYsX665IfgUAAExjk189+6XVc19ePful1bNfzvr1iWOrs2fPXrhwoe6K5FcAAMA0bty48Ze//OXEsdUzX5pHnDi2OnPmzBtvvFF3RfIrAABgGpv86qkvrp7+0gy+yq8AAIBMbedXPwvFdvnmqFJ53f67KD9xbHX69Gn5FQAAkJ1NfvXkF1ZPfjH2tSiK4OtuXzvXIL8CAAAytcmvfvqFWBRF0VjSKjofLr8CAAAytcmvHv/86okv1H4tiqJua1EUm6/rPddK+6zV7RM8KvhVfgUAAGRqk1/95POxKIoismmzdXu3DoXxE61DfgUAAGRqk189duvqsc+vHr119ditgddFUQTLH731k03R19V6iqLYlNe9DrZHfgUAAGRqk189euvqkVu3vt7yqZKiKILlj36SEa3LS5UHyz911K01R91a2x75FQAAkKlNfvXjW1aP3LL68S2rR24NvC6KolReFMX6dVEUm/Lt18FjN6//umfldaQN69fyKwAAIFOb/OrhWz6Jm8Ovi6Lo9rooinU96zNuXm/qr3sdbI/8CgAAyNQmv3rw5tVDt6wevHn10M2Vr5+Ub47aLi+KYnv/8j43/3WfoigeumW1KS/VEzwq2B75FQAAkKlNfvXAzasHPjeDr/IrAAAgU5v86kefm0fIrwAAgExt8qv7P7e6/7OfRMav5VcAAECmNvnVvZ9d3ffZ1b2fWd332axfy68AAIBMbfKrez4zjzhxbHXmzBn5FQAAkJ1NfvXDY6uTn/nU15OVkhzK5VcAAECmDg8Pr127ts6v1nGi8jWr8hPHVmfPnr1w4ULdFcmvAACAaWzyqxnFuXPnLl68WHdF8isAAGAah4eH169f//DDD69evXr58uXz58+fO3fu7NmzZ86cOZ2ZM2fOnD179ty5c+fPn798+XLdFcmvAACAaRweHh4cHHz00UcffPDBlStXLl++fPHixQsXLryRpQsXLly8ePHy5ctXrlypuyL5FQAAMI2jo6MbN25cu3btP//zPz/44IOrV69euXLl3Xfffffdd/+QmXWrrly5cvXq1Q8++KDuiuRXAAAAw5BfAQAADEN+BQAAMAz5FQAAwDDkVwAAAMOQXwEAM/ZP1jJATsxJAMCMya+ArJiTAIAZk18BWTEnAQAzJr8CsmJOAgBmTH4FZMWcBADMmPwKyIo5CQCYMfkVkBVzEgAwY/IrICvmJABgxuRXQFbMSQDAjMmvgKyYkwCAGZNfAVkxJwEAMya/ArJiTgIAZkx+BWTFnAQAzJj8CshK0pz0tZDEA0uVBDftm1Z9OKYMm5Sbbjc/06p74rJ9ElPMtNkL1v82i3xKNtbQ+AHddlO3D/2pyK8iOg9lZGcrum528UBt15bPuHS42UrH7qZd49lhfpX+ZO6bPD+uMmxShvrf/IwvOHHNZeEYNNNmL1v/2yyyTko/dd3pIs0IbkqpMx/yq4jOQ9nhviViRw9U/Lke5BQd7OJOm5cW+VV8U6krq/dQdc/gTbbIXt5W7ZDq1p7lkS5NHy+C+nRmfLBSdk6vpO7s1RNV21x3SPXCg28zFB+OYGfW9XDwbeNRkXFJP/xrnta8Jd5mkXupOuLVWyhy3saSYD11m+JvcyO/imi8PeKF1Rqqm4KHsy04D9Q9+3VHVSsskueQMUXunKK+Kxrvt8abMHjIVLflMPlVXe8E+6vukMZzLUPKDRTsk7blwbfp40VQ585sNYjdRrxO3T6Rw1MuMNgnedpu+XZhUXMtdV0Uf5vSsSm7xQ+P7M+0Em+zyL0UGeLIWAc3lUoi9dRtir/NjfwqIjLo229TpqBqDaajRMFRKG0tdWOkb+uGJpNxKTUj0vJISeSQYHmk68bvgaL/zwcG31ZfJ26aqhfGFL+B2r7+2qfvzupukaMilVOn/80fryRST+KIdzi8zwXO4raptjbY/sQeDh7VuCnldaQ98aPIQavbrHpU+m51523VtsZNXwtJ6IZpyK8iIoNe3Vo3BZmOeor3UvURm/W4xGeV+OvgpsjF5nbtG8PkV6U9O2/KoUd2Kr1P6g7pUFW3TQT16eeUJyhY0up0Ka8j5217gbO4baqtDbY/3kV1l5w4uPHXjYfHm0oO+t9mrXZLuSFbnTFylvzvN/lVRHX44gPd814lKN5LdWM0x3FJn3A6HNJqU6nfRjbY719V33bYtPinNP2BKR3SWD7U7djr8vZAn35OHPeeI57yOvK27QXO4rYptXzztbqpbRcVyYMbf914eLyp5KD/bdZqt5QbslrSdtNAfbNz8quI6lB2uwcS71WCgqMQ3zrTcekwqyReUfqmajOGu75U8qtRJd526a+3+61xt6LNoBDU8w6PVxivp9WID3543aZZ3DaJT0Ski4LHVmtoPG/8deTw9KOYSqvbrNVu1bfV80Zuy6+FJG7q3h3jkl9FBO+ltlNQ+r1KUN2jt/22un9jVRmOS+KsEmlqXUfFO63ueqfqh53/fGCpX4KbikqvLVLwAuu6pdqrncu7jRdBnTszcUSCOyeWp7xOqTblAotZPbPBfqhuKup7OHhs3VGJY9Hq8LqrmEX/74nE26w63I27FTUTRenUKXdRsPLgVczr7pJfRURuj7od4uWF6aiTxP5M379uyKr77PjKym2OFDbeadVKEjstcpYxe2Bjh/nV9oHxTdW3i9R42xX1/dCnvNt4EdSnM6uPT/WoyOGR8rpWBV+n3zCLuVuqLa/bVESvK2VTXeV1rxMPr3s7i/7fE+m3WfBxS98tcvbGu6i6c91VzOvukl9FfK0ivk+psKifsqqH7+wiFqJuFFqNS+mQxDlkHPGmRlq1XRjfGq+2eshUt2Uuc5KHE3Zq8OfLMwtkQn4FZCWXOclCDXZqR/nVgBUCdCO/ArKSxZzkH8Jh14Z9xDyzQD7kV0BWzEkAwIzJr4CsmJMAgBmTXwFZMScBADMmvwKyYk4CAGZMfgVkxZwEAMyY/ArIijkJAJgx+RWQFXMSADBj8isgK+YkAGDG5FdAVsxJAMCMya+ArJiTAIAZk18BWQnMSc8DAMzEA//P21M3AdhHLfIrAAAAOpBfAQAADEN+BQAAMAz5FQAAwDDkVwAAAMOQXwEAAAxDfgUAADAM+RUAAMAw5FcAAADDkF8BAAAMQ34FAAAwDPkVAADAMORXAAAAw5BfAQAADEN+BQAAMAz5FQAAwDDa5VerT9tRm0pnDL4GAADITYuMpZrejJDwyKkAAIC5SM1e6vKcTfn6RfBbW8FveW3vX7dbqaR0eLzOujYkXi8AAEBbQ+ZXwZ/lq+Y58f0jh3eu0w8ZAgAAIxj4+1edy1Oq3dG5AAAABjFGflUSqTC+W+f8arvmyDUCAAD0Mfb3ryIVpv9oX4f8Kl4IAABM7uJbl/7++D/8/fF/ePOtS1O3paNc8quhfv+qsc3yKwAAyMfBwcHv3/nD0dFRURT//PN/ve3247fdfvyff/6vRVEcHR39/p0/HBwcTN3GFgb7++wd/r5FSlWD//6V/AoAADJxcHBw4p77b7v9+ONPPv3HK+/d86OH1vnVvQ88dPVPf3r8yadvu/34iXvun1GKNdj/L7zq9PfZg7sVn06NqoWJdeb5+1erkD61jXAWtgVv3T6H96mNVuLTV4Z63lqdb7ZsOyRzO+23SOUpU3388HiF7gfYiDwdKeV1VaWUD3Vshv7t9++sE6p4/Nvv35m6pakG6/15DeSEgh3Vufcsj8bXc3XeeclLT5FRW0afd7gzTSDD2mm/pQ9WXUnk06fxznFLQFDjR0ndw9W2vE+d+Ts6OvrJT5/a5FF3fus7Tz37/FPPPn/nt76zKfzJT59a//TgLMivxtb4qNT948f2psiekbNUy7c/WdP/ISRl/8ZK5qu6HGkcvurhRfKYNg5BabfSuRqP7Ta+jftXL3/a0Q+ePT4Wm03duqhIuzGCha1aWG1V8KqrDahrUtueCRbWdVerA2cn0vhWN0CkGxPPWK0wXkNw/5QTwT5rfEKr5aXZNb28T52z8Mcr763zqCd+9vTh4eG68PDw8ImfPb0u//erf5q2ha3Ir8YWf1Qiz0zwMU58nuPnSqy81f7LeNqDqsuRbtNiq25MPDalMdvHll6nN6xx/9zWZ/Gz7+gRaPU52u1uqe7c9kKq9aScd/BbLnjg7CROyJ27Mf2Mwd0Sb5vgnvMdFNid6py/EdynaP+kpzz4c59LL7516V9+8cv171zd+a3vHB4eHh0dvfra+VdfO390dHR4eLj+Lta9Dzz8L7/45cW3Lk3d3iTz6PolaVxF9Snf3qGq7tihHv5Ws8B8dejJ+OGR8l3Pv62WdwNeyPjiDdjFJXco73DG+M59JpAOB+76lstfY3+W3qZcaas+bzx7pKvjD+x8BwV2JD5xDf550edcmfv74/+w+SHAp597oSiKV159ff321dfOF0Xx9HMvbHb4b9/4h6nbm2QeXb8kkcwnuHVTXqokWF7dIdKGup23K2/VmO1DGq9oviKL11bTYuJitO0Q1BXW1Z/esGqTup1oEo1PRPxtt+ex8VHa3hRvWLdbq7EBnc87+C1X1z/z0tifpbeRK00crMZ7tajv/8imxYwI7E78uejzedF4lj7HZui/faOcX/321dfWb1959fVCfkWKyEddsCRYnr48qtua8onbtjGtKpmvatf1XARHygcZgsT6U66i2/453AOJH4TVt60uucMyOt7Czp+48TszXk/KeXd6y83XLibwVn0ePKouWYpvClYLbCR+rPT8vOg82Ta2MB+/u/jW8y++/IN77r/t9uP/69vfXf984G9++8pvfvvK+ucD/+nb373t9uM/uOf+5198+XdvXpy6vUnm0fVLEr/7d/HxXLep86KwTxaxAOmr2G4r5rrFaKTmnS52+3wYlPpnQv3HYsDyAVtYVxi/M+P1pJx3p7fcfA0ygffZOeWobpuAbZHHp/RWfpXoj1eurL9D9bNnnt/8ncCjo6OfPfPcuvyPV65M28JW5tT1yxB/Jodat7XNrwZfZy/jaQ+qXtFo+VV6StOh/lb3Q+JV55NfFWmdVnrb9pJ77h9pc7dP3P4TyCAPe9v8KpMbpoM++VXbuyhy0pRD4rXNdwhgHOlruZ7rusTZPv3YPB0dHf30qWc2PwT4T9/+7rPPv/Ts8y/9093f2xT+9Kln9vHvs5Oo8VFZbak7qrQUDj7nVXX1bL5Wq2rVmFaVzFfjrBq/2JS5tbSoahyC6lGJxwZfp9wPKRdS19QJ1Y1O4i2dcsnB/eOn7nO3xAsbG1B39rZX2niWlNfxrpiFVUh1U/CQusK6sYicd7s8sn/dpvi5gKJ+Ek6fGLuVdz42c4n/v/Dv3/nD1C1NNafeZ0fm9RCya8PeD/t8d+3ztQNAooODg++fvO+2248/9sTPrrz37/fc/+A6obrnRw9dee/fH3viZ7fdfvz7J+87ODiYuqWpWnz833TTTaUX1U3r19vqykuVVOtkNFaBbJNfdRb5t0YAoM716wdvX/639U8A/vPP/3WdX/3zz/+1KIqjo6O3L//b9euzSa6K9PyqlCnVbe22qW4HxmEVyLah7ofZ/XzCIGb6sxkAkInfXXzr775+x999/Y7fXXxr6rZ0NGV+1VgtAADAjCTlV43faIonUZFNvoUFAAAsxsD5VbH1e1bxShJrBgAAmIvh86vtwu1ES34FAAAs2w7zq9Im+RUAALBsO//9K/kVAACwJ7rkV0XlF65S9kz5rpf8CgAAmK+O+VUR/TsWHf5/4ciJAAAAZqHL/3+1I5IrAABg1uRXAAAAw0jNr4od5z+SKwAAYO5a5FcAAABEyK8AAACGIb8CAAAYhvwKAABgGPIrAACAYcivAAAAhiG/AgAAGIb8CgAAYBjyKwAAgGHIrwAAAIYRyK+eBwAAoF6L/OrUmbeFEEIIIYQQQtSF/EoIIYQQQgghhgn5lRBCCCGEEEIME/IrIYQQQgghhBgm5FdCCCGEEEIIMUzIr4QQQgghhBBimJBfCSGEEEIIIcQwIb8SQgghhBBCiGFCfiWEEEIIIYQQw4T8SgghhBBCCCGGCfmVEEIIIYQQQgwT8ishhBBCCCGEGCbkV0IIIYQQQggxTMivhBBCCCGEEGKYkF8JIYQQQgghxDAhvxJCCCGEEEKIYWKY/Gr1aSO0e/ss45xRCCGEEEIIIeIxQH5VTW9GSHjkVEIIIYQQQojcom9+VZfnbMrXL4Lf2gp+y2t7/7rdSiWlw+N11rVh8pEQQgghhBBCzD3GyK+CP8tXzXPi+0cO71xn5ERCCCGEEEII0TZG+v5V5/KUand0LiGEEEIIIYRoFVPmVyWRCuO7dc6vtmuefCSEEEIIIYQQc49cvn8VqTD9R/s65FeNFyKEEEIIIYSYNh57+hd/9/U7/u7rdzz69C8mb0w8cs+vUg6XXwkhhBBCCLGweOlXFx9/7vTLpy+dOvP2PQ89ddvtx2+7/fg9Dz116szbL5++9Phzp1/61cXJG1mNvvnVqYTvOA37s3zB8m51BisRQgghhBBCTBsv/fLiN+/6/m23H7/7hw//9IVf33n3yXV+9b/u/uFTL5+7+4cP33b78W/e9f2XfpldijVAfnUq+v8Lrzr9ffbgbqc+nRpVCxPrDO4/+UhEeiCrlqxCJm9qDhG8dXv2dufaRNvIp3sX8NzVtS3nNu+0eTu98EjlKTdM/PB4hZkP6FIjMgop5XVVpZQPdawQifH4c79aJ1TxePy5X03e1FIMk19FwgPWobsy6bRgMzJpW4YR/Jjp2dt6fpzw3A1+CdUG57/e2l3zdnrhdZUHhyBYErnlGue0zMd0H6KUR8V32H7btrxPnUJ0i5dPX7r7xEObPOob/3jX9+599Hv3PvqNf7xrU3j3iYfWPz2YVciv8oq6T7v4vxJVD2/8aNz6B6baOlut84Ln2m5P3Ynq2t94sYlXMeHYpXR4dedgJ1QPb+zAtv22qtw8kR3aVli6upQ7atqxS+m9SNfVXWCwo0p1BjukrpeC5xpkpFJ6INKqus6MVBI8JLHZ/a832J7INXa4wSJ91afng5VHhqbuhgnuGdw/8dLECNF4J1TL6564xvI+dQrROX76wq/XedR3Tj788um31oUvn37rOycfXpf/7KVzkzeyGvKrvKLxIy04i5UWBHWd32pWrVtYxBcKie2JNKDVxaZcxYRj1+3jqlUnJB7btvNLrwcczeq1jzlG6WOX0nsp3Z7YUduF8dsjsmnYkUrpgbqGVfuzVBKspO7e6HPH9r/eeOcnRl0NibdE+s5t21zX842dP2DniD5RnT02gvucan9HpdxgrY4VIjEee/oX9z781Pp3rr7xj3e9fPqtl09feviJUw8/cerl05dePv3W+rtYd9598t6Hn3oss78ouPP8SqRHq0/3VlNe6W3PWbWqrp6hGtBnfh9/+NL7oXMn7PpzMfg68YOzz4VMO3ApbfPcpd9j1c7sdm8MfseOf2c2PiwpPV93bPqNGtknMqzxbsnhEd7b2NHMk/6MdztWiMT4u6/fsfkhwO/d99ipM28/9MTL67cPP3Hq1Jm3v3ffY5sd/vbrd0ze4O2QX2UU6R9piYWRGbAk5fBI4fbWlM/sDg0o7RmpJLjzmMMXeZHSsSmfWwOOYF396Q2rNqnbiaaKxgvv3KXVCx9q1KpbIy3v04DSnpFKImNdPVGreyOl2Z0PjLeq7gLbRl0liS0Jtiq+c921NHZaY98Gu1RMEvH+73DDx8sjha2OFSIx/jaQX720fvvQEy+fOvP29+59VH4lGqL6udXq4zNY2PbDu8OsGryKcRqQMnGPOblXL7zbx1VKpw04go31p1xFt/1z+Oj13LVtQKvnru5BaHVvpDQ75Q4cqn86xC5a0uFGLR0VufMjm3p2hRgwGqeF4G6dyyOFrY4VIjEeeernP7j/8X+86we33X78G9/8688HPvD4iw88/uL65wOPf/Ou224//o93/eAH9z/+6FP/MnmDt0N+lUtUp6EOH5/xqa3zsqOxsK7+nTYgZeIec3KvLn26fVyldNqAI9hY/y4+pEv9M2F47to2oNVzV/cgtLo3UpqdcscONUAdYpCW9Nk55ahum8RUERmm0tsBp+7O5xKiczz54tn1d6i+e8+jm78T+PLpS9+995F1+ZMvnp28kdWQX2UR8c/CxqVD4qql1ay6vX9KU4P1lCoZZLrvtvP4g5jS4f07IfHYPvW3Gs3Eq67e2JOE565Vwxovtq4H2laS+LbzWTpX2Dnid1qHno/cV5GTphyS/lCIaSMyvpHXp3o8IJHCVscKkR4vn770nZM/3vwQ4PFv3vX9+37y/ft+cvyb39oUfufkj/fx77OLlGj8gFx9orS1VBiccDf7VD+e43XWzapV1Z23C+MnSvkYaFVJ3c7jD2JKhwfHOuUeSOnAzp0ffJ0ymikXUtfU8SNlLFLurni3p9wGdfsHD4zsvF0YP1Gk/cEGN1YSqSFec7D3Ipff/yx111vaM36NrWIVkn5LxO+TSAuDZ4wcErne0knF5BEci8bbqX9552OF6BCJ/7/wE8+dnryppZBfiR2G6XVJMexoujd2F/pWCCHEAuKlX138n3d9/7bbj3/7xINPvvibO7/9w3VCdefdJ5988TffPvHgbbcf/593ff+lX12cvKmlGCC/uummm0ovqpvWr7fVlZcqqdYpZhTWeUsK+dVcQt8KIYRYRrz4y4s/eeaX658AvOehp9b51T0PPXXqzNsvn770k2d++eIvs0uuTvXPr0qZUt3WbpvqdhBzCeu8JcVQo+nnRnYdulcIIcTy4pGnfv63//1//O1//x+PPPXzyRsTjxzzq8ZqhRBCCCGEECLD6JVfNX6jKZ5ETiR2HwAABftJREFURTb5FpYQQgghhBBidjFSfnVq6/es4pUk1iyEEEIIIYQQucV4+dV24XaiJb8SQgghhBBCLCMmyK9Km+RXQgghhBBCiGXESPlVn79vUbePEEIIIYQQQmQVQ+ZXpyq/cJWyZ8p3veRXQgghhBBCiPxj4PzqVPTvWHT4/4UjJxJCCCGEEEKIrKJXfnVqlMxHciWEEEIIIYSYRcivhBBCCCGEEGKY6Jtfndpx/iO5EkIIIYQQQswlBsivhBBCCCGEEEKckl8JIYQQQgghxFAhvxJCCCGEEEKIYUJ+JYQQQgghhBDDhPxKCCGEEEIIIYYJ+ZUQQgghhBBCDBPyKyGEEEIIIYQYJuRXQgghhBBCCDFMyK+EEEIIIYQQYpiQXwkhhBBCCCHEMNEiv/qH//9eIYQQQgghhBB10SK/AgAAoAP5FQAAwDDkVwAAAMOQXwEAAAxDfgUAADAM+RUAAMAw5FcAwIz9k7UMkBNzEgAwY/IrICvmJABgxuRXQFbMSQDAjMmvgKyYkwCAGZNfAVkxJwEAMya/ArJiTgIAZkx+BWTFnAQAzJj8CsiKOQkAmDH5FZAVcxIAMGPyKyAr5iQAYMaq+dWvmEJ8mKZu3f7a1YNHPfkVADBjwfxqiobstcY+NyiT0O2TkF8BADMmv8qB/CpPun0S8isAYMbkVzmQX+VJt09CfgUAzJj8Kgfyqzzp9knIrwCAGVtkfrWqqNsULK+rKqW827F7kl8tb1zYBfkVADBji8yvSkrr9fgO22/blneuc0/yq5IFjAu7IL8CAGZs8flV4yK+Wp7hOn5hg1IsZVzYBfkVADBj+5Zf1f0QWvCQfNbxCxuUYinjwi7IrwCAGVt2fhVfcHder8uvelrMuLAL8isAYMb2Kr+q25r/On5Jg1IsaFzYBfkVADBj8qvqbhmu45c0KMWCxoVdkF8BADO24Pyqurye78+hLWZQimWNC7sgvwIAZmxv86t5/R2FxQxKsaxxYRfkVwDAjO1VfrUu3NhReYdj9zy/KmY7LuyC/AoAmLEF51czslf51Yzo9knIrwCAGZNf5UB+lSfdPgn5FQAwY/KrHMiv8qTbJyG/AgBmTH6VA/lVnnT7JORXAMCMya9yIL/Kk26fhPwKAJgx+VUO5Fd50u2TkF8BADMmv8qB/CpPun0S8isAYMbkVzmQX+VJt09CfgUAzJj8Kgfyqzzp9knIrwCAGZNf5UB+lSfdPgn5FQAwY8H86tKlSy8wlkuXLqXkVwZlZCnjwi7IrwCAGfP9qxz4/lWedPsk5FcAwIzJr3Igv8qTbp+E/AoAmDH5VQ7kV3nS7ZOQXwEAMya/yoH8Kk+6fRLyKwBgxuRXOZBf5Um3T0J+BQDMmPwqB/KrPOn2ScivAIAZk1/lQH6VJ90+CfkVADBj8qscyK/ypNsnIb8CAGZMfpUD+VWedPsk5FcAwIzJr3Igv8qTbp+E/AoAmDH5VQ7kV3nS7ZOQXwEAM7a8/Oqmm2666aabUgrbVrI78quhrLa03adartsnIb8CAGZseflVUcmORk6WOpBfDaKaL6XvEyzX7ZOQXwEAM7Zv+dVNW6o7VF+kH1X3TbOUcvnVIORXyyC/AgBmbK/yq5sqtnfYLoxsjZTXpWSN5fKrQcivlkF+BQDM2CLzq6L+O1HVHYrQN5Q6HNX29fZb+dUg5FfLIL8CAGZsD/Oruu9EBQ9PPypeYbWS7drkV4OQXy2D/AoAmLF9y6+C5Y35VcpR8qvJya+WQX4FAMzYUvOroumn/tLzq8SjOhyyIb8ahPxqGeRXAMCM7WF+VfreUZGWXzUeFT9XvA3yq0HIr5ZBfgUAzNhe5VelwuqL0m6tjoqfK1i+2SS/Gkrk/w5O2cf/L5wD+RUAMGMLzq9mRH6VJ90+CfkVADBj8qscyK/ypNsnIb8CAGZMfpUD+VWedPsk5FcAwIwF8yvGFx+mqVu3v3b14FFPfgUAzFg1vwKYkDkJAJgx+RWQFXMSADBj8isgK+YkAGDG5FdAVsxJAMCMya+ArJiTAIAZk18BWfm/V9DfPu75ZiMAAAAASUVORK5CYII=" width="640" /></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
The URL to retrieve this journal with line item details:<br />
<br />
<b>https://<cloud_instance>/HyperionPlanning/rest/v3/applications/Vision/journals/</b><b class="yellow">Rent Expense Adjust</b>?q={"scenario":"Actual","year":"FY19","period":"Sep"}&<b class="yellow">lineItems=true</b><br />
<br />
Using a REST client this returns the following information<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtbIEzqB7t6qpLaRWHrLlGn4GxaXQchxVK-oli-55l9SmJRNOuX8WpWfKVUwO-m_4vG9csT97OSdCqAfEbCvrYXsJPhkwK-JA23DIZHaGf9fhCh-pMAbz9m-fGlj4Rl8m50q2CKK5m6ZE/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="755" data-original-width="592" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtbIEzqB7t6qpLaRWHrLlGn4GxaXQchxVK-oli-55l9SmJRNOuX8WpWfKVUwO-m_4vG9csT97OSdCqAfEbCvrYXsJPhkwK-JA23DIZHaGf9fhCh-pMAbz9m-fGlj4Rl8m50q2CKK5m6ZE/s1600/image009.png" /></a></div>
<br />
Compared to the previous REST resource, the response not only includes the total debit and credit for the journal but also a breakdown of the line items.<br />
<br />
I did notice an issue with intercompany being returned as null instead of the member name and a slight spelling mistake with “description”.<br />
<br />
In terms of scripting, I have modified my previous example to return journal information including line item details.<br />
<div>
<br />
<div style="text-align: center;">
<img alt="" height="596" src="data:image/png;base64,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v2X5C2YtGaXtVIsd2u3kTmUWKQaifhE7j6Mn7axT3RmTvk0ty2tKP6+s5NUk2JW8zqOTJtaZrsP9/L994Zt/86oKl3SFr13Jq7okruQdj8ff/9ubq9j+36OvT/XB2GCtQooKZmxW8k6dRRqbWae4LNfpFRus1SsuQLE5FYydr1FnjD1ZmUUSK626/UxYyTsu+GA++45bN3JhfvtTr332HQeydKaUhHHhjao+CmacreQV0zUuNkx7cWUWaTy5krc+i1SJQx8FMx6PdbXsc9//9VQfjCgPud46Y6KbRBftfvNvXlV3i5588A9fPPfRm6uJ7UpeWWt84aGfiw9Gp5xsyFHB6ALbh9774tf/4ysSTqpgxtlK3vF4LGt+H3rvi//n4V9OVTCieD5j1syK9VEwY7PA9syHX/7SB176/Lte+F//+dVUwYyzlbwiSuTnU30w4/FY1+E6x0m6fsVqJg1K4+B+ziwSprbNe/Iu713rhmx3d/fatWvTr1uOlbw4zz///De/+c21RGl+qwijQYFEP9B4PH7uuefazRmxa9eulb7fvtJoTJsDSs3OIkV79NFHN/BrXM8888zf//3frzsWs5v6hOwZ944ShqW2hSO89akc8w15H3/88X/8x39cy61/cORDShfwnjt37umnn159rBZicyoYfbs7XcB77ty5Z555ZvbIbYDt7u4++eST67q7XZw7w169FQXzwx/+8Dvf+c7cEVy8nT179tlnn113LGYxfQ3brW5BwWA9bQsVDIZhGIZhW28oGAzDMAzD2rOignnsscdWGY8V2F13jR980J+8556b801vecu42WkNDMMwDDt21lfB3HXXxAs7H/vYcqN1zz3Tb/H8837rvBMnxm97W/H6VMFoUCgYDMMwDGvIBiiY0vC/DOujYNT29mrCRQ0Fg2EYhmFbY/MqGPXNqIYQPbG3d/O8/Oqee27uxfK+941Pnbp1Xo6F973v5s+dW2WqcooKJgYrUf3c58a/93vJnFFUMK++evPKFTicMAzDMAwbanMpGOspueeeCQkix6dO3VIwb3vbTVnwsY+NT526+UPdbk6mhM6fT0KealHBpMHeddctmXLXXbeUzTgoGImn/MoeYxiGYRi2ITbLOhgZ7N3Qvrd383w6p3PPPeMHHxy/+ur4zjvHTz99S8FYV0ddwTjfjP1rvGMarBVhp05N/MQpmBn8QBiGYRiGrdJm98EsRMHcddeElFmUDyYN1imYig9G04JhGIZh2GbaUmaReioYkRcSbJxFsgqjbu6OpWB15kgns9TSWSSWv2AYhmHYxtqyVvI6K/lgdMnt2952c2sWURv2TempSqKyktcGe9ddt77s6ORRfSUvs0gYhmEYtml2jHa0wzAMwzBsawwFg2EYhmFYe8Z3kTAMwzAMa89QMBiGYRiGtWcoGAzDMAzD2jMUDIZhGIZh7RkKBsMwDMOw9gwFg2EYhmFYe4aCwTAMwzCsPUPBYBiGYRjWnqFgMAzDMAxrz1AwGIZhGIa1ZygYDMMwDMPaMxQMhmEYhmHtGQoGwzAMw7D2DAWDYRiGYVh7hoLBMAzDMKw9W4CCOXv26RMnPvvjH788f1AYhmEYhmF97MQNDMMwDMOw1gwFg2EYhmFYe4aCwTAMwzCsPUPBYBiGYRjWnqFgMAzDMAxrz07cuHHjlVde+clPfvLss8+uOzIYhmEYhmG97MT169efeuqpy5cvv/baa+uODIZhGIZhWC878dOf/hT5gmEYhmFYW3biySefvH79+rqjgWEYhmEYNsBOPPXUU88++yw+GAzDMAzDGrITL7/8Mst4MQzDMAxry07cuHHj8PDwySeffP7559cdGQzDMAzDsF7GfjAYhmEYhrVnKBgMwzAMw9ozFAyGYRiGYe0ZCgbDMAzDsPYMBYNhGIZhWHt24iqGYRiGYVhrduK/f+G/AQAAALTFicvXfw0AAADQFicuPPcLAAAAgLY48T9/9DoAAABAW5x45Hv/FwAAAKAtTrz73/+V8JY7/wMAAABAE5zo3v5BAAAAgLZAwQAAAEB7oGAAAACgPVAwAAAA0B4oGAAAAGgPFAwAAAC0BwoGAAAA2gMFAwAAAO2BggEAAID2QMEAAABAe6BgAAAAoD1QMAAAANAeKBgAAABoDxQMAAAAtAcKBgAAANojVzDj8QnlvgfukJNXrt2Wnj/zjbe68/a/wpVrt609qcvjyrXbNDfue+COM994a/f2D1544nZN/oUnbte/bndWAAAArIaigrn7I+/p3v5BkSNy0o7TSmVIPj6jdUnByIHkp1xwfPIEAABgqUxRMHd/5D3LVjASrDh47PXWlyOR6SadQ+mVGkP3Kzku3UuSGd1FelK1SCUJGpmoYPQCFAwAAMBCmKJgLjxxu86ApAqmO5pdigNzfwVjFUb8rR6f+cZbNTKK1VhyLEGVFEy8l/wqJi0NoZSEioKxfqw0T+x8k5t1AgAAgJQp62DsUGrXwZSUhD0/yAfjTsZBvTOeEnu9kzVXrt0muqHig3H3OvONt6byy0UgVW8xCek6mKF5AgAAAHVqPhjrPOjKPhjFukC6uRVMxQ9hXSlLVTA9M9EGe+Ybb3U+GKt+8MEAAAAshCmzSHZ0Lw3/euxG/XkUjATlJm7sfy88cbv8qjKLJBe4maN4L/lVXOkydfmLzQSbSzoBJz+3scIHAwAAsBCmKJju7R+8cu02GXTd29QyPLtXqW0g8yiYLszjdIX3k7vCSl6NmBUQpXvZlbw2FT1nkWzmqOixK3klMurWSlcNAwAAQH/Y0Q4AAADaAwUDAAAA7YGCAQAAgPZAwQAAAEB7TF/JuwmkLzbrWz/90fW2C1lC2yeXZA3v2jNweaWwAkpbDs5MuvR7sYHP33zu/sh7VrnQe87Cve+BOxayBYBdUx/fBLzwxO3LyJMr125b3v4Fur1C/Zr++d//Hcmpqba1dI091cy7SMwwBEDMfJuHC+9sF4V9NceeH6ZgSi9UL3X/kjPfeGv6uvXMzXhRrzSvQOdtjpTUUnC5tzkxTHF77bioTt3iaL0xX2DG1ospbWKlbCz1DAtP/kLGacVuu7BKJGei9lps+Q5lnv5zSQwdRzQJ8a3VGehZ39xbq008nda16QI78HRgXdQ+Z6V4NqBg0s5xnh4TBTNPKTSnYOz77a6ibqyCufsj71lsm6oXU//mUNr+ceHD4XYoGJWGbrfPhZfvUDZwH4eh40jaI9W3Qq0wSMGsPa8GIfuhlFK3bAXjBouZ+9uSv62mYKxucvu+yAVRkKooliyLW6SUvPcyvxNjMtQBY5tB6XYxo+MXANIPM3VG78tPKmWvYbrPVcqo6WIVo5p+V6ErbF0jqU79bOnjgovb1CkAWwqpgok5LLeT82k+uGf6NAnp1z27wlxD+tlOtyuPK3enYGye2++Ku7agwer1Gn7M6lKJu4+JukpuH9DTe7nCrTSxUkVKCzdWHlfD046+VLJ6XuKvMbHOvNhLpDfS+V9XUe3t9E+um+rCXlYasZiB7ryGWWpiNuTYG9icsaOI5nnaS3RZs7UVxtaW/m3BZppNb8yWrjDTaiuqHpfaQppdaROzP6mXbJoE2yO5QGL2xpwZ9AGZVMFICLYR2ZzRGmL1q7tXqZewXYrNrrSrKUVYdn9NC9eOYqmf1T0B2l7RRcDlYTqgWBVir+yjHXUPW0ftu0hdeHTo6YORDLIuPpU7pfiVFEx/B4wUqs3u0nOGK04bfx3kSgrG1rm0z6rfS36lolD+VMmZeAv7X+0TbdrtU0jsJrpCpZSIlXKs1LVpdXfJ1HriRgsrcF3+uCS4VFdG1nG2+bLrRFx2xXi6vLW7S6dtQVq73tcG60ozLXH7q6j/3AO6u1cpE+pNrFJXS23B6dp01OnCcOiKSaIthWuPu0IvkdbSNHrpr1wcbFuoZE5US3acrjSxujfXPX3Z0ncxqfRIaXnZYPu3hbTE0ziUNjovKZhYP0s9UtrE0lTX/aPxsdDlQFfo6Eo5M6cPRnPJDrROH8TeXo9LvURavd2AVX/41Pik9SRtQVMVTOmm9eaQNqvOjAvRS5KOKY7p/d1sCib1HUnt6e/l6+mAkYoSn6JKDaA03HamIqajbOp+qCchKphUGJVyJr1FfI5J63TsIzTMkliW5Lta6EqhlAmajXbkc41BzqdegXpTtOG4CGiwle61NPpGBZM+W8S2UHo06TIFE0vcXRNdQVPH8tKD46CKFAs3LVBX96IfK+aqi5Ut3LSJdaHB9lEwpSkD2xUOVTDuMh1OSsNGqWrFnLEJr3eYWg/THsyWy6C2oD9JY1vxZOh4U/HBVEoqlr5rYulNtRDTqNo7pu6irtDRlXJmkIJJbycRdvXTOoq0o3MRKw033VH3FVtcaZiPaAbah9X6KDZVwZTqZ0XB2DCdW2Rqzp852tE+/euKFIy9vXOWVOjjgNEKETvihhRMKWfiLaxCT0VxHwVTyhmtmi5/+hSunneuwlhT04FneQqmUtPi4+x94WNbK1Ywd4cVEhUFU0pXn4qUFq7ertQZxdTFxwmNv6YrjmGVilRJdR8FY3MmvW9kHgWjIcTxLLYykQKxFy3ltnUYpLVlBgVTGmNWo2DSJlbK1a7wTFXqkVx9SDu6hSiY9E/S6FxxWAWjFSkWQX1csB4aWxxTic85MfwZFIzNzErPnKauKyuYFflg0sqa5vjdR+sbxkdOeHuBq6xXwixSTweMrS7jsCCgVK42wq6xqVjRaGtW2qyvC8PSvUrjWSlnYiN0I0RFwcjPY6cQH6M1vfF8LIVKA5CQXfytbFcnTarMeiqYLtRPdT/Mo2Bs4d43OYu0cAVjo33f5CT6hTCDVkpCfAwYVJHSwtX4XyjMOrvKkzpgrH9YFYx9FrRNzPUS9VS7SuKyTq+xEj/6ftJE2Xu5ilRpYu7BzAUSb1RqZbGLt3FzCYyyu2db6Kr9p41DZRZJH0L0Xv0VTKmJpYXr2ruNp7udjbmtfmlHV1EwfSYHSgrGPr+lEdCO0faEaRLSceFus7dCbCwlXGci9506irku/YJZCKudub2FrV09I+bGhT6CrNQjDVMwU/11+vR/5dptVyZXMDk9GCuWO9nHAROxzaA0gxCl4oWwklejdOVo5ZetPRLgohRMJWesLJV7WTem1qrKA6IN2dZLW2RRUFYyvKJgYvMeHy0Wi0XgkjxIwbhM0KjO6YPRqErXMz5ajLwMBaM5IPfSB9NUcZaSYPPwvgfuGFSR0sLVO8an3hhsOhzaOJw5Wv5yxqz01BDSXqKe6tTdq8FadWgjkHYI9Xu5Dq0rDMk2V91DUcnNmfbX0ZUSI1CqtP3bQqXEYxzSrl5P3ne08rRPSaV9sm1iaeG6um2TX4m5GxFjTpZyJs3GiJtFGh857F0vceFouvxCtlLbBVJy+cfLbF6lFc9F1f0p1tupCkbjcOZoaXa9fl7JdlyLkksrkgi7PgrmyqB3keak5E3qz1AHzBq5MjkrObUNNESlIy5lRRwJpoo8sMJoZdk1tHAj/dt4Kk/n7yU2ls1MV73/rD9CbAibOQSU6Dk2bxSVabL15lJpKNlQBTObAwYWS/8MvzJwASnY55iKA2Z5zNmaBo0lx0rBzC8Nl0Sa2/Zpfu0xnC0JG0tDCsb6e1Zce3vmkrpt3IDSQK0FAAAAcKBgAAAAoD1WPeOly6k2zb2WviCzsiSsPWfSFVj23fImnMwAAHB8WOmwpC8cNjRBuJoklIJNX70rhTD/Koq4NGFsXilfe+YDAAAoa1Mwm7nYbV1JKAUrm1v0Wb+2bAXT1ho6AADYetb/YG03HojbVbnzccm0znS415jPZDuL6+Yu48nPzqWr8dMtNCrELW3mRyLpIuByJm5RcKb8+aFSzsTLAAAANpn1K5gr2W7B6aqUuFOkHriNdDuzb6DbU9IelwLvss3H+iRksQpGN5q7MLk7daqo0s2+UgWT5ky8DAAAYJNZv4JRl4A9me7xfCZ8N+Huye/xOhUSNzRM1VL6W7ceZfVvyXdmRskKi9Lu1/0VTJoz6WUAAAAby/oVjOC+4FVSMHF8LSkY932WFhWMk2u6h/ecCibNmXgZAADAJrN+BZN+wSv9Zlv6Yk5JwcSFMt0QBbP2WSS356kKlzRnuvL3NbugDtOciamuI1vKst8uAACsi/UrmOhmENJvtsWPXZUUjE45ybej5OL+CqZb90pe9yErG700Z7rsc3T1j1PanNGQUTAAANAE61cw0CgLf/EKAACgPwxCMAvt7kkIAADbAQoGAAAA2gMFAwAAAO2xPV92tBvy9oyMfan4vgfuiO/mzMOSPovI1xYBAAC64/xlRxsHffFnse/X2JeZ9aR9k2i2bWbSYAEAAI4Vx/fLjiUFs8BbqNRwb4MvPFgAAIDjxvof4mW3EvVJ6Hl7UuSFbDur25nIyfitR8Ged7vr6qYpU/1AEocFuosqCkb2brG7uUiK4r4vAAAAsBEKxn4KQHeejTvii3ZRL46b7nG71dn5oHRL/j7SZOEKpjvaC87pGBt5PXYb6a593g0AAGBz2AgFo4O3bo2vw7z1zcRP/5TCcXvLqnCxsmbta3FUoLiNhlWsuNhW0g4AAHDc2C3K/JYAAB+4SURBVDgFI+N06cuO26RgumnvQG1abAEAADaHjVAwcWZHpm/coN5fwXSFWSR9i1tEw+pnkUSvyLH75GRMmt46/aRlmgO8nQQAAMeE9Q94+n1Bu4i1C28ddwMVTLqSV0/KTdeiYNyXKW384yyS5kyfOKBgAADg+LD+Aa/yvehjztDNaXi/GgAAjg8omM1lqIIhJwEA4PiwfgUDAAAAMBQUDAAAALTH9nzZ0WG3llngTipbkAQAAIAtYGu/7HjfA3fIqF9/g2khSbCvEcl7Q/FtcLfrrltya9+c0l8tKQkAAABbwNZ+2dEO/wtUS2kS0iW06kHpJnfqE4njFIxu9yLSZ6lJAAAA2ALWvA4mzo+4sdy5JeJmKrov3Br3TSm9BGS33LXn3ZbB7gJeKQIAAJjK+lfyWoGivor0y47d2z8YvxMkw79ccN8Dd2yUghERFv/qFExndFvPzYIBAACOOetXMHaRhwqL9MuO3dHnqe0GvtHDsXrcOhj7p3QRblQwdrPgFawRBgAAaJ31K5juyA1jV3uUBn4rZTZKwZTmfXoqmJgbay8UAACATWYjFIyM6FaIlL7sqAO/m0UadLuVzSJ1wxXMhSdu58sAAAAAU9kIBdNlIiB+2bEzK3llOunCE7e3pWDi7JioND2PfAEAAOjDRiiY+HYxAAAAQIU1Kxhdmbv2jAAAAICGQDoAAABAe6BgAAAAoD1yBSNrXVmbAgAAAJtJzQfD9vYAAACwmUxRMGytBgAAABtITcGwOSwAAABsJvhgAAAAoD2mvIskHxpceywBAAAALPhgAAAAoD1YBwMAAADtgQ8GAAAA2oP9YAAAAKA92JMXAAAA2oPvIgEAAEB7oGAAAACgPVAwAAAA0B4oGAAAAGgPFAwAAAC0BwoGAAAA2gMFAwAAAO2BggEAAID2QMEAAABAe6BgAAAAoD1QMAAAANAeKBgAAABoDxQMAAAAtEeiYEZHtn/pcv3He+cvTr1GOHnvjga7d/7i2pO9reyc3j24erjsu0hp7pzenTmEvfMXR6PR2rMLAGBORqPRyXt30j9tTUfnxvqd07uVVK+Sog+mjzrpr2CU/UuXUTDLYzUKpj8bUssBYEn079LlyWdlEevf+cQkyAitVg9nUC83aNCcJwndkX7q6Y+YM9rrGnpQMFsFCgYAVsm2KhjtSKf6GzZTwSzW/dO8grGaVCMq1+xfuizn7bRCac4IBbMMtAj2L1221SiWglXltiDieSkpDbkL1UCblk4qWbGvP1RzUXXV3V6v9zq4eqjBzjNpBQBzYtu+tHHnqLCN1J6UjuLg6qE9qc3f9iR6HO81iFLn04U1EqUkuPFYhjk51oToGdv76a9iR2eXUohVhsI5kyD3iupHz8cIpD2zTazczo4UMUozF9nM9FUwNi+0mCUx9rhSKTWbUDCLRWqwZm+9a0irdarWpUJL4UZxPQoKRmqLWyKT3q4LHYStbHvnL8qfJF3abDbKtwRw3JDHiXg+7dK11duxP/XBpN1U6V6DiJ2PDfbg6qFGu+6D6UwH5UKQ49GkILNBRc/EnD6Ynkmwg4IrF43tzund9Od6bHvdg6uHTg+48DfdB9NNimhVLa52nrx3pyLM07oCc2KzVKtRqRREl7iqZltCz5KKCiYNraeCsc3SViTryEXBAKwRffh25/uvwOivYEr3GoTrfNzd7fDcU8GUnCj2RlaxxXC6+RRM/yTUFUx6o+hEsd1y9Gg0pmCcG62kYCp5V6orMCcVBVP6iXVvdEtQMEN9MCgYgCawD/FCaRmsHKdjhKXisI/3GsQCFYxcUJqacQpmeT6Y/kkovS5aUTDx4q1SMO7BOs4cufmL0uCHglk4ztdXKQXXGOx6ptgyhyoYnT92XVLqDe45i4SCAdgQ3EICPXZehy6MrNFPby8emalq/WvpXoOInU9lCsYlwXY4dphzkyl6Iwkq6oZUwfTvyuZJgrjbXW6XFIxbQBnDHE2ubkkVzJw+s9mYZSWvLn/ZO38xXdfTTXqlmEVaNjrB55qHKwXnBbWVO3p9hyqYdEG3DdbeLjbs0kre0vUAsEpKXXq615cbLHQoic1cuwirb0r3GkTa+bherpQENwtvg7WrKXQWSe9V9+VU4rDwJLifSzQqr4PZorHCRcOsKxibM6vsq9mTF+ZlxS9JAgAAdCgYmB8UDAAArB4UDAAAALQHCgYAAADaAwUDAAAA7YGCAQAAgPZAwQAAAEB7oGAAAACgPVAwAAAA0B6JgnGfQZeT7mPf8Rvoo8mdlSu7+614z76tZ1Ap9C9cu5/j6GhnzEGFm94rDXZQEgBg9fTvJdLm3A3pJdJ7DaKhjm4LkrDGvhofDAAAALQHCgYAAADaAwUDAAAA7YGCAQAAgPZAwQAAAEB7oGAAAACgPVAwAAAA0B4omEWyf+mye8X/4OohG5msgIOrh7JdQROsZeOEFRPbAhxnZMuQ0l/pJ2E2EgUTN7EZys7p3Z571rmNdDZ/EJL9fEo7LC22167cyMXHWYt9wd75i/2jHXNmExTMoCTMcH1bLLYtbEL5biU9++r9S5dd/u9fujxoo7m6gtk0Yr/aTe7b5jItHcJ09znbzHWbuLVs6+q2ntOO1KV0hiTYHFtlinIFY7fcna34+yuYtjqm/UuXK48Lq1cwSuvDIQpmy0DBNEHPvnrv/MXoXR50o7YUTJr2k/fupA324Oqh3ZpW98m1O97KBXZI3b90eb3Nf+f0rt2rPU14zySUEr4CagrG1Tm7x7CekX6qpOam+gPSjsn+SvNI7qWS0P5KHTl242QVm3rSikQbKytLp/aSB1cPY1O0wdpiFtOWbzsLe2w3ipYIuK2j+7T8OBza8pqqhOzFGmHNWBdtTZ3dvlqz0fZ0mpCSWpcnOZfYyshXyhmJlUS4dK9KJgxKgpSynu+yJ5uYh6NQu3oqmJgEubX9q8ZBL7Yh90mCq8mjySoXm1gJW7KSCTaZLsl9StxtbW7LMdbPPtXGbnIfe4k+IdgqZ7NI/xuzK62fkkV6saYrJtZVHillGVklQD0TM83m/Mx9tY52OpLFDen1THov223a2KZ1oNScbU1ezTB58t4dvVGqYOzg7fLHFocEYlXLzA6CRWHvnmZm/yRY1eIyZNnUFIyNa9oNSR2VRLqEzemDkbyzIlHuJRfLcQxBj7Xp2txM72Xb1dSnBBXjNiib8NgX2yfRVMFUbjqoHrixwd1rarriBTbmmkYJSkvfKhi53c7pXfureFyahpvfBxO7+5JkjAxKgnSjcgvXyNMOTv/qItAnyaUkaGiu9tpHIlXDPZNQik/axFLStlBSMG7Mrlf1eN+0flbKV/NQcyztJVJcErSe2F7bjugxu2z9dI8u2tna0Fy6XO2VYLXZildYe8tl9NU6eI+Onjp0PIul4O7lFExazZzHrtScR+bpfzUKxk6W2QcVvcD1rpoJVnTqNba7WPFI79DeuzNtwcWnfxJcAxytcEFIbR2MjZNbsCK1p9Q3zbYOJvWL2BzXCzTjSs++aeeozwSuIF0IlSolDpiu3BFHz/lUBaOZEFv1PArGxaRepWylTO+u1Tct2ZIIcxkr0SsNNgucRdLj/q6soUlIJU6aBOtBmUHBVJIg1UZT7ZKgZdo/CdqabFUZ5CFL20LaS8R1BvUuLyqYtH7Wy9fl4ai3hLJ3Tx+KYh667EqVn+scRsZf4srLhmCVigZ+8t4d6yaxEVhIXy2SRWWTFTSxFEpSfnTkN0rrefTBuONSX7o87MOMxT7ytahgStNh7vGyfxI2TsFIe0g7RFeQ8yuYNKnaEdhHWKdgunIlqPRN9mm7GzJpV1kDNaeC0Zi44WFQ/d5MBZP22qtUMD3DHJqEngrG1s+0xPsomNI1MlC53iRmyKAk2JDto3PPejhUwfQs7m5uBTOanPGMIcymYCQ50Y8bg+qjYNS1Y6VM7FTtc1RJwSyjr5bKJtfrrYcqGKlaMfDNVDClSmVLucVZJK1CaZJtzvdMwt5mziLZaKUTDZVW0bNsSgpG4lCKgHUhHmTratO+yfnHbHb3EYzO7RZrqj5k2F+lj1lWRdlY2VmzbqCSdb3GDLNIrs6l/uFBCib19EpkYrr6S8k0Z9IurzRjFRmUhIqCcRe70Wi2WaQ0CXLf2JPGhPdPgr3Lvnn3JG1iKWlbsNMuo8nFahV3TinkUhIqMXQ6cgYF4zo6m58js+Knkl0lBRP7MRu+S9f+5GsEJQWzvL7aDlfpHKVGoKRgSnfso2D2JheWLlvBVJqny2FX7WM9cT1SmuSVURF/rrfpn4Qo61eWnJqC6SYrivVt1j2TXe9Fds7hqbretgqr6/XKUiDxycA6S9QqfvKKOE3rgf5cOpdKP6tRPThap6YVIk3X3sCluK7eDP25Xmwd164QBykYLT4XbGliJV7ZJ7bOn++OK9k7cxIqDoxKHu4dLbqsFFlKTIId+VQRnjxaBxNreM8kpIXlUjGqyo5SW9AwXZJtuupi3WaCLehYi+qFKFkn2TjqrWBc5sSq6C6O2VVSMPvZUnf7W1sWrpaWFEy3nL5aa50b5+LP6wpGo2crUh8F0022pmUrmFhkthK6i/W8ewyITUaLZpXDvCtH14TtCBifY3smQTNnBb4xSzM72q1Y2S2KkpMJYLFURBhsJkOfwtPpoeNJo8MBLBwUzFI46P32KcBCQME0R38Fc1BY7H+ssK6CFT/ow8bSjIIBAAAAUFAwAAAA0B4oGAAAAGgPFAwAAAC0BwoGAAAA2gMFAwAAAO2BggEAAID2QMEAAABAe6BgAAAAoD1QMAAAANAeKBgAAABoDxQMAAAAtAcKBgAAANoDBQMAAADtgYIBAACA9kDBAAAAQHugYAAAAKA9UDAAAADQHigYAAAAaA8UDAAAALQHCgYAAADaAwUDAAAA7YGCAQAAgPZAwQAAAEB7oGAAAACgPVAwAAAA0B4oGAAAAGgPFAwAAAC0BwoGAAAA2gMFAwAAAO2BggEAAID2QMEAAABAe6BgAAAAoD1QMAAAANAeKBgAAABoDxQMAAAAtAcKBgAAANoDBQMAAADtgYIBAACA9kDBAAAAQHugYAAAAKA9UDBbws7p3dFodPLenbXHpA975y+ORqO1RwPgmCAtTqxnLzEajfbOX1x7zAEqbKiC2b90mcYzZ87snN49uHq49gjPwxYkYQs4ee8OcnNrcAqGJlZiY3Pm4Orhzuld/a/VpmrHZ/REwTQGCgZWDApmm0DB9GRjc8YpGOV4DpqJgrGabv/S5fS85pT0bmJa3tFjaTtBeyyFcXD1UH8usyHW0tLaMiQHbIZL1tmTpZyxua0BuislhIOrh7aKS/grnnjav3TZ1RZJgjQ/W2fSJJQCiRVJsJmmIcT6qXfXA8lbOXD3snVe8zwmIWbv3vmLpT5x5/Tu/qXLEn/5ocZW64ZLrK08+l9XkfbOX5QoyTUj03Jtzkgk01LQAGOpwXopFa6rD67/tHUybWK2esffajWQe6VtwYVshwCtdbY59ycGKzGRtEu3YG8npnU+zRmp89qlVHKmUhAxDw+uHmp8bMPRG+m9rFSyx6MwBER3i+1erIIpdT6VUkh75s0nUTCabJsL6cIFzQ570pWH/KqiYEZmxNKgjpWcTNuVVnFXF0s5Ex+U4zOEu2aNmezipn2QxErbVfoYZKOtx7YiuernJFpaP0U9dEdz/4L813Yo2mvbspOTaRKkZ9SLY2RsrOSvEhPpAWNiVctaOZUqGznWZiv9qeikmAlyXCoFfDCbSalw+yuYruppcL+1VaLeFux5/ZXV5enA0YcYrKRdA5R86IJQk5MlBWMvsBK/51geR0yNj5aR/Gs7BH2eqSiYdAjo6YNJO59SKaSdahPks0hR5bnHd1cGlXyUPKr7YOJxW5k4D+4hRrsG1wIXomDsz+3It3qigrENu65gXHbFXtsmNj48pfXTdnzd0dNtzHkNzT5IqYJJk2CfASpVWocfiYmWjo2A6q0uPEGWKpLeVFSRvYu7uJIEFMxmUircJSmYUi8U20JXcEvYWpQOKH2SHBu+DMyq+HdO77pEWblT8sHEdA2aRXIjpsbH9iQuAqpL6j6YeNx/Fil2PqVSSDvVJkgUjK1bKJhlU5rKWZKC0ct0zF4LcyqYGPPVKBgVK9YnXFcwelwXAUMVjAQbm5WrSBUFE3MGBdMWm6Bg0rYQK2qXjZ1D+5802E1QMHHE3BAFEzufUimknWoTJApGExNnkVz/KBe4XKvMItn1DbEwnIJpSAbOiThCYymUFEyaM6mCSQce6XTWO9nZX8HEJOiMj8vD2ALl531mOSsKxj67aJenMbSzSGkS5JqpT5wlBZPOImmtcH1WrEilQS6dX6srmNL8F6yLioLRqcBY/6OCKclT16bc2pc422jbgpU1cc4irX590huDTRVMF/pPN0lkc6aiYHoK9zhilhRMaRbJjpJ9FEzamaQPt67zKZVC2qk2QW0l74FZi2TPWy+T8127ENzQq2emKhgb7HFwxhyY9ZL1WaRSzqQPygdhEWgMcC30VDClJFjHdWUWqZtcr6ohxPpZUTB6L9cL6MnR0XxNKQl9HuZKCqZSiHvZ0jRXkUqDnMuZUda92iTsh+WHsHbq8nQ0GknFqyuYrlzB3G+12su4EOcu98w6KndS/YVakWZ74o/BlhRM2k+mOVNSMJWciQVhc0bD74KC6QpN6eDoFYQ+Phjbcm02pgrGdT6VUoidahNs6NvUsDyOlX9rTmJ3P1sgjXpoAVJmmANiLnItuM5n+0oBBXOMEJXdqLdwLcypYNwjIEC7WM/lDFV6+8bODSctqe0rBRQMAAAAtAcKBgAAANoDBQMAAADtgYIBAACA9kDBAAAAQHugYAAAAKA9UDAAAADQHvl3kUbG5KT7FJxskuG29Yy7NNrd/exJuzl0DHZv8hviW78bWJozaSmkOTOoFNJgV8mSktC/Ig2qn0sqhZTNTEIpWNgENrOvXlJF2oReon8pbEFH1wT4YAAAAKA9UDAAAADQHigYAAAAaA8UDAAAALQHCgYAAADaAwUDAAAA7YGCAQAAgPZAwcBN9i9dZrePTWP/0mXdTmMDObh6WN8qA5rD7iOyyXVvK5HMt2doYnUSBRP3xhnKzundnmOh20hn6zevS9FNilYjIHQfJNg04l5VG65gZka29tL/Hlw9rNfJg6uHfToHt7XX1nf9S23LPeue3aXN9mDpE5FcbOOcbrDWH7dHnFaq0v5sOuLYpGkPbCuMDbkeB7d33Dx5HhVMpGdbOCbkCsZu4zhDoIMUzDEvjL3zF+2ulysQMSiYzSR95N1uBWO3H12IghH2zl/ceu0irF3BiGRM4yCKxJWadHG2dOzP53yI3Tt/USOcdqT7ly7brWnlXrYHPrh6aPfJ1R1vK92yXLmoUQwFM5SagnG5aZ9v9IzUcvvU6BTx1P2YY2HYX2mdk3upWLa/Ullta6fqYj1pNbWNlVXQq68Z7qY2GzXCtv3YVGgDi6XQTfq35BZuR2otx5iB7rxGQLSpxkFjbkOmdc2A7VvdeSlfW15p4WqfKye1K7fV2za3WJG68pNrRC+zg5yEL3Gra/Gd07uSKLm1VTCuNjq3yqjHmO0UTClnukK91TO2P5FoaOrq+bAySrkRkxBrQqkiubo3NQJpe985vSt6InYpblgZTXZZM2fjyXt3bJVLq5/rsiRu9qYqVqxqsWomUopzqeWmw41WcrneFaKN3tC2sPXUFIztVW1d1GPJUMlfe/H8PhipFtLN2cJT1Twyo6+GoMdaaWzlS+9lm1Mf/btYYtuwSdA81Ey2GavHrhQ0ND1wzxCleu+6G9t/aeHaR2cNdvX5tn1U+kGt9vaaWLhSCnJsvafusVK/z5JWpKGuCzfIyXBoJXjphzrCya1VwaTNuZvPB1PKmdTl6W4qqZP2pTMgGtvRpPhb/XCS3jRNQslVUOolYuFGKg1fsig+A0uANoajyQfmmfPQdn2dGf5tf2j/q+m12aLVwz1RVCpz6U+u5cYc02Pn73FZGksBH4yltg7GFqFbsBK7PHs82zqY9HFBz9jwtcjdBKQO5GnPogLWRmC9qrauYPS8NqfUiVIaeErz0z0VjL1MG3Y68mk5HhPX/TKoP8nF41i4lc7R3qXijdPW1L9/jAqmp+YQBdMdDQB2wIvNeWpojlTBxOOY0jji6iDXHfmNuqPhOa7AWIsH17XlUhJKUyGlXiIWbsTeyzobrDvEVQnrNtYkzN/3anVKU5cqpBUomBildLiJQ1s9HBSMpeiDiUvt0vKYX8GkhaF9ma1wsZhLsn1UfjayD2TdtDnOFTAqzyJZBRMdXWkpuGTqeqZlKxgNYcT7CzNRWgKVKpi0cIcqmIrctK6UqdGeU8FI1bIKJr3vxiqYNdaZbm4FU+klYuGWIqB5qLd247Stn1GvzCNcbDT6xHC0nFmkyvyvO5mWAgpmHmqzSDa7o3erqyqYnm27VBgqTtMI2O4+rUCpgnE+RjkoOVdXxl5hJe9o8tvr6vyPbSlVMLYI4ixSmt6es0hRwdj42Ik/6I+Ucsy6VMGkhTt1nJZfVSqS/e/+pct9GsX8CqabFEyl8WDQComeCsauOSglQR1FXVAwXWHx9SpJR9bKLJKLbaWXiIVbymqtVJq3Nhwd/mUaLhbo/AqmMvvp6rlbyRuHOc06N7NT6dPkFjGj0txLhxs3s9lHwfCUqNQUjGSW0xBWVpcUTJctAk1xk1N21tmV6J5ZFeXK2AZSmUWyN7J1yD0crH4yez97m3p0tKrLNQ/nu445H7NFCi4tR5vYGE4sxFTBxCjBbMQqWppFioVbGqe1dEQfO4e5LTXbvnrK0IUoGPeMG5uzi20l2L3sbepSzrgk671iJowKCiYtsnVVmNFkpxfL0XV0pYpUKtxKUbpMcJVn/+g9A/cr9W/N2eXGmmZT6gLX9Nqf1HvaqU76dAQp5V7pYlsKMfdKGY4zppkd7epCePuYv2EDOKhUALBNoGA2FAYbWAj7vOgOAFtKMwoGAAAAQEHBAAAAQHtsuoI5bpNHa6T0Qi8cQ/pviABbhl1qyjsvi6UynK39rdhGyRXM5uRmXcHEPQbWHuEZSN9FWh6ssNlkNmTYmKpgXLvb2Brl3iLeNJne832fSiksL+dneBfJvcoUszq+xm9r0QxFE/cVjMHa6w+W8GVHe696jg19IN/klrUh5ApGXpHfhKbeR8GsPZJzJjDdD2Z50Co2lp3w2Z31xqRyQSu1SPaHtRt+bEK3prSuYPaO/ZcdYxIqmYaCWTi5gknf1Ld7Lbi9HKyC3sk+/lfZkmEvfDCym/y621AFY3fu6kxNtbGyv7JJ0P2+YhK68msdMQkxW0qMynvyphsS2CTYDZf2+LJj++xfuiwjrs1DW+Ku67flqH2unLG7m6T7U8eK1E0+jA5VMM7boYPBXvmbrBoBN2y4JJRyIE2C4+S9O5IW2UU37rVq7+V0m/1v7CUkgfLbffOVyi5rUAfhm5fReWC7LFuyg0rBhVDaD8aO2TECWhkG7clr2Tk2X3bssmZVqp9pW6i3xJ414diSKBjdksjW4HRP3soOg/tHH/+rK5h0TzwnimfwwWids1uL2qdbDTaNmEtC3PPUkiah56NVbBsH5rtIcX/edEO5Pb7suBVoFxy3t47lNQqPeicnv19YVzCVnQm7oxKfzQcjHYJ9Gt4rfJM1RswlwbbWOEymSUhzVWqy5Kod50bZ07+9l/YeaS8hfYj2gXpxuq3fQeGbl7GjGPSYnpZCZU/emI2lXiKNW/xtqeEfHJsvO7pSsINIqa+ObaFUmvNkyDEhUTDaFHcmP90Xa3PqXkt7k5KCOcg+GGnr96B1MNEv4rYJtsHaKmVNntXSzvEg+35hmgSV1fX6V1cwVo+rMHKxrWRRaX66p4IZZQ8Wg3IGBqH9u20gqQ/Sju5KaThJFUxakeyINWgdTNzJ1P7W1iut8KkHovKco5FUej6kioKxc0nWVWxDU40edXnaS+ggLddLtxlX5sUx24mkVImO+vkyY1uOoiE6FWJdir1EGrdKlds/rl927AoKZmpfHTv/mAPz5MkxofZtatuQlqdgYrBDFUz6p7hJdhrs1CTE5OxNfr+w7vms9K16QWkWySoYdbHE3EizyDYPl4RSq5hHwaQ5A4M4yL6wsTwFE4MdqmDSWqQjop6JvXafJMTkWA9NKQkRUTCdaad1BaNJcx7omBsVBTPVL1JRMK4+1AewORVMpZeox81GQNOit947Tl927EJXqfWh3lfHGo6CmQGvYJyY1WJIV2ydLHwtrN5UbAeXTk653mQGBaNxsLXTTkiNJqfe40RYHKdt2nfMtz9K82t6fGC+ohLZ48uOYAZaV2Q7k4u6lNguKgomTmSUKpJ9dJ5BwdgH0LSBpDU8TYI7tveVg9L8Wj1jO7NCwmk793hjMzPtJVIF0xUmvisKJpajHu9P+75mH7Vku5HYV5d6iY4vO/b7sqMNqk9fnbaFUmmW+mpQvIJxw23JleqEpFpXfnpTr1p8SnBqvZtc4td/FmlkHNS2b1KtvZ+9NecCKc0iOb+3jUZMwkH2dboS+3zZ8dgTx6rRpNpIa4gtx5KC2TNLvEeTD4ux1Gyd6T+LNDJzQHbs1MfZ/cI3WdMQ5E/22F2mP+9T8SoKxjZ810jjmdhLlBRMlzX/koKJcdgf8n1NVwq204shxL66K/cSHV927P1lx/71U2aKXRHYcFLFkyYEhE3f0W6BxIq+yVBlYTsYtDQVAKA/KJgNBQUD2wEKBgCWxDFSMAAAALA1oGAAAACgPVAwAAAA0B4oGAAAAGgPFAwAAAC0BwoGAAAA2gMFAwAAAO3x/wF+D2Rb4hHnfgAAAABJRU5ErkJggg==" width="640" /></div>
<br /></div>
Now that I have covered retrieving journal information, let us move on to updating the journal status.<br />
<br />
This time the REST resource requires the POST method to a URL with the format:<br />
<br />
<b>https://<cloud_instance>/HyperionPlanning/rest/v3/applications/<app_name>/journals/</b><b class="yellow"><journal_label></b><b>/actions</b><br />
<br />
It also requires parameters in JSON in the body of the request which must include scenario, year, period and action.<br />
<br />
The action can be “Submit”, “Reject”, “Approve”, “Post”, “Unpost”<br />
<br />
Let us submit the “Rent Expense Adjust” journal which currently has a status of “Working”.<br />
<br />
<div style="text-align: center;">
<img alt="" height="183" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAu4AAADXCAIAAADKlUPRAAAUsUlEQVR4nO3du47k2H0H4MpmAD2GoNRJv4XyBpxMoEDJAIZyP8YkslLB7+DAeoSJN9AFEzgwYLkhOKxg0Q66tpbDc+Gfh9fT9X34YVHN4uWQxen+bd14efrX/3hP+fr1648//vgKADyGy+HlQ5UBAJqpMgBAx1QZAKBjqgwA0DFVBgDomCoDAHSsVmVGszbfm86cXUSVAQDmmqgyo2oS/zF7O/3xwCrz/Py89sGcvdGGMaw17Mp6DjkyK3p+fk53YdOdal758/eWr7C0lZOsJL7O7GHZYjz39Sxc4UYnWH33t/5XXDn+mwpu9DmxxUg2Xf9aJse21nk+d7urL1gSrTL1gjJqM+m9fVWZ5YVju9XuUGVOssI2pV/xJxneyKi+bPTrZrkt/swv+Qe44vFZsqqtH6ZjT+YDT8LIptODs6RtbN2YNzXZayfvDW5i4To3PZgtVea1UEcmZ1BlIqvd9IxcfT3brbBtE/1WmeGPZxvtsb8HVZmdt7vnVpo3nT04qkx9noWbWLjOU1SZt7mDVeYpecnptFUmfeZw9HRi+mN2qXRi9t7Sj5WJozVXhlra7uR6skdm7s6WpoxWm11bZYXZ2SojL+1d6XEZDiy4s6OZX8MPSvzBKj1qkbVVthLcx+xd6V4HD1fpgKQLppsebS6dsvrBmdyLdIb0oJV2OXjERruZ3W465nTAzeMZbT2ynvTH0eBn7X5lvyrDm1ywNIbsfmX37jX3cLTtXXzm7MDSQZaGOro3vZH+ONpo9vhkZ6gPIDueyvrjR+k1/rbfSB1JZ0vnLC07zB/+9JfXxB/+9JfVq0x64NLb2YOevZ2uP/5jdkp9weBIJuevbLF0iLLLTo5/1gFfZVsj9U1Xjmc6mMqRiRzw7N7F9zqy9exW5g57cvHsJiojr4wtvV06S+MHZ+5jWt/E5IDjGy1td9aG6itpHk9pzZMHsDL/5OYqG01nK80QOTkjR3W0ofRUnHVw4sPIPohLzpP4CV8fRmls8cFU7l3r38uMF5japr82ve131GaCPabhWZnIYzDrH3zb5iKnaX2LzdMrG114rjevLf4rJrityjpnDW/1g5/9RZkd/ypbbzs3IrM1/x6cfKz3Pzj1f8urnEiRzU1uqL6S1R/0dX/hBB/EyG+VyX9Bs07g0obS6ZXFV/nt0TDCWUOadULWx9awktX/vTRWmfSuyswNVWbYZuI95sAq81r44zq5VH3ZFX9DRX6VxBeZ/AOT/oqZ9Q+49BuqtPV0ePV7334MDq95X5r/WaajXWXrDedG/eTPPkyRcyOdufRYx8fQto+TR6m0odLA2g7y5BG7H6XgSlZ/0Nc650sjLz2I9YMzXKS0zrm7XBl2aVSVgzB3GJN7kQ5j1lYahlGf+XXqESxtIjjOyPBe26pM2mbSH5dXmbc2M6vHHFtlSlMiS92nx9c/9wwIjmHWIqUjs+SUnRxb5JfO5Dqfkz8M8eHFZ27Y98oMy7fS9lsje7sy+LkLpo9FcFUbHZx9zvP4VoZTGn4/rPWgr/sLZ9YZHhle5fbkGErz16ev/tsjuHjbsvETIztl4dkSn7NteK/NVebp+3fSvObeJZNOn1tlGrJDlRke6+CvktIaJgeWzpxd7ZLblQE0n+tzT9n0rsivgMoik+f9c/KHYdaxanhQSvOXdiedofkf/6yHoLLvwYepMvLsUtnHIjt/ZTxL/i1U1jC5L7MGUFrn5ABec0dpciVt4ykd5OYDO7m5+sTg8OqzTQ6pdCZnp886yLOGEdmLhmVLJ3x8nKPbs/4VxOds+/fy5nEvXFA/rdPj+zz4VTKaoTQl+JBMjjMdQPau7GBKg6wMY3LkkxvNji1ywCuL180970uL1HetbV8q85f2bvLgRNaWTo8MOzh/ZWz1cyO7y5MHfNYAssOoTy8djXS/Jg9aZebsvkzOWd/9yErmjqe00crjkh6H+mM3ebQj+5X9sfKQRcbw+r3n72U3cV9V/eBMDiO4eGnf6yvMbr00Q2UY2e1mB5nd8exKSovHj9LrI1eZNqWzJ75IwxqY5HFZUel37ror32jZyd/v53fsUE/+7+Js43lzzlFlLR/qOXdWlZln7qN4/t8LI0ePqMXyHtO2knep8v9eq6x862V7rzKn6jHZKQc61WCGTjuw1MKhnnZPVZl5TvtAElRqbA/+yPZeZ+96rzLn8Q5Oht10caDe9wOqygAAHVNlAICOqTIAQMdUGQCgY6oMANAxVQYA6JgqAwB07PJP//Lv7ylfAYBHcrkCAHRLlQEAOqbKAAAdU2UAgI6pMgBAxy5Hv+845MM//5uIiIhImss/Xl5OHlVGRERESlFlREREpOOoMiIiItJxVBkRERHpOKqMiIiIdBxVRkRERDqOKiMiIiIdR5URERGRjqPKiIiISMdRZURERKTjqDIiIiLScVQZERER6TiqjIiIiHQcVUZEREQ6jiojIiIiHefnKvPpe6M+Ubn3U2J0V7qq3arMn3/4oTLlzz/8MExk2coi2buC8+/5kC/c6+BBLs15koNQH3xptvQEuE+PrGTPR3byrtLDOvkPpHQQ9t/H+mlWH1tp3489G0WkLZdSw6g0kvTHtNlEVnuGKlNfMP27O/pxcm3pL8pZw9gipSFF9jrbRSaPTOSIHfW3v76/pYmTi+y/O/U6kt4198wsPfQH7mZpVJPDjhyQ/XdNRJoTrTLZJ2ki906uqt8q86H8N6C0SH3mfVJvKpN7Ha8y9cN17EGI72/8IEyuZId9aZ4e+Yt+wirzIXBSBc+6w89GEWlOvspEykelypSe1GnoMSevMh8KfwNKizxOlYlMPPyPx7uvMpNnePpjd1WmNPhZMxy1OyKySvLvlYm8JBSvMvcfD6kyabL3jpaavJ1OLG2itHj2eYsdUnr6PTLsWQcq/vzN/gchvo+TO/5h6jTbc4/ibWPuwz1r5fs8aunEJVUmu48i0kWKz8rUm8rcKtPcYw55Vqa5ymTvrfxtO+RXZ0OBK+3C5IGq3Dj2IEQGX5p58sfSSvbZqcgZ/iF8GtTP3mMftXTiwiqTHkAR6SLT75V5tCpT+T/stiozXG1wkJumea/TP5ORRSJH6ZCD0PYoR37cf3dKW488K1NpP5PPYRy4a7P2N15lDtw1EWlOqMrUe0mwtXRUZUpTFq7tPH/Fm/e6vjulRbo4CO+1ykQOeNdVpnKyBWc4ya6JSHOmX2CK/DiqLA9SZSJ/pEt/8+J/MFbP8r2etUjwf/oPPwiVwUw2lTNUmcqBzd61/Mw8Q5VJq0m6v8F/tgeejSKyMOt/RV6pkZyzyoxeX6j/L2w6/2ie9N7Sr9HKerZO/O9u9pjUh50uUq8yhxyE4BMVlbGds8pEzszKLmQfu4bDuNtuVh7HyYcve0CO+icpIgvjwgUiIiLScVQZERER6TiqjIiIiHQcVUZEREQ6jiojIiIiHUeVERERkY6jyoiIiEjHUWVERESk46gyIiIi0nFUGREREek4qoyIiIh0HFVGREREOo4qIyIiIh1HlREREZGOo8qIiIhIx7n8DQCgW9NV5uvXr38/zvUnf/zjf14T2YkAwONQZQCAjqkyAEDHeq0yHz9+/PjxoyoDAA9u1yrz9PS0SpX5+PFjOhEAeED7VZmnpydVBgBY105V5q3EqDIAwLpO8QLTb7+nygAAQaeoMi8vL7/7ycvLiyoDAASdosq8tZnPnz+PekxaZd4+uDSaCAA8rLNUmbc2k068D9SzMgBA6kRVJus+UFUGAEjt9wmmIVUGAFhFl9/2q8oAAG9UGQCgYz1VmWFcgwkAuHZUZQAAUqoMANCxy5cvX758+fLWWoa3VRkA4Pwuw+6iygAAfbncS8z9v49QZX7569//8te/H954TM3HYXQFCQA4yuX+ZEy2x6xVZdq+H0+VuV6vmw6v7TgoMQCcx6XeY1apMqP60vZtv+tSZe4rV2UA6Nr4bb87vMB0hipTMvy7nv5pTyfWe8Bo+n21w2TvLc2frjxdSWk8pfVUlF5FUmUAOI9L/eNL+1SZ337v2CozahLDu0Y30vlHq0pvjKpGdlul7UbGWRpP21M7qgwA53cZ9pgdqkz2KZmXl5ff/eTl5eXYKlP5MZ0YqQvZTlO6EVztZG0Kjq2NKgPAeexaZSpv+315efn8+fOox5yqylRe0CmtKn3BqHKj8sJTfeWVZ4ayi5RmiPDBJQDOZr8qM/nxpbTHnKfKND8Tk13J5LMylSHFtztrhbNoMwCcx05VpuFj2IdXmVIdmfuiUvxZmckhDSfOqjhz53njvTIAnN/PH8be7ntlnhJnrjKlF2I2fYFpNH/65FBlYuQFpsp+VagyAJzfHt8rs8TOh2Pdt8e+V6oMAOfhytjfUWUiVBkAzkOV+Y4qE+SjTACchCoDAHRMlbn53//5r922BQCsRZW5UWUAoEeqzI0qAwA9UmVu2qrM/Ztall8TYGuzRjh3v37xm1/94je/Gt441tsw0pGcbZwALLdHlWn7cjxVZl0HVplZvWHFhqHKADyCvZ+VmdtmdjsQ777KzLJilblPD25alQFgFlXmZvX3ykxehSAyvd4nsispTa+vZFYVm/WlMqUqc38N6H7XcMqoapRuDxcsbRqA902VuVm3yjRc6bp0BcrS9ZUqF3Iqbah0Yan0dl28ykw+W5NdpD6xtJ5sxYkMEoCu7VRl3ut7ZUpmXeY6nV6qKZPL1uefnLL6a2TxZ1bqd0WWVWUAHpNnZW62e4FpNLE+c+VK1/EXpCpDqk/pscpkX5Ca3AoA74Yqc7Pd98rMfWYlsmz8mZj6VjatMul7XyovBg2Xqk+c9R6atpED0BFV5ma3KhN8A2922fT28mdltnuvTKVbVD5AVK8ypbcDr/KsjGtkAvTI98rcrP5emdLHgiKfYFr9BabSC1j1oZYsrzLXqReGsm8Tzn4YqvSJp9KHoZbvFwCn4tt+b1y4gOv1qsoAdEeVuVFlHpynZAA6pcrcqDIA0KPL1wBVBgA4p8s/Xl7qUWUAgNNSZW5UGQDokSpzo8oAQI9UmZu2KnP/OpZZ38uy3NztVi7ruKmjtgvA49ivyrzLr8jrvcoEryoQnFL6qrp0uwCwFlXm5mGrTGn+yjyVr+It3VZlANjITlXmrcS8vypTUbl8Uv2aBulK5vak+Le9NVSZ0tUDIqsFgNXtUWXuz8eoMpXLN5auu5SdXre8ylwLlaW0oCoDwFF2qjKjGw9SZdLnVLJPuqQLTt5eS+Wai81VxmtJAOxp8yozrC8PVWWug5eHhlNmXaF66/ff1DvH5HM2oymli1cDwHb2qDKpR64ylTnrt7ewYpWJ3wsAK9r1e2U8K1N6A+/kG2hmWeW9MvV7m1vOkItRA7CcKnOz0bf9lj6mtOkLTJtWmdLba7JvuFlrnABQ4tt+b3arMgypMgAspMrcbPcCE1mekgFgFarMzbpVpvQleADAulSZG1fGBoAejavMp0+fVBkAoBeXUY9RZQCAjlyGJUaVAQD6chk+GaPKzJW90NK6lqw5/ea94NqGlyDY4qt7t14/AI/jMuoxW1SZ5qsWqDIL17xFlSldfnIWVQaAtVxGPWajKtO87G4H4rRVZonVq8xatUOVAWAtl1GPUWVWMewNo+pQuUBBZebsJkr3Vu7KWuVCB6WrGVybrmkAAEGqzM0WX5HXfDtdW3D9o5m3qDKVCzPFbwPAWi6fEpu+V+Zxqkz2x8j0YJWZtf51lZ59SX8sTQeAtexRZUa15sGrTPbK2PXOcbYq8yZ9xiV9jUmVAWBre3+vjCoTmX/y3jNUmWv52Zd0hvpsANBs12/7fX8fxi6pvHml9B7e4NrS9URu1zVfpHryfTBtn35y0WwA4va4BtNjvlcm8vGiyLM12fkrmxhO3Ohtv9lPJJVeYGr4+JIqA0CcK2PfbPoC08NqfkVJlQEgSJW5UWW20FBlPCUDwCyqzI0qswXv8wVga6rMjStjA0CPVJkbVQYAeqTK3KgyANAjVeZGlQGAHqkyN21VZvgNLhu91XeVNc8d5/2bYBZeA7Jh2VlbXGucAPRrvyrT9i15ux2Iw6tM/Vvylqz5umqVmfWtdytWmfoVuVUZgIe1U5Vp+J5fVWZFa1WZuXVhxXqhygCQtUeVae4x568ydZMXLkinlK5OUFp5On9puxWzLlwwOT29XbmaQemu0corF0wA4MHtV2Xe5QtMFXOvVl0pH82XkwwOde41mLLTS7fTS05mb5TWVp8IADtVmWGDmdVmdjsQ232CqXSV7Mpsk3eV6lFwWwulz45Ebl8HT9KM7lVlAGh2wAtMD1JlKi8AleaP33VslXkzesZlOD17+6rKALABVeZmu2swvdcqcy10EVUGgD3t/QLT3LfL7HYgNqoy2bfx1heJ3BV5f8wW75UZyZaSyVqjygCwov0+jP2Ab/vNfv6oNH14V3bmyl3DidnbdXPf9lv5nNE197bfUr8pNaH6JnQaAIZ82++NCxcAQI9UmRtVBgB6pMrcqDIA0KPL1wBVBgA4J8/KAAAdU2UAgI6pMgBAxx63yjR/LxwAcB77fdtv27fkbb3/2gwAdO2AZ2VUGQBgLXtXmbNduECVAYCuqTKqDAB0bNcqM7fHqDIAQN2jV5mrjzIBQM/2qzINPWaHKqPEAEDXVBlVBgA6tlOVmft1MqoMABDxuN/2+0aVAYCuqTKqDAB07HGrjA8uAcA78LhVBgB4B25V5tOnT5Uq89fjfPvv/5vM5XK5XC6ROUVEROSd5ecqU2ozqoyIiIicNpdP31NlREREpKOMq0zaZs5WZd7ervvdPqgyIiIij5qdnpV5GlhYZd4ybDOqjIiIyMNmj/fKjOrLrDZTGrcqIyIiIt+GVWa7TzCpMiIiIrJRQt8rs7zK3OvL3NeYSuNWZUREROTbW5W5v7q06SeYGt4oo8qIiIhIPXtUmS2elfk2+CiTKiMiIvKw+bnKeNuviIiIdJed3iujyoiIiMgW2aPK/NX3yoiIiMg22anKNCuNW5URERGRb6qMiIiIdJ3+qoxrMImIiMg9/VWZzD6oMiIiIo+aUJX5+3GuAABlqgwA0DFVBgDo2P8DRT6LUk/8DsIAAAAASUVORK5CYII=" width="640" /> </div>
<div>
<br /></div>
The response will provide details of the new status.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_7WepGXGuD-mj6XVpHsiQfL4JgVAtnCcg95JA53fSN7cw-bgnyVZzyaEOxPG4QhBc94ooJokhgoHzs-PATxdI9FnXFy3xw8_RdcGEueIlyg1gsE1WgRSGsm0jyBWd8SDqfrbnUc9OPrM/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="75" data-original-width="268" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_7WepGXGuD-mj6XVpHsiQfL4JgVAtnCcg95JA53fSN7cw-bgnyVZzyaEOxPG4QhBc94ooJokhgoHzs-PATxdI9FnXFy3xw8_RdcGEueIlyg1gsE1WgRSGsm0jyBWd8SDqfrbnUc9OPrM/s1600/image012.png" /></a></div>
<br />
In the UI, the journal now has a status of “Submitted”.<br />
<br />
<div style="text-align: center;">
<img alt="" height="185" src="data:image/png;base64,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" width="640" /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
This can easily be replicated by modifying my existing script.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<img alt="" height="425" src="data:image/png;base64,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" width="640" /></div>
<br />
The next step in the workflow would be to approve the journal, what if I try to skip a step and try and post the journal?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj34Q1CODyt9pabhaXMAeYy1BwmV7v28Z0YVeooxSHmIBUQAOF41a5gByvh3_6Ybj2WWuQXWKRHTOsvNWkixjpYJYgUNoBaqvIB51vASI6QYVY6uHW0gSjL3mogkg8Vjl7LcZjZmZeUQZQ/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="139" data-original-width="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj34Q1CODyt9pabhaXMAeYy1BwmV7v28Z0YVeooxSHmIBUQAOF41a5gByvh3_6Ybj2WWuQXWKRHTOsvNWkixjpYJYgUNoBaqvIB51vASI6QYVY6uHW0gSjL3mogkg8Vjl7LcZjZmZeUQZQ/s1600/image015.png" /></a></div>
<br />
An error message is returned to highlight that a journal cannot be posted when it is in the state of “Submitted” as the workflow process must be followed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<img alt="" height="128" src="data:image/png;base64,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" width="640" /></div>
<br />
If I try to approve the journal and the period is not open, the following error will be returned in the response.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<img alt="" height="130" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxkAAACiCAIAAACiZJeDAAAYrklEQVR4nO2dTY7kOJKFYzcO5CFqkV2XyRP0thZ1kDpFzqHyCD2YXfVi0Gj0UrtZRMGhFGnGZ0ZKoqTvgyGhoFPGJ/7phTzc8+Pf//rXOn78+PFff/9vgiAIgiAIohnLsnz8DwAAAACkWJbl4x8r/vef/3nHx8fHx8fHuoQgCIIgCIJ4x48fP/BSBEEQBEEQycBLEQRBEARB5CPgpV6v1+v1Ol0xQRAEQRDEPKF6KVwUQRAEQRBEGXgpgiAIgiCIfOClCIIgCIIg8vGXl/r999/xUgRBEARBENH4y0v9+eefeCmCIAiCIIhoSO/xYaQIgiAIgiCqwd9LEQRBEARB5AMvRRAEQRAEkQ+8FEEQBEEQRD7wUgRBEARBEPnASxEEQRAEQeSD/4+PIAiCIAgiHwEvRRAEQRAEQWziLy/1fysWAAAAANDASwEAAADkwUsBAAAA5DnfS3399v3rt+/rA6vafk2XhVZ5U2eTL7/9+uW3X9cHw9kvMxzGtCP4ObvOknd6twwXMMlqHTisoTzRFqM6984Pu1IOxLSjcysvFbU4Totneakh28QBs23aCT0zoR6bs3tPV3WkgGpbd/VSn+zqpQb2535eKpF/lP2K7g8Dmz6Lpvg9vNRO3fVoLxVKdYCXepfrqdIyeojqhE/wUtcScIyXmopdr+6uXqqzrdzpN5iHyn1kj8u8rZfyeb/jtrYvZeG6xH+HrkxitRvS+fnlW6FTSqy5Vf7+sfmlZLOend8Lq/XfL/XoXOex8ovtWr9vWdtW9Pczp75jcMXyan5nvByRizGau+bx50PnvCr7QRzH6CV3znNfpJUnLVIfF+s4ND/98qbyarVyqltX1DMuTZ1+P+jrSBdjjYuVX1wXoXbLRqvHS6QfEvM8pH/dhHUV5bXo60JJEppyTab2Uhv/9D6oHi+2AVrXd5pQyi36vdR7aK3toHqKk83K7x+ndYr5m+1adcpqzfrOJfjljp5oubPUmyJDfTgqj39d1b1Mz1NOHuW6Qn04ap5b1RLjHmpIHIuonmpz1V0iKthvQimMjkszf8++1KMkvS6ijfqVh/SDMvc2jeb2Jb/zmxMpsVGE+llnXi9VPkbyy8uXmjmdU/b4U3efsXNC3+xCNypdZ2gfV/Is9u3Zqt/Ur9TpOfZfCukcdb3pcRFL/DzKgVhuMWqeW9US4x5qqGe9RPcQZXz9E0PDFOpPUUDz1dy8Cil5h5Jw4Jyxmn6/GtWj6BTnUmidRvsELxXD8VLW23mOMXLe+1NaP4AneylF5/rH0mA524qff/NSmWRCL9Vzvc08+l2qmd85vXqg6Om5Xj2JcgnlcWhclJyLoF9ZR2VO5x6sCy7/9fOE+lMRUBb663f5uT+d8UoocTrZms/pRpuVm1cUWnfWpVULE/tStE/0c3smeZRLeinxlLJwWi9VTkTl3hZ6acg9RtcZLW/qXP+Y23/1dkcd90iN9tuoPM09uid/+WrnfNDrJwaiZx8PId77Q+0m5qqTrVqt/NfPE+pPRYCSJ7eOEko2t+3ouIQa9SuLfiitM1THOjF6H1HaHbWH5JjaSyl/I7U5xSnc9blU599LOVtD1VlbZ/kJqzmjXsrRWa2WmPfOtVe9VGIZV8urFRLH0e3V0tnMv0eehJdqzqvy9OqBdYqyFkJ6Qo7BKewZFyenr7/znu13Zqhnyn/9PKH+VARUS/T1G9o/lZrR9dVzj4/unwN1hvKI4i3NujZHQE8/68zrpZafP2pnfY5P+XRe88OAoY8EVtnPSy0/u/iyWrl3bMLPE9rLmmugFOmUO61Y12tp8E8R84f6x98T9fGKilyC1xvN4ye0RsTvt7LQ2uL9eduUJ+oJbfp6nug8VPKU5b6GqE5LfGgr0PP0j4uTXy+sphrSD8357F9vbn/YiC+rLal+cK5Rz2OJd0qa611cF46SxCJtMrWXgguh7OlwPPT//DBGsDd3mmNzXgteCsaAl5oT+n9yhv9+DFBymzk27XrBS8EY8FJzQv/Pif4uEkA/V59m868XvBQAAABAHrwUAAAAQB68FAAAAEAevBQAAABAHrxULxP+KVzPH+jpX22Sy397Nl/ocrYcAADYHbxUAOV7w3qSj/qowl291CWsCV4KAOBp4KUC7O2l1sdn3YZnvv3PrO0NXgoA4Gk8xUs1v/NeOb1a37lxhp4zld+L7+ex2lW+OH9IV4TyVytX9VfzOP2vSLX6zeo6cXwBAACWh3ip9S25LEzk2RRa+TdWIJS8eq5z3JTq6El0i9JiM0O030JNiP3W2c8AAACP8FJvdvJSSv6Ql3Lu36IvbJY08+tqQydW64v9FvVS1R97yvFSAABQ8ggvZb03FHrDaIl7qdDbUk2Rm1f9hMd7qSXYnxN6qWY/46UAAKDk/l5KuRd2GohQW6HkiXLr1QO8VCjJhF4qpBMAAOCTB3kp55HJTl6q597fzJPwUtWusI5zapVXyzpWv230RPvTusZmu4pO/yyL1+v1er30+gAAMD/391KL8faZ/u5bNdW6pHq8aUJ5j0/RrzxHsdq1xKwLFZ2WnlB/iv1mtS42ERr3Zj/jpQAAoOQRXgrgzenv0+GlAABuBl4KnsWJXoqHUgAAtwQvBc/i9OdSAABwM/BSAAAAAHnwUgAAAAB58FIAAAAAefBSAAAAAHnO91Jfv33/+u37+mBOrqITAAAAjuSSXipqZYZYn7Fe6o9f/vbHL3+rFpYvWeUAAABwOnipQJIDvNTmwC8HAACA0znfSzl8upa1d1mXVD3NptCpbx1X220S+hrGT0tkGabNj341AAAAOJd5vZTjY6yX1parWV/0VSK6l3o/kXJM0vqplVUOAAAAM3ArL2VVOMBL6fgPnEqnZZUDAADADMzrpZbVe21luV+/x0s57fazeci0ean6qlUOAAAAMzC1l3rT741C9ZvladafyNt8NI+/lwIAALgiN/RS0edSziOonf72/JMhn+NLtAsAAAADmddL+R+ms97L8z/fV62/FM+oEu/xjfJS0e+XwksBAACcy7xeCkTwUgAAACeCl7owPJQCAAA4HbwUAAAAQB68FAAAAEAevBQAAABAHrwUAAAAQB68FAAAAECe873U+kue9v6/8PZglP4vv/365bdf1wdWhWP4bO7IFqfl6v1wdf2wLMu0I3juRnF6twwXMMlqHTisoTzRFqM698uPl+rlrl7q3ejxLa7j4KYdSUcqyTV9ov5JbgDXItRjc3bv6aoO/vXyAAFTLaVdvdTA/tzPS+ln4aV6OcxLncIT3NsMTVd5z4dQ/eOJ6oRP8FLXEnCMl5qKXa8OL3UE6//IpfwfXaz/5iVavhgGKNquQ//XafrPaazC6rFV32/dUVXWdESKj5qUFjd5rOTV8rXOTUKrvv+k0MnvX0UTy6OU7R6mX9dZ7WexXNG5aVGZD45+fX1ZOkP6nfFyRC7GaO6apzmfq4VinrIfxHGMXnLnPPdFWnnSIvVxsY5D89MvbyqvViununVFPePS1On3g76OFDFTe6ml9l/mra3M5thK5bRS1nGOlf8OecPYryavTgun3DrWp6m/wMqNTxQQbdFp1xG5Wc/+sdh0NL9zls+7prUdKCKH69d1RvvfmT/KeCnj61yCXy7O8x79isjofB6Sx7+u8t4TylNOnug6HXW9fhKnWmLcQw2JYxHVU22uuktEBftNKIXRcWnm79mXdCXzeqnmgV9eVlCaE4/FtMNpbvrvH/3p2DlHq69Gj52c1T16/aqiUNwvRHn6ZpG+WTr50yKdl0bpF3WG9nElz2Lfnq36Tf1Knc45n54eifk8JI8vuHNeKQdiucXAddrcS8VxDzXUs16ie0i/lwoNU6g/RQHNV3Pz6rZeqvkeXJmt+V5e2XR5bLV7GFXPZHmOUH2xRSfPQC/lv6p7qS81W4aXqpZM5aUUnesfS4OlT3W/0/rneW6+NXWu+63nept59LtUM79zevUgun4VhT3rNHTvj46LknMR9CvrKHofEQWX//p5Qv2pCCgL/fW7/NyfzngpSi7ppfTTnXLFMyk5j0RfP9V7jFNfaVHXYO0puRbLl6J7h1MudkvunhHaQDfZEve24/XrOqPlTZ3rH3v6PHrv6TnukRrtt1F5/Py5eeW82jkf9PqJgQjd+9Nr38/T1D9qPvvZqtWm8lLR9Rid5yWX9FJNWxPyUs5zqc25CTu1399LrSdByEtZ9cXpbuXJ7Sllu85eUG3aUR5dq1EvYukRz3LQu90/S1Si6w/prFZL3AOca6/O86hHad7me67F0R/V2cy/R57oPUaZV+Xp1YPmulaufcg8Vy6hPA6Ni5PT1y9OquZcde4jouDyXz9PdH9uCqiW6Os3tH+WXM9LLcbn7NIf4nM+rOekmuRvz9/RrOzXr96lNuHn8edoul2/mn9dTip/p3b0p/vBupAq/qbW7M/99Os6lUHxUynXa2nwTxHzR+e5JSk0XlGRS/B6o3n8hP4ias6lshVn6pblTXmiHiVJ2XQzT3QeKnnKcl9DVKclPrQV6Hn6x8XJrxdWU0X7YVIvdSITvrX3JrQgJ6FcPGcpmUTAQ1D2dDge+n9+GKMrgpfaMq2Xiv5yMwl4qWeCl5oT+n9yLrrPA16qwrkf1tuQe0o8FVNdwgwangBeak7o/zmZapOEBHgpAAAAgDx4KQAAAIA8eCkAAACAPHgpAAAAgDx4KejC+paOU8TswYTX0tPD+le25PLfnvWX+tBLAPDJ/b3UwM9HRL9v7QYfzWiK38NLndVd1XZHiRk4H+7qpS6xTPBSAFDyCC9VPe5MNbbynLzvGc06e7R7PHt7qfXxVNc4CTNre4OXAoCSR3sp6zvml2Kj1L9I3mprk6p6vG4op9Op75T7l2A5jE0qq39C/Z/o5/WJTZH+6aP62WrC+jHUrtOioyfRFaH81cpV/dU8uXFv9lvnOgIAEHmul3I8zcbfVE8PtWu9lNDT1Gm1a53riHRu535zipdS+kck1A9Knk1haLzE5OnxdUosPYluUVpsZoj2W3R99awXsZ8BABQe4aWsX1KrPzqbe2Kvt37PzulRdDpeyvnRrx/tk4O9VDR/qN2efnDypMdXLGnm19WGTqzWF/stur6qP45aRwAAOo/wUpuD949VuzPQS/mv6l4qobOa37d3jv49vJSl08rpS/UvWc/jF5Z+KNSfoXFpzh+/ZLiXWoL9OaGXiq4jAACRZ3kpZd88wEuFfFtCZ6iOdaJ4j+/xUlZ5up/F/EqqZv6E4RtSbr16gJcKJZnQS4V0AgDoPMhLlcehe2f5o97uprxq7wbqDOURxVuadW2OgCH9rOdvprIK0/3paFD6UHnVmVdKF3W27tex+k389cbKf8A6io7y6/V6vV56fQC4B4/zUuWPznMXa28V7yXV5KVv+CwpK+d0RvNY4p2SdQbFB1Qr+0r0frZSiVfabNeZD3p/luc28/jeK3TJzfFS8kf7U+w3q3WxidC4p9e7IuYTvBTAM7m/l7oKoS17cu50LXAtTp97eCmAB4KXmoXT7wGjiP4qDzCQE+ceD6UAHgteahau7j9y76kBjIXpBwDHg5cCAAAAyIOXAgAAAMiDlwIAAADIg5cCAAAAyHO+l/r67fvXb9/XB+vydcke7Vbz79HufheyE9a4RNl8gZZT4Rj4A/k3V++Hq+uHZeLPCpy7UZzeLcMFTLJa9xvWeb3U+9W9W3ck7dTQ+3hXs9jJXb3Uu9HjWzzro47+134eqSTX9In6J7kBXIvot+PupyTN6aoO/vXyAAFTLSW81C6t75q/bGh9mXips3iCe5uh6SriN7Bv6h9PVCd8gpe6loBjvNRU3NNL+TjPjcp7vFW+2IbAqumUJ9rd+KflZ6eSvq7o9VqX4OSx6P9aQv85jVVYPbbq+607qsqa+v9J0tOi+N+hVMvXOjcJrfr+k0Inv38VTSyPUrZ7mH5dZ7WfxXJF56ZFZT44+vX1ZekM6XfGyxG5GKO5a57mfK4WinnKfhDHMXrJnfPcF2nlSYvUx8U6Ds1Pv7ypPMr1vJTzXMeyAhsf4+f3y8uXRD1NL2Xl6VHYFOPrdxj7Fc/WvUS/x1Tr6y06eTa3iqaYUItOu47Iza3LPxabjuZ3zvJ517S2RUXkcP26zmj/O/NHGS9lfJ1L8MvFed6jXxEZnc9D8vjXVb3H63nKyRNdp6Ou10/iVEuMe6ghcSyieqrNVXcJXbbIJb1U9UfFBOzkpRQ9ipdS8igKq3WUYzHtcMSbaHOb0FeIX1PZ4KI3D2uPXr+qKBT3C1Fec5dp7nFREn14in5RZ2gfV/Is9u3Zqt/Ur9TpnPPp6ZGYz0Py+II755VyIJZbDFynzb1UHPdQQz3rJbqH4KWWZZCX8t8LE9t19FTfO2t6qbK8+R6c1bRyvf5zqcTbfAOpeibLc4Tqiy06eQZ6Kf9V3UtVbRleqloylZdSdK5/LA2WPtX9Tuuf5wd4qZ7rbeZprkc9v3N69SC6fhWFR3qp0LgoORdBv7KOoveRsdzfS/lvAoa8lF6o6+x8rlaWK55JyXkk+vqp3mOc+kqLugZrT8m1WL4U3Tuc8jm9VLkRK/e24/XrOqPlTZ3rH3v6PHrvmdBL6UkSeU70UkqLM3spJWezob29lHIfGcslvVTzb4yqGfqfS1mFzXLxeVXT1oS8lPNcStHvs9/fS60XVchLWfWbO4WfJ7enlO06e0G1aUd5aO/zpfo9ZnkIvZ+V5poZDtAf0lmtlrgHONdenedRj9K8zXd6KSWVorOZf488CS/VnFfl6dWD5rpWrn3IPFcuoTxOGxFl/kQnVXOuOveRsczrpZT3vEpfopc7780p5Y7UsnwRnktZeaIXK16vot9h7789f0ezsl+/epfahJ/H31PS7frV/OtyUvk7taM/3Q/WhVTxN7Vmf+6nX9epDIqfSrleS4N/ipg/Os8tSaHxiopcgtcbzeMn9BdRcy6VrThTtyxvyhP1KEnKppt5ovNQyVOW+xqiOi3xIf0+83opGMuEb+29GTihD0O/ZR7D6QIegrKnw/HQ//Nz7zHCSz2Fab3U2F8ODgMv9UzwUnNC/0/ORfd5HbzUg4i+kbcrezxlPZipLmEGDU8ALzUn9P+cTLVJ7gpeCgAAACAPXgoAAAAgD14KAAAAIA9eCgAAACDPo71U6A/ion86F/2Du73zw65Y32pzipg9mPBaenpY//6eXP7bs/4SIHoJAC8lfUueVag0MbxmOv8o+xX9frYbfJSjKX4PL3VWdw2c/9U8o+bDXb3UJZYJXgpgzaO9lMVdvVRnW7nTb7DPll/Ca9XZo93j2dtLrY+nusZJmFnbG7wUwJqbe6nq04L3QbkLbH5pLv1HdONwvo2m+mWPTVVifl+Jkr96vU7/KO2WjVaPl0g/OONi6Yw+F3G8VJnKnz/lsZIkNMp6P/iX09/PVhPWj6F2nRb99RLtilD+auWq/mqe3Lg3+61zHQFAk+d6KauCU7i53+cErAvLG4l+3KMk0W6uUb/ykH6wdFrt+v3p1Pc7vzmRlGPndIVQPyh5NoWh8RKTp8fXKbH0JLpFabGZIdpv0fXVs17EfgYAn6d4qZAtCN0XRQHNV517jJMwpOQdSkJFW7Rd/86n61F0Ol7K+dGvH+2Tg71UNH+o3Z5+cPKkx1csCS18X23oxGp9sd+i66v646h1BAAKj/BS5b+bCtWznMJOL1X1Fs4e59iRhJIyQzX/QC/lv6p7qYTOan7f3jn69/BSlk4rpy/Vv2Q9j19Y+qFQf4bGpTl//JLhXmoJ9ueEXiq6jgCgCV7qaC8V3Vuj95JmTd/DhbSF2vUlNdtK6AzVsU4U7/E9XsoqT/ezmF9J1cyfMHxDyq1XD/BSoSQTeqmQTgBQwEud5qUcT7M5VuxISImSf28vtfElTV+V0BnKI4q3NOvaHAFD+lnP30xlFab709Gg9KHyqjOvlC7qbN2vY/WbsxUo+Q9YR9FRBngaN/dSS2tP+VI8b9i82szjtGvl1wurqRT9zX5wukK5XrFRX3xZbUn1g3ONeh5LvFOyzqD4gGplX4nez1YqfYb47TrzIT0PHf3V8XUqK5fcHC8lf7Q/xX6zWhebCI17er0rYgCeyf29FFyLO23Zd7oWuBbMPYAjwUvBXNzmHsCv8nAizD2AI8FLwVxc/R6Qe08NYCxMP4AjwUsBAAAA5MFLAQAAAOTBSwEAAADkwUsBAAAA5JG81Ov1er1eh2sDAAAAmJ3AcynsFAAAAMAGvBQAAABAHrwUAAAAQB68FAAAAEAevBQAAABAnth3IvCBPgAAAIA1PJcCAAAAyIOXAgAAAMiDlwIAAADIg5cCAAAAyIOXAgAAAMjD/8cHAAAAkCf2nQgAAAAAsAYvBQAAAJAHLwUAAACQBy8FAAAAkAcvBQAAAJAHLwUAAACQBy8FAAAAkAcvBQAAAJDn00v9P+p7ecD6kyNPAAAAAElFTkSuQmCC" width="640" /></div>
<br />
In the UI you can see that period has not been opened.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghKIXZb5Bzm9NB6uHDRSOGDeCam7tRmhkfcK8jjZSiUjLRfoUl_j1bBYD-n9mEhWw4wCsUabLborpoJ4wmoR7D26qerzMyad3yCqgpvO6xqG38xTP5MvJ_zwmE0cOPU_eqVmW_9GWPszY/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="519" data-original-width="493" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghKIXZb5Bzm9NB6uHDRSOGDeCam7tRmhkfcK8jjZSiUjLRfoUl_j1bBYD-n9mEhWw4wCsUabLborpoJ4wmoR7D26qerzMyad3yCqgpvO6xqG38xTP5MvJ_zwmE0cOPU_eqVmW_9GWPszY/s1600/image018.png" /></a></div>
<br />
This leads me nicely on to the final REST resource which provides the ability to open and close periods.<br />
<br />
The URL format is:<br />
<br />
<b class="yellow">https://<cloud_instance>/HyperionPlanning/rest/v3/applications/<app_name>/journalPeriods/<period>/actions</b><br />
<br />
Once again this requires a POST method and parameters included the body of the request. The parameters must include scenario, year, period and action.<br />
<br />
The action can be either “Open” or “Close”.<br />
<br />
An example to open a period would be<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGhy7UlDPoLQaxwenuChUabDHzaxaZLi2TC5dyKqcciQATNTvcxOLzGrHqh_lBnZuBt5DWCrcyQVF_0eK_M_PUn1AIZhiNAJXkt8ha9-bd0CzDXGzXR0ebHvEL4jBSSkZFb0tjy0_g2kA/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="195" data-original-width="686" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGhy7UlDPoLQaxwenuChUabDHzaxaZLi2TC5dyKqcciQATNTvcxOLzGrHqh_lBnZuBt5DWCrcyQVF_0eK_M_PUn1AIZhiNAJXkt8ha9-bd0CzDXGzXR0ebHvEL4jBSSkZFb0tjy0_g2kA/s1600/image019.png" /></a></div>
<br />
Which provides a response to indicate the period is now open.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjitViUmKXlgIUJpRJB75bOFdHM-ftPdHdRSPdtQr5QosWOJd-dB7sh_D-UEKK5SElik2dcic4VNyrYuUsZ6BDfPP_MvaTPrKbcEMJZpI0bzCpkyx5dJNUWixc_8CkQEOvtNrGFwl7fsFc/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="72" data-original-width="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjitViUmKXlgIUJpRJB75bOFdHM-ftPdHdRSPdtQr5QosWOJd-dB7sh_D-UEKK5SElik2dcic4VNyrYuUsZ6BDfPP_MvaTPrKbcEMJZpI0bzCpkyx5dJNUWixc_8CkQEOvtNrGFwl7fsFc/s1600/image020.png" /></a></div>
<br />
This can be confirmed in the UI.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEoUXRI4_fW2DyLaPbOSEBD5Bb8pfXM4MEgLNQdo3BmhxL5l4utHXPRt0VMyzwqXVx-CgV-L5AukvwApQyEPlDgEZ_EZt2TrTSgGo9Fm27SfiGuLulT3Yzcw_SUgA46HfAsCwM2GrjtL8/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="518" data-original-width="467" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEoUXRI4_fW2DyLaPbOSEBD5Bb8pfXM4MEgLNQdo3BmhxL5l4utHXPRt0VMyzwqXVx-CgV-L5AukvwApQyEPlDgEZ_EZt2TrTSgGo9Fm27SfiGuLulT3Yzcw_SUgA46HfAsCwM2GrjtL8/s1600/image021.png" /></a></div>
<br />
An example to close a period using a modified version of the previous script would be<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<img alt="" height="426" src="data:image/png;base64,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" width="640" /></div>
<br />
The period will now be closed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQdnZlmu9xDe29CWCoKIkJNCIAXuxGy9FzYFs5HgOMrvJqfdS1pW-4rs3dCGs-vThv8wJiiD3a6qtMQqBtXAzCPtVQ3Jgc_F99dazGaaiEHxInK4y2J64eLLwuCOvEWWncqEoJPT9l2oo/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="207" data-original-width="481" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQdnZlmu9xDe29CWCoKIkJNCIAXuxGy9FzYFs5HgOMrvJqfdS1pW-4rs3dCGs-vThv8wJiiD3a6qtMQqBtXAzCPtVQ3Jgc_F99dazGaaiEHxInK4y2J64eLLwuCOvEWWncqEoJPT9l2oo/s1600/image023.png" /></a></div>
<br />
Please note that if you try and close a period which has journals with a status of “Submitted” or “Approved”, then it will look like the period has been closed as the same response will be returned but it will not have been closed.<br />
<br />
If you try this in the UI you will be presented with a confirmation message.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPbgBFI13cs-1objS9dLFuGbUtDhPiKt4O2GbrhPo173kjkNvd2pIYSNPaRGTo5vJvdholx68ZwFu31wId-aw9wwXsECkVqzl0dkzP4cFAsWqN3EbBsi5DMW0IHHHK4HgTJzcIx3IWXsw/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="115" data-original-width="462" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPbgBFI13cs-1objS9dLFuGbUtDhPiKt4O2GbrhPo173kjkNvd2pIYSNPaRGTo5vJvdholx68ZwFu31wId-aw9wwXsECkVqzl0dkzP4cFAsWqN3EbBsi5DMW0IHHHK4HgTJzcIx3IWXsw/s1600/image024.png" /></a></div>
<br />
I think that about covers the current journal REST API functionality. Until next time…</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-57126252992417888712019-07-22T00:59:00.000-07:002019-07-22T00:59:22.234-07:00EPM Cloud - Groovy and Web services continued<div dir="ltr" style="text-align: left;" trbidi="on">
In my last <a href="https://john-goodwin.blogspot.com/2019/07/epm-cloud-recent-web-service-and-groovy.html"><b>post</b></a> I went through the recent addition to EPM Enterprise Planning Cloud, which allows Groovy to interact with external web services. In the post I concentrated on connecting to the same Cloud instance to use the available REST resources.<br />
<br />
With the Groovy functionality, it is possible to take advantage of any of the growing list of EPM Cloud REST resources. For example, you could put together a list of common admin tasks which then could be accessed from a single location, like a form or running rules directly. I did put together a demo where a selection of admin tasks could be run from a menu attached to a form. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLXRzNv0dPgAp_RWLAfkt-7a6iNZ_TuX1iqMmwr08Ww1t8bl5Yro8hZzPkKeWBUgqM7_KHFmZVdJx70d20UkaWABm2iqfT0xmIHMPNRpQ3N8ljbrTFRm5a2XN9SjP7YfFUpNtuRqjRNRw/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="388" data-original-width="603" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLXRzNv0dPgAp_RWLAfkt-7a6iNZ_TuX1iqMmwr08Ww1t8bl5Yro8hZzPkKeWBUgqM7_KHFmZVdJx70d20UkaWABm2iqfT0xmIHMPNRpQ3N8ljbrTFRm5a2XN9SjP7YfFUpNtuRqjRNRw/s1600/image001.png" /></a></div>
<br />
The inclusion of Calc Manager variables further enhances the functionality in some of the tasks.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMxf4TcL82vyKv8hdGKvFaYQjonGzcpl0HBq9sIHx4S6uyPHwXfg4cGGWueTD6E2gEfrKKN9m7pS8xQDlHBXcuBmfCZyGCmQoFDtTaKJYzC5YPLdLxzY1bcFWIyNLbO1viAopWoERvFSw/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="205" data-original-width="361" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMxf4TcL82vyKv8hdGKvFaYQjonGzcpl0HBq9sIHx4S6uyPHwXfg4cGGWueTD6E2gEfrKKN9m7pS8xQDlHBXcuBmfCZyGCmQoFDtTaKJYzC5YPLdLxzY1bcFWIyNLbO1viAopWoERvFSw/s1600/image002.png" /></a></div>
<br />
You could argue that it is possible to do this all from within the UI or with scripting and EPM Automate. I agree, it is just there as an example to make life easier and maybe spark off some ideas.<br />
<br />
I am not going to cover this in any more detail in this post as my last blog provided enough information to get started using the Groovy functionality, add this to all the posts I have written about REST API resources in EPM Cloud and you should be well on your way. If you do require assistance though, then please feel free to get in touch.<br />
<br />
The idea of this post is to demonstrate how it is possible to connect to an external web service and consume data that can possibly enhance a planning process.<br />
<br />
As usual I want to try and keep things as simple as possible, so I have come up with an example of extracting exchange rate data and then pushing this to planning. There are lots of sites available that offer exchange rate data using a REST API. There are free and paid options available, to get all the features they mostly have to be paid for, which you would probably choose if you wanted to load reliable exchange rate data on a regular basis. I did find a good site which was full of features, but the free option only allowed connection over HTTP and it looks like if you are connecting to an external web service from an EPM Cloud instance it must be over HTTPS.<br />
<br />
Anyway, I did find a site that provided enough detail to put this example together.<br />
<br />
The objective is to extract exchange rates for the input currencies for a planning application, except for the base currency which is GBP. The rates will be extracted against the last day of a month which will be driven by month and year substitution variables. So, if I take the following form I want to populate the ending rates for June.<br />
<br />
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArkAAAExCAIAAAD3Ny3LAAAgAElEQVR4nO2dWXMUR97u+7Po+5xP4ALDeLDHM2dekFqsxhhDCyGBZEti33eEQAgt7AyLNlBXX3PrC0c4HNhBxCFOxMT7HiL6XKS6ptWVlfWvpbuyqn+/eIKQsrOyMh9lZT5dvVD6ou8wQgghK9TbRjl9CMVUKftro++w01fZVA6R01fxHxh6lOHYoD5IOiw8Y6Q2oxri1VTK/I+IEEokIgKyWKUveg85vYec3kNf9P4oUaPyIafvsLdRxZbaVttXX3qguNnYHejAGBFCuVU71vfMB4WKo5Kz46Cz/Qdn+wFn+/eNfw064Gw/4Gz/wdlx0EkcF7xNceeRidFz109fmzp9berMRqmSn87f3Dt8StX3jtqy88iJy5NndEc1Hzt6/kbv4TFTT8oVp69yYPTs5MzCyNnrXklQhzf3D+w/fmbswk3tqU9fnTpzberYmWtOX+Xw+MWz1++euDy5ddegyJPGef9xYGTw5OWTV+5oB3X66tT5m/d2HBpzypXK+MXhU1e/+e5Y5jMJIRRL3RYRsn+KjGKoNDRx8d7Mo7mFZ3Ldm3k0NHHR2XHwi95DsWeM2nd7D4/NLDytyXj07OW+Y6edvsqm8oDTV/nr3iHXdSUHVqvu6atTTp8mBKhulAfGvcpDp644uif3quTgT+ef/et16BmPnrzi9FXuzj6q1WpV113fywX3NrbuGjx/897q23fm9pdWVv+y+2h5YPzy5Myl2/cHT1zO+vpHCMVQugt6MUaBbFTp3szD/+SA+Y2xYF5XuPBsbv7Zg7knSbKC2nf3Dp9q2RRdHS0VjkxcUo18tefo4vJqtequVavaA71j1Q8/nb/p+EKA+nX28XPXddfWqtWqu7Syum3vkFPesLWraqPnrrfs2S2nW6tWa7XanQeP1FE37s1Vq+7i8srX+4bDbSlXvtpzdO7xc0P7VdetVt1q1f1+5KzTV9k3fPrklcnxi7dUNEEI5UcpruO56zDKn0pDExdn5p5o7h/4I0JDM3NPjp24lOi+Qrny7f7jyytv1S4+9/h5ZfxiX2V8x+Exv3or4wd/On937rF6jl513f6BCaevsm3v0NLKaq1Wu7/wdMehsd6AY0fOXn/7bq3quqtv323buGerBFAZv6h25bfv1qpVt1arXbx132lKFeqH746dVrcoarXa7fsLB0bO9rZ0+NDYjkNjfZXxv+w+qg65cW+uVqstr7z9OvS+Qrni9FVu319QPVlcXh2/eKv/yETriA6N9R4e2/7jT+qQr/YMDZ26Onou7EUWhJBdSmsFt7+HqCAqOTsObuo9+NXOw3Jt6j2Y/P0Klydn1FPna3dnhe/mO3F5Uh0y++iZ01f5696hxeXVWq126/6C+cDxS7dVKPnxp/NO4yUMp6/ilCtbdw++erOkbgnsGTr59F+v1c/ru295vdrm/gH1kOu66+9pMEqd4ub0vCQrNGcR13VfLS7/8+BoWPv6nxFC1iuVtdvOXqHCqvRF74/OjoPOjoPOjh9kOujsOPhF749JPgrx9b7hpZVV13WfvXy9uX/A6ats7h8wfkRwQO2I9xeeqA17+6GfN/cPLK+8rdVqkzMPN5VVC63a3D+wuX+g/8iE2obVNq82ctXg6atTKn+oewkDE5fUrzMPnzqNDy46fZV9w+sb+c3p+UZvAzvsNI6KlBUmZx66rvtubS3OTQLiAkL5UCoLt1WdQV2hjZ+D+K8Drdq+8Wf1UYgdST8H8cPoObUlj5674TQ/0Q/WpvKAU64cGDmr9uxjp685fZXl1fWsYD528ORldV9hYOKS15TTV/nnwdF3a2tV111cXtm2d0ht/3OPn6vKh8YuOH0VFWVOXb2jMsrOwRNeFAjprTgrOH2VLbsGXy0uu6774tWbfcdO7z9+5rvGv83ySvoq4wmXCf/7JZsfSm8xakuDafXBYEK7h9Ymw4PGktYpDO0EPaTKzR2wYYZ0RMmXbEu6gbpOpeETl6YfPJqbb3on43zIuxbuP3g8nOz9CqPnrqv9eM/QKUd4F71ccfoq/zgw8vbdmuu6Z6/fdfoqK+tZYcHpq2zbN/zlziNbdh7ZsmvQ09Zdg7uPnny1uKzeFfi/fxhVTakz3nnwSK2qw6evOo1YsGvwhIoFL18vbd01qHb9G/fm3EakkAwwQlYoV5y+yt8PjLxbW6s13oYZSmX8otS3APlXZ6+kkAt3UFaQVIvabFsPlLfZjjgSOyugxIt15h1AXa2Nn4MI+iiETwk/BzF67obaFHcfPelEyQp/PzCy+vadlxWa7yuMnr+xvPL25eulV2+WXi0ue/I+EHFlcka1o063//gZtTc/fv5SvVShXrNw+iq3pufVlnzyyqQ6+83pedd13yyt/LU9WeEfjawgYWr2UWBrYgmzgvZ5qvdMMVK5oUJLoWHXkZ9U0qbQhCBPopY3N66tnO5YYvxN5eNN4qf57FH/yjlRkmU6w1OnKvXhMpRPlYYmLq1/DiL4gw++z0E8Tvj9CofHLqhrfujUVUf6GkTFKVf2Dp9Se7968WKl+TWIcuXMtalaAPfmHm/dNajGvKnpvYq1xr2NZm3bO7S4vKo+GfHPg6NOuXLuxj3XdatVt/fw2KY2vAaxdffgm6UV13Vfvlk6duba6LnrI2f1Gj13/dvvj5tbk0iyrAftH0ELvaFcWMFfJ6jD7WhTOHZts5JyQzvtGEvscUU9dSQ/Q2dIpL9yTpRVUCAEoNRUcnYc3LTjh2ifg0j8fgXv9sDC0xfO+lsIBwy9VLu703h+X6vV+o9MNL23ccFpbM9jF27WarW1alW9C2Fy5uHkzMLgictOef3UjW9KuKFWn+t35w6PXbg393hyZmFy5uHkzMM7Dx7evr/wZmml6rq1xpN47w0WF29NO413Yho6rHrrfWbym++OOY23PepGN+D0Vabnn7iuu/r23d/2C76EsRzH9mbJt8nQCvLyqAdK+p+kzZqPoPqp7LVB5WmNpR12Rf3TBHlonl3tmCHWKJOgQCZAKSubz0E4je8SqDXd5w+Veoui67pPXrzaVK58tWf9+xXUfYVNjU33+NnrtVqtWnVXVt8eHruwoZFyxSlXvvnu2PLq26rrvltb+3b/8X8cGPHvGQr1bQp7h09t7h94vbSsPk75w+g5YYfVfYWllVXJKxeHGvdaHj17KXxXRBJF2iZb6mSYFZJ3xlzYjkyg9VmyjyYcS1vHFXoi889BUy6tblijnKeErPcnZI9K6ylh/T96kEklBjWh4554+6Gf1bP/Wq12c3p+1+CJv+0//vV3x/z65rtjfZXxCzenXdetVqu1Wu37kbNOubJt3/DSciMrNO5MbO4fcMqVoyeveOvR6PkbXrmqc21qVj10+tqU6szouRuLy6uvF5ffLK0oLS6vqk91qg92OuX1j1NWq9VqtXr62tSOQ2Pa3ip9+/2IU27cV1h9u+Pw2Nf7hr8Jqr9v+G/7j3+1Z2j20TPVsScvXh0au/D3AyNB9b/+7ti2fcNJ/vC1Wk3ykPbnlmPl5VEPlHQsSZv+wuRjNJd3cixtHVfouSL1uR3dyF5x93vhf5+LUCdVGpq4MP3g0ez80wdzTx7MPXkw9/TB3NPZ+aez80+8wtm5pw/mnszOP52dezI792R65tHwxEWn98fYwVPt2d6XGSiWVlYXl1eXdKo2fTpg4tJt1chXe4beLK1Uq+7t+wtem04jFlTGL6oveazVaicuT3qn7h+YWKtWq1X31eLyX/YcVV/D4JQr2/YNN+vrfcPb9g3fnllQL3mMnL3ulCsXbk173ahWq9revllaWVpZnX383ClXbk3PV6vuu7U1w9AWl1cXl1eWV9/2Hh7/et/wv14veqdYWX3rP2pxefXN0srq23fqhRXzazcGSbJC6vtlinshWUHyB03+JyArxBdBARVIpcm7s9MzD5XuN35QP//n1wf/KVe6e3/B2RE/Kzjlyvr3JYyeff7qTU3Gm6WVoVNXnEYa+OveIfX/L0zPP/EaVFIVfhg9t7ZWVcfenJ7/y+6jX+488uzl+v/8dESw1/7z4KhKG67r/tePPznlyuj5G+qFDzPqzod3AyOUm9Pz6ozffn/87uzj0PpP//X6y51HYgcF82pb0y3Q6rzaY+XlkgObTxTU4aidkbQZY+xRyw3tJx+L4fAkpxCeOraxMbqnbd86ERRQsVQ68vPZ23dm7tydnVK616S7s1N3Z+/cnb3TKLlzb/bO3dnbUzNHxs4lua+gpLa6rbsGD49fvHT7/u37C+uaaahRcnXqwdCpK1/vG/aOcsqVrbsHr03NTs48/PnCzeZyJRUXvjt+ZnLm4c3p+Xtzjw+Mntv+4893Hjy8PbNw8dZ9746C1xm/nHJl5Nx19YbHgYlLqua33x8/fubatalZf4dv3Z+/PbNw4sr6bYy/Hxi5OvXg9szCreZBzbQO8Ob0/N/2H/f67JQru4+ePHX1zq37835D1CkaXwnV3qzgNLaH2sZniqlnhaAT+Tsm74ykzZqP0NMlKY9trNCfoHNJ+hN1XIY+aB8NalDYPcNwbBRBARVO6nMQEf8/CPVeyGTvV1CKuttFqp9kKw1qwdvO26TkfS6AbN8Jsh5CAfwpuAgKqHAqOX2Hnb5DTm8U9R1KJSh4Ul+FFCrtzq0t9+T9lxDeHt/ya6i8FryzNLcZJHlN7RBCDyxYpMjZs8aOD6EA/nSRCAqoiCplf2khFHxjPEdq6xAK4E9XiKCACiqyAkIIpSSCAiqoomaFw61q0xeEIYRQvtQbTZv6EMqN1rNCDQAAAEDHf7JCHQAAAMAHWQEAAABMkBUAAADAREm9xZGsAAAAAFpK6suMyQoAAACghawAAAAAJsgKAAAAYIKsAAAAACbICgAAAGCCrAAAAAAmyAoAAABggqwAAAAAJsgKAAAAYEJlBb63EQAAAPSQFQAAAMAEWQEAAABMkBUAAADARGlT/8CmfrICAAAA6Clt6ue+AgAAAARCVgAAAAATZAUAAAAwQVYAAAAAE2QFAAAAMEFWAAAAABMxs8L/2nuhWW3qXAcI7bx5jJk70PKH0KpNZ0y32Qxpk3tFsggAupzIWaFje1IHkHTbMEAbxk5WSE47DLTQoj/+/PPFyzdnL10d/mli+KeJc5euvnj55o8//8y6XwCQA6JlhQ5vS21F3ufQrNCeDoogKyQndQ9ts+jz589PX7wcPP6zVo+fvfif//l/WfcRAKwmQlaw/Bl2VCJ12F/ZkvF2vhuWDDxFDCMqQFb4/Pnz7anpoKCgdOvOvc+fP2fdUwCwlzhZwfBoaOWW8uZfJT/725GfQts94bIeKSuENms+e+jYzR2LVDNG+NN2T2JF6Nkj+Rav8+Zm5Q8ZxhU6tRJOj6g8eR54R6FZT1+8THIWACg20qwQddmKsZEbNqHQQ8yLtaSRSCOSbyGGDTJS/6P6LKwpdy+0QlojjdRU1M5H9TDGuBJ2L94Qgvjwx59HR8ZaYoF6qKXw6MjYhz947wIA6Clt7h/YbEdW0FaTt2A+1rCmxxhRwr7F88Tcq0j7kMGBdO2NMVJzYaRqQhtjeCgcV9Rqkr9IJJ6/fO2/haAe8pc/f/k6xikAoBuwJSvEOzxJmzGWYMMWIuybudkYHYu0z2nrRx1C1D9Z8qaSVIvUK6GH8caVxNvYnL10VfIChNLZS1fTOi8AFAyyQrR12XBUjL1KuyfZlhUkw0x3pPZkBcNRUccVaeqmlRiGRse1NxXquvsKQ6Pjyc8IAIWktLn/yObyQO6ygmFlzzwrhO468foftT+hh0Td7811UhxpwmpRd31/ndCjYoxL2L2onTfjzwqG1yCOj52MfSIAKDZkhU5nhdAOR+pYjFEYNqF4O2tQeeyRJqwWdbuV9FxbP9K45N2L2n8D2tcg1EP+8vOXr8U7CwAUHmlWqMtuModWjrcNCPuQyqnNSLaQqId3MisId6kYZ4y0XyZvSl4tlNANW15ZXidSx2LHBd7bCACpECcrGFbtNm0D5vJObi1Rs0KKO2jU/pjrp7sRpjvS9p3R7ImkPN2skKR7Ej788UfLZyabH/V9ZvKPGKcAgG4gQlaoh91HbV7OhIVRs4L/IcNZoh4YyQHJo5K+yT0xnzHSH8VwovbZm+SvH3WCmdsPPZ38FEnGJfQ23kT1EH4X05PnfBcTAAQSLSvUjZuTvGaM3SK02dBjg04daSE215c4E9uTSGcUNmve+ZLYm2SkkZqK1Hmzh8KH5OOK0b14QzDAdzwDQHIiZ4V62H1sQ8168IYddKCkZeGx5rVbMG5RxyTNmnfNSF0yb6KhVod6lcTe2CMV9ipG57UYKkt2dG0jEgMl0yPS5AyC/zsKABISJysA2EBaW2mX8OGPP5+/fH324pWh0fHjP584f/na85eveY8CAEggK4DtCJ/ZAwBAmyArgO1IXmEBAID2QVaAfEBQAADIitLmnUc295MVAAAAQA9ZAQAAAEyQFQAAAMAEWQEAAABMkBUAAADABFkBAAAATJAVAAAAwARZAQAAAEyQFQAAAMAEWQEAAABMkBUAAADABFkBAAAATJAVAAAAwETpy51HviQrAAAAQADhWeH9L78hhBBCqGslygrtiSkAAACQA8gKerpz1AAAAH5KX+4c/LL/CFmhhe4cNQAAgB+ygp7uHDUAAIAfsoKe7hw1AACAH7KCnu4cNQAAgB+ygp7uHDUAAIAfsoKe7hw1AACAH7KCnu4cNQAAgB+ygp7uHDUAAICfaFmhVCq1Hu8rKQZkBQAAAEXk+wrN4aCoQaFOVgAAAGhQ+nLX4Jc7k2aFUoPmh5pL1A85yhZkBQAAAEXkrFD3bfz+9KAtyVFQqJMVAAAAGsTJCnVfGmjGX1jP1R0FBVkBAABAkU5WCH2UrAAAAJBTUs4K/pcnyAoAAAC5JoWsUA9+b2Od+woAAAA5J2ZWKDzdOWoAAAA/ZAU93TlqAAAAP2QFPd05agAAAD9kBT3dOWoAAAA/ZAU93TlqAAAAP6Utuwa3kBV8dOeoAQAA/JAV9HTnqAEAAPxEzgolH155a9O+72AIaifRCNoDWQEAAEARJysEthX8xc/+b2oStpkVZAUAAABFJ7JC0H8+KWkzK8gKAAAAijSzQt34jc5kBQAAgDxS2rLr6Jadg7Hfr9DaXPSsYOdbFsgKAAAAijhZIaTFgAqG/26KrAAAAGAtmWWFSG12HrICAACAgqygh6wAAACgyCYrGN7naAlkBQAAAIUV71ewELICAACAInJW6BK6c9QAAAB+yAp6unPUAAAAfsgKerpz1AAAAH7ICnq6c9QAAAB+yAp6unPUAAAAfkpbdh/dsiskKyCEEEKoaxWeFQAAAKCbISsAAACACbICAAAAmCArAAAAgAmyAgAAAJjgcxAIIYQQMkmUFf7935+RUK9fv/70f/+NEEIIFUZkBbICQgghZBJZgayAEEIImVTauvvoVrICWQEhhBAKEFmBrIAQQgiZRFYgKyCEEEImlVzXdV2XrEBWQAghhLQiK5AVEEKosCptRJX46xgO8dc3H556n+XtezXT7xJZgayAEEJFlXbXbC4MjQ5BjQgfTavPbT0wvGWyAlkBIYSKqtSzQstzffOvhsKoffbKg9r/pLuvID8kpEtkBbICQggVVaH7ruQQ7b39oI1ZUhi7z4aTBj0qPCSkS2QFsgJCCBVVhlf9zVty6NsFYmSFGH3Wbvbyk6YWX8gKZAWEECqqEt5X0CaMoC08KGEYwkrUEOP/mayQS5EVEELIHsVLA5LK5o1Z3hl5NbJCcURWQAghe9SmrBB0X0Fb09wZYZ8jtS9/lKxAVkAIoW6X5A6/IRz4S7z9NSg3+DfgoNcaDH3WvpxhuMMRVNN8iHaw+i6RFcgKCCGEulNkBbICQggh1Cr/fYjwQ8gKZAWEEELIILICWQEhhBAyiaxAVkAIIYRMIiuQFRBCCCGTyApkBYQQQsgksgJZASGEEDKJrEBWQAghhEwiK5AVEEIIIZPICmQFhBBCyCSyAlkBIYQQMomsQFZACCGETCIrkBUQQgghk8gKZAWEEELIJLICWQEhhBAyiaxAVkAIIYRMIiuQFRBCCCGTyApkBYQQQsgksgJZASGEEDKJrEBWQAghhEwiK5AVEEIIIZPICmQFhBBCyCSyAlkBIYQQMomsQFZACCGETCIrkBUQQgghk8gKZAWEEELIJLICWQEhhBAyiayQflYAAAAoEmSFlPX+l98yD4C5EEbhFV7hVV6EV2QFskI2wii8wiu8yovwiqxAVshGGIVXeIVXeRFekRXICtkIo/AKr/AqL8IrsgJZIRthFF7hFV7lRXhFViArZCOMwiu8wqu8CK/ICmSFbIRReIVXeJUX4RVZId9ZoVQqZT6H4qkzRpU2klMnOzap/CbYbEu2XuXXog57VYBJ1TGvbHaJrEBWyEZZrVN5dLKTWaHZh9CAZaEyuQBz51InvSrApOqYVy2+ZT7qDf0hKxQmK/ifPXsLmW3T7lPWWQGvDLaYf9WalrlFnfcqyAHtRLLQqI55FWlS+U2zRBlmBa0nnV+vyAoFyQpB80lbwQZlmBXwymyX/1+JaZbIhqzgN81CozrmVaRJRVbwD9+S9YqsUJCsIJ9klqjz71fQWoFXLXZp/9VWs9CoTnr1KcpEstCojnkVb1LZ5piFWcFf2N7+kBUKkxX8+yL7X9CqhFcGu4KWdbNplqjDWUE4kSw0qmNexZtUtjlGViAr5C8rxHs2053XnvkZTKirlsiGrJCXLZD7CrZ5FW9S2eZY59cr29Z2skLRsgLPlYO8CjXQ2pW985+ZNP9grVGZeNVSovXHQqM65lXUSWWnXWQFskL+ssKnpht3/sJs55NcfA7CNq8+GVfzT2ETzBLZkBU+5WHz65hXUSeVnXZ1+LNI2rU92+eBZIVcZoUCCKPwqpBeWbjPWetVjjy01quOiaxAVshGGIVXhfTKwn3OWq9yZKCdXnVSZAWyQjbCKLzCK7zKi/CKrEBWyEYYhVd4hVd5EV6RFcgK2Qij8Aqv8CovwiuyAlkhG2EUXuEVXuVFeEVWICtkI4zCK7zCq7wIr8gKZIVshFF4hVd4lRfhFVkhZb0GAAAoFqKsgBBCCKGulSgrZH73Iy/69fePQTZCCx8+fsq6C7kBr+TglRy8koNXZIU09f6X3zr5x8s1eCUHr+TglRy8koNXZAWyQjbglRy8koNXcvBKDl6RFcgK2YBXcvBKDl7JwSs5eEVWICtkA17JwSs5eCUHr+TgVaKsoP2ftr2HtDWD6hdDVs2nnp6eoPJm/OXaymkd7pFrr7RHtcNARa69kk+MhIWKXHulPapLvKrHsivUvXriC1Nhm1edJ35WaN7y/clAUqF4smc+Ba0OLXXMPwdVSOXw/HqlPaodBnrk1yu5LQkLPfLrlfaoLvGqHsuuoAQQdEiMC9PDKq8yIWZW8G/2/mRgyApFjQuWzCc112OsUy3lMa6ooHJr16nYXhnWdHkLwsPz7lVLeejA5fufn7x7JZlXkSoYCi3xqh7LLv8h2kYSXpge9niVFallBf+jZIVsMV8khkcla7rkcHNhrr0yrFPCCKX9NejwXHvlfyiVrFBIr4TzqnhZQRFjaoXu9AkvTA/bvOo86WcFbUQgK3SeeGu6cEmS31TonjXd8MRXsqIZDs+1V/Xge8XyZ9Ut/hTVK+G8MmcFeXqwyqt627JCkgvTwzavOk9bsoL/bYxkhc5jSVYIKs+vV6FLdrysYKicX6+0D0V6Wuyt9cLD8+uVfF6RFQyFka4ssoKc9N+vwH0FS5Cs2uZy+V4Y44z59apnI/5qobnKXFIkr7SPRsoKUQ/Pr1fyeRU1xOdl/0u+ZPlLEl6YHrZ51XlS/hxEUCbgcxCdJ+qFJ9/AEh6uyLVX/ofwSvuQfKtLWOiRX6+0D0VyIFJQqFvmVb2zWSHvXnWelL9fwZAV+H6FDhP1Xpz/OU1zuaHlqIcr8uuV4aig4fvLta0V0qugKZR6oSLXXgUdJXFAO9mCZqDCKq/qsezyl2tLklyYCtu86jx8b2Nhs4Ll4JUcvJKDV3LwSg5ekRXICtmAV3LwSg5eycErOXhFViArZANeycErOXglB6/k4BVZgayQDXglB6/k4JUcvJKDV2QFskI24JUcvJKDV3LwSg5ekRXICtmAV3LwSg5eycErOXhFViArZANeycErOXglB6/k4BVZgayQDXglB6/k4JUcvJKDV2QFskI24JUcvJKDV3LwSg5ekRXICtmAV3LwSg5eycErOXglygq//v7x/S+/IYk+fPyUeR/yIrzCK7zCq7yoy73ivkKa+vX3j+2JdAXkw8dPWXchN+CVHLySg1dy8IqskKbed/19Kjl4JQev5OCVHLySg1dkBbJCNuCVHLySg1dy8EoOXpEVyArZgFdy8EoOXsnBKzl4RVYgK2QDXsnBKzl4JQev5OBVzKxQ8uGV+2uaDymSrJpPPT09MR5tKe9pwny4tprhXLn2KsiT1AsVeMW8ilfYs5GW03WbV9pGQg9XWOVVJsTPCtrN0pwVhI3kV/bMp6AZb35Ue5lFraa9/PyN5Ncr7WDbUeiBV3XmVbIp1LVe1QPG7m82L9dgVpAVCpgV1EQ3XCFBjxouHvPh+V3TY3hlsCX0RHXBMuenwF6ZK0TaPxQF80pbQV7T3Hh+vfJXqEe/ssgKkSArFDArKMwLStBq0nLBeJgPN19yNq9TikheeYPSjtS85NWNK5rl+58iLa8MrYXa0j3zSltfXtPcjfx6pX0o6MrSLmLa5c5wOqu8ygTer0BW2FAivHiCfg3aQf0dyK9XzWPUDlwSrfxGGQ4vnleG1iS2dM+80laONNkM3civV0Hl2ivL8HPo4R5WeZUJ2dxXKGRQyHVWMCw95vrNJS2Xn7nNAnhVDxhj6EIf9XC80h7eDfMq9FGyQujP/sLQqWj5NZgJmb0GUci4YNV8ivGcxhCrQzOlwAQAAAigSURBVLOC/yFzm7n2yv+zYaFJvn3iVb1b51XCmuY+5NcrbWGkrOCfQjm6BjMh5azwKfj+AVmhw7Q1p8d+SuSRX68i7X/CJ4g5Wqcy98rck4J5pW1EXtPch/x6FVoivLLkTlrlVSak/H6FlkfN4aB4ccGq+STf3c3VtM/etCXamkHnyrVX2sH6C7VPX+SHe+BV184ruS2GmkHdy69XaV1ZOb0GM4HvbSxsVrAcvJKDV3LwSg5eycErsgJZIRvwSg5eycErOXglB6/ICmSFbMArOXglB6/k4JUcvCIrkBWyAa/k4JUcvJKDV3LwiqxAVsgGvJKDV3LwSg5eycErsgJZIRvwSg5eycErOXglB6/ICmSFbMArOXglB6/k4JUcvCIrkBWyAa/k4JUcvJKDV3LwiqxAVsgGvJKDV3LwSg5eycErsgJZIRvwSg5eycErOXglB69EWeHX3z++/+U3JNGHj58y70NehFd4hVd4lRd1uVfcV0hTv/7+sT2RroB8+Pgp6y7kBrySg1dy8EoOXpEV0tT7rr9PJQev5OCVHLySg1dy8IqsQFbIBrySg1dy8EoOXsnBK7ICWSEb8EoOXsnBKzl4JQevyApkhWzAKzl4JQev5OCVHLyKnxVKTWgLmx9qrhNUUgBlOJ96enpCS5ofUmgLm8vNNeMVKrLySmtUUCeDHhV61bMRYZv+Pli1TqVrYIqFimLMq3iN45XQwJ6NSLph1TWYCTGzQstOb8gE5voFU4bXnvZiCKoc+rPh0YSFHpl4pTVK+7P5UXlNYTsWeqUlFQOZV5HGJWwcr+QGhp7aEq+sIoOsUNSgkFVWUNPaP9EjXR7aykEtCA83N9V5r8y2mB+qJ/NKviRpCy1Zp2IYGGMDCy00W12MedVSGGlzDW3TIxdeJZxCMRZDbX1LrsEMSScryMsLHBSyygoK8zUWVN58RXm0PCpJ5fKaHvbc/5Q8VE/gVeyF3sOqdcqSrBA02XI9r4IOKUxWCOqJ4aFUplDUOvZ4ZQ8dfb9CsYNCXrJCvWm301Zu2RQl7ctreti2TgkX9KCfDQ5EWpKs8kpLJAMNvgVt9pJ2DJMtR/PK70CQLUFTKLSyuWYuvIqRFYSXVSRXrboGMyGdz0FIXoPohriQi6yQ1pOS0O3TfJZcrFPyo9J6UmiVV1o6v9AbDrFnTY83r+qxplC9aT+TBIugmrnwqmNZoW6lV/bA+xXICoEVUtn/grph1ToVLyjUBV7JM5bhRFatU5EMjLrQR3r+p62fo3nVUifGxEhSs54Tr9oxhQynC3rUqmswE/gcBFkhWmHouUKziMKedSrqqtE9XmmJZGBCr0JPZ8+a3j5bzL/GDqb1Inolv2ORF6/sge9X6Jas0HIleHfbohb2bCRGTYUl65S2k80/CAdrKNT2IRdeaYlkYD3ZvIrkvyIX86oeZQr5G9fWxKsgB/xn1JYEnUhh1TWYCXxvY0GyQu7AKzl4JQev5OCVHLwiK5AVsgGv5OCVHLySg1dy8IqsQFbIBrySg1dy8EoOXsnBK7ICWSEb8EoOXsnBKzl4JQevyApkhWzAKzl4JQev5OCVHLwiK5AVsgGv5OCVHLySg1dy8IqsQFbIBrySg1dy8EoOXsnBK7ICWSEb8EoOXsnBKzl4JQevyApkhWzAKzl4JQev5OCVHLwiK5AVsgGv5OCVHLySg1dy8EqUFX79/eP7X35DEn34+CnzPuRFeIVXeIVXeVGXe8V9hTT16+8f2xPpCsiHj5+y7kJuwCs5eCUHr+TgFVkhTb3v+vtUcvBKDl7JwSs5eCUHr8gKZIVswCs5eCUHr+TglRy8IiuQFbIBr+TglRy8koNXcvCKrEBWyAa8koNXcvBKDl7JwauYWaFUKhlKSk1oC/2HF0NWzaeenh7DQ4rQQ7Q1ExYqcu1V1MHiVRIHhNNS0c1eyWegohu86tlIjDYVVnmVCelnhZaHQsuLJHvmU9CMr2+8Jv0XT2jNhIUe+fUq6mD9i1Skw+vd4VXCaenRtV7JZ6BHN3hlbkd+uD1eZUVmWaGQccGS+aQmetC1568ZdEhaV6m2ML9eaQsNLQjXQUNhfr2KMTH8h+cxK7TVq4JlhYRemWtqS8gKMWh7VpAcUhhZNZ9i7H9dmBUUaWWFoCfBxcgKik5mhdBfu9OrSNegYQbm3St5Co+9snlY5VUmdPT9CmSFTmK+9rSXmXBR7mngb1C+H+Tdq7rOE225tv0g/wvmlXn9Fc6WoGmptauQXgXV9JdHSqs58qouu9zqwVeW9ldtO/bPq0xoS1bQlpMVOkyknB76qzl9x9gS8u5VPXjU2tVHfl7L16lIXrUjK9SbVvPu8cpfocWBGDMwX17JM6i/UDiF8jKvMoH3K5AVRL/GzgpB3egSr5oRntfydSqt/S+JIYaHCumVpDDGDMyRV5LLLVIF+eEKq7zKhPjfrxD0+gKfg7AEyXPZdmcFw1Waa6/Mz33ljwr3ifx6leS5YFB5V3mVSl4P6kkuvNI+lHCy5f0azIRE38UU9GUJfL+CDZhXWO3zDG2Jv6awML/PacxeBY0raKTa9oWuKvLrlbZQa6BhtginpaJgXiUv1PZEkQuvIl1uwvkT6XCFVV5lAt/bWNisYDl4JQev5OCVHLySg1dkBbJCNuCVHLySg1dy8EoOXpEVyArZgFdy8EoOXsnBKzl4RVYgK2QDXsnBKzl4JQev5OAVWYGskA14JQev5OCVHLySg1dkBbJCNuCVHLySg1dy8EoOXpEVyArZgFdy8EoOXsnBKzl4RVYgK2QDXsnBKzl4JQev5OAVWYGskA14JQev5OCVHLySg1dkBbJCNuCVHLySg1dy8EoOXomywq+/f3z/y29Iog8fP2Xeh7wIr/AKr/AqL+pyr0RZ4d///RlJ9Nsf/yfzPuRFeIVXeIVXeRFeldpzuwIAAAAKAlkBAAAATPx/CRBUqNlnhiIAAAAASUVORK5CYII=" /><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Before jumping into the Groovy it is worth taking a look at the REST resource to return exchange rates. I will be using a REST client to demonstrate.<br />
<br />
The REST resource I will be using requires an API key as its means of authentication, this is included as a parameter.<br />
<br />
A parameter is required to convert from the source to target currency, the format is <b class="yellow">q=<FROM_CURRENCY>_<TO_CURRENCY></b><br />
<br />
The following example returns the exchange rate from GBP to Euro for the current day.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc6dY_rw-rGfAvSoe_qt0W7ly9LhcZ9ueSiRTSY2wU4e4-uh7E_stXhzR_VYWXStSkAltxmOqFf5sDhb4YMlgn3nB6PrNjn56SKN-pJX2K3XjEUyOYQdzvlbXJFiexOQE40BxC-1eaNhQ/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="298" data-original-width="621" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc6dY_rw-rGfAvSoe_qt0W7ly9LhcZ9ueSiRTSY2wU4e4-uh7E_stXhzR_VYWXStSkAltxmOqFf5sDhb4YMlgn3nB6PrNjn56SKN-pJX2K3XjEUyOYQdzvlbXJFiexOQE40BxC-1eaNhQ/s1600/image004.png" /></a></div>
<br />
This is more detail than I actually require in the response, to restrict the information returned there is a parameter that can be included.<br />
<br />
Adding the parameter and value “compact=true” returns the following response.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBSBzaQ_8ZZjwyHWa9KbPKuNV62FV2ZSyjIX1z5QyVvpAp4sLwXLOb6lsdDjO5fcFBLUXoRqEu_yaWZXcm73lUmhaicVwTT4CM2uRMvZm5k1PIRn5hH5zUoViMTtTloDAZC6-jw3G8Qd8/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="137" data-original-width="458" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBSBzaQ_8ZZjwyHWa9KbPKuNV62FV2ZSyjIX1z5QyVvpAp4sLwXLOb6lsdDjO5fcFBLUXoRqEu_yaWZXcm73lUmhaicVwTT4CM2uRMvZm5k1PIRn5hH5zUoViMTtTloDAZC6-jw3G8Qd8/s1600/image005.png" /></a></div>
<br />
It is possible to include multiple conversions by comma separating the currencies.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrSOlTX5h4pBOf0LiYOZvI8gYwWiIWMaWczt41oisx3-DnQx1PBvgdikNcpuW0DYf-D-RJeLc8VNaD0DvoE6tLLVuupEFeOVS-GNk5qO-Q1h94CX7X9ZznODJP9CqinG5mGf0y4vOwSgI/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="149" data-original-width="534" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrSOlTX5h4pBOf0LiYOZvI8gYwWiIWMaWczt41oisx3-DnQx1PBvgdikNcpuW0DYf-D-RJeLc8VNaD0DvoE6tLLVuupEFeOVS-GNk5qO-Q1h94CX7X9ZznODJP9CqinG5mGf0y4vOwSgI/s1600/image006.png" /></a></div>
<br />
As I stated earlier, I want to return the rates at the last day of a month, to do this I can include a date parameter with the date in the following format.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6Ltjq77bQse800e9aCLDQNNAtMdIseyrSA0BNoKDIn62PUQoamNW16Z5aevNYwkjxws7kXizNPHCbZ97ppwSzhzqKedZLiOdP3unYEYeRv1w7bBXtEQ07ygj5hH0EMxvra894M2P0SNA/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="221" data-original-width="641" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6Ltjq77bQse800e9aCLDQNNAtMdIseyrSA0BNoKDIn62PUQoamNW16Z5aevNYwkjxws7kXizNPHCbZ97ppwSzhzqKedZLiOdP3unYEYeRv1w7bBXtEQ07ygj5hH0EMxvra894M2P0SNA/s1600/image007.png" /></a></div>
<br />
So now I am able to return exactly what I am looking for with a REST request. Time to move on to extracting this data from within Planning.<br />
<br />
I set up a new connection to the web service from the planning UI. As the API key and compact mode will be static, I included them as parameters in the connection configuration.<br />
<br />
<div style="text-align: center;">
<img alt="" height="444" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwMAAAIYCAIAAAC+JqeYAAAgAElEQVR4nO3da5MU14En7vpOG7GfwGN7bMnjfaO3Y82L3didjfFsjOy1ZjZm4h/jAVnTQlwkQEJ3IUDcdEFCsiwJJHQHWbYsbAndBegKCBAN3dDd9X9RUGTnrU5mXTKz8nkiIapOnTx5MitPnV9nVXV3Dl3xtzesiC7X37Di3/5x1U3/uPY//8/tyeXm/3NbfPnHES8rf77m//38lp/903/87IapXf7uhv94+P+u/d2NG/f9y52VLL+7ceP9/3ft9VUfh7Eu1//y1//fpn++ecs/zzz8L5UsN2/553/d8P8qPw7jPcj/tOLf//6eW/7X1lv/fnsly8z/2vpv//uuaX+5+PXmf/n7vf/635/5t/9RybL3X//7Pf/8D9ff8OvKD8UYD/I//ceD//DvT/zDr5/++YpKlif+4dd3/fzfr3cmj/tM/pef/90vV/zdL1f2lk632+12u0tLS70AdAgAoDUiSegXK/72FysOHTq0BGm6ADB14kno4EFJiHTVnqkAMA6SEKGqPVMBYBwkIUJVe6YCwDhIQoSq9kwFgHGQhAhV7ZkKAOMgCRGq2jMVAMZBEiJUtWcqAIyDJESoas9UABgHSYhQ1Z6pADAOkhChqj1TAWAcJCFCVXumAsA4SEKEqvZMBYBxiCWh/5CEyFLtmQoA43A1Cd338COSEDmqPVMBYBwkIUJVe6YCwDjEkpDPCZGp2jMVAMZhWRK6d9sjkhBZqj1TAWAcJCFCVXumAsA4SEKEqvZMBYBxiH6LfqUkRI5qz1QAGIdOb5JbXFyUhMhX9bkKAKPXWVhYWFhYuHTp0t/+YuXf3rDi0CFJiHRVn6sATKdqZ7fO3Nzc3NzchQsXfvaLlT+7YcWhQ4eqPiAAQCv0ssjiFQtV6Gz+3uVFEgIAJqaXgXpvTF28eHF+fn5+fn5u4jov/rfOiz/tvPjfOj/75cqf/WKMSejaG+8auJRrduRdzdnWkL2tv9h+TX5nR3t6RJst3ZPUuwAMoxeD+pdjKlw6L/y088JPO/t/2sgkNLGZaUzTc90k96hWSWiYuCwJAdTK0tLSwsLC5u9dvhwT/f+FRMlYyzv7f9rZ9zeNTEITm5nGMTfXUOru1DAJTew8kYQAxqR3QejSpUubv3f5cswLP716aWbCtzvP/83lZWJJKHE0ooZvcFmz2WsnPzw+YCvJDY0qDBXf9bGoyUw/8qM9qv2qyfEBGK2lpaU3Dv1+7YY7f7Nq7cM7H/n29OnJbHRxcfHixYubv3f5ckyF/3ee+5vOcz/pPDfOJNSb6HMmklgUyPpZPLruoOsES9f+alP2nLrpml9t6pX362Rlkfz5L+uh/GsYITsYXi11o6kVQrYVeCFkJDuY38NCO1h0vwo9mtOxQechQN299OrrK2dW95fb77h7bn5+yDYPf3w8v0IvCc3Pz2/+3tUrMlUtnWd/0nn2J53f/WRcSah/ySUsCV2p+atN1/zqcl65vPRu/2pTrLV+4uk3FF092kh/a9GQtKxXsUS2tNRfd/nFo+S1pKv3kh3u9yHagavdu/Gua2/cdM2vrq6VaCq+IyHzcdE64Ukoq53AOgOzQn618G3l71fIQSt9KPJ3EKA+FhcXV61dH01CK2dWH3zzrSGbLZSEepdjnv3J1UszE77d+d1POs9cO64kFA0MubPjpmt+dVc/UlyNBTdu6keNa6OZJtrgrzZFs8vy8qVucgKL5Jv4pDUwCcV2a9ndy7evTaySsoORfe8nq6vh6ca7ribCyOWrZXtXcM4OqROyVtGSgYVJpZNQif3Kb7zQ3ZDOA9TN3NxcLAatnFm978WXhmw2JAktLCzMzc1t/t7lyzHP/uTqpZkJ3+789trLy8iT0PIrJwWS0NXp5GriWF4evbs8CcWyS684Oj8tRepk9DirtVi9lHuX9+VKD/t1+iknlmZiR6ofAS/3c9mRuWokuWeEdUpXS1UoCQ3T56KNl24WoM7uuOf+WBI68v6HQ7ZZKAn1LseU+D/WZul2Ok9f23nqms7To05CSwkjTUL9oFB9EoruY/8Nr6wkFDsUsSb674Jdvnt1B5dtf0xpoM1JKHZChrSTugpA43zy2dGbb13Xj0GPPP7k8G0WSkL9KzKFlm63O7AkcOnsvaaz95rO3h+PMgklY1DK9J+sf+XmSJJQzoeBxpKEut3ussmyXBJKn2ujh7E7aEoOmdRTNToJldv3Qism28lZF6BBTpw89fwLB558+ndvv/PnxcXF4RsslIR6l2OK/t/tdgeWBP7f6Xa7T/6482TDklDkbtEkFPkoT04/Yq3lJKHEu2N5SWjQu2PLOhar1u+dJDSSfS8affKPjzAE0FcoCfWuyDx1zdVLM1dvZ5d3u92c+v0N9Ss/FVkxVqfT7Xaf+HHnidElodQYNNoktKzBK5+MvvJp65R3x2KWfQw52oNlUWgpsZV47e6VibB/f3ASWv6J6d7d/tavvfxVssvXrq698a5rb7zaz7StdJN3M3Z5GpLQ+BJeyF4ERjRhCGiErdt39d8R+/jTz3qFx45/3i/csn1X6cYLJaHe5Zgnf9zZe02x2/3WkuWx29E60ZLe0ul2u4//qLPnR1Ulodyay5PQso/RZLx5FPt+WeqmoxEqIr07/cqRnl+uH535+lu/JpJ40pJQN/ot+isRaOnqHkXKe0nommg/o/0f+rMyo6pTulqqgetGHxrVfoWsOGSMA6iV6Eek79u8tTfDPLpnb7S8dOOFklDvcswTP+488aOSt3ttptbpl3e73Sd+tPzulTqdx/6689iPOo/99eSSUM7SayFtOskONMVn5aLTVWC3wzc38jwxkkwzwt0ZSRIqd8CH36/AJBTYLEA9xb4v9u6R97/77tyd9zzw7pH3+3+kvXTjhZJQ73LM8P93u93o7b7oo/060Qqdbrf7yF93Hm1yEsqZ0vIrhO9U4KwcWDMwKITniUKJIfC4Fd1WiR1MFXiSDLlfITtS+lDk7B1ATcSS0KZ7H3j90JsXLsydPHVq16N7blm7/pa163c9uufkqVMlGi+UhHqXY+L//2hAebfbjZX3S7rdbr+8f7v3aGqdzu4fdh75687uH9boL7CmzSgpSaib9nN8oYeG7H945cAOBByHoPKcvuXXCXsuRraDA3tY7oCHP5q/vyGHQgwCGir5CxXfPfL+iZOnVq1b339fbOXM6lXr1p84WTgMFUpCvcsxvSX8drfbjZX3Sno3+nX6t6Plsdud3T/s7PrhJJIQAFATySQ0Nze369E9vRjU/5zQypnVux7dU7TxoknokSsXZWL/55fH2ozW75dEy3u3dy+v0+12Ozt/cHmRhACgJVKT0C3L/wZZr9rMmtuLNl4oCfUuxyz7/weJknGWd3b8oLP9+50dP+j87Jc3/ewXKw8dOpT1QR9aruRoA6B+Biahfp1xJ6HLV2R+ePXSzIRvdx7+fmf79zsPf/9qEip5UAGAhrhv89asd8eiMWgC7471Lsds/8HVSzMTvt3Z9v3Otr+ShACg7U6cONn/xHQvBq1at/7EiZNF2ymahB6+smxP/D+B8s7Wv7q8SEIA0HInTp7a9eieW9bcfsua23c9uqfEF8dCRJNQ73LMtr+6emlmwrc7W/6q89D3OlskIQBgIqJJqH9Fpqqls/l7lxdJCACYgGgS6l2OqfD/hieh5LealpWkfv/J16IAoEpLS0uLi4vz8/P9EFLh0nnziut/edP1NUhCxcJJXhKKP5ZRLg0BwETVKwm9995777333rvvvVe3JBQUT3KSUGYDKQ/IQgAwMb0kdPHixXPnzn3zzTeffvrpu++++/bbb7/11lu///3v35yszvHjx48fP37s2PHrf7ny+hr8juli71yNKAmJQgAwMb0kdOnSpfPnz58+ffrLL7/89NNPP/zwwyNHjrw3cZ0zZ86cOXPm9OnTBw8ePHjwYA2TUF5CyUlCsaby1skqBADGYmlpaWFhYX5+fnZ29vTp0998882XX375+eeff/7558cnqzM3Nzc3N3fhwoU6J6HMjJKbhNJaTK2RVQgAjEXvslAvDJ0/f/7cuXNnz549U4XOwsLCwsLCpUuXpjYJxR9IqyEIAcBk9cPQpUuXLl68OD8/Pz8/PzdxnV4EWFxcbGQS6mYkoeyGfWIaAGqiH0J6FqrQ6XelzklocP3kvdiKVx+JtxmwEQBgXLIugkxGA5JQ0VUGtZR2GMa2OwBAndU9CVXbGQBgutU3CVXbDQCgDWqXhAAAJkYSAgDaSxICANorJQmFfu2Mlqn2TAWAcZCECFXtmQoA4yAJEaraMxUAxkESIlS1ZyoAjIMkRKhqz1QAGAdJiFDVnqkAMA6SEKGqPVMBYBwkIUJVe6YCwDhIQoSq9kwFgHGQhAhV7ZkKAOMgCRGq2jMVAMZBEiJUtWcqAIyDJESoas9UABgHSYhQ1Z6pADAOkhChqj1TAWAcJCFCVXumAsA4SEKEqvZMBYBxkIQIVe2ZCgDjIAkRqtozFQDGQRIiVLVnKgCMgyREqGrPVAAYB0mIUNWeqQAwDilJqNoOAQBMjCQEALSXJAQAtJckBAC0lyQEALSXJAQAtFftklCZ72ynf+E763vgvh4OAFxW3yQUGFKSFa/cXV5+tdryFYQhAGixuiehASElr0pYEorXAwBapAFJKCem5D6cdekntpKLQgDQXs1IQvmXfXKTULKN5SsJQgDQYlOUhOLVsy79BLYNUEdLS0unvj3953eP7D/w8u7Hn7xv89aNd9+3ev2dq9ZtuGXd+ltvv+O2O+6++4GHtu185LfP7fv9H98+/sUXFy9erLrXUF9TlISWlXWTn/+5cl/8ARrp+BdfPP/iS3c/8NBNq9aumFkdXVbesuY3t667efW65EMrZlbfdsfdjz6x990j78+LRJDQjCQ0qHayqJtIQv2qkhDQJIuLix9+/MlD23f1k82tt298aPuu5/a/+Ie3//TJZ0e/+vrrb0+fOfvdd999d+70mTMnTpw8euz4X9478tKrr+9+/MmNd98XjUSvH3pzbn6+6n2CGmlAEgqrHyvoDnx3bEz9Bxihc7Oz23c/djkA3bbxyd/+7uNPP7swNxfewsLCwldff/3qG4fuuOeBXjvrN937wUcfj6vH0DR1T0Jl1hnwGxQlIaAZjn/+xW133L1iZvWq2za88tob52Znh2nt0qVL73/40b2bt/by0CuvH/RKCN06J6FquwFQrXPnzv3nmttXzKze/PDO02fOjKrZhYWF/Qde7n2c6K0//mlUzUJz1S4JAdDtdu97aNuKmdVbd+4ex0+Gb/3xT70rQxcuFHijDaaSJARQO0ePHb959W1rN2z69vTIrgbFPPrE3hUzq5/d98KY2oemkIQAaqd3zWb77sfGt4lPjx5bMbN64z33j28T0AiSEEDtvPHmWytmVu98dM/4NnHs+OcrZlav2XDn+DYBjZCShJLfuYIln2GHCeolofWb7h3y+2I5nt33oiQEXUmIcNWeqdAqvSS0Ymb13meeHUf7H3/yaa99SQgkIUJVe6ZCq/ST0IqZ1U889cz86H4r9NLS0tvv/Ln3/XxJCLqSEOGqPVOhVXpJaOPd961Zf2fvxuG/vLu4uDhMm0tLS199/c2ux57oZaAHt26/adVaSQgkIUJVe6ZCq/SS0J6nfnvi5KlN923uZZdN9z342sFDJ06eKhqJzs3Ovvf+B9t3P9b7hYq3rF1/8M23vvzq65W3rJGEQBIiVLVnKrRKLwk9/uTT3W734sVLb771x/Wb7u3/2flN9z349O+e/8Of3jl67PjpM2cuXJi7dOnS4uLi4uLiwsLC/Pz8d9+d++rrr9898v4LL72yZcfumbXre+vevHrd3meePXPmbLfb/fyLLyUh6EpChKv2TIVWOZj4Fv3Fixf//O6RR/Y8ueq2Df2PEPWC0arbNqzfdM8d99x/xz0PbLjrvjUb7vzNreuidW5atfa+zVtfP/T76O9pPOpb9NDtdiUhwlV7pkKrHLzyOaHZ8+djD50/f+GjTz498MprOx/dc/cDD63dsOk/V98Wyz233r5x4z33b9mx+5nn9//p8F++PX06OYT3H3hZEoKuJES4as9UaJWDV7479szz+/Nrzs/Pn5udPfXt6W9OnPzmxMmTp06dPfvd3Nxc/meJjh477rtj0CMJEaraMxVa5WDkW/TPPLfv4sVLI2z8y6++3vzwTkkIeiQhQlV7pkKr9JLQ7XfefettG1fMrL7r/s0ffPTxqIbh0tLS2bPfHfngwx2PPC4JgSREqGrPVGiVg1e+Rf/1Nyc23n1f7/rNPQ9uOfTWH3rf/AqxsLBw8eLF+SvLxYsXFxcXl5aWev93u90Lc3NvvvXHce4HNIAkRKhqz1RolYORb9HPzc+/+sahdXfcdeWb8Lc9sHX7c/tfPPyXd49/8cV3352bn5+PfSrowtzc4b+8t/eZZ7fvfmzL9l1btu96aPuunY/uOXnqVEU7BPUlCRGq2jMVWqX3+4R2PfZEv2Rubu4Pb7+zdefumSt/KKP/K4LWbLjzsSefOv7FF72aRz748IGt229e/oWyXoQ6eux4RTsE9SUJEaraMxVa5fJf27jn/vMXLsQeOnfu3JEPPtz34kvbdj5yxz33z6xdv+Gu+957/8Peo394+521GzbFMlBvWb3+zuOffzHxXYG6k4QIVe2ZCq3S/wusz79wIKfawsLC7Oz5Cxfmut3u0tLSRx9/sm7jXakxaMXM6jXr7/z6mxOnvj29/8DLz71w4PkXX3r+xZeef+HA8y8c+Mt7Rya0Y1A/khChqj1ToVWif4t+34GXFxYWBq4yPz+/defurBjU+8L8qW9Pv/f+h8mH1m7cNIGdgnqShAhV7ZkKrdJLQuvuuOuWdet73xr75LOj+at88NHHt1z5+2K5SeiD5EMza26fzH5BDUlChKr2TIVWufy36Pf+9vjnX9x+5929vPLQ9l1/+NM752ZnU1d5bv+LOTGo9+7YNydOfPX1N3v2/vbRJ/Y++sRTV5a9r75xaMI7CPUhCRGq2jMVWiX6t+jPX7iw78DLt95+x+XrN2vXb92x++XX3vjgo4+/O3euv0r+W2OXPzH9xReLi4vnz1+YPX8+uoS8+wbTShIiVLVnKrTKobf+sGJm9e7Hn+yXzJ4//+Zbf3xw246bVq3th5s/Hf5Lv8Kd9z44OAn57hgkSEKEqvZMhVY58sGHN61ae+e9D1yYm4s9dPLUt+/8+d3fPb//oYd3fv3NiV7h0tLSxnvuD7kmlLo5A5w2S0lC1XYIgIsXL952x90rZlYfeOW1nGr9BLO4uHjPg1tcE4ISJCGAOvrok097CealV18feM1mcXFx12NPDExCX3399ezs7Dt//svb7/z57cNXFwmJNpOEAGrq4Jtv9T4VtHnbjqPHP8+pubi4+Oobh6IfIcr4Fv2373/40cpb1sQeuvPeBya2U1A3khBAfR354MPV6+/s5ZXtux9798j7yb+/0e12Z8+f//Krr/M/KnT59wkdSfl9QitmVk9+16AmJCGAWjs3O/vsvhf6f3j11ts27njksdcP/f6Tz47OX7zYq3Pq29OLi4sHXnkt57LQmg13njh56tjxzzdv23H/Q9vu3/Lw/Vsevv+hbfc/tO23z+6rdBehSg1PQslvNS0rSf3+U7mvRU34u1RpuzHO7QE1d/rMmVffOHTfQ9ui4ebZfS/2Hu1ForPffffYk0/l/GbFz7/88tKlSydOnvrmxMkTJ06eOHHymxMnvzlx8vz5lOtM0BK1S0LFckZeEoo/llEeuMHllcYehoQfIMXS0tLX35z4/R/ffnzv0/c8uGXbzkfmln/N/tvTp/c+8+yqdRuSSWjVug3Hcj9sBO1U3yQUFAVyklBmAykPBGwsPT+l9jptPxKRLF6crJ9sILjNAfsCTLPzFy786fCfdz/+5PpN9/zn6tt+c+u639y67qZVa9du3JT1+4SgzeqehAbM6ckq/ZLMtdMeGLypWI3o3egj/dvLe78UL0+0EtvbtHvL6yTX7ca6AAAM0oAklDet5yShtAs1GetkFWZXyApCV+/F2svan6X8+ssbTdtS1qrZewIA9DUjCWXO7LlJKK3F1BpZhbn9yu1wMo9k7UtunAlKQvFGB+0JANDXgiQUfyCtRu5GYjViPcpYVRICgAZoeBJKTvuZtfOS0OAglP7t/JwtZsSTjIAkCQFAJZqRhAbXT97LihwZyaHYt+iXrZTShVgeyaqcKM/drazPCaV8ZFsSAoAgDUhCRVcZ1FKyPCQ3JCtGV042l7OJ1PLs5q/WTN2/skcNAKh/Eqq2M0OorvsNP3AAMEn1TUJVbjtFubbG0cuMbS3briAEAEFql4SmxcST0DRcSAOASZOEAID2koQAgPZKSUJ5n5ahxao9UwFgHCQhQlV7pgLAOEhChKr2TAWAcZCECFXtmQoA4yAJEaraMxUAxkESIlS1ZyoAjIMkRKhqz1QAGAdJiFDVnqkAMA6SEKGqPVMBYBwkIUJVe6YCwDhIQoSq9kyFHJ3lYg+l3h5ycyVKwh+NVsvar9KGb6eTMNaOjap9yHI1Ce3cuXPHjh2SEFmqPVMhS34KmUAS6t3NSWADWwisU5NMMOGO1WSvmWJXk9D+/fv3798vCZGl2jMVUuVfSIhdt4gVxuony6P1c7abTEKx2/kth18LGbLZ1H4GHorAjiWPWLK1oh0rtNepHYZ8khChqj1TIdXA2To5j+bXiZWHpIGcJBTYcupWcub1kGYHBo5CHc4vDNyv5IEK6dgwTxOEkIQIVe2ZCqmKJqGBdXLKs7ZbLgkF7kXqNF+i2WSdkJRTIgkV7efAjg3zNEEISYhQ1Z6pkGpUSSgmv/HoowMjUUjLA+fy5OpFmw1PQqktB9YZdxIq8TTBQJIQoao9UyFV1iyYP+nm1AlpPProwCQU0nLgXF6iwzldyko54d0Y+NDAZBbSsSGfJhhIEiJUtWcqpJriJJQVawp1WBKCgSQhQlV7pkKWnMSQc7s7xNQbuOn8lgcGpvAkVCjcBL5FVahjA7dV6G6sY8M/TZBPEiJUtWcq5Ej9+Ejsoe6gSxTJ1YdPQvktp3a46H4VTVSpez2w5fx9zHkop7XAjg3/NEE+SYhQ1Z6pADAOkhChqj1TAWAcUpJQtR0CAJgYSQgAaC9JCABoL0kIAGgvSQgAaC9JCABor9oloTLf2U7/wnfW98CLfj18wt8nX7YJ318HgLGqbxIKzADJilfuLi+/Wm35CoO3k1p/fOFE+AGAyal7EhqQCfKqhCWheL2B20i/GynM2YPU4mT9ZAPBbebuCQAQ04AklDO55z6cFjdSVhqYH3LqRx/p317e6aV4eVZ/0i9SXb6zrE7mvkhCAFBQM5JQ1vwekISSbeQFj8EbyQpCV+/FGszajaX8+ssbTdtS1qo5uwIALDdFSShePSM9DP+J6dyuJvNI1pZy40xQEoo3GrI3AEDEFCWhZWXdrERS/CPJS7EWB11OkoQAoDGakYQG1U4WdbMTRvkk1I2FoaAklBF4RvHumCQEAENqQBIKqx8r6MZzwVKsvGQSWr7BlNQS+EntRHnG5nKTUNpHtiUhACig7kmozDoDvs0+ZBKKtpza34zNJru0rDBvd7KTUPHkCABE1DcJVduNIVTX/YYfOACYvNoloWokr6yUv8YyyTySvLYkCAFAAZLQyE08CXlnDADKkoQAgPaShACA9kpJQnmfmaHFqj1TAWAcOv1brgkBAG0jCQEA7SUJAQDtJQnRSGs3bLFYLBaLJbqUm1AkIRqp9BkPwFSShGgXSQiAKEmIdpGEAIiShGgXSQiAKEmIdpGEAIiShGrkhoiq+9KN9mEk/Uk2UslujjYJdTqdwZXqoUFdBZgkSaguYrGg8jA08g4kE54kNEkN6irAJElCtZCaCWJXZZKXi3q3w8uz2klWjlUr3ZPk7mRdahrYbNE9ypI84zsR/ZJYhVjN2EPJ8tRmA+vHOpDaTrJ7sf4n92hgSdY+Akw3SagW8mfxrEspqbkhvzyrnRKFIVtMVi7dbOx2/oo5Ymd8TujJutFNZKOc1UvUD8lkscLUNkP6H14HYFpJQrVQOgmNozxZWLrl/Mr5V4+y+lB0uzEjSUIDV8+qFhJBQspDNprTVODmANpAEqqFiSWhmJytTz4J5Xcs5+pXcsUcySQUE3soejfZWn5SSX1PKrV+/jWkrHey8juWs+mBey0SAe0hCdVCJdeE8rc+viTUv13okk9If0LkXxOKPTRMEkq9PeQ1oax+5pSUfudLGAJaQhKqhcCLKKMtD9z6MFvMb7BQsxNOQkO+Ozam8vyuhjclCQH0SUJ1kRMmxpSE8gPHWJNQN+MT0Pnl5bYbM/JPTOev3g37BHTR+iG7kNPUqNISwBSQhGok5/MuqQ+VyCVZm0htvF8ysIUSSSir2awdybmdddBSjeNb9Kl3o5VDkk1q/dTuJfuftUc5nc9qNn9bANNHEqJdGvHXNgQRgImRhGiXeiahkHfBABgHSYh2qWcS6ga8CwbAOIwgCT344IMPPvigJEQj1DYJAVCJESShgwcPHjx4UBKiESQhAKIkIdpl7YYtFovFYrFEl3ITiiQEALSXJAQAtJckBAC0lyQEALSXJAQAtJckBAC0lyQEALSXJAQAtJckRCNV/vu7LBaLxVK3pdyEIgnRSKXPeACmkiREu0hCAERJQrSLJARAlCREu0hCAERJQrSLJARAlCREu0hCAERJQrSLJARAlCREu0hCAERJQrSLJARAlCREu0hCAERJQrSLJARAlCREu0hCAERJQrSLJARAlCREu0hCAERJQrSLJARAlCREu0hCAERJQrSLJARAlCREu0hCAERJQrSLJARAlCREu0hCAERJQm13Q8K4NxdeYRydkYQAiJKE2i6ZNsYdhvKNe+uSEABRklDbpSaP2IWZ1MtFgYW92/3C/qTFnt4AABYASURBVEPR8mhhtGRgN1IbyScJARAlCbVdfhJKBp1k+cDCouWFulH03TRJCIAoSajthk9CgU2VaLloNyQhAIqShNpuYBKKidYJuSQjCQFQZ5JQ2xW6JpTfgiQEQONIQm0nCQHQZpJQ2yXTQ84bXuU+MZ3Vwkgayd+XJEkIgChJqO1yPgmUrJBanl+YH2LyP36UWh7SeA5JCIAoSYhqhKSWcZCEAIiShKiGJARAHUhCVEMSAqAOJCHaRRICIEoSol0kIQCiJCHaRRICIEoSol0kIQCiJCHaRRICIEoSol0kIQCiJCHaRRICIEoSol0kIQCiJCHaRRICaLl9+/bt27evf1cSol0kIYCWG30S2rlz544dOyQhGkESAiDKNSHaRRICaKf+pSDvjtFqkhBAO0lC0O1KQgAsJwnRLpIQQKskLwW5JkSrSUIArSIJwTKSEABRkhDtIgkBECUJ0S5rN2yxWCwWiyW6lJtQJCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIQCgvSQhAKC9JCEAoL0kIRpp7YYtFovFYrFEl3ITiiREI5U+4wGYSpIQ7SIJARAlCdEukhAAUZIQ7SIJARAlCdEukhAAUZIQ1bvhhhuySm5Ik7PiQLEzvtPppFaLlmfVKSG12U6nM8JN0FPukMbWymmkk1Bic0AdSEJULz8J5dSfgiRkBh2TkRzY8EY8j9BckhDVqzwJxX6sT/643380tX5srVjjqXdj7SQbT/YkdVshFy0G9ie23ZxuDOxD1vFM9m1gb0M2kbNiiX4mVwzvfBdoLEmI6lWbhFInwpzZsVD92LYGrhgeXPI3N3BbsfLAbpRoKrWH+cElfBNZeatcP1MbkYRg6klCVK/ya0LJuwOjQE79LEUj1KiS0JANjqSp/KRYehOBT9OQ/SzReaBBJCGqV59PTJdOQt2Mt2kGNpLfeEx+ec5+5Xd+ypJQavvJY5jfeHjGkoSg6SQhqhd4TSinWrjxJaHwwmEazykv2rFJJqH+7dHmtpAkVKhOfoXwzgMNIglRvfB3x/LvhpCEknenOAmVvnYVmITEIJgCkhC1kHXtJ/86UCVJqOjsm/9oeBIKDC45zWbtSHgSCk8S4V0dZhMDk1bOLudstHRcA5pIEqIukh8D6gZ8YjrnU0SpwpNQf7KM3Y6VRNctkZMGRqj8bQ2c+HM6GR6twvtQKAmF9zZrE8nb+Z1PJp7UxpONFCoEmkUSol2G/GsbZr7p4HkE+iQh2kUSout5BCIkIdpFEqLreQQiJCHaxd+iByBKEqJdJCEAoiQh2mXthi0Wi8VisUSXchOKJAQAtJckBAC0lyQEALSXJAQAtJckBAC0lyQEALSXJAQAtJckBAC0lyQEALSXJAQAtJckBAC0lyQEALSXJAQAtJckRCP91++v/6/fX5+8GytPrRzSclb9Qk2NVtam+x0O6Vi/ToU7AlArkhCNlJWEQiqHtNyUJBQtHNg36QcgSRKikUKuCeUU5l9fGdh++KP5DYYXJlvIL8m6EXhMCnUboNEkIRppYFxIJoBuRk5KbTYnFuQkmKx2svoWXpiaPwYmoSG3G7I6QNNJQjRSLJQMM+snm82pmb+hWMdCupHcdHiHByahcRQKQMCUkYRopPxrMN1Bc3nWpD5kEioRyGKbDglSWQeh0HbLRcacQwfQUJIQjTRMEspvMzCOlNhiSBLKKaxDEoodqKwjCdAgkhCNFJ6ESl9iyW8q627WukMWZoWPgRdvxtGZ1KMH0FCSEI00MLXkF4ZclQlvKrZKSPZK7UZOYbJ75dYKPCaFug3QaJIQTCFhBSCQJARTSBICCCQJAQDtJQkBAO0lCQEA7SUJAQDtJQkBAO0lCQEA7SUJAQDtJQkBAO0lCQEA7SUJ0UizAJBQYkKRhGikqscaAHVUYkKRhGikqscaAHVUYkKRhGikqscaAHVUYkKRhGikqscaAHVUYkKRhGikqscaAHVUYkKRhGikqscaAHVUYkKRhGikqscaAHVUYkKRhGikqscaAHVUYkKRhGikqscaAHVUYkKRhGikqscaAHVUYkKRhGikqscaAHVUYkKRhGikYcbJ1h27V86sXjmzetvO3aMaeyGOHjv29DPPbbzr3ptvXXfzres23nXv0888d/TYsUn2AWC6lZhQJCEaaZhx0otBvSVwlZdeee3mW9e9+NIryYf2vXDg5lvXvfLaGzmrnz179smnn4luN7rs2fv06dNnyuwJAMuVmFAkIRppmHFSNAm99Mpr/fr7X3wp+tBz+17oP/Tq6+lh6OzZs5u3bs+KQb3lwS0Pnz17dpidAmBWEqI9hhknRZPQzbeui67SD0PRGLRyZvXMmttTV3/iqcyrQdHlyaefGWanAJiVhGiPYcZJ0ST0woGXY6ll/4svxWLQypnVB15+NbnuZ0eP3XTLmljNZDdWzqy+6ZY1nx31mSGAoZSYUCQhGmmYcVLic0L7X3wp/4rOi2kxaHZ29qlnnk1WTnajtzz1zLPD7BcAJSYUSYhGCh8VDzy0LeTNqd6yeduOrHZywlBWDJqdnd14173hW994173FRjwAy5WYUCQhGil8VIQHkYFXiVLDUE4Mmp2d/c2qtVntJ5v6zaq14fsFQFKJCUUSopHCR8UIk1Dys0ErE98mi0kmoZx3x7I+cw1AoBITiiREI4WPiq3bd4XHoG07Mn/XYmoMGhiGUt8d6z2ULL/j7vvC9wuApBITiiREIw0zTgKvAEXlxKD8MOQT0wCTVGJCkYRopGHGSdEk9PwLB5KfDdqX+MxQ6m+g/uzo0di36LN6ctMtaz47enSY/QKgxIQiCdFIw4yTokko9psV+x+RjoWhIX+z4hNP+c2KAMMqMaFIQjTSMOOkaBJ65bXXkzGoJxqGXj/4Zurq/toGwMSUmFAkIRppmHFS4nNCr7z2+sya21O/MP/CgZdn1tz+2huHclb3F1gBJqPEhCIJ0UjDjJN7H9xy+UrM1u2jGnshPjt67Klnnt14172/WbV2ZvVtd9x931PPPOuzQQAjVGJCkYRopKrHGgB1VGJCkYRopKrHGgB1VGJCkYRopKrHGgB1VGJCkYRopKrHGgB1VGJCkYRopKrHGgB1VGJCkYRopKrHGgB1VGJCkYRopKrHGgB1VGJCkYRopKrHGgB1VGJCkYRopKrHGgB1VGJCkYRopKrHGgB1VGJCkYRopKrHGgB1VGJCkYRopKrHGgB1VGJCkYRopKrHGgB1VGJCkYRopNKD5H9mGOE4bKHGHcxkP5vS8ymW+hTkPy+eNZJKTCiSEI1UepBIQiPXxOOZ7Gcjuj31ij4pnjWSSkwokhCNNPxoib6GZr3+Jm+kNtLy1+KBs1fOURqYSFKfptQ6hZ6FZGjLajPkxEhu2olRzsBnP+T0SL0760lpjRITiiREIw0/WkJeQ/9nQrIFL6/5u1/0AAbOhfmFgX3O2m7W854sT910uS4xW3wkZt3OuutJaYMSE4okRCMNP1ryX3OjhbHX4vzVW2hgJki9W2I+K9R+SJ9Tb2TVHL7/hBjJMxL+ENOnxIQiCdFIw4+WrBfHorNy1PC9aqisQ5FzlELmudncpyO//ZAOp95IbTy/M06MERrJM5L6kCelJUpMKJIQjTT8aMl63fTaOqTAo5R1xAYe82TlEs9CVieTFbI6kH/biVFa6pHPKs85PTwprVViQpGEaKThR0v462y0POtlt80GzkAD1xqYKrJaK/0sZE2TRftWaJcJlAwr5Z4FT0o7lZhQJCEaafjRkjWtJl9/kzNlyKPtkTwOgccwtTyntdSDXO5ZyOpJfpsht0t3ib6Bp0rOs5B15D0p7VFiQpGEaKThR0vy1TDr1TO1cmyVlr+w5s8xIQ9lFWZNe4Ht53c4pyS1D1mdydmFlp8Y5YSfFSHPWvJRT8p0KzGhSEI00jjGT/JV0osmQLOUmFAkIRppHONn4HUCAGquxIQiCdFIIx88ORfkR74tAMakxIQiCdFIVY81AOqoxIQiCdFIVY81AOqoxIQiCdFIVY81AOqoxIQiCdFIVY81AOqoxIQiCdFIVY81AOqoxIQiCdFIVY81AOqoxIQiCdFIVY81AOqoxIQiCdFIVY81AOqoxIQiCdFIVY81AOqoxIQiCdFIVY81AOqoxIQiCdFIVY81AOqoxIQiCdFI4aPiKQCmmiREG436pwgApkGJCUUSopGqHmsA1FGJCUUSopGqHmsA1FGJCUUSopGqHmsA1FGJCUUSopGqHmsA1FGJCUUSopGqHmsA1FGJCUUSopGqHmsA1FGJCUUSopGqHmsA1FGJCUUSopGqHmsA1FGJCUUSopGqHmsA1FGJCUUSopFKD5K1G7ZYossIX4CaovJj3p7F82IptwwzwEtMKJIQjVR6kKzdsKXqvo/LruKGfMVpqCk+B2ql6NnleaFHEoIgpQfJFL/a7tq169MiJCHGShKiHEkIgpQeJFP8aisJBZric6BWJCHKkYQgSOlBMsWvtk1JQv8lzPg6MMXnQK1IQpQjCUGQ0oMk+WrbSahkj4bXoCQ0cF8koSkgCVGOJARBSg+S1CQ0sGQCht+oJBSo/jNuc+N41JiSUP/gTMdRIkkSgiClB4kkJAlJQpMhCVGOJARBSg+Sokko+ZZZ73b05TirQqxObBPJCoW2mxRNQnv27ElGn1ihJJRztLvL3zbNenLzK4Q0mKw8BW/U9gyZhJJHKXojdpSyBt0UHMYWkoQgSOlBUigJJWe4buLVdmCFZOWstVK7lNpUqn4SOnz48HXXXbdp06Zo7tm0adN11113+PBhSShnxk19OrKehawnt2iDAys31FiTUDdx6LJGUPIuNScJQZDSg6T0J6YHzlKFMs2Qa6WKXhOKhaFkDJKEUo92VmHpp6nc6TQdM/eEk1BOT6bjeLaHJARBSg+SkGtCsUdjCSn5Ap1TIefqTv5aA7ebFPucUD8MpcYgSSj1OcoqHFUSCnxap2PmrjwJDfzxhnqShCBI6UFSKAkNf/Em/OpOyMt6Vj97kp+Y7oWh1BgkCRU62iNJQuVOhuaqNgmFXzGibiQhCFJ6kJRLQgMv+RS9JhRYmFUhVep3xw4fPpwagySh1KOdVTh8EgoszylsnAqTUP5dak4SgiClB0m5d8e6uVNaToWc27GL9ql3C/1c61v0gYb8xPTAFUOSbngsbq4RJqHUIxaYhGLPCPUnCUGQ0oOk/r9LpjRJKNDw36LPud2PxTkNJtcdmIObaPjfJ5R6xGKhM3k8Qx6lziQhCFJ6kEhCdUhCU/x3x0y6ff7aBuVIQhCk9CCZ4lfbpiShyklCkyEJUY4kBEFKD5IpfrWVhAJJQpMhCVGOJARBSg+SKX61lYQCTfE5UCuSEOVIQhCk9CCZ4lfbXcVJQoyPJEQ5khAEKT1I1m7YYokuw7ziNFTlx7w9i+fFUm4ZZoCXmFAkIRppmHECwLQqMaFIQjRS1WMNgDoqMaFIQjRS1WMNgDoqMaFIQjRS1WMNgDoqMaFIQjRS1WMNgDoqMaFIQjRS1WMNgDoqMaFIQjRS1WMNgDoqMaFIQjRS1WMNgDoqMaFIQjRS1WMNgDoqMaFIQjRS1WMNgDoqMaFIQjRS+Kh4CoCpJgnRRuFJ6GsAppokRBtJQgD0SEK0kSQEQI8kRBtJQgD0SEK0kSQEQI8kRBtJQgD0SEK0kSQEQI8kRBtJQgD0SEK0kSQEQI8kRBtJQgD0SEK0UekktHbDFkt0qeRlq1qVH/P2LJ4XS7ml6KCWhGijYZJQ1X0fl13FlXjFmQJTfA7UStGzy/NCjyQEQSShpF27dn1ahCTEWElClCMJQRBJKEkSCjTF50CtSEKUIwlBEEkoqSlJ6L+EGV8HpvgcqBVJiHIkIQgywiTUSahkj4bXoCQ0cF8koSkgCVGOJARBRpuEBpZMwPAblYQCDTnj9p+p1KesuUl65IZPQgN/PomVp9Yv+qNOoY0GPt1Z/QlZcWDnA/tT9Ie9rPo57Yzqh0lJCIJIQkmSUKBRXXuoyZlTW0MmoeQEHGs/mXjy6+eXj2SjA5sN7GRg98L7U3S7WfVz2ilxWLJIQhBkYkko+VNO73b0pSGrQqxObBPJCoW2mxRNQnv27ElGn1ihJJQ82lnPY+qrfP7skmyzbclprEkoORxCJvv8YVh6o8l2YoWBSSK1nZw9Cu9P0e1m1Q8sj9XJ2alUkhAEmUwSypr/ClVIVh44rQ5sNlU/CR0+fPi6667btGlTNPds2rTpuuuuO3z4sCQUOONmzQ0Dn7Ksu5JQoeclptCoSd7Nrx8SPrI2WrROavtFO1+0P8Nst0Q7qSuGn+2SEAQZbRKKSd1i+JgPyTRDrpUqek0oFoaSMUgSyhL+42/OUxM4aQ08Do024STUHXRZJXDWj7aTWj8kfhVNGAPr55QUSuT5UWnIJDSw/UCSEAQZ6zWh2KOx4T3wxTck0wxca+B2k2KfE+qHodQYJAmVeKJTb0T/z3oGQyat6TPCJDRwTHUDJvXAWT+1TtGNhmwrZ8gX6nyhg5DsZ/52Qxrpt5Pafuq6+SQhCDKZJDRwbA9fIb9mYD97kp+Y7oWh1BgkCQ08+CFJKHBCSrYz9TGoO7okFDjTjy8JldjoyDszqoOQ38/87eaUBx6HQJIQBJlwEhr4Y/3ACt2MV4ch81NU6nfHDh8+nBqDJKHUo51zwFOTUFY7klB3REkoeZCzLmMEzs05JVlrldjoSDqTs/qo+lNou+H9l4RgEiaThLqRiJPzmpJTIed29PUr2k5Ohfxj4lv0gXKSUGxSST3+Oa/yIRNh7GyZYiP5fUL5m8gZIIXCR2CCSV1xYDshA7lo54fpT0h5zkYL9b/QK1ifJARBRpiEpoYkFCjnU/PdxIt4TiTNnxI6EVl1ptvw36KPSW4iOQEXOuaplfO32E2b3fPb6WacFcnzqtwJU7Q/IeVZ/SzR//yDmUoSgiCSUFKDklAj/u5YodfuQsbXcq34axuUIwlBEEkoqSlJqHKS0GRIQpQjCUEQSShJEgpUYRIq+jZBo0lClCMJQRBJKEkSCjTF50CtSEKUIwlBEEkoaVdxkhDjIwlRjiQEQYZJQpboUvQVZwpUfszbs3heLOWWooNaEqKNSichAKaMJEQbSUIA9EhCtJEkBECPJEQbSUIA9EhCtJEkBECPJEQbSUIA9EhCtJEkBECPJEQbSUIA9EhCtJEkBECPJEQbSUIA9EhCtFF4EnoEgKkmCdFG4UkIgPYoMaF0up1O758kRINUPdYAqKMSE8r/D53CSh67uEezAAAAAElFTkSuQmCC" width="640" /> </div>
<br />
Now on to the Groovy script which will call the REST resource to return the exchange rates, this will be for the last day of the month defined by month and year substitution variables. The response from the REST call will be stored and a data grid will be built and populated with the exchange rate data. <br />
<br />
The substitution variables are:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnYYgF-xZlz0jZMhBipE4y8JqUCPgUOhVLPvp03VaPMgEDoLs82J7lbEA8yOpWgJb90comQQQHyFbldgctx8l7s6pxZgZiCMZuqq8OI2VoYW2gRVhVTK9YwK9MXtZzT6FWZS7vqcMp9LQ/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="191" data-original-width="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnYYgF-xZlz0jZMhBipE4y8JqUCPgUOhVLPvp03VaPMgEDoLs82J7lbEA8yOpWgJb90comQQQHyFbldgctx8l7s6pxZgZiCMZuqq8OI2VoYW2gRVhVTK9YwK9MXtZzT6FWZS7vqcMp9LQ/s1600/image009.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=6575283218005807475" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
I will break the script into chunks and explain what is happening. I must stress that I am sure there are different ways of writing the script, and I am not saying this is the way it must be done. It has just been written for demo purposes.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
In the first section the “Plan1” cube is stored as this is required throughout the script. The exchange rate data will be held in this cube. The substitution variable values are also returned and stored.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-7hUt9sycpmC5vSiXhxn5P1ebc4Rzb7ttGTOSqVEQXXxSI3vQ65Y_2XL79-s6MLb2UEgeAWa57vIPS9hu8w8FqdsEwghoJRVxzTlO0pNiMa5lmhJUdtv3jgvNVynpCJVVVVMxIvEVd9s/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="201" data-original-width="605" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-7hUt9sycpmC5vSiXhxn5P1ebc4Rzb7ttGTOSqVEQXXxSI3vQ65Y_2XL79-s6MLb2UEgeAWa57vIPS9hu8w8FqdsEwghoJRVxzTlO0pNiMa5lmhJUdtv3jgvNVynpCJVVVVMxIvEVd9s/s1600/image010.png" /></a></div>
<br />
If this section is run the substitution variables are written to the job console.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibvFjAq8wik23ElCyD4kv_ebrmRLZYeuhKrT8dEi30ycJ-tScERLU5J6i04Rcowtb0OCCrjv7F0rhb3RZVu5ZmLb2hWRO1eVMqotJNvWrevU3fKm8a9YQb-7Qaumsy5CZvlkmumSvRbOg/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="61" data-original-width="422" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibvFjAq8wik23ElCyD4kv_ebrmRLZYeuhKrT8dEi30ycJ-tScERLU5J6i04Rcowtb0OCCrjv7F0rhb3RZVu5ZmLb2hWRO1eVMqotJNvWrevU3fKm8a9YQb-7Qaumsy5CZvlkmumSvRbOg/s1600/image011.png" /></a></div>
<br />
From the substitution variable values, the last day of the month is calculated and the date stored in the correct format for the REST resource parameter.<br />
<br />
<div style="text-align: center;">
<img alt="" height="166" src="data:image/png;base64,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" width="640" /> </div>
<br />
<div style="text-align: center;">
</div>
There is probably a more elegant way of returning the date, but it works. :) In the past I have also subtracted a day from the 1st day of a month to return the last day of the previous month.<br />
<br />
If this section is run, the Job console prints out the date that will be used as part of the REST request.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYMTMCUJ_zYbKWevxt8Uugwlr0xnJ8mFPfrzVtjphiDbtu6_moedLMoZbEwt5AWlYyBmQk3XV6-MNhgvtec-KcE2F4I9g_vIYmVUdRynljFVu2ugN5QNfYLiXysPOlhjERs830CjAx2_g/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="60" data-original-width="503" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYMTMCUJ_zYbKWevxt8Uugwlr0xnJ8mFPfrzVtjphiDbtu6_moedLMoZbEwt5AWlYyBmQk3XV6-MNhgvtec-KcE2F4I9g_vIYmVUdRynljFVu2ugN5QNfYLiXysPOlhjERs830CjAx2_g/s1600/image013.png" /></a></div>
<br />
The next section will extract the currencies which require exchange rate conversions. These will be based on the children of the “Input Currencies”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh42qTREd3ZI5dzpms76ms_Bi9njxaLiF8sszDLIaweN4MmY1vRf484tA9hcmT3eOscjm6989DESN8Lq-G97ziOOB3gO1RKL0tbQHi7szN2xWcZFA_oTlU2pEETZQWY_7_DjkEN1jlMwPA/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="133" data-original-width="123" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh42qTREd3ZI5dzpms76ms_Bi9njxaLiF8sszDLIaweN4MmY1vRf484tA9hcmT3eOscjm6989DESN8Lq-G97ziOOB3gO1RKL0tbQHi7szN2xWcZFA_oTlU2pEETZQWY_7_DjkEN1jlMwPA/s1600/image014.png" /></a></div>
<br />
The children of “Input Currencies” are retrieved and the member names stored. The base currency is then removed from the list of members.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtwAAADWCAIAAABtz8JxAAAVR0lEQVR4nO3d4ZGrOrYGUKfQwZ1Ybgo3ls5pYvH86BoPB0lbWwJs2b1WTb3CWEgbgeEz7nve7T//+c8dAODVbkIJALACoQQAWIJQAgAsoRNKvv/chtYDAMy5KpR8/7kJLgBAXhRKDj4mEUoAgLzLQ8nPI5PdJo+VwfrtW632wdCPxo9NtptXl3dDtNa36tm1T9YTzBIA/CrNUHL8r0nKe3a1h+n1wbjdGuJm8fqgnl2mma4HAH6ha0NJ6+XQE5Fd46FQEryVCQRBUmmVWi5P1AMAv1A9lBxPJGXj0ScfmZt6ZtzWW0dCyVD/cf2733QA4Ne6NpR0b9LV3zuC9slxWy+rf1MSDHFFKKm+FEoAoBJKzk0k1d9cyr/x3K4M2md+vtm1jwsLOh+tp9yp8q3RlAMAv8dVoYQ8EwsAd//M/Gvln/0AwMcTSgCAJQglAMAShBIAYAlCCQCwBKEEAFiCUAIALKETSv65/fvP7d9kXz+N4/a32+12e8Z/AXvbeMJwse+vr++vr+3C7q3t+u2abePW+rh/AHgX/SclyVCSzy5PSAnbIVYOJScuCyUAvLt6KNk+89imjcf61srMk5WflFB9jNF6vHH7W9y+lUK2zarLyScrt0Lc/r4JEK1U0Wo/uiyRAPC+KqGkDBzl+u7LaMhGhiiDyCnrq23K5UsfqEyEktbPNPGyUALA++qEku3L+InI9M83rScfmSci1fZzoSRZfDDuqOrfi1TfKpsJHwB8nrFQEnR0PJQEYSXTvrvh/aRQcpbRpyDlJgDwSeZ/vgm26gyZ+PkmePJxyhORVg1PduSPWwHgw6T+0LX1C051ZfI/Ca7+9rFdWbYM2sddBQXEnTxB/j/99cMNAJ/NP54GACxBKAEAliCUAABLEEoAgCUIJQDAEoQSAGAJQgkAsAShBABYglACACxBKAEAliCUAABLEEoAgCUIJQDAEoQSAGAJQgkAsAShBABYglACACxBKAEAliCUAABLEEoAgCUIJQDAEoQSAGAJQgkAsIROKPn+cxtaDwAw5+1Dyfef2+N/r67lfNX9etWefuQMA7COKJQ8P5GM9rxt/6m3zE/dLwDYuTaUbJ9hbL/0Vx9vbFdmhgjK2w20W94N0Vof13mvPcbY7W9rErp7V+0nqHA33PH6W/PQqjPZPwAEmqHklESyXa7eNctmyc7jxq0+W7fJzK8k3d0JBhrax27B1SSxWzhYf7XOuEHycANAy5NCyf3vm1/wjTzZedx4NBAESaVbZ+buOx1Kqu2Did0ujNa/22S0sOkQBgA/6qHkeCIpG4/evEf7b711JJQM9R8XX316kSnmSCjJDJGfE6EEgEs9KZQkn+eP3swyTy9eFUqqLyd26mmh5Nyfb4J+AKCqEkpOSSSPTb7//kOH3fryphv8fNAdolxfLlR/y+gWswtVZZ9l+2qpEzvV6r8soJzqofpH56G1v8H8AEDg2lBy4uYfwAwAQODaf2Y+fnLwe5gEAOjy//sGAFiCUAIALEEoAQCWIJQAAEsQSgCAJQglAMASKqHktlHfprH+aq8aN2nZeVvNW8zDC4/j4vOz7Hl+4ri7rr6/vr6/vrYLu7fK9W8h2K+LBKdNvNUVxbCm+pOSx0ngbBhi3n58xu5ftxfvMj/d2PEuOzIqGUpay+/i+aHkPnXOfOppRlUnlJTLu6j7eFm9TlW/VG032Z1tt78F487137LtZLsj8XJ16Nby0LzFRbZmI96kOnQw/6321f1qrWz1f7DOU/a3239QZ7D+LeZnt9VEna3loMigfXK/WiWdO2/lyscNO5NCtjf46vLuyUpr/b3xGCbz2GZXczB0vC9Ju/Nqu7K6fG8cstb5dq8dFD7VWCiprik/5Luzs9pneZEK2mcadPtvaW1YvtVq1m3fKrg6b2c5cf4zl4l435MbZuqc6LbVT9x/a8S5gpean4N1fvb1oVwzFEqCZq0HEtX1ZeCotm/Vlnmic0ooGb1+ttrkDx+f7ZxQUl24Fbr9Vxt3x+32WXYV9HOkz1PmLSimNZ/dYoLadheL7vEKSuq27xaWqTPuefR8C/rPHOW4sKXmJzj9Jo570CZ5nifH3S2XjbvjdvuM+2mZCyX5rraPSTIhY6KeU8Tnf7k8cR7Go/Bhrg0lzVEHL3zxuHGfoxfrI32eMm9nGZ2f5DyM9j+0YabOiW5Hl+MRk5fLd5mf0ePeHffdrw/rhJKh/uO0sftN50QnhpK5UfgwM3/oetFFp3utf+HNbJfcuxfKI/N2lmeGkmB+LjqOuxHn6rkilFTnc+X5mQgHn319yH8MM08vXhVKqi/zoaQ8f4KWrZfV62frsyCU8GPsPwm+/W275r4523bn3663ePPq0K234pW75WgWertcLiSLmZu3s2TmM64z2N/WXpRvxf236mlN1/bd1v7uGpwyD6P1rz8/3XGDnuP+q4WVQ1fHjTePi8yU2up/2+Ce1vrvgcs/Rw1+i6mub70V/+Fqq5774GOSoUnonhJlm6HjOFoPb80/nvYb/bZPeGt/f9s8bP3mfe/6yMm54jHJcyxVDFcTSn6d1neaTxV/h/s983APv9Gy9WHzEzw+qVpt91erh0sJJQDAEoQSAGAJQgkAsAShBABYglACACxBKAEAliCUAABLEEoAgCUIJQDAEoQSAGAJQgkAsAShBABYglACACxBKAEAliCUAABLEEoAgCUIJQDAEoQSAGAJQgkAsAShBABYglACACyhE0q+/9yG1gMAzLk2lHz/uf38L7/J8z0qvLq3V83A9igwZ8EJXLCkU3T3q/puvNVSc5X/PD5arlP/avUE1q+QqiiUHE8k2+Xdy3SFZ3pOXDje27kh6ayufrkXzuRZ5+27nAxzdU5EmeebKOO6yo+cP4vMJ5/nSaFkt74Vt6vrt89aqm8d/9qx7b9bT2ag1tCZkia+HgXzNjdF270oa9stV+uv7nXm+CbraQ1R3aPd5kE9QftgxCPnbfe4nHXenntedfdrqP97cVzi/Wr1lun/xPOzu1/B/Ce7KverVU93fXU5X0ww7UH/92KeT5z/4Pyp7lTwOZo4LlykGUryn/xAfDGNe259rjLtg3qCOndtJvrvjpJ8OTrJ+ZfJfsrrQqZZvD55fKvzn6ynqryolVex3bit9tVx3+i8Peu8OmW/4uPb2p2g53zBp5yfLWd9HoNNWvUE67vLE2Vk+n/J9aHbYauf8iXPd20oaW04EUqq7Xf/G6qhO9ZE//lRyiEyPWS6ne5q7qKT7yqYz8zNPlNP3Hi30KonaN/qNrNfu22HTqqh87YsqdtPMG6+n9HPy/TxTZ51J15P5s63zMuMeAbOWp4oY7r/q68P1QZx/6MXea5TDyVDJ1NS5qJwpP1oDd2xpnd2bvbOulhMXwSfcNEZ6j8zXZm9S4aM0faZOofKm2iTmbcrzqtTPo8LhpK5eqbLSPo9oWSo/4MHIrkVz3dhKEl+25i+mB78eB9P4plRgvXJ/X3aRTBTT3BMu4MevOhUXz45lIyeJ5l5GA0lQ+dt8jOYGfTqUJKvc+LzdbD+jwklR86Hg/23+skUMHF9yDQYasbTVELJKYnk0f679zdH1ZXlBaXbPlle0H/57mj/rfbV9XHnczsVDDpaf/WtcuH48UrOf7Xa/B7tKm/V02rfqjCzX/n5Se5Ift62e9HqZ2L2ho5vpv/R/UpO6Sn1d4/+6H7NzU+mnqDzU86HoH1+nk+c/9HzMO5/aB64zoWhBC7lhIQtnwg+gH9mnvfjaw3s+FDwGYQSAGAJQgkAsAShBABYglACACxBKAEAliCUAABL6ISSf27//nP7N9nXT+N8+4Nu/7NbnujkgurWddtoNXhySVW3wvHezqrtyOjveN7uxvr++vr++tou7N7ari/b7FTfjbfq9nlQsFOXjpu3Wj2B4xW2egjOw4tMf1qvKCYz7vZSc7y3c0tqruk+KUmGjKdlka3dxX26k1OLegPbG+RrK/mRiUcrfKiO9FB+Du/vc94mQ0lmOW8iypyllZOeOVyy/fqh5Lh1Qsl96nP3ksts9YLzwnriofuhZPvMY5s2HutbK5NPSqoJrvw2uVtuhax7bdJ3javDbRfKzqv9ZOqpdhVMQrL9ufPWWg52tmyfrHNXUn7SdkOXFbZeVossO6/O21yd8frqXmTGLTffLeTr2Q2a3LVy3u6bm0Ty7th9rBJs1WpfPokpe6s+TujeyZL1BMksXl9dzj/26N6hW8utJ1jH5616XKo9B/3HUxEfqYOJpPo5bV0fRj93262SWjfToftsa8TWhz1zfSj7uRcXsXsxn7uuutVWQkkZOMr13ZeB6kRU32o127UpT6bqcOU0xbPW6qdVT9D+FKfPW6vO7skX71qrgHg+W11Vz/jqy+78x2um68zUUz1e73LelmsmQklw/8iHgGqH5cuhzafrCfoJ1neXu7rhL66nVX+r/+5+HTkQrX66L+Nth4xeVyc+d+XLQOvGOnHDvW1kimndL1pbVS/v8QUnGPr/y3Eouf89KUFSmwslUWXpeFVe3Hd2newW4ptB9bjGBzU+tNXGmU1On7dWm2BCupXEm0/MZ1xhOVYwn/Ga8rOUrLN7vrXG2u1dt5/dwrnz3Jq0YKudiZtlvGH+LhXccVtf+o/XE/RzZLlrLpTkuxqdt27x8eOQ7hOa5CjTgtO7+tmZ+NzFo5Ra99mhnyMy+xK0ybw7ND/5ocdCSVDxC0PJbrnbOH9xz9R5pM2Qq+ettSa4O2bqPDKf+UMZjJtckw8To0XG/ax/3r5vKLm0nqCfdw8lQ/1PhJK4/ZGtJpwYSuZG2Ul+2x/NJZ8TSoKfb4KtYpmLdf4bXnXbuHF5cR/qp/XWkWicccW8De1IKwrEhY3OZzJg5cdt9XBvzFvQz9z5dlY/rzpv82fy3A14IpQE3+C73Z5VT9BP5unCkYBypP9WP5kCMqFk9OebZLPRUFK9ArRatl62rg+jn7vuu1tzfz5RHXH0unp6KImv0s2uMn/o2voFp7ryyG9d293YLZTtt2t275ablMtxD61+MvVU9+sU585bq5PMvJXjVvupNq6O3p3Pavt43FvvkFXnLeinWmfQf2v2qstD89/qIainW2TZz6NBubIleCZfvpt5jB93FTRuvRXU82jQ2qlkP616yrKDeYvl+x+d5BP3d2jooJ77VCgZatw6/8sP2ujnbqKe6v134ibbqrO6Pi4+uJ6Uve3eyszDX5X4x9O41NCnkTX9toM4egs8d3N2rntM8hxLFfNkQglLCL558I5+23E8kipGn3nQdeljkidYrZ6rBdf/4AnN/9cIJQDACoQSAGAJQgkAsAShBABYglACACxBKAEAliCUAABLEEoAgCUIJQDAEoQSAGAJQgkAsAShBABYglACACxBKAEAliCUAABLEEoAgCUIJQDAEoQSAGAJQgkAsAShBABYglACACyhE0q+/9yG1gMAzPntoeT7z+1j9gUA3loUSj4+kfz4sN0BgDd1YSh5PIT4Wdhu9VjzWLltXI7Sat99mSm1VWTQz3Z9XGd36OqOx8vB1GXq2bVP1hPMEgCcohlKTnlMUr2BlTfCXePdfTFoP7Q+WeR0/xPjdmuIm8Xrg3p2mWa6HgA40eWhpLqy+qShtRDfXKsrW08yMkUGXVXXnzVudx+DTYbmudXnRD0AcKJ6KDklkbTadzs/HkqOFDn65CNzU8+M23rrSCgZ6j+uv3osAOBE7x1K7o0/jBgtMvn0pVXA9Litl9s+XxVKqi+FEgCuUwklJyaS1m8Z5Vvl8r24N1d/EwlWZn5GqRZQ9lNtmdmv/BTFhQWdj9bTmva4nrtEAsDFLgwlfBgnAACX8s/M05d/9gMA04QSAGAJQgkAsAShBABYglACACxBKAEAliCUAABLuDCU3P5ntzzRyQXVPcnT6r9tPGE4ADjdtU9KdqFkupNTi3q2J9S/HeLdpwuAX6seSnYPObYrg+Xym3orlJRf66vDbReqjwGqjwe69Rx8onArdNsP1R/U2VoZ1BksH5wHADhXJZRUb/DVt1rNdm1ujbSxe7m7Wd7/vp1X2yfL7ra/1Gj9B9dX25TLsggAq+mEkuCt5Jf1ey2UVJ8EtBbiEDPx8CB5Sw7qbI0bTEL1ZVB/vLI6b/HQmfkBgBd6RijZLXcb50NJps4jbU6RrD8/LXH/rbeEEgAW1w8lrWDxzFAy1E/rrWQIOF2m/uDJxylPRJLHCwBeqPOHruXd67FytxD83LBbrm5SLsc9tPrJ1FPdr4sk66+2TO5v2VVQQNwJALyQfzwNAFiCUAIALEEoAQCWIJQAAEsQSgCAJQglAMAShBIAYAlCCQCwBKEEAFiCUAIALEEoAQCWIJQAAEsQSgCAJQglAMAShBIAYAlCCQCwBKEEAFiCUAIALEEoAQCWIJQAAEsQSgCAJQglAMAShBIAYAlCCVzr++vr1SUAvIczQ8ntdjulk+P9fH99/dwJHguP5cf/jha6vF+ym8ddekpc1/m25+lRnnOSVD+PAKXXPCmJY8dFoeT+93fWzMXx3S+g6n/tENtAfFH/x2/2QgmwjkooeTyr2D202K0v39qFibif6iaPBpl+Aq2bQRBQyu+arScr5dOX3fJuk4kr8tC4uxHLfSzHjfsP2lfLSO5X8LV+aP6DcYcehu0aJ+up1h8MEQ+9bTN6XpVvBfVXh9su5Oc5eRzL8zCYEIAf9Scl29t/NZfU+yreCvqJakr309K6CGYulNU2rf7L5eomu9tDsvhkzUEB1XHj/uP2wY4M5ZJgw+78t9pP1FNtlpyfpOqdvvXuxHm1+79B/WWCaQWauJ9WPROfNYCdZijpLsdbPaefUcE3v/gbXtlPdznTvltk68trq/N8nd39Td7kWnV26yl3Kjn/8fHKF9MaYjQkjY4yd7yC9mUoqc5Pa2Hi+GaOY2sfAQK/LpTsFu7pm0Rr/RWhJH73YChJ3nQzoSSos1tPa2UmlEyPlWl2Yig5cr5Nn1fdxvlQkqnzSBuAndeHknir0RpiQxfxVvvdts8MJZmb3FDICOrvtr8ilIzWE3S+SCjphsjTz6uJUHLkc9FaKZQAE6K/Kcn/gWr1re3LoLeD/eQFT6Fbj6mrW23XlwvVUco2yVJ3ISC4aQ2NW7411D6uc2ingnrKtzLzkyymbJ+fz2T/2w2DoatvlQtzxzc4uHEPwS5nJm1ofgAe+k9KYMv9ZpQZA0hq/ifBcgkPvgED8AT+mXkAYAlCCQCwBKEEAFiCUAIALEEoAQCWIJQAAEsQSgCAJfwXxhKNFZc0LtIAAAAASUVORK5CYII=" /> </div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
Running this part of the script will print the currency members I want exchange rate conversions for.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEjo-7kmbCQ222Aeq3TKTErly2JHmNhyphenhyphenj5_o8mavlfM_COArf3dMGczFlns0D2MF49tv7ci3yP34u1wyb_S_6bPBMWtXfKVvc3L7JIQfIxDC588P7m5MpGNJfGYXMef2jpOCteHPnCwoI/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="63" data-original-width="488" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEjo-7kmbCQ222Aeq3TKTErly2JHmNhyphenhyphenj5_o8mavlfM_COArf3dMGczFlns0D2MF49tv7ci3yP34u1wyb_S_6bPBMWtXfKVvc3L7JIQfIxDC588P7m5MpGNJfGYXMef2jpOCteHPnCwoI/s1600/image016.png" /></a></div>
<br />
Next, the correct currency format for the REST API is generated. Each currency code is prefixed with the base currency and an underscore.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVL8ejOE3lGGFCl_BYh8-yEXDW2zArm2tGNf_tQFujUIVzUB0TOzcidlpP4vxKqiS9eLpnEaf3KxZ-NsKwxopTvs2BFuKl9BE8dyfsllUrCPgZMrea7w0QdEg6qO0e4YB1Ru53RwwIh9o/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="88" data-original-width="489" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVL8ejOE3lGGFCl_BYh8-yEXDW2zArm2tGNf_tQFujUIVzUB0TOzcidlpP4vxKqiS9eLpnEaf3KxZ-NsKwxopTvs2BFuKl9BE8dyfsllUrCPgZMrea7w0QdEg6qO0e4YB1Ru53RwwIh9o/s1600/image017.png" /></a></div>
<br />
This outputs the following to the job console.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZJ3FRqnHlHhnM7oJztItKoCnNaYTZO_FRtcpLPECAT_Sn0Pjqg_c0cW84coMRHyxNjvSkYLEQuAHSFOKMI0ROTc9E4TUOvgiI0XlcIt28cFbVoxaqAvbcUwjufdpGrW01ox-K4lQnPBY/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="63" data-original-width="714" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZJ3FRqnHlHhnM7oJztItKoCnNaYTZO_FRtcpLPECAT_Sn0Pjqg_c0cW84coMRHyxNjvSkYLEQuAHSFOKMI0ROTc9E4TUOvgiI0XlcIt28cFbVoxaqAvbcUwjufdpGrW01ox-K4lQnPBY/s1600/image018.png" /></a></div>
<br />
The REST request can now be made with the above information. I covered this is in detail in the last <a href="https://john-goodwin.blogspot.com/2019/07/epm-cloud-recent-web-service-and-groovy.html"><b>post</b></a> so please refer to that if it is not clear. The request is made against the “exchange rates” connection including the parameters.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGj0_90aaWcA2ASJ22-GZgtPut_iHIg-n4Z1IGP7gLjr80G0mOuH1GJOs0PJ6o5Bz1xyiKvy_o1vRbOhZ2XmJQ9Ywmp0o3Sw1WC1zfonEgqg2PrAmGk7bKUyDtu_mTyxg_eBbnjAtejVo/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="102" data-original-width="716" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGj0_90aaWcA2ASJ22-GZgtPut_iHIg-n4Z1IGP7gLjr80G0mOuH1GJOs0PJ6o5Bz1xyiKvy_o1vRbOhZ2XmJQ9Ywmp0o3Sw1WC1zfonEgqg2PrAmGk7bKUyDtu_mTyxg_eBbnjAtejVo/s1600/image019.png" /></a></div>
<br />
This generates the following URL to make the get request against.<br />
<br />
<b class="yellow">https://free.currconv.com/api/v7/convert?q=GBP_CAD,GBP_EUR,GBP_SEK,GBP_USD&date=2019-05-31&apiKey=2487c34bd2e74b3e226c&compact=ultra</b><br />
<br />
The response in JSON format is stored, the JSON is exactly the same as I provided earlier with the REST client example.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb517PhiolBP2PMtA1HxcEYxbZhLNlKN5DgdqjtRPBfW_d7QY7dqTX_j5KNtktoBeC44pdenQpAkutYHZhE6TZaeOnWRf_NxkUvShFVpTEGikW-LjvdCOoseDbdq4OHf-qLviamxsc5Wo/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="99" data-original-width="654" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb517PhiolBP2PMtA1HxcEYxbZhLNlKN5DgdqjtRPBfW_d7QY7dqTX_j5KNtktoBeC44pdenQpAkutYHZhE6TZaeOnWRf_NxkUvShFVpTEGikW-LjvdCOoseDbdq4OHf-qLviamxsc5Wo/s1600/image020.png" /></a></div>
<br />
The JSON is converted into a key/value Map so the values can easily be processed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTU9-mjyFH81wmLz_VW-3sueJtHuFrHebJeoKQ9P9Z1VIU8lmru93UvpQ7waYGAtZ4FcV6BHTZyjZkI3BW80jIT_A3SftAjGIbuS7B1xPXvZcMJJcVR8pfL1sNNQlqR5tWd03iptjkyXg/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="67" data-original-width="611" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTU9-mjyFH81wmLz_VW-3sueJtHuFrHebJeoKQ9P9Z1VIU8lmru93UvpQ7waYGAtZ4FcV6BHTZyjZkI3BW80jIT_A3SftAjGIbuS7B1xPXvZcMJJcVR8pfL1sNNQlqR5tWd03iptjkyXg/s1600/image021.png" /></a></div>
<br />
The Map contains the currency as a string and the date and exchange rate value in another Map.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrDCELDs6MoOugxkqevahdUEJRO7LYi2bkRgx1-43963FKp7WK1N8Elk2eT-pmgVwbjtzqX97-10i4cnJH1UiVnCn3-Y5JHRQ90yLj12SNvD3ANQuXNuHJPdt9mYZFBEvU9SN_pDeL-As/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="101" data-original-width="622" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrDCELDs6MoOugxkqevahdUEJRO7LYi2bkRgx1-43963FKp7WK1N8Elk2eT-pmgVwbjtzqX97-10i4cnJH1UiVnCn3-Y5JHRQ90yLj12SNvD3ANQuXNuHJPdt9mYZFBEvU9SN_pDeL-As/s1600/image022.png" /></a></div>
<br />
Now that the exchange rate data has been extracted and stored, I can move on to building a data grid which is the equivalent of a form grid to store the exchange rate data.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjOr2IZwTqw6tip9EsuzuJmkOYPUS1qZALtbdRIV3hV4JFG0YUu7uLtpvSShn0oDSEu6BlpgIIkHbZRoAFEc82n67qqe92pWpyXq-FCRtJwRWycvrydm9SATPLtwgG2c92D6lV2BAG_mg/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="69" data-original-width="719" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjOr2IZwTqw6tip9EsuzuJmkOYPUS1qZALtbdRIV3hV4JFG0YUu7uLtpvSShn0oDSEu6BlpgIIkHbZRoAFEc82n67qqe92pWpyXq-FCRtJwRWycvrydm9SATPLtwgG2c92D6lV2BAG_mg/s1600/image023.png" /></a></div>
<br />
The above would produce the following POV and column in terms of a data form.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaO8Hynj7b9LC89ty-qr34qqW4JWA2Oi20rFeVjZN7OZH9PYW55gHi1h2v7uF2nvJCp31Ude2X2MBC5y9U6t0jz57qEK7BCR4LK2UkxbibhZdaMs_J3ki_o7TgKcVIywfgZWiCstCG6cM/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="95" data-original-width="375" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaO8Hynj7b9LC89ty-qr34qqW4JWA2Oi20rFeVjZN7OZH9PYW55gHi1h2v7uF2nvJCp31Ude2X2MBC5y9U6t0jz57qEK7BCR4LK2UkxbibhZdaMs_J3ki_o7TgKcVIywfgZWiCstCG6cM/s1600/image024.png" /></a></div>
<br />
The final section iterates through each of the stored currencies and values. The currency code is extracted as it stored with the base currency. For example, if GBP_EUR is stored then EUR will be extracted from the string. These are added as rows to the grid. The grid is then saved so the data is written to the cube.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAdi3fvqwR2pH6ZilqtLQdTLhwXf3RKBv1pfSdTKcRW0iyma2qFO4yRprTv6postGpfl-thJkDXwqp7Ry7NVt53KJBjsOwrwsk6TukDkJfAgAsIk50Ezl-pfwbBLJqiS5SFwN1OFjWA98/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="211" data-original-width="536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAdi3fvqwR2pH6ZilqtLQdTLhwXf3RKBv1pfSdTKcRW0iyma2qFO4yRprTv6postGpfl-thJkDXwqp7Ry7NVt53KJBjsOwrwsk6TukDkJfAgAsIk50Ezl-pfwbBLJqiS5SFwN1OFjWA98/s1600/image025.png" /></a></div>
<br />
This will have basically produced the following rows of data in the grid.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlWbw5pUGtLobTT7SptjR0_aXYrgcW8l4h1j79OWEcKDYHLirjWZKNwUKTAK2qeZ3CS5mU0xTHyTh4Vy381-NXisdOJ2a4u2slxAyAOZOQ2eEb9fcLn0H9jdAPIQG4y0rhCGOwf7P917k/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="149" data-original-width="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlWbw5pUGtLobTT7SptjR0_aXYrgcW8l4h1j79OWEcKDYHLirjWZKNwUKTAK2qeZ3CS5mU0xTHyTh4Vy381-NXisdOJ2a4u2slxAyAOZOQ2eEb9fcLn0H9jdAPIQG4y0rhCGOwf7P917k/s1600/image026.png" /></a></div>
<br />
Let us now put it all together. The rule is added to a menu and the menu included in the exchange rate form.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
<img alt="" height="198" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA9gAAAExCAIAAAAInJ1FAAAgAElEQVR4nO2daXAUZ56nK/r40o6YLzsRHb3flg+eiI2ZD72zG7sR0+3ZjZ71TM9Mz0zMhGNj24Xvo93HGCTAHAbLUAIkQLY4Le77FkIHtxGHDlBVdTNuGEzbi902GGOBhBFu221o135IKZ2qzHzzn5mVlW9WPU/8wiG9lcebP7KqHqVTpdTDNfMIIYTom8nlS7qGEEJI+ZKK/z2GEEKIY5BvQgip6CDihBCiZZBvQgip9Ggn4umazMRaj6RrMvYVPddSrOs2B8mEhXv0tU2/hZhLGon9H5EQEir4NyGEVEdSpr2la+Y9PHluevLc9OS5D09+WZKxheema+ZZthMwhrNGt7x0RfFmA0+gDMdICElsonitj/2gCCGEOMQU8XnpyXPTk+rSz7+Ufn5O+vnZY/9VZE76+Tnp519KT6pLh3Zx0zinzl/WtHrLqs27V23e/dr4GCOvrNk2o3Glsby51mNT5y/fsPM1p7Ws6zat2Tp5XrNqJrWZdE1mTlPLzrauJS1bzBG3CT8ypf7Fxa81r93muOtVm3a/tnn3otc2p2sy85aua9myZ/mGnY9PWyDqZGy/P5uzZMGKDSs27nI8qFWbdq/ZtnfS3OZ0bSazdF3jyk3PzloU+1lFCAmUavPv+K9FEUJIvBkV8Ydr5qUn1TUsW7e37WBH11F59rYdbFi2Lj2p7uHJcwO/HBtSO3lec1vXkbyMg0e7Zy5ala7JTKytT9dknprRkMvlJCtms7lVm3anaxwM25hGbf1Sc+GGlRvTTpeljZG6V9YcPX7Sc48LV2xM12T2tB/M5/PZXG5UlAVX5R+ftmDNtr39Z86qt9/T1//ECwtr65du2Nm2fse+Bcs3xP3mSggJkNK+uFfGURBCSIVnTMQnz01PqtvbduArye4c79ydToNdRzs6j+7vOBxGxA2pndG4ssg4c04ULTB/2XpjI09OX3i6tz+bzQ1ks44rmusaX7yyZlvaZtjGt+2HjuVyuYGBbDab6+nrf3pGQ7p2nDcbizWt3lIkxEW7G8hm8/n8rv0HjbW27u3IZnOne/uemdnoXUtt5snpCzsOHVNsP5vLZbO5bDY3e0lLuiYzs3HVio07l67bbng/ISQ5KeFreuImTAghVZ3iK+JtHYcdrnzb/XssbR2HFy1fH+qKeG3muRcX9/adMRS549CxzNJ1NZmlk+Y12zM5s7TulTV7Og4ZV5ezudyU+mXpmszTMxp6+vrz+fy+riOT5jZPdll3ScuWM2cHsrlc/5mzT48XYkOvM0vXGcp75uxANpvL5/Prtu9LW5Td+GLWolXGxfV8Pr9jX9ecJS2TiyY8t3nS3OaazNInXlhorLJ1b0c+n+/tO/OM5xXx2ky6JrNjX5cxk9O9/UvXbZ8yf1nxEc1tnjyv+fmXXzFWeXJ6Q8PKTU2rve69IYTolVK9mus/Q0IIIcUpvkd84uS6J6fOk2fi5Lrw94hv2NlmXPTdvKdd+OuJyzfsNFZpP3g0XZN5akbD6d7+fD6/fV+XesWl63cYxv/yK2vSY3e2pGsy6drM4y8sOHGqx7iYPb1hxZHjJ42vR9W2dnSxR6bUGw/lcrnR+8iVMXaxrbVTIuJW0c/lcidO9/6irslr+85fE0K0T0lex/WcFSGEEO98JeIPT5778OSX05Pq0pPq0pNekqUuPanu4ckvh/nglGdmNvb09edyuaPdJx+ZUp+uyTwypV75aX31hm7u6zps2PDzc199ZEp9b9+ZfD6/s+3AxFpjC8V5ZEr9I1Pqp8xfZjiu4dCGJRsbXLVptyH3xlXw+mXrjW/bDhxJj32GYLomM7Nx1JK3tXaOzdZ1wumxtXyJ+M62A7lc7uzAQJDL27g4IclISV7EtZoMIYQQf3H/1JR/nVOc58d/bXxwyqSwn5ryUtNqw3ebVm9NWy9Ru2dibX26NjNnSYshxItWbU7XZHr7R0Vcve6CFRuMK+L1y9abm0rXZH5R13R2YCCby53u7Xt6RoPh1h2HjhkLz21em67JGD8nrNy0y/gBYOqC5aZne8xWLOLpmsxj0xacON2by+VeP3Fq5qJVLy5+bdbYf60xR2oyS0O+B9t/AdT6UOne6SPZYKnmoCgh6kOLqHC3YynVLhTbcXvIGFdPQIczpCwJ//KtyTQIIYQEz7h7xBuXr2/df7Cj0/KrmZ0ed4rv23+oMdw94k2rtxiyO71hZVp4c0VtJl2T+dmcJWfODuRyuZYte9I1mb5REe9K12Sentn46NT5j02d/9i0BWYen7bghYUrTpzuNX7N8ecvNRmbMva4a/9BQ1kaV21Kjzn3tAXLDefuPtnz+LQFhlJv3duRG/N1yQH6EPHaTLom89M5S84ODOTHfq/Uk8zSddLeXGJXH3OkIq3ITcQli/ndbKQryrcZhesHFnES+oU79gkQQggpTdw/NcXtg1NsCfmpKU2rtxrG+cLCFWk/Iv7TOUv6z5w1Rdx6RbxpzdbevjPdJ3tOnOo5cbrXjPnxKRt3thnbMXb34uLXDPE9dKzbuIPFuJUlXZPZ3tpp+O6KjTuNvW9r7czlcqd6+p6KRsR/NibiEna3H3TdmjhCEXe8wmpe4/Q1rligaFChdPKdSrYpLMGtE7/j1o07LlzaYwnwbyo/3jB9qvfu9185IQnzkh3jrksa46OoCCGkmjNOxGuMT01ZP/qpKe4fk2L71JRDIT9HfF7zWuMNtWHlprT01pRMujYzo3GlIdbGPS191ltTajOvbd6dd2Fvx6HHpy0wWpho+eXL/NhVeWuentFwurff+ByVX9Q1pWszq7fuzeVy2Wxu8rzmiRHcmvL4CwtO9fTlcrnuUz2LXtvctHrLkhbnNK3e8tzsxeqtSSJxJjc5c7MoxbhwAfsybhOOYpvCY3fcrGRcsZ0ojiXwcfndta8+Pc8QX//KCUlcFo5hE0KIZrGKeLpm7FNTJr3k71NTQt8jbl7Y7jryenr0dyLrFfM21Dk9dmU6n89Pmb/M8suaXekx921euy2fzw9ks8ad3zvbDuxs61qwfEO6dnTXY58IvtV4a9+yp2Ne89q9HYd2tnXtbDuws+3Arv0HduzrOtXTl83l8mOXn82b2tdtb02P/WqpYsLGbM2PL3x21qL02O9xOh1dfbom09p5OJfL9Z85+5MXBX8mszZI7dbIHdRzAfm43xUl8w+zzbwNt+VLIrJu46U6lijq8vtP49ah+uyK4gzRJrFYOMJNCCG6RodPTUmPfWZ23nL7h2eM37nM5XKHXz8xsTbz5PTRzxE3rohPHDPaxS1b8vl8Npvr6z8zr3ntuI3UZtK1mWdnLertP5PN5c4ODDz34uKfzVliFzID41PDZzSufGRK/cmeXuOTDV9qWi2csHFFvKevX3JDy9yx/0tw8Gi38E70MPHloEXLxCji4SejHoxCuB17lkhqyGOJ9Lg8d6T+2u2UK9U0tEnCFTz2tytCCKnEpEa/Ml61DQV/fo6PGDpuvFsEncTzc181rlvn8/ltrZ3TFiz/yYuLn5m1yJ5nZy2qySxdu601l8tls9l8Pj97SUu6NvP0zMae3jERH7um/siU+nRtZuGKjeabfdOarea4sczm3e3GQ6s27zYm07R66+ne/pOne0/19Bk53dtvfMCi8RmL6drRTzbMZrPZbHbV5t2T5jY7ztbIc7OXpGvHroj3n5k0r/mZmY3Pui0/s/EnLy5+cnpD+8GjxsQOv35ibvPan85Z4rb8M7MWPT2zMcxJkM/nJQ85fl20rnzc74qSiYXZpn0w/DGqx8t5LJEel+e+fM05imnEn6AyrfwgV0IIIYmPKeLz0pNfbli2tnX/wfbOI/s7Du/vOLy/48j+jiPtnUfaOw+bg+0dR/Z3HG7vPNLecbi943Br28HGZevSk18OfMnEEGLzQ7sNevr6T/f29zgla/kskWXrdxgbeXJ6w6mevmw2t2Nfl7nN9JhzZ5auM/4MZz6fX75hp7nrKfXLBrLZbDZ34nTvE9MXGh83nq7NPD2z0ZpnZjY+PbNxR1uXcSfMkpYt6drM2u2t5jSy2azjbE/19PX09bcfOpauzWxv7cxmc2cHBhSHdrq3/3RvX2//mcnzlj4zs/H4ydPmLvr6z9jXOt3bf6qnr//MWeN+G/UtPYpIRLzkMlpC0UTEJf+g4f8JEPHgwcIJIYQ4xSLik+p27mlvbTtgZN/YF8bXX327/6txI3v2daUnBRfxdG1m9HPBm1qOnTiVl3Gqp69h5cb0mGo/NaNhIJvN5/OtnYfNDRoxFnipafXAQNZYd1tr5xMvLHx06vyj3SeNkfkCkf1FXZOh8rlc7l9ffiVdm2las9W4H0aNcc3evPTuybbWTmOPz81evKf9kOfyR46ffHTq/MAWrlaZvJP9GPt1XFc+LlnRuiO3CfudjGSbAY7d77hi++GPRbF6mF0Idx242ADTc9y+dsHCCSGEuGTcFfH5r7bs2NW2a0/7biN7LdnTvntP+6497bvGRnbtbd+1p33H7rb5zavDXBE3Ynjk49MWzFu6bv2OfTv2dY2mbSxjI5t2729YufGZmY3mWunazOMvLNi8u31n24FX126zjhsxXHzW4td2th3Y1tq5t+PQnKbVz7/86q79B3a0da3bvs+8Fm5Oxp50bWbJ6i3Gb3DWL1tvLPnc7MWLX9u8eXe7fcLb93XuaOtavnH0AvxP5yzZtHv/jrau7daDais+wG2tnT95cbE553Rt5oWFK1Zu2rV9X6e9EGMXY39XKFoRT4+5V378Nc6Si7jbjuwTk09Gss28Dc/dhRkPXKywH7d9Sebj97gUc3B81G2DwukpDkfHYOGEEELcU3yP+MRJdT4/NaUu/D3iRvyqpK/lw3iq2xZMV44o4edcAdFds+I+hArop8KDhRNCCHFPavwbxrx0zdz0ZD+pmVsSCzdj/D0dzzhqseO4GeNv9Bgp2pdwbuYWzL1Yt+kW+ZKOh+C5YoX5esKud5b9ECqgnyoKFk4IIUSZVORvRYT4jNv9EglKpIdQAf1URbBwQgghXkHECSEkgmDhhBBCvBJGxOcVJ6I/4UYIIcnKZH+ZWEMIIaQa4yDieQAAAAAAiBhnES8AAAAAAECUIOIAAAAAADGAiAMAAAAAxEDK/vubiDgAAAAAQNSk7H/LHREHAAAAAIgaRBwAAAAAIAYQcQAAAACAGEDEAQAAAABiABEHAAAAAIgBRBwAAAAAIAYQcQAAAACAGEDEAQAAAABiABEHAAAAAIgBu4jzlzUBAAAAACIHEQcAAAAAiAFEHAAAAAAgBhBxAAAAAIAYSE2cUj8+iDgAAAAAQOTYRJwr4gAAAAAA0YOIAwAAAADEACIOAAAAABADiDgAAAAAQAwg4gAAAAAAMYCIAwAAAADEQAlE/Ecz1loT0UTLgOfk1ccYewNF/xCOiWiPpd1sjETUXiVVBAAAAKUilIiXTfjKgGTaigPU4dgR8fBEUaCGFd24efP17lMt6zc1vrKs8ZVlq9dver371I2bN+OeFwAAQHURXMTL7HyRIp+zp4hHM0ERiHh4St6hbhXdu3fvyOvdCxa/6phDR1//4ou7cc8RAACgWggo4ppfG/aLrwnbF9bkeMs/DU0OvIQojqgCRPzevXs7dre6WbiR7bv23rt3L+6ZAgAAVAVhRVzxqOfCRePWbyVf27cj34Xj9ITO5EvEPTer3rvnsasn5mvJAD9ZOU5PUoXn3n31Fmzy6s3KH1Icl+epFfL08MvhY67Xwq058np3mL0AAACAkCAi7tcJAliywvA8V1GbkGQjvo5I7mcK+/Q1f789C5eUt+e5QKmO1Nem/E7eb4cBjivk9IIdghuDN24uXNJc5NzGQ0WDC5c0D97gfnEAAIDIST0ypX5c9BBxx8XkW1CvqxCmAEcUcm7BOlHPypfkKRoobb0BjlQ96GsxYY0BOhQel9/FJP8ivjjWfdJ+8dt4yD5+rPtkgF0AAACAL3QU8WCrh9lmAL9R+JlwburNBpiYL4l0XN7vIfj9Jwu/qTCL+ZqVsMNgxxWm28C0rN8kuS/FSMv6TaXaLwAAALiBiAc5Is+1Aoigo/DpJuKSwyztkeoj4oq1/B6Xr1O3VDre0LTU8XJ4wemKeEPT0vB7BAAAADWpR6bMH5fa+sSJuEKbYhdxT6ULNn+/8/Fcxa9Mq5cp4ZGGXMyvUtuX8VwrwHEJp+d38mrsIq64NWVx84rAOwIAAAAhiHiQI/JcK4BphZ9YgKNQGF4wbXUbD3ykIRfz67KSmTsu7+u45NPzO38FjremGA/Zx9ds2BxsLwAAACAniIgXZPceeC4czLGEcyjJrtVI/Mzv6uUUcaECBtijLxkNvyn5Yp542rB8YfkyviYW2MX5ZU0AAADdCCviCiWKyLHU4+X0Nr8iXkI99Tsf9fKltczSHml0e1R3IhkvrYiHmZ6EwRs3ij6+0Pqo7eMLbwTYBQAAAPgioIgXvP73utUVhIN+Rdz+kGIvflf01YDkUcnc5J2o9+jrH0Wxo+jqDfOv7/cEU2/fc3fyXYQ5LmG3wU5UE+Ef9Dl8jD/oAwAAUA6Ci3hBaX7yJQOomOdmPdd127Uvy1EvL2kmcCe+9ijcrForw9Qb5kh9bcrX5NUdCh+SH1eA6QU7BAX8iXsAAACtCCXiBa/bGxRLFtxt2G1FyZaF66rFSHDcoolJNqtWUl9TUhuqZ9WeXYWpN/CRCmcVYPKOKBaW6LLjRiQFSk4PXyenG/fu3Tvyuut18UNHX//ii7shdwEAAABCwoo4gA6UylOrhMEbN491n2xZt7GhaeniV5ev2bD5WPdJ7gsHAAAoM4g4JAnhNWkAAAAA/UHEIUlIbrwBAAAASASIOCQPLBwAAAAqgNQjU+ePyxREHAAAAAAgchBxAAAAAIAYQMQBAAAAAGIAEQcAAAAAiAFEHAAAAAAgBhBxAAAAAIAYQMQBAAAAAGIAEQcAAAAAiAFEHAAAAAAgBhBxAAAAAIAYQMQBAAAAAGIAEQcAAAAAiAFEHAAAAAAgBlKPTp0/Log4AAAAAED0+BPxi+9eI4QQQgghhISPbxGP5ucBAAAAAIDqAhH3pjqPGgAAAAAiJfXo1AXjMmU+Il5EdR41AAAAAEQKIu5NdR41AAAAAEQKIu5NdR41AAAAAEQKIu5NdR41AAAAAEQKIu5NdR41AAAAAEQKIu5NdR41AAAAAEQKIu5NdR41AAAAAEQKIu5NdR41AAAAAERKcBFPpVLF27KNVAaIOAAAAACUnFBXxK3mXakWXkDEAQAAACACUo9OWzAuU8OKeGoM60PWEeOLBIk7Ig4AAAAAJSeUiBdsVm1Xc8eRBFl4AREHAAAAgAgIK+IFm2pbsQ8WEnUt3AARBwAAAICSU3oR93wUEQcAAAAAiFDE7XetIOIAAAAAAAYlFvGC+y9rFrgiDgAAAAAwRglEvOKpzqMGAAAAgEhBxL2pzqMGAAAAgEhBxL2pzqMGAAAAgEhBxL2pzqMGAAAAgEhBxL2pzqMGAAAAgEhJPTZtwbgg4jaq86gBAAAAIFIQcW+q86gBAAAAIFJCiXjKhjlevBvbZ427bSfU0UQDIg4AAAAAJSesiLtu1/3v3tv/3I9wm3GBiAMAAABAySm3iNv/uCYiDgAAAABVSFQiXlD+QXtEHAAAAACqnNRj0xaOy9QFge8RL960fxHX8zZxRBwAAAAASk5YEffYussCbr+sKdlm+UHEAQAAAKDkaCHivrZZfhBxAAAAACg5iLg3iDgAAAAAlJz4RVzxi5uagIgDAAAAQMmJX8QL4+8R1xBEHAAAAABKTigRrxKq86gBAAAAIFIQcW+q86gBAAAAIFIQcW+q86gBAAAAIFIQcW+q86gBAAAAIFIQcW+q86gBAAAAIFJSj72wcFymeYg4IYQQQgghJHz8iTgAAAAAAJQERBwAAAAAIAYQcQAAAACAGEDEAQAAAABiABEHAAAAAIgBPjWFEEIIIYSQGOJbxD/7/T0izMmTJ0c++YwQQgghhBB7EHFEnBBCCCGExBBEHBEnhBBCCCExJPX4CwvHBRFHxAkhhBBCSPRBxBFxQgghhBASQxBxRJwQQgghhMSQcSKey+VyuRwijogTQgghhJCog4gj4oQQQpKX1HiMEfsyilXsy6tXL/mc5ds3lyz5lAiJN4g4Ik4IISR5cVRS66Cnl7ttRPhoqeYc6YqEaJ7U4y80jAURR8QJIYQkIyUX8aKr1OpvFYN+52yOu21/xOmKuHwVQnQOIo6IE0IISV48pVayiuMtH27WKxkMPGfFTt0eFa5CiM5BxBFxQgghyYviTmu173reoh1AxAPM2dGk5Tst1c8GhMQbRBwRJ4QQkryEvCLuqO9ufuym74qfBPz+hGD/GhEn1RBEHBEnhBCSvARTbcnCauuVT0a+GCJOqjaIOCJOCCEkeYlIxN2uiDsuqZ6McM6+ti9/FBEniQgijogTQghJXiQ3fijM2z5iyqublNvt1u0WFMWcHe9yUVybd1tSvYrjwRKiYRBxRJwQQgiptCDiJBFBxBFxQgghpBJiv4JOiOZBxBFxQgghhBASQxBxRJwQQgghhMSQ1OPTG0aDiCPihBBCCCGkXEHEEXFCCCGEEBJDEHFEnBBCCCGExBCriDcg4og4IYQQQggpTxBxRJwQQghJaD4d+eTT23e+yscjvyNE21jPVePsRcQRcUIIISRxGafgH4/87tbtT8wMf3yHEK1iPT+tRo6II+KEEEJIsvKVhRsKPnRr5Obw7RtDH98Y+njw5i1CNIxxft4cvj10a8TUcUQcESeEEEKSlWIF/+jG8PXBoWvXb3zw4eDVax9dvXb9ygeE6JKr165fvfbRBx8OXrt+4/rg0Ec3hk0dR8QRcUIIISRBGb0Wfuv2JymARPHOb6+8d+Xa1WsfXf/o5uDNW0O3RhBxRJwQQghJUEYvhw9/fCeVSg0BJIRUKnXh4m8uvXX58rvvv3/12ofXbwzevJV6YnrDaBBxRJwQQgjRO+ZNKTeHb0cn4m4iBBAMQ8TPDuR/ee7XFy5eevvyb9+/eu36RzcRcUScEEIISUzMy+GDN28h4pAUDBE/dvzE6d7+3C/PXbj4m8vvvn/12kcWEZ+OiCPihBBCiNYx7g6/OXz7+uAQIg5JwRDxtv0dh44cO93b/8tzv7701uX3rnyAiCPihBBCSGJiivi16zcQcUgKhohv3b6zbX/HsddPnM3mL1y89M5vryDiiDghhBCSmBgifmPo4w8+HETEISkYIr5u/cadu/cePHSkt+/sG+f//fI77yHiiDghhBCSmNy+86lxg/jVax8h4iWn+/yVb/59S/f5K3FPpNIwRPy1ljVbtu3o6Dxwqqfv3Bvn3778W0QcESeEEEISE/M3Na9eu46Il5bu81e++fdrdvVc/Mb/XoKLlxZDxJevWLVp89a29s4Tp3p+de7Xb/2/dxFxRJwQQghJTBDxiOg+f+WbP1q7u+fiqx3Z6ZtPfP17L+HiJcQQ8aXLVmzYuHnf/o7uk6d/OSbijWNBxBFxQgghROuYIn7lA0S8ZHSfv/LNf1i7u+fiq5256ZtPPLH84L80tn3tv9Xi4qXCEPHmZcvXb9jU2tbefeL0L8+98dbb7yDiiDghhBCSmCDiJaf7/JVv/sP63T0XX+3MTt988onlB/6lsc3I1777c1y8JCDiiDghhBCS+CDiJeeb/7j+XxYc+WHdob+c0flfa/b/55/u/U9P7fqPj27/44e3/fHD27723Z/HPcFKYFTEl46K+PETpxBxRJwQQghJWBDxkrPixFvf+OHyb/zVkm/8z/qvf2/O1//7tK//+aSvfffnRlaceCvuCVYCiDgiTgghhCQ+iHgUrDjxllvinlqFgIgj4oQQQkjig4hDEkHE4xFxAAAAKCHd3d3Hjx8/evRoV1cXIg5JwRDx2tra2bNnNzY2rly5csuWLa2traknZjSOBhEvdS6+ey32KweJCEXRFV3RVVJCV7F3xRVxSCJDrlfEEXFEPO5QFF3RFV0lJXQVe1d2ES+nTgEEAxFHxPUNRdEVXdFVUkJXsXeFiEMSQcQRcX1DUXRFV3SVlNBV7F0h4pBEEHFEXN9QFF3RFV0lJXQVe1eIOCQRiYg3IuKIeCW9WFdk6Iqu6IqukhJEHMAEEUfE9Q1F0RVd0VVSQlexd4WIQxJBxCtfxFOpVOwvu1q9WNv7sZLQJst2UtlL0LmWeLtKbkVl7qoCTqqydZX0liLtChGHJIKII+L6Ji4JSGKT5RRxaw+eP71omFiegIlrqZxdVcBJVbauinqL/ai16goRhySCiFeXiNuv+5qWoOFrerwiTleKWtTfOpYWe0Xl78qtAccTScOiytaVr5PKXpomiVHEHTupwtcrRBySCCJeRSLu9mLtuIAOiVHE6Updl/2/ktI0iQ4ibi9Nw6LK1pWvkwoRtx8+r1dGEHFIIq4i/uSMxtEg4pUi4vJXcE1S/nvEHaugq6K6HP/ruJiGRZWzqxE/J5KGRZWtq2AnlW6NaSji9kFNgogDmCDi1SXidumswhdrRT+ORdGVvS43Z1KXpknKLOLCE0nDosrWVbCTSrfGEPHYuyqtiE+bNu2hhx566KGHpk2bFmY7AGoQ8coU8WDX4arkxVrRlXywOrsaUTpTUvySK+K6dRXspNKtsfK/XvHaXpTwIt7fNndROvXUP/3Jgw8+OGPGjN6e3t6e3pkzZz744IOP/u2fzPpR6vj2ueGkC6AYgYjPQMQrTcS5yuvWlWeB2mpT+T++UP2FtkXF0lXRiGM/GhZVtq78nlR61oWIx95VeBFflE4NXlj23e/+l+86kdt4/9S/ToWTLoBiEPHKFPERy//PtQ9W+Yu1vShhgXaL0ic6iPiI1wmmSXQQ8ZEkmGXZuvJ7UulZV5k/ucjxtb3KL7KURMQv7Ly/aPDLL7+8e/fu559/fqzp2zV/hYhDiTV+raMAABYxSURBVEHEK1bEKyAURVcV2ZVuVqRzVwnqUNuuNEyCRPwPX3559+7dzz777M6dO/kd30fEoeQg4oi4vqEouqrIrjSUSG27SlCBenalZ7QV8caHx4n4vXv3vvjii08//XTk9sjw8PCZLSUT8VQqEqF33GzKifCbLTPBjkKHmXuCiCPi+oai6Iqu6CopoavYuwov4gv/b+qd4z8uFApffvnlH+7d+/3vf19XV7fXhad+8Vxg9yqziEex2TIT7NB0mLkniDgirm8oiq7oiq6SErqKvavwIj7//6QuH/vxl19+effevc8///x3n3xSV1fnuOSF8xf+4sF/9Lt9E4Ugul3x9Rx326zbvuzbsW/Q+pB8VpLliybgeZ3b89DsW5CMuB1yOVGI+KKxIOKIeEW9WFdk6Iqu6IqukhJtRXzeQ6m3j/347t27n3/22Z07d27dulVXV3ftYp/x6KY/+krU/u3f3vvLH/5NAOsyCCDHnuNuKqnwS/t27D5t37JkVp7LF/mx54TVg8J+/C5THhBxRFzfUBRd0RVdJSV0FXtX4UX85X9OvXX4x59++tmdkTvDw8ODgx/V1dVt+qPUtYt9poUb96W8+eZ73/vrHwV2L78i7raYUGHtuG1HIsGBZ+V3PNig25aFey8/iDgirm8oiq7oiq6SErqKvavwIj7nn1JvHvrx7du3h4aGPrp+/YOrV41bU6zXwg3efPO9H/zdD/xu3ySYiCtMWrFZtWi6Xb2OYlbqK+j27bjtxW0x9UwUqyv2WwYQcURc31AUXdEVXSUldBV7V+FFfNaPUgNr779x4+aHH3549crV9979rfUecauOv/nmew/8zd/63b5JABF3/Dp2Efc1K+G42zzlk3QTcV97KRuIeAw5CQAAACWlu7v7+PHjR48e7erqCibiM/4u1bf6/h3TU0dXfv/Q8u93NX/f7daU3/zmN3/2538W2L38irjfccm+HLfjS8QjGldP1de3CRLx2tra2bNnNzY2rly5csuWLa2trb5FnBBCCCEkrly4fPX82++fu/TOwBuXgon4sW1za/4q9fz/Sv3sgdSzf5F6+n+k3G5N+dWvfnXffff53b5JGBFX33oh35fj9gNf4XabVZjl1YOKC/MSEQ8s6yXHEPG6+sZFzStbNm7bsa/rwPGeUwPnfIt47P+rKym5cn24nP/AiWZweCTuKSQGupJDV3LoSg5dyYmoqz/84Q9379799NNPb926FUzE7dTV1R06eChro6Oj40//9E8DbzblhP0hx1UKLrc+F9wV1nFfCjEt2rtClB036Hd5xVG7zUE+E7/dlh9DxFtaWrZv337o0KEzZ85cunTpgw8+SD05c9FoEPGS5uK718r5D5xo6EoOXcmhKzl0JYeu5ETUVUQifv/993/729/+Dza+/73vh99+NROX+OoGIo6I6wtdyaErOXQlh67k0JWcBIk4lBDFlfJqBhFHxPWFruTQlRy6kkNXcuhKDiJetXjeglKFIOKIuL7QlRy6kkNXcuhKDl3JQcQBTCIXcfNHH8eHHJd0W74yotWL9YQJE9zGrdjHHRcu1eomie7Kca0oCjRIdFfyEyPkoEGiu3Jcq0q6KgSqy7O9QugnpoFuXekMIg5gEq2IW33art2SBSov+rxYu731Fi2j/tptgZKsntyuHNeKokCT5HYlryXkoElyu3Jcq0q6KgSqy02v3VYJ8MQ00aorzUHEAUwiFHG7Sdu1WyHilerimrxYG28kASSgaDzA25XbuLYSELgrhTDJtyBcPeldFY17HrhcLu0kvSvJeeVrAcWgJl0VAtVlX8VxIyGfmCb6dKU/iDiAiUTEF5VKxO2PIuLxon4HUjwqESbJ6urBRHelkADhzyeO37qtnuiu7A+VRMQrsivheVV5Im4Q4NTy1OiQT0wT3brSGUQcwCQeEXf0b0S8/AQTJuH7vfxyePUIk+KSrUQXFKsnuquC+y0E8uvBRf1UalfC80ot4nI116qrQmQiHuaJaaJbVzqDiAOYxCbi9t/LRMTLjyYi7jae3K48fSiYiCsWTm5Xjg/5uqBripRw9eR2JT+vEHHFoK9nFiIeBYg4gElZRdzRuRHxGJEokXpcLpoB9pjcriaMx76Y5w8t6pFK6srxUV8i7nf15HYlP6/8/oScFLkM/5JlHwn5xDTRrSudQcQBTFxF/KmZi0YTVMT9CjefmlJ+/L6rye0w5OoGie7K/hBdOT4k98iQgybJ7crxIV8N+LLwgmZdFcor4knvSmcQcQCTaEV8xOlzxBUizueIlxm//4vWfjXOOq7Yst/VDZLblWItt8O3jzturSK7cjuFSj5okOiu3NaSNOB4srmdgQZadVUIVJd93HEkzBPTQLeudAYRBzCJXMSJziKuOXQlh67k0JUcupJDV3LKJuIAicBLxGci4oh4PNCVHLqSQ1dy6EoOXclBxAGsIOKIuKbQlRy6kkNXcuhKDl3JQcQBrCDiiLim0JUcupJDV3LoSg5dyUHEAawg4oi4ptCVHLqSQ1dy6EoOXclBxAGsIOKIuKbQlRy6kkNXcuhKDl3JQcQBrCDiiLim0JUcupJDV3LoSg5dyUHEAay4ifjisSDiiHg80JUcupJDV3LoSg5dyUHEAawg4oi4ptCVHLqSQ1dy6EoOXclBxAGsIOKIuKbQlRy6kkNXcuhKDl3JQcQBrJRGxK9cH7747jUiyeDwSOxzSEroiq7oiq6SErqKt6sLl6+ef/v9c5feGXjjEiIOCSKVStXVNy5qXtmycduOfV0HjvecGjjHFfGocuX6cBRXAiqSweGRuKeQGOhKDl3JoSs5dCUnoq64Ig4JhVtTypqL/O9LMXQlh67k0JUcupJDV3Ii6goRh4SCiCPimkJXcuhKDl3JoSs5dCUHEQew4iLisxaPBhFHxGOCruTQlRy6kkNXcuhKDiL+gBNuS7p9ARUDIo6IawpdyaErOXQlh67k0JUcRFwu0/YlEfGE8q37vuP2UFQinrJhjtuXVK9SSdHqxXrChAkBHi0an2BBvbrjYop9Jbort05KPmhAV5xXwQYnjKdod9XWleNGPFc30KorzUHE1TJtvUZedCHc8wo6aMu37vuOm4tHKOKOJqoWceFGkht9Xqzd3k7Ujzq+h/ldzPG9zb6R5HbleLBRDJrQVYHzKtwpVLVdFVyO3b7ZpDwH9QcRV2i09SGrcHNrStIxRNzRxRHxahRx411E8fbj9qjinUm9enKFKUBXilo8d1QQOISdCu5KvYAvOTOosK4cF5Avqd54cruyL1Dw/8xCxCMCEVfcI17k2Yh4xWCKuN3FEfFqFHED9bu121t10buRiXp19fuZzhJg4Ksr86Acj1TtEwWlLmgulwal6kqxNc9aque8clxevqR6GsntyvEht2eW44uY48udYndadaU5iLjwivgQIl5BxHNFnHvEq0HE3ZZ3+9ZNT+0TSG5X1mN0PHDJzy32ohSrV15Xiq1Jaqme88pxYV8nm2Iaye3KbdzxmaX42nN1E6260hxEHBGvQsLcI744liviFWnhiRZxxfu6ennrSNF7m3qbFdBVweUYPS3K7+p05bh6NZxXno8i4p5f2wc9T0XNn4Oag4gj4lVImE9NiUfEK9XFtXqxDnA1TnFByFPE7Q+pt5noruxfK97Fw7spXRWq9bwKuaR6DsntynHQl4jbT6EEPQc1BxHnlzXBirOIPz1r8WhKLeIj7le+EfEyE+kVpsAX80yS25UvuRRe2kyQBMTelXomFdaV40bkS6rnkNyuPEeEzyx5k1p1pTmIuPoP+ig+vrDoUagMIhRxxQ3fboNym09otHqxlquzejHH646OI45Luu0r0V05Hqx90PHCm3x1E7qq2vNKXotiSbfpJberUj2zEvoc1BxEHMBKVCJO9BdxzaErOXQlh67k0JUcupKDiANYQcQRcU2hKzl0JYeu5NCVHLqSg4gDWPES8VmIOCIeD3Qlh67k0JUcupJDV3IQcQAriDgiril0JYeu5NCVHLqSQ1dyEHEAK4g4Iq4pdCWHruTQlRy6kkNXchBxACuIOCKuKXQlh67k0JUcupJDV3IQcQAriDgiril0JYeu5NCVHLqSQ1dyEHEAK4g4Iq4pdCWHruTQlRy6kkNXchBxACuIOCKuKXQlh67k0JUcupJDV3IQcQArbiK+ZCyIOCIeD3Qlh67k0JUcupJDV3IQcQArpRHxK9eHL757jUgyODwS+xySErqiK7qiq6SEruLt6sLlq+fffv/cpXcG3riEiEOCSKVSdfWNi5pXtmzctmNf14HjPacGznFFPKpcuT4cxZWAimRweCTuKSQGupJDV3LoSg5dyYmoK66IQ0Lh1pSy5iL/+1IMXcmhKzl0JYeu5NCVnIi6QsQhoSDiiLim0JUcupJDV3LoSg5dyUHEAawg4oi4ptCVHLqSQ1dy6EoOXclBxAGsIOKIuKbQlRy6kkNXcuhKDl3JQcQBrLiI+ItLRhNCxFMWHAetD1mXcRupgMT4Yj1hwgTPEetDBo6D1nH1ksEGDeLqyrEot0m6PSrsasJ4hNu0z0ErCShtgSUcNKiM8yrYxulKWOCE8UimodVzUHMQcQArUYl4kUYrhFu9fIUlxjc2x3cat4U9v1Y8GnLQJJauHIty/Fr9qHxJ4XY07MqRkhTIeeXruIQbpyt5gZ671qSrhIKIA1jRUcQr1cLjEnHjPcP+LuLrvcdxYbctCFdXb6r8XalrUT9UCNeV/P3ecVATCQhQYAA79BxUV10Z51XRoC9z9dymSSK6CnkKBXgxdFxek+dgIkDEAayUScTl4xVs4XGJuIH6Dcxt3Pp2ZVL0qOR6knxJE33+t7jkoUKIrgJblIlWEqCJiLudbIk+r9xWqRgRd5uJ4qGSnEJ+l9GnqySCiANY0ese8cq28KSIeMGiko4LFxmnZPvyJU10kwChLbl9rWjA1/u9Vl054qtARW9uJi3ZjuJkS9B5ZW/ArRa3U8hzYfWSiegqgIgLn1a+WtXqOag5iDiAlQhFvEjKi75wtPaKd/FEiHipLqd5uql6L4mQAPlapbqcqVVXjpTfohSr6CNMwc6rQqBTqGCRRYm1uy2ZiK7KJuIFLbtKIog4gBXuEUfEVUsGFnG5XLpNQysJCGbhBUFX8h9gFDvSSgJ8FejXonxduXRcPkHnVdEyAU6MMEsWEtJVFKeQYnduj2r1HNQcRBzAio4iXsEunlwR9/VuF+bquIk+EuD3Lbl6unLEV4Ehu/LcnT7CFF0t6m8D/9RXqMSu5Nfak9JVEkHEAazodY94xbu4ziJe9DZj/k9Yv4MTxhNgSQNNJMBxktYvhAerGHScQyK6csRXgYVw55Wv/g0ScV4V/JxC9o07LklXbg3Y9+g44rYjA62eg5qDiANYcRbxZ15cMppZS/jLmpUh4omDruTQlRy6kkNXcuhKDiIOYAURR8Q1ha7k0JUcupJDV3LoSg4ibvLAAw8IF/BcMtj2QQcQcURcU+hKDl3JoSs5dCWHruQg4gaGJatdOaRJI+L68K37vuP2ECKOiGsKXcmhKzl0JYeu5NCVHETcwE3EHxhjyOmKeNHy1m+tK1q/Rcd14Fv3fcfNxb1E/EVEHBGPB7qSQ1dy6EoOXcmhKzmIuIGjiNvFumjcbfmiFR0XhhgxRNzRxRFxRFxT6EoOXcmhKzl0JYeu5CDiQy7ePCTwbImIu20NYsQUcbuLI+KIuKbQlRy6kkNXcuhKDl3JQcSHIhDxIdutKfaFIUa4Iq5LeLGWQ1dy6EoOXcmhKzl0JQcRf8AJ86GiJd2+cPxWvTDECPeI6xJerOXQlRy6kkNXcuhKDl3JQcQdf0HT8SFEvGII8akpiDgiHhN0JYeu5NCVHLqSQ1dyqlzE3eTY/rubnr+s6XYpHRFPFqUR8SvXhy++e41IMjg8EvsckhK6oiu6oqukhK7i7erC5avn337/3KV3Bt64lFwRH/L6+EK3BYrG3UZAQ1KpVF1946LmlS0bt+3Y13XgeM+pgXNcEY8qV64PR3EloCIZHB6JewqJga7k0JUcupJDV3Ii6iopV8SDgUxXMNyaUtZc5H9fiqErOXQlh67k0JUcupITUVeIOCQURBwR1xS6kkNXcuhKDl3JoSs5iLgvuLek4kHEEXFNoSs5dCWHruTQlRy6koOIA1hxE/GmsSDiiHg80JUcupJDV3LoSg5dyUHEAaxEJeKpVEoxkrLgOGhfvTKi1Yv1hAkTFA8ZeK7iuGTIQYNEd+X3YOkqTAPC09KgmruSn4EG1dDVhPEE2KaBVl1pDiIOYCUGES96yHO8kqLPi7Xb20lh/Bue/Z3Jc8mQgybJ7crvwdoNwNfqheroKuRpaVK1XcnPQJNq6Eq9Hfnq+nSlP4g4gBUXEZ/dNJr4RLwiXVyTF2vjXcTtjc2+pNsqpXoLdBxMbleOg4otCCVDMZjcrgKcGPbVkyjikXZVYSIesiv1ko4jiHikIOIAVuIXcckqFROtXqwDyGUVirhBqUTc7fJtZYi4QTlF3PPb6uzK13NQcQYmvSv5j7iBX9lMtOpKcxBxACsxiPiI+z3iiHg5Ub+xOb6HCY1nwhj2DcplK+ldFZw6cRx33L5b/xXWlVpuhGeL22npWFdFduW2pH3c14+CCeqqIHu6FdyfWY7fOm5H//NKcxBxACvxiLjjOCJeZnxdYfL8Vn3dKIBvJb2rgvtRO761y/eruQT46ioKES9YVKl6urIvUNRAgDMwWV3Jf8CzDwpPoaScV5qDiANYif/WFEQ8LjQRcbdpVElXVoT71VwCSiWXYQpRPFSRXUkGA5yBCepK8nTztYB8dQOtutIcRBzASlQiPmK7F8VNr/nUlLiQXIWNWsQVb4GJ7kp91Vb+qFDCkttVmKuYbuNV1VVJfhh2m0kiunJ8KOTJlvTnoOYg4gBWIhTxEcu94G7jfI54jKj1xfEKmeOIfUnhYHKvxqm7cjsutyN13L6wVYPkduU46Fig4mwRnpYGFdZV+EHHmRgkoitfTzfh+eNrdQOtutIcRBzASrQiTnQWcc2hKzl0JYeu5NCVHLqSg4gDWEHEEXFNoSs5dCWHruTQlRy6koOIA1hxFvFnZzcZQcQR8bigKzl0JYeu5NCVHLqSg4gDWPEU8SZEHBGPBbqSQ1dy6EoOXcmhKzmIOIAVRBwR1xS6kkNXcuhKDl3JoSs5iDiAFUQcEdcUupJDV3LoSg5dyaErOYg4gBUvEZ+NiCPi8UBXcuhKDl3JoSs5dCUHEQewgogj4ppCV3LoSg5dyaErOXQlBxEHsIKII+KaQldy6EoOXcmhKzl0JQcRB7CCiCPimkJXcuhKDl3JoSs5dCUnKSL+5z94NvxGADwpjYhfuT588d1rRJLB4ZHY55CU0BVd0RVdJSV0FW9XFy5fPf/2++cuvTPwxqVSiXiRi29u/mcz4bcPYJBKperqGxc1r2zZuG3Hvq4Dx3tODZzzLeKf/f4ekeTajduxzyEpoSu6oiu6SkroKvaufvfZF3d+9/mt259cHxwKI+KGf1tjPlT70x+ZKYF/AQwNDQ0NpVKp5StWbdq8tb3jwKmevjfO//s7v73y/wHfHqfcrw+4NQAAAABJRU5ErkJggg==" width="640" /></div>
<br />
A simple right click in the form displays the menu option which, when selected, runs the rule.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheA6hZW47iTdKBIyD8vKp_CJoIEvD-ZYw7MxLBOwKJEcETebYEIlv0aPyTgahnJ87dXj9l8HgsX8RZavCVIazrAN01_CuPaKKzUiJJZ2MhN79f7HB8mKtzRCfFuo8DkLZIoGqcG0T9WVs/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="179" data-original-width="549" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheA6hZW47iTdKBIyD8vKp_CJoIEvD-ZYw7MxLBOwKJEcETebYEIlv0aPyTgahnJ87dXj9l8HgsX8RZavCVIazrAN01_CuPaKKzUiJJZ2MhN79f7HB8mKtzRCfFuo8DkLZIoGqcG0T9WVs/s1600/image028.png" /></a></div>
<br />
There we have it, seamless loading of exchange rates using Groovy and a REST API.<br />
<br />
The Groovy and REST API functionality opens up lots of new possibilities, look out for more in the future!</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-57319921454856716292019-07-05T12:15:00.000-07:002019-07-05T13:11:02.770-07:00EPM Cloud – Recent Web service and Groovy additions<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
There have been a few updates to EPM Cloud recently that are definitely worth highlighting. New functionality has been added, allowing connections to Web services to be created. These on their own are not much use, but with new classes added to the Groovy API, it is now possible to interact with these Web Services. This opens a whole new array of possibilities.<br />
<br />
In the 19.06 release the following was contained in the ‘what’s new’ document:<br />
<br />
<b class="yellow"><i>“Service Administrators can now create connections to external Web services and specify optional query or header parameters while defining external connections. These connections can be referenced or used in a Groovy script to create a communications link between the Groovy script and the external Web resource.”</i></b><br />
<br />
It was certainly possible to add new connections but there was not much information on the Groovy side. The API documentation was certainly lacking in detail.<br />
<br />
Moving on to the 19.07 release and the ‘what’s new’ document had the following snippet:<br />
<br />
<b class="yellow"><i>“Planning Groovy object model APIs have been enhanced with the ability to call external REST APIs.”</i></b><br />
<br />
This time the documentation contained details of new Groovy classes to work with REST APIs.<br />
<br />
As you have probably noticed I have been blogging about REST APIs for a number of years now, so this new functionality has really taken my interest.<br />
<br />
If you think about it just from an EPM Cloud perspective, there has been a large investment in developing and enhancing the REST API capabilities. EPM Automate is built on top of the REST API. With the new Groovy functionality, it allows you to call any of these REST resources. If you have multiple EPM cloud instances, then these resources can now be called from planning business rules. It removes some of the dependency for them to be run externally by scripting or EPM Automate. It doesn’t even have to be a separate cloud instance; the REST resources can be called against the same instance, which I will get on to later.<br />
<br />
It doesn’t stop there, with the majority of cloud providers having a REST API of some sort then this has opened up lots of new areas to explore. This could be loading/exporting data or metadata to a cloud instance, running integration or administrative tasks. You could have a cloud-based ERP system that you want to interact with or maybe OAC that is heavily built on REST which I have covered in previous posts.<br />
<br />
There is a downside though, this is based on Groovy which is only available in Enterprise Planning. It is frustrating that Groovy is only available in EPM Enterprise Cloud Services, I don’t understand why it can’t be included with standard and I know that I am not alone in feeling this way. Hopefully Oracle will one day see sense and allow it in both Cloud Services.<br />
<br />
Going through a couple of examples should provide a greater insight to these new features and make it clearer how it operates.<br />
<br />
Let us start out by calling a REST API resource against the same planning instance. To keep it simple I will call the resource that returns basic information about the application.<br />
<br />
Using a REST client, I can make the following GET request.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoS8FB8szTtYriRUILZaAZgLb9LPBh2U4gUHIF2ernUa676sMcvmJe68HhDVgXModY6BubliDf8Ny-uagVSQVIz602OQT13JptC-Rw-yBFpvOXrtHvaBfE0Di9l36DScQ6TjY1e88ealE/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="441" data-original-width="631" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoS8FB8szTtYriRUILZaAZgLb9LPBh2U4gUHIF2ernUa676sMcvmJe68HhDVgXModY6BubliDf8Ny-uagVSQVIz602OQT13JptC-Rw-yBFpvOXrtHvaBfE0Di9l36DScQ6TjY1e88ealE/s1600/image001.png" /></a></div>
<br />
This same REST call can be achieved using a Groovy script. There are two ways to make an HTTP/HTTPS connection, an on-demand connection which requires the full URL and username/password to be included; alternatively, a named connection can be used which can be set up from connections in the planning application. I am going to concentrate on the named connection as it does not expose the credentials in the script and is better for maintenance as it can be reused across multiple scripts.<br />
<br />
If you navigate to connections and create then you will see an option for “Other Web Service Provider”<br />
<br />
<div style="text-align: center;">
<img alt="" height="131" src="data:image/png;base64,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" width="640" /> </div>
<br />
The connection name will be the one that is referenced from the Groovy script.<br />
<br />
The URL can be the fully qualified external name for the cloud instance. As I am going to run the REST calls against the same instance and know the port the web server is running against, I have defined the URL with localhost. It works well and doesn’t require the URL to be updated if the connection is migrated across instances, so I am sticking with it until Oracle say otherwise :)<br />
<br />
Under advanced options, parameters and headers can be defined. This can also be set in the Groovy script, if it is something that is going to be used in all calls then it probably makes more sense to define it in the advanced options.<br />
<br />
<div style="text-align: center;">
<img alt="" height="461" src="data:image/png;base64,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AJET/AAAACIn+AEAAERO8AMAAIic4AcAABA5wQ8AACBygh9Z9J8AwLwUukeAaAl+ZFHoogYApAvdI0C0BD+yKHRRAwDShe4RIFqCH1kUuqgBAOlC9wgQLcGPLApd1ACAdKF7BIiW4EcWhS5qAEC60D0CREvwI4tCFzUAIF3oHgGiJfiRRaGLGgCQLnSPANES/Mii0EUNAEgXukeAaAl+ZFHoogYApAvdI0C0BD+yKHRRAwDShe4RIFqCH1kUuqgBAOlC9wgQLcGPLApd1ACAdKF7BIiW4EcWhS5qAEC60D0CREvwI4tCFzUAIF3oHgGiJfiRRbNVnN57/4MDrxx55mfPP/Oz5w++cuS996/P1ppn4ttvv71169blt95+bfDErr0vPfvzXc/+fNfuvS+9Nnji8ltv37p169tvvw29jQCQLnSPANES/Mii2SpOFy8Pb9/5Qjn4bd/1wsXLw1N6+V9v3Rp+590T//ara79//6u//735CV999dW7135/4t9+9faVd2/d+nLCFY6Ojn55+/al4beP/uKX+w4c2tG377nnd/3rth3/um3Hc8/v2tG3b9+BQ0d/cfzi5eFbt7789tvRKW0tAMyB0D0CREvwI4tmqzj99vyFcuorj9+evzD51/711q03L14+cOjV557ffejIa1euXhsZ+VvtE26PjLzz7tWXXz323PO7Dxw6cuHyW7e+bJf9RkdHP/v8L789f+Gllw8Xtu+s3bDaUdi+c3//K2d/9+Znn/9ldFT2A2B+Cd0jQLQEP7JotorTb9+8WBf83rw4+dcOv/PugUOvVl97+OjAlavXvvqqctzvb1999faVq4eOvFZ9wsFXjrx95WqbFX55+/a58xf69h1oFflqR9++l86dv/Dl7dsz2n8AmG2hewSIluBHFs1WcZpJ8Dvxb7967vndtS8/9OqxK1evffPNN//7m2/evnK1//DR2qU/29H3+slTrdb27bffXnrr7f39hxsC3rM/37Vzz4s797z47M93NSx66eXDl4bfdr0fAPNK6B4BoiX4kUWzVZxmEvyuvfd+7QG9ckg7+MqRy8PvXLw8fODQq8/+vO50zVeODrz3/get1vbXW7eO/eKXzenuyGuDX33196+++vuR1wabM+GxX/zyr7duzcYnAQCzI3SPANES/Mii2SpOMwl+X3319ytXrx0+OtBwWG/vSy/v2d//sx11BwNffW3w3Wu//3vaDWDKLr319r6Dh5pP6Xzt+InyE147fqJ56b6Dhy699fZMPwUAmD2hewSIluBHFk2jDr177fcXLr312/MXfvvmxepoiG2Hjw7ULv3t+QsXLg9f+/37rdY5MvK3K1evHXr1WPORutrjcoeODLx77fcjf/tbq/X853/+57HBEzv69jW/fO9L/eWN2ftSf/PSHX37jg2emManAQAdErpHgGgJfmTRNOrQiwcPbdvRN5n7ptSObTtf2P/y4TarLR/3O/jKkZ+lrfxnO/oOHj767nu/T53sodauvfufe74xPe59qf+14yfKIzUWPvf8rl1790/j0wCADgndI0C0BD+yaBp1aKqRr3a0X/M333xzefidvS+9nHIq5oGXh99595tvvplw8wrbd/7rth0NL3/jf577+s6d8hNST/X81207Ctt3TuPTAIBQP9EFAAAgAElEQVQOCd0jQLQEP7JoGnWoc8Hvf3/zzcXLw3v2p5yKufelly8PvzPt4LdtR9/QyV+Xn9Aq+D33/O5pfBoA0CGhewSIluBHFk2jDh049Or2nS9MNfJt3/nCwVeOtFlteb6+A4debbiby/ipnq8cqZ3fr5XUUz2fmejmLs89v7tv34FpfBoA0CGhewSIluBHFk2jDr33/vWLl4enenOXi5eH33v/eqt13h4ZKc/X1zBzQ+149ue7yvP7jYxM5+Yu7YPfjr59r7m5CwDzSegeAaIl+JFFs1WcZjKdw9+++uqdd682TOX3sx19+w68vPellxvu9XL46MCVq9fa3OLl0lvDzdM57H2p/3cXLpWf8LsLl5pv7Lnv4KFLbw3P9FMAgNkTukeAaAl+ZNFsFaeZBL93r/3+5VePNRzcO3j46PA7714efufAK0ca5nh45chrbWaGSJ3A/Y3/ea48e3t5vPE/zzW8nQncAZhvQvcIEC3BjyyareI0k+B34t9+9dzzddf1HToy8O57v//mm2+++eabK1evNcTCn+3oe/3fT7Va27fffnvprbf39x9uuLnLzj0vVkfDdBT7+w9feuvtb7/9dhY+CACYJaF7BIiW4EcWzVZxmknwe/vKuwcOvVp97auvDb57bXy+vq+++vs7V6+9UnMNYf/ho++8e63NCr+8ffvc+Qt9+w5M5q4zffteOve7C1/evj2j/QeA2Ra6R4BoCX5k0WwV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" width="640" /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
I could have put in the full URL to the REST resource and had different connections for different types of calls but as each connection requires credentials, it would become a maintenance headache to keep updating them when the password changes. It is one of the downsides of connections that once the password has changed it has to be manually updated.<br />
<br />
Take note that to use all the REST resources, then it should be a service administrator account that is defined in the connection. Also think about who has access to the Groovy rules that will be calling the REST resources as behind the scenes it will be the administrator account being used.<br />
<br />
Before I get on with the Groovy side of things I want to point out that I am not a Groovy programmer and there will definitely different ways to write the code. I just want to try and keep things simple and I will let you get carried away with the coding. I will say that Calculation Manager has definitely not been developed as an IDE for writing Groovy and patience can be required. It can be challenging when you don’t know all the classes that are available and with static type checking enabled it can push you to the limit :)<br />
<br />
To replicate the earlier REST request which returns application information is extremely simple in Groovy.<br />
<br />
<div style="text-align: center;">
<img alt="" height="113" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2IAAACaCAIAAABE5GwsAAAgAElEQVR4nOydZ1hbR7qAtTcbJ9nNJrnp8WazaZvN7s2mOo7jOC5xL7jguNu44ALGNqb33nvvVfTeJKpEEwiQUEMgJCGQhJBAIJCEQAUVzv0hG2OMbYrAbHLe5/thpMOZ+eboeF7mzIwgAAgICAgICAgICMgjQJ51BUBAQEBAQEBAQNYioCaCgICAgICAgIDMA6iJICAgICAgICAg8wBqIsjSkSkUA/wRFo/P5A6BMSd4wwKZQvGsLxEICAgICMjSATVxHvq4Iwql6lnXYvXoZg0u4bcUU1NsHp8/MiYUikWi8d9q1C8VIpHE5A49wRRX+WO2tKu8NJac2uiY+PhV25Z28qJ+6wmpFRVhrKzSz50PP3s27MyZ0FOngk+eDPr1hL/+cd+jR70PHnTdv89pz26HUycD/HwricSuiYmJJ5e1CldtyVdKqVQpppSzQ6VW67wOpRiZfbr4cvioQdjIhZBhbZwL4p8JGDzpz5uJX/24x7wH9DxYB12Z1kncOtL4E8pabKsusImkSk0eQXgxk/WpR9fz5oSZ+NSj62ImK48glCo1Cy8UBOT3CaiJ8wBq4kLgDQv4I2PPXONWQRNxS4VIJPGGBY9rwIV8zNhcfmNbR2NbR2MbqaGVVN9CrEMTatF4ZDMe0YSraWwndPYs8Ho9+SpTqby8vJagIFhgICwgoMzfv8TPr9jXt8jHp8DLO9/TM8/DI8fNPdvVNdPFJcPZKS0psbqjg7mc1OZF55poZZWekICJj++Kje2sr2fU1fYgEfTqamplZTcMRsnPI7u6Vt2+nX/1asoFg0AYrEogeOz10rKWNdE3NPuSif/syCtp0Hkd7DPEFXh5ZedUcutUcotiJpLQikS0fCYSmuXxTbK4JmkcSuqQPeydzeJyuY8rS+eaODmlQTMnTPI5m0NpH7p1vmJDmq2Jr9iQPnTr3BxKM8nnoJkTk1OgLIKAPBZQE+cB1MSFwB7kj/2mxxGXr4koFIrF4z+uARfyMeukMcuQrbiuPlxXH66zt53ciyUzMB09mI6eXFh9aU1LG5FGpDCUC/i4Pvkq5+W1BAVVBwU3ubjUJyejodDmlJSmpCRUQkJDbGx9dFRdRAQyLAzh719pdCPtyuUkI6O4hITK5aQ2LzrXxHPnwuNiydBUfm7uyODgFJc71d+v6GPKexiy7m5pe/tEQADG1LT84sXk/ftts7Ly+fzHXi8ta1kT79hGXrFI9IhCaeO4oX9MSpnO63A5fDS2aiK5QRpUudC4FsO7EUxCo9GPK0u3mjg5pYFTxAYZrPXO5BcsCLMFcXa8YEFY70w2yGDBKWLQFEFAHgeoifMAauJCYHKHnrnDrXFNrK+vZ3KHHteAC9TEuhaSRK55NOC1mBYCjckbK6/H0vs4Upl8OVc5OAgWHNRUViZOShru71fw+VODvKkBjoLNlvf2yug0GYUiJZOlLS0iV9cma+uas2ejbe2SlpPavOhcE8+cCfXybA8MZCUnD7DZir4+OZ0uo1CkHeRJPH6iETXu5FRvYJCjrx+5d6+lrjRxSq1kiHlQKsIQGbIhy+Td2JPvxpzYADU2rAiAkqsZY9wptXJp6TyZO7aRDkFVJS1ybVwxT1gJTbwYKnDLFoeUSkJKJcGlkuBSSVCpJLBEElgiCSiR+BdL/IolvkUSnyKJd6HEq1DiWSi5GMox8MaUlc1fGZ1rIpo5YZDBetmaOFsKX7IkvmHf8aoN6UXLh15/2ZpokMFCM58y2QAE5HcLqInzsKqaWG4IgRiWr1Jh8wNq4lrWxNrHaGIZorUZ1y2Ra4ZF0rTCGlovZ0q5dPkICoQ52NdFRgyFhHAZvfKBAQWbJe9lyGk0WVeXtKNjEoebaGuTIJEC0ztVhlcKjxwJsbFJXE5q86JzTTx9OsTdvc3frzcujk2lSWk0KaV7sqNjkoCfwLRJqqtHbe1qzp1LO3okdPduC51o4qRSXjtAtGyO35h75/3Ec69GHn0hZP8LQfteDT70fviJjYlGltVRtX34ySnZEtJ5MndsI03d8hNKWNo4ZxKxEpp4IXgE1zul0gAqDSBXqTlifu8Yr180OjwhH5MDAhnAnwR4E0D/OMAUAQwhQBsFfIr45z1bV0cTpUqNST5nvTN59qjh/9qRPvei7I1hbAml/8Oz63X7jtmyuN6ZbJLPAecpgoDMy9I0sdwQAlmA3PQEbYBsCOp58MOz9qEFoiNN7AnaAJnDTGs84L4m3m+fhxptdVhtTexoDo5pJjxr//uv0EQytQ+JJs6riSU1LU3t3RK5ZlymHhZJCyubsETqkq9yYGCZnR0iPGwgMJBFp0vZbHlvr5xGk3VR7jkipk2CRo9XVY+YmMAvXszV0wuwto5fTmrzonNNPHkyyNUV7eNN8/OlFhYOdJAkHR0TePwEBiNpbBgLDycYGxeePp2spxe4c6dZZuZyNVGhVtYOEI3qwz+BXloXfhASvAcSuAvivxPi8wvEczvE9ed1bjs+CTllVBpQy8ApVPNr/XI0cZuexY4jVtrYesh8JTTxTCC/naFQaQClGuCI+F+HffOe1/oTaWcLidUCKTA8CfAmAM44wBIBvUKANgpQBIBnwdAZ95bV0cQ8gnBzKG32s+Z3nch3CjmY/smRCdWwREUelDmW8z5x75rtkZtDaXkE4cIrAALy+2FJmqi1xKdL3zMwHp2gQ018evpzRxP/qzWRV5dVHBzzUKSgeI/TRCaqJjimmSDi1WXNd9j856ypYy1I7+6f/HEHPLnQtaKJHd19iGbCvJpYVNWcnFuZX47KhTdmw+pDEvNRmI4lX+WAgFIbm+qQEJa/Xy+FMtnbK6PRpF0UaQdpEo+/54iNKDG8nG9kXHz+fMaBAz5WVnFLS62xraOhjcQemKdlHqeJxK6e5NzyxGzYYlM7cSLA2Qnl6dHlYE/w8CAGBXUEBuB9fbFenq0uLqibN4vOn4eeOBF/4IDfjh2mmZl5y9TEHhHPsjnhE+glSOgeSNBuSMAuiN8vEJ8dEM9t/+O29QW37f/j9DPEfvMn/icsYRE9As5i03kyjD4ukcyITSnctPNcbSOOSGbwhkaXdqonayKWoVCqAaUaGBDz1nuvt6+xc69zPAo9eDT+VHR9Np47xBIDvUKANgZQBAB5GHDPH1w1TbyYyfrQrXP2Y+WLmawSsqiyW3w9p/96Tj+CNl5DG7+Z3z/7mA/dOi9mshZeARCQ3w9L0USt2DzysPThwTPDhIfH0gzLyw3v6899zXxINcsNIRDDoJlfemBK8x69oqy8JvbMbRwAAMoNIRvs7B59feXRrSY+3b3mjiY+4bfoRTHFwXD6zCsEeHFRh06GCZeuiTk5OWg0es6LGAwmPz9f55pIojCqUfh5NZFEZTdgOuvbOutaybUtHREpRQ2txCVfZX//EiuriqDAXk8PanXNMIkk6eqaJJEm8PfHERsbxRWVw/EJFEPD3DNnUvbt9bS0jFlaalklyMxiBJna9+hbj9PE6kashXvkXdfwxaZ2/Lifo0O9myvJ0qLVzKzpzp2GWyY1xkYV166VXr5ccOZ0yokTcfr6Ufv2em3fficzMy+kOCSlMYXc/9jhzCenBqUifsg1XRdx8L4j7oT47IB4bf+D65aX3bb/J/Liep8jLzlse8Fmyw+hV6BY+GLTWQiVCNTG7b8OPX6J/UJ4siZiGAqFCpCrALaQ957X+ixKahEv/gpq9778739NOW6UYRFclV7VRaMIgM5hgMgHXPNWTxM/9eias645AjXc3Dfhgxh6y6HjLYeOmOaRzkFZLHpkztrnTz26Fl4BEJDfD0vQxPt++JAnPvxIuSdow/3nqA/p3oagHqDcEDLvk+hyw1ly+OA3Z5fSE2T4iHWdPn36u/lwcnJafGr3WGFNfLitZhK81z5PGk1ciWSBVdLEOYOCzQStL2Zhyh99/SGhfNzw4cMnhNNFInpRTE0di16kPU9Hc3AWkSmiF8UUF3VoXywOjtFa5nyVWbAmotHoOaaodUQkEqlzTSR09VQ2tM+riXMiJb+6Fo1f8lX29S22sID7+9GcHDvCw6kFBf1wOLekpL+ggJ2bw8zM7E1P64mKJFlbV50/Dz15MmH3bjdz8+ilpZZZjMwoqiFSelWaaaV6WqmenlJPswb4Le3kqvrWwwaWSdllLe3kThprQj4tkU1LZNNlSIyZa/gdp9DFpnbsmI+dHdLZqd3ZGZMQ3xkb2xEdjY+MxIaHt4aENPn71RgYxOkdCvr116Drxn724c5Hgo8cCDzglO3UyexcQmpXEMHvJ56FBO+574i/QLx2QFw2v+C0eUPEhZzOWofquC8Dzz5vsel95wNXMtwXm86TweA6KhEo78DYL388nF0Ar0SgaD2P3bToyTxpumfAUGuPQqYCJqeAHgHvPff10V2+lVMx4eNGzpwzv+R89aHvO997/WiR7ltD7ccPqnFDgHPu4Gk39Opo4qMrmh3gPP9a/v44xjoLwut2pOimERJPGtU08uiRC68ACMjvh8Vr4gNvmyV886/DmEcTa+ZK0MwxD5/i/stPfQRLoVBMTEzmaJOPjw+LxVp0avdZsbmJ8yS6KE1ciWSB1dBEXl3WrEHBmdHEeyb3eLnsaL4vdk88IYuYck8TZznfLE186MV73rmsh86zTfFxjqgTTcST6eV12IVoYlJuFbIJt+Sr7ONTaGZW6utNsbFqt7BoNbvbdOdOncnNaqMb5Vevll6+XHDxYvb5c+lnTqecPJlwXD965y/OZmZRS0stowiRVliNJTPG5RqxTC2UakYnNMl5NYcuWGzXN9bGvjN37XxTqFxVF0fZyVZBS1ruuoTddgxZbGpHjnjZWFc62LfEx5E1mumxsQmxWDY1pZIr5fxxvlqjtrVNPXTQ29Yho7ih8jPLf3pgPM7knPmbyd8uB1xeQmrfZZm8EnkUErAT4rUF4vw9xG0LxGnTi84/bYu/kYSHCSZFye3wLWFXXzT78RWLrd/5nl9sOk/G6K7Lvzbs/+Df27Xx5Y+HI+IylnaqJ0339OO10OWTSkAyBVBHeO86r3ch3UydcPIYNjDvO3oOv31Pwzf/CPzbl1Y/+pRkNvdLsTzAMZt30qXpWWniKzakl62J6ywIr9mSdkTQK7vF5RTxhQwWqIkgIAth0Zo4W3JmPPExajOPJiY84pPzDk4++NUZ13q8LGIwGEtLyxlt8vPzo9Foi81rNis6mjj31cVoIrACyQIrOzexpo71yFPmhWuiaJwAn2/Mb/5FMNrRxFnHPBhNfFRklzs3UWuKKBTqcY6oE03EddBgyLaFaGJidgUC1b7kq+ztXWB6p8jTg2Rh0WJ2F3Xndt3NmzVGN8qvXS25fLnAwOC+I56IP348+ujRsB3b7e/ejVhaaulFNdCCakwHY1ymEUk1Y5OaUYm6f1iaV46e0USvyHx8j7h7QNnVrySzlKlF6DtOITftgxab2qFDbuZmpdaWddFRuLGxCUPDMEfHotZWdg2l5huPb/jjfFvbVC+vvKhC6GeW/0ynp++i7/oT5k/PJT3352N/XkJq78aefCF430tB+z6LObc77c5bAXovOG/ZkWAciynuGmZV0tqOJ1mtt9/zx1sbXrj9w7tWuxebzpMZE4odPUJmNDG7AC6ZmFzaqZ6sic1UuWQKECkACp/3rv36a20HvIYvmTGPncNt/zzw/Vdv/flH551eJenN/VIMb7qVC9g/U01cZ0FYZ0543Y60I4KO7Z+s6hYbZLBetSWBmggCshAWq4mzJwo+0LcV1MSZn57oihgMxszM7KeffnJzc1vm0BqwtjUR0HWywMqPJjJRNcFZROaSNHH2sOKMd8494SI0cZwA1w5D6mAJCxqNzszMfJwj6kQTsSRqKaJlIZoYnwWvbsQu+Sp7eeXdvp3v7oazt2/BYvmdnQIyeaSjg99BGiISB4lELoEwgMdz6uqo+vr+B/b7bd1qa2o6/0zBp6aWVlidkl/ZRuoRyzSiSc3YhGZkXM0Xq6n9wmwY+tAFi8D4EhSRRx1QdXFUnf3KDpYypbD5lkOwsV3gYlM7cMDF1LTQ3Kw6IqJNIBjX1/dKTm7wL4y+mHnRq83reOzx4PRU6yjP09FnPTAeu3p2vd7xOiQZ8obpG1tvb11Cau/GnHghYPebIYdPFbvnUOoulvjsSr4T1pKP5/VUUFt+TbJ+1WLLH25+DTH65gWTH9612LXYdJ4KrYc589CZv4zpiU+a7ukz0NgtF8mBMRlAHuK9a7P+dP3WC6hfvov69BPXv52MuuxelpjW1lZDH8IOAm1cAD0A2GRyjzujnpUmauPfPhQ/5BCJK72W0/++S+e8xyy8AiAgvx8WqYkPlqFoue80C37o3PO4MzxREx//2gMoFIqlpeX4+GO/OXThrOzcxDktsHhNBHSaLPBfoYkPRLA4GE5fI5r4VJaviRhid3E1eiGaGJsBq2rALPkqe3rmmtzMcXFudXRoFosVSCQxORmBRM5dE6M1rT27PbZssbpzJ2xpqaXmVybnVbQS6SKpRjihEUg0w2L1kEjNG1MzuJOxmdXNJB6dq+oeUHX1q8hsJYmpTCpoumkfaGTjv9jUrK2TjG4kXrmcERaGlkoVOTko1/RAk7w7hs2Gl0Yv7SjdYZB8xQhqYlhjeKb/zJ9If4IkQ962fnuv+V6vGK8lpPYd1PiVwP1vBR2+Dg+kj3LQ/V0FlEYcj1ZBbTkNtX/e5Js/GH0FMf4GcuPbV25t+c7tzGLTWQi0HmZEXMaSxxGfWgd9b04DRTYmA0akAInHe9di/b+D/rY7ftupuMtmWT4pTQ0ophA/BMw4YtMAYJU5oO/c+KyWsGjjI/fOq9lsmzLu596UeR9Mg0tYQEDmZXGa+KgN3n/uPGdXxHLD2VsBzhz6tCUs881NNJztmauz9neFl7A8vCpnA+RRTVzl/SVXfG7iPWNbviben5K4vIfOM6tY1r4mthIohZXNC9HE6PSyyvq2JV9lD48cI6NMR4cmO7sGsVhha5u6c6ezi3PunMO0mrhrl+vmzWa3bs0/U/CpqaXkVSbllLcQ6MJJzah2KFGk5gnVA6Pq/hE1k69iDKpoXBWFo+pkqzpYSmKfMjG/ycg24LqV32JTq6sj2domnT4damOT34zuam7uNIozvZ5343L35ZeGX9IT6H2X8d3pqtOXOZchWAgkB/KG6Rt7Lfb6J/jX1tYuIbUr5QHvh534o/u2z8JO2SLiJqbkKo26ktb2a5L1OpNvINe/gBh/C7nxLeTq1+9b7LmS6LLYdGaj0UxTezhEMmPhweEOL+TMT66DvjenvksmkAL8SaB7eOzXmIs7/fVup7nkYdsoowB5GCDwgfZBAMMFWgaA5gGgkQNYZqyeJj66IY42/upMPpzQezih96+zdt4GN8QBAXkqi9HEeQXmgfU9tGLjnh49eG1hG+I8Opo4+9jV2k5wxbfXfvDOhqCgOaOJDzfasiuxEFZ+CctsV9POX5yribN3vXnIL2e//mBFy5xfoRc9WOn8JE2ctZni4wtdS5rYguvKr0AtRBOjoKUVda1LvspubtnXr6XZ29bbWCPFYrmtbaqeXlBQUP2cw7Sa+MsvTps2mZqYBC8tteTcisRseDOeNjapEUyoh8XqIaGaO6buF6iYwyrGoIrOU96blchWkZhKQp8yIQ91w8b/mqXvElKrrGyzsIjR03PYt99mzx6r3NxaixSbvwT8BUKDQPogely9H3p/gGAhfyj9w7pT6/aY7QlMDGxsbOzt7V1CalBy9Q9Jxi+4/7LO6eeP/Y661aZAcRWnkqzfsNjyB6OvIEbfQm58A7n29brrG35wPwdtKl1COjMoppSXTPy3HZ69n7bZ9sMWO49ZaWObnvk2PfOZd7fpmfuH5yzkzE+uw2xN1O6kPfNtKxQB0HFfE7VDiQ800WmVNPHR7bW18UMwLZ8ozCcKfwimPfrlzuD22iAgjwP8sr55AL/TeSEsbnttFjFlZnIhas5o4ux354wRPtjI5pG9tR8qKwXFe4Imzr/3zWMLXUOaiG7vzIU3LEQTI1JLymuXromurplXr6bYWCMsLapEIrmtberBgwEBAcg5h2k1cft2h40bb928Of+CkqemlpBdHpdZ1oSjjk5oBJIHQ4nsEXUfX9UzqKJyVRSOspOt7GCpCH1KfO9UfC7qmpXfFQufJaQml08xmZy6uqasrPysrPzSUlh+Sf7d6LsQCwgEB3mJ8tI64jpIDmTd6XXfGnzrE+VT31DPZrNVqvnr/5TttccGLKujPgk+BbH9cZ3tT5/7n/ox7Opf7ff8j/HXEKNvtOOIkCtffWJ90DI7sIfPXkI6M2g10doXNvPtfCeuBvpFF+KoA9owsY0ytk+fefeKRaJONPGwBwtBls5xRPoY0C0AyMMAkQ/ghgAMD0BzgaYBANUP1PcD5mkDxxwantWX9WnjC1+KN2LIGzH0he/ch87gl/WBgDyBxWni3MGx+6xQ5Z4VOtHE/6K2+k1/p/PcuYmLjWeriU3Yjuyy+oVoYnhKERzZsuSrXJDfbHon8cyZGLO7MJFI1t3NwWB6e3vnroHQauK2bbYbNty8abxETYzPgsWml6YV1hRUNeeVo7LKGtNL6lMLa5PyEPHZ1TGZlZFp5WGpsOCk0oCEEt+YIu+oQivPeENL38vm3ktIDQCAqakpsVjMnwWNTUtFp77u/joEBtGuWdljvscnyqemtobNZsvl8qWlplAra5l4o5LAT/xPrLPZ8pz5pnVmPz5363uI0TeQ699Crn697tqGT6wPGqV61FIwCtXU0tK5V9aU8pKJv0cUqqRFro2zN8PjsxECmVobVu5J5p7FM+/edMzUiSbuc2Jcj+w3S+TciWffjGEZx7CMYljXo5iG4b0XQxkGoYwLIYzzIYyzwT2nAui/+lH1fbp/tMAdsq1bHU0EAADNnDDIYL1sTZztgq/Zkv7tQ/m3D+W1h9c4v2xNNMhgoZkTCy8dBOR3xVq0lmcOOJq4EFg8vlAoftYWuKY1EYVCsXiP/fK3hXzMGltJ4SlFlQ04eB0WVospQ7aVIttKEK3FNa1F1S2FVejCquaCyuaCymYH/0QYAr3kq8xi8pMSKy9fDjl1Kjw6GpaUVJmYWJGQUB4fD4+Lg8XGlsXElEZHlwQG5mzdarZhg/G2bbfd3BKXllpsRml0WklESmFoYl5QXI5fdJZ3ZLpHGNQlONkxIMHOJ9baM9rcLcLUJey2Y4ixXeANa/+rlr5XzH0umc2/rGRpH2CJTBJYGvhZxGdv27y912JvYGKgdhxRKpU+4beeetUmp2S1vThLWMTG0CvvOx981WLrC7c3vWCy6dXbW9632LPR7axlVmAtBTOpkD3uDIvSxBu2UI8olDYOG3hauSdlwdDauHgr4MKd6Jl3TxuF6kQT02tHvaAk26gm6wiUVVijNizDGs1DGu4G18+EaVDd7cDaWwHIm34IY78a56jKVdPEySkNnCI2yGCtdyY/+vR59rPm9c5kgwwWnCKenAKHEkFA5gfUxHkANXEh8IYFw4KxZ22Ba1oTcXgCZ+ixiwYW8jEjU/syixHphdWpeZXJueVJOfCELFh8ZllsRmlMekl0WnEUtCgqtSgipTAipRBD7F7OVaZS2SkplXZ2STY2CdbW8VZWcRYWMebm0WZmkaamEXfuhN++FXrLJMTkZvDNm0FubolVVc1LS62ivq28thWGQJdWNxVVovLLG/JgddmlyMzimrTCqtS8iuSc8sQsWHxGaWxaSTS0KCKlIDwpPywxLyQhb2mpPQH7ZPuzrmf9E/wbGxufPI64kNS0TKmVDMEAFAs3zPTY4Hv+Xavd71rs2uB2xjDJFdpcyuD3T6mUT/j1BaYzpVQ5eqdcMvFfeKRkVS3kzE+tA51OxyyJx5WlW00EAGBySoNmTpjkczaH0j5065yz9vkVG9KHbp2bQ2km+Rw0cwJ0RBCQJwBq4jyAmrgQppRKFo//32CKy4r6JYFCobDYduYAb1L62EGjVf6YLXOblUXxX5Qal8tFo9G1tbW9vb2Pm484m1VIbeHpTClViinlwkOlUuu8DstnJTRRi1SpySMIL2ayPvXomq2Jn3p0Xcxk5RGE4HxEEJCnAmriPICauEBkCsUAf4TJHQJjTrB4/AH+yPjEsh5f6hZQE3XCmtLE30YdVk4TQUBAlg+oiSAgICAgICAgIPMAaiIICAgICAgICMg8gJoIAgICAgICAgIyD6AmgoCAgICAgICAzAOoiSAgICAgICAgIPMAeeZrQsEAAwwwwAADDDDAWIMBgYOAgICAgICAgIA8AvjQGQQEBAQEBAQEZB5ATQQBAQEBAQEBAZkHUBNBQEBAQEBAQEDmAdREEBAQEBAQEBCQeQA1EQQEBAQEBAQEZB5ATQQBAQEBAQEBAZmHe5pI6R91SK4zDoFdDShehXDPaKL0jz7bzEFAQEBAQMDuDwTkCUAAAKAOiG9HI41im02gnSZplBUPaKdRbPOdmFoia+xZpw8CAgIC8vsF7P5AQJ4MBAAAj1yCeRrhTkb3aoZ5GtEjlzBvnbpZg6vbCCAgaxfwdlib9HFHFErVs67FWmfttxLY/YEolCreyBh7kP/Mv+9kbQYEAAA7aKt5BsUsk7qaYZ5BsU1Fz3vNwPsEBGQG8HZYm6x9AVoLrP1WArs/3SKYUFV0iYMQg6nokS6e9FlX5+ko1er+oRGhZFKh0ig1ABiPBgQAANuUZsts6uqHbUrzvJftv/0+AQHRIeDtsDZZ+wK0Flj7rQR2f7oFy548FEX/j1vHD54doZVMgXD8WdfoKQyNCoWSyWeuYms57mmiTS5t9eO3ep+AgOgQ8HZYm6x9AVoLrP1WArs/HSKUqlJbRl4zbX/RqOWFa80ngttqcb0ajWb2MdMatVTAZjenC3rmH09dZThDI3Kl+pmr2FqOe5pon09f/fhN3icgILoFvFrDsasAACAASURBVB3WJmtfgNYCa7+VwO5Ph5AGpGa5rOevo7+yaXjtesMX5rXe2diJiYnp6WntARrVlFTQz6iJwMae5zQlAapn/1SayR165h62xuOeJjoV9qx+/CbvExAQ3QLeDmuTtS9Aa4G130pg96crpqeBAvzYLwFdb5o0eSSWf2eFfOtq7Wn/5j4mW6VSAffGEfuZDUlI5w39deFTvDaNiCGXy59ttXWsicR0C4t0/LMWuxXRRNcixkwAANDWiQxKszhn8/3Ws69dt96RmOlFYxAX0uKzz/PU+O3dJ79bZHJFSXVzZgkyrbA6Nb8yMac8LqM0CloUmpgfGJfjF535rCu4sqCpQFEbMCoBzgQDrfR7P+qKhd8OZCIcVuialWKsjfREo7T46ykxVxOirsSGXY4MNgjzPxdrur9oyz9bX3w+ae/XJXEefb1knVSyvTUvO9U0JuTkTEQFnQj3Px7qeyzQ66if22Ev50OudvsdrfbYmO2yuL3jjtG2kIDbmLYanZT+TFi4ALVTxbZR1JP2uDNO+LPOhPMuhAuuxAuuRAO3e3HBlXjOmXDKEX/cFqdnid1zu809qaerT7LSKawC/xWaOG/35JjUZmGVYGGV4JjU5lrEsItvMTaJvHo91CZ2/uMXGyvR/ekh9PSQelW8Ku2PSo0Sx8d5tHj8DP35PZ/3Pvb6+ELqhUJc4ZhkRfbimVSonYr7377Tss21OS0fbhbX8h+Lpu/MavIr26TyKQAApAI2oyYC6byB15oq57Zo+M3D1Oqammf8n8DDmkhKs3iYgGpSVeAizO83rIkeJYyZaOtEemRdupz01YWCjw3K3zOEfnDN98uwZHMSuXV244pEE01NZHf3dCq1f+bF2ed5avxmNFGlAdjD6knF9O+q6NnI5IqiKhSWzOjpH6az+TTWEJU52N3Ho/Rya1s6fKN0pomjovHGto5HgtTQSqpvIZKpfboqaAbLR6BQKLMPqCEBjlnAtWjANh045AXcTgBuJQCWqTozxYXfDrBC1xZUKp3awOWQuRzyQD+JwyKymXhWb3tvD7aH1ooLc23as5mwb8dIelrtPz/M3fl9R16aTiqZnWqKrAwnEyvZfThtsHrb+xgYBr21h4qmdjV1kRvIRCQJX43HVmJbYcUFEcH+t6HJvjop/ZmwcAGyi6HBmvhVeHFmszgLLc5qEWe1iLNbxmciCz2e0SxOaxKnNIoT6kUxSKF9Miskh7nSKawCC2+lG4snJiZm+TWc0/1pwykBbe2Wo9VE5+Q2jxKGfQL6ulHYJcNgQ9MEy/C6RfV0q9b96SH03sl+Z3f+Ad+8aIl0wovicwKnf7pb/wj9yD+In23v/OEX/A+HkXs9cj2WXMQTaKSLj0d2v3Oz4bg3MiK7ziu3Y6tj69+vlNtEIgZHhOODDFp5ADb2fH9duJyLVg+hNOyiQUJmWVnZSlRm4TyqiWnEZUjVb1gTvcp6ZyIozeJy0lcny/96hfrJbe5Ht4lvXUj6k5HHd8mpARKJZGaSweSkHIulHT3qVFiIGBu799fJ7PM8NXR7n2g0mjHROLW3v72D1kqgtOIprXhKK4HS3kGj9LCHRsbUD0+k1RVy5fTAqJrEVDL56gnZquraMyx6DjK5oqCisad/WCLXUJlDcRmwuAwYlTkkkWvIdI5PZIauCuLxBfnlDRhSD66rD9fVh+vsa+/sa+/sw5J74XXYwkpUJ42pVOly9GLTpk27d+8+cODAnt17tm3faXTbAlZVR6IwiPejFC2wSlHscQOO+AARFdOXIoA9bsCtBABN1U0FFn47ZKUY06kNcrkEAIDp6enpaY1ao1KpppRKuWJcOFoFHys06z35fz16G6d4qW3rX8cYfkKMNmIjkcuvZEzISTKxUioV3/t5elqj0ajVKpVKoZySKeQTMpl4cmJUMj4sFg+KxgYYdGxMpH2Qv9nyiwYAYFTQj8cU1cCDq+HBlWVBFSWB8KKA0gK/ojzf/GzvTKh7crxLc2OZYESXf38uXIDOOOEjinjJCGEoXBhaPk+EwIXBcGEwXBgEEwbAhP5lQgNf2t2QLh3WFgAAtQbgSzRc0RRzTMwSjolkMs30iv+nsfBWwuPxubm5cYshNzcXh8Mts4Zzuj+vsl6XJLStZ76FVYKlbbJDaJV7LtmrrNc1u8Pct+yiYcipsz4Gt+LMQhCL6uxWuvvToofQ+xL+5YHKw/8X9r090cGAfEmPfvDw8J5jit1bpd+dmNp1RLRlE/aLL0K+WHIRTyC4ivuVI+7lK3X/Ma3Z41S7xwX98Y26106V7bUsw7WhyUVeRKhxX6W3gteq4Tdr2EXq7khea/h/gSYS0y0Cqge0b1VVB9wbZgys5M0cM1QZMHsE8jeqib7wvpk4Z/P9hYKPDamf3BT821Twib3gPQvMywZeb1vbnWMymapZffDo6Pivv7pERKQxGAztK7PP89TQ4X2iVKqGR0XNuM5cWH1KXhW0EJEDa8iBNUALESl5VVmltUg0gS8QKnX9+EOunOaNqfG9Sm0w+as3sPcMi34UqUyRC6ujs/lU5lB2Wb21Z7S1Z3R2WT2VOUSmc3wi03VSyuDgYEUVwjswsgRWVV5VW15Z24IliaQaoVQjnNSgCfSMYmQ1Cs9gcaUyhU5KBABg06ZN+seOnT51+sKFi/aO7jBES00ToRqFr0bhtFHUyLGFyk4GAm6505XE6WDY9KUI4HYC0ErXTQUWpYlcDhkAALlsfKCfNNBP4rAJ/Sx8P72NUw/rOXWcH/Ajx/Qjjvm/lPzT5IPvsb0/b7v5VY2BAa+zc5mVjAk5ye7DAQAgk4q1Q4lMBraP0dbb08qgo3uoTbTuBiqlrrsTQaXUjQwzRoZ7U5O9/X3uLrNcLQRsUVVZAKIiFN0AbapPbaxNrq9JQFbFVZfHlJdGFOcHR4eZR4fbtqKrdFKcloUL0AVXgnMyOzCPH3A//PP4/rl8v1y+Xy7fN4fvk8P3yeF75/C9svme2XyPLP5p167bgcu9KLNRqqfHpOqeETV+aKSE25Q9UEbg06Vy1cr87fyART105nA4XY+AbEMaxho+Guap5gkVCV1dy5XpOd2fOxRj455rYZVg5QB1CIT7lNBm3vIqopo45Zw2CNQ76nbySrhVNMq7tGdRXd4KdX8z6CH0zmPPhw2E/VD5w3dN393k3bwhubFLtO374U9/6vi/Xe0bTw/s2c/+8Q+Jf1hyEY9DqlAbJtL+eqvpA2PkRouqjWYVG+/A/3m17K9n8r85nwCLtWsO2tcJNRxuT58ebtE6ogrnwG1w++/SRIuA6gENoNQAA1WB9/89VBlgYZFOenDwb1UTA8r7ZmLr2dcMyt+7zf3oruATS8HfHQVvubJfvhD4J8PrO9vb26emprSNq9FMDw2NHT/uEhYGpdN7tC/OPs9TQ1f3iVqj4QuENU24qLTStCJEFQqP6+zr7h3s7h3EdfZVofBpRcjo9DJEE44vEOpwTFGlAQZGH4iaNhg8lUKpGRONTymVuipoTRU9L1KZPKsESWMNpRUi3ENSxVIVhy9y8k9IK0R00DneETp4sjkxMQFNhe7eufuTjz6ZiUuXrwon1WOTmjGJphlPL0ViejjCpNxKam//lI7+JNi0adPRI0d+/fWUvaM7e1CojWGRVCLXiGWqXuGoS97UER/AEjrd2a+5FgNUEqcjKqYPeQFngnVS/lI0cYjXXZxjW5Rjo42SsOtVpzYTPvqAuP5V9q2PZYRfNOIj46gf2/e9UfX2/5T85+/ZhobLrOSMJg70d0Djb0Djr9+LuOupcdfux9XU2KvZqXc5/ST+ED0pwcPb8/Yyy9UCK/RoRMaP8PsmJkaHeLRBbjdvoIvbT+awSRw2cZBLx2GrvNyuZqTp6JIAALAYAbroTiTSxwEAmAYAzTSgVANiiUIiVcpVwKQSkCiAIaFiSDQ1MgkMS4HBCYA7DnhnsG7660wT1ZrpYamshc8dUAy3K5tDFLZmwgvpPfA+7rhUpp5eyTHFhbdS33xwOJzKjkqILeRvoW99EvnuR+Fvfxj21odhb/099M1/hX16t/SuRLLcGZxzuj/tg2ZL22THIPi83dY163Q9fY/d+xz2HXF3SsH6lfUsqtfTefc3G71qvfOY85XyyhJZSdhk2A3JjS2CLe/Q3n2u+Ll3LN5Zf+H9jWlfbu75AlIIWXIRj6NrYHK7J+FjE+S1wOry8vLq6uqampqA5MrjFtBDJ43z737eX2xITz/TEfernJqhokQqcQ5TKMOBarOFaCIMBvvuMRw6dIjH4y2n5k+Zm5hOemg0ccYgedUB2gHFOV74G9bE4ErmTFy33mEI/eA28S07wXpHwVuegletGl645PreXbNTdXV1CsW9cZrxcWlTE/ngQTsnp0gc7t5E+NnneWro6j4ZHB5DNuGj0krzK5porCHBuAJDYli6R1q6R2JIDMG4gsERVDTgotPLkE34wWGdzd5lD6tJTOUcVyP2KdGdY5fuerWTunVV0Joqel6kMnl6UTWVOTgskvIEEg5fdMXcu7weOyySdtD6PcKgyy8iJirm4P6DH/79wz/O4sChI6MTGoFEMzKubsRSE7LL04uRiTkVcZkwHJm2/EIBANi0adPPP28PCY8pr23VN7TSRlph9YRcwxSNfZV1M7MLH1kBHPQCrsUAnf0at9zpIz6AbTowqqMVCIvXxGmVUiEZHxkX88WiQZGQO5CbSvjoAymRqOR5qUfPTEv0AdFezcDGKfzH8sY3+nz+nPbnPy+zkvc1cVqplEvGh8UivkjIGxsdGBWwR4b7hod6hgapg9wu7YxJ/iBtaJAaH+vm4XZrmeVqgRV6dBDgYjG/va1g9jKamJCTiVFXEFVprD58oP/dlKQAnRSnZeECdNmDROwZBwBAAwBKDcAbV6Vk1CPqO6VKYGIKGJcDyWl1OWUEhkA1NAFwJUD/OOCZzjLy1c3qIgAAeGJl2TDaRn3SflrfQnXIfOK6dV+6A3IkBkHsYPImZSu41HSZcxOdnJzsI+whthDPgYvJsjuRQsPQkYuhIxf9eae35/9rW9i2lpaWZdZwTven1USXiOrAMvq83ZZfCfW6ffbOPXY7dtnuPexqF4taVK+n8+5vNnpwvfPo80WyojBp2A3JjZ9EP72Dfee5iOdeu/1aaHooNAd6Iv7XFyKfh2TqXhPDqjhfWLV+aVrlFIcgEAgTExNyuRxHG0lLTc+78/EAzFhB9JNiXFg5Z1u9f5xsujvVZCgpP8QovLwQTRwdHa2urt6zZ88cR7x16xaZTJ4Zuloai3vo/IgmzhpW/K1rYlg1ayYSM7yu+X55IelPFpi/uLJftmp4wcD/j1ctvw7wd2hra5u5JEqlemREVFuLLS6uIBI7ZDIZAACzz/PU0NV90klnpRchUgtqaKyhUYmiEUvxici46xJm6x2Dp7Akcs3YxBSDM5JaUJNehOiks5bzkZoNpoPZgOfNcbXiesZ1m9BdJ2+3tOvsf/k1VfS8TErlKXkV3X08iVyD72I6+SeU12M5fLFEriHR+t1DUpZfhLmZ+UcffvTiiy++/tpLSUH6xUnnvawPe7vajoyrh8fVfLGawR0nUAcJtEE8bTA5rxrdrpvBmE2bNt22sEM0YpBo0t4zt9yCk05et43LKK3nUH8psn0hWs+motU2HdjjBhz0Aiyh0ycDgT1uwKlAwDlbJ+Uv4nbISDIa6CdNazSC4b56RGR9TUR9TURddXhtjCVy/3edhw506v1nIPBrede2ad6PEsxGovHb9TvWwba/k7hz5zIrGRV0gtXbPq1R83m08hKf8mIfeLE3vMgLVuQJK/QoK3QvK3ArzXctzXepKPHpZ+MHuZ0xUc6uzjeXWa4WrSYqlQqRaJDT39HPIrKZOFYvto/R2tfTwmYSedwuP+/biQn+OilOy8IF6IoniUgf10wDCtU0d0yWnFHv5JYBq8RPTAHjCkAoB8Kjy20c0xKy0J1DKpYIYIkBNyjrho/O7uJWjtq9E3tjwuDm+FVjSvbtFpIdatCzXnSyzt+nJo3Yq5s/qOZlUaOJcDgc+jBZWVm+ab6PjiZeRW/enPnx5sDNFRUVy6zhnO5Pq4k2LpnuMbXzdlu33IuOnPLbsct2z0Fni6Aq/6LuRfV6Ou/+ysrKrt7nA9cPjjQcCZGG3JDc+Em05d3Rd9cVrnvZ8eXvkzZmlGTQaDTLQkuIIwQSqntNZPBlhU29cQWoAngtg8HQTk4TjHCxNRGljm81uv9nEG4kx9iNI670JW4lBm0czNxOj/qmNuDAAh86T05OwuHwS5cuzTiik5MTFotdfs1BTVyoJkYg2DNB6yGGJZsbeXxn4PW2QeCfLrm+d9Xya1fPawX5WXQ6fWZu4vj4JBZLjY0tSUwsam8na0cZZ5/nqaGr+wRLoiXlVpbXtwvG5fBajLVn9InrDlfMvDJLanPhjbXojmYcNaMYWVjVnJBTgSHpaGUBADS2dZQgcbN1La+628w9cbu+8XZ94+wSRCeN2Uljkql9Hd19JEovoaunl81dhaJXSBPv59JLpDAInT04Mq29g4YlUdsIlMZWUmRqYReDq13CklaI0D6Wlcg1JCrbNShp+aUb3TB64/U3Pvv4TX/HfSKqSyfKGxpxFxoTwBerh0TqQaGaN6YeGFNxBKp+gSqtsLYJ07H8QgEASEhISM0uwXYwkGjS7lM37zgFHblkEZdRiudzbtXHvRx71LO+NbB02jQJiKiYPuIDuOdN+xcpvPJk6Q06KX8Rt0Na/HUOi6hRq0RjA8T2IgK2EI/Jx2Hy8A3ppJSAts0baVc+o978kOnx4VTn5wTjvxFNP6r69d8FJ0/iiouXWclw/+N9PRiNWjk6wm5rzmxtSm9pTEM3pDZUxcITHSOPbSiJsqyviqpHxKBq45mUptpQL/sze53tjZZZrpbSAncSDiaTitlMPKousbE2oREZ34CIra+JaaxNIBGQ/SyCt4dJfKwuF1YvShMJ9HG5aprJFeUUt9o7pppbxpdW4LSOKJACweFll68G3zJPiExrxrEn6aPTLqnMa966+QADAJDR1763yX17x+lNBbmHc3sNKvptcZSEPtx+vKFhjmsVTne7Nz3CouYm8vn8R58746i4oKagW9Bb2imJxyOOP2///BnkNz+mf7jJf9PyZ7bN6f48YutsXTPNLeOtHNPdYuvCKnsjEOykRkoMusKsztes1udEhOFe1+O7nY7tczthVOxsAvO4WeruWBmT3Yp9Jt1fdHT03r17HR0dN27c+MqNV36q2XJDcmOLaMs7o++uE6yDtEJejH/p04DPbhbdovC7XatcX7R68T2395bZaPMikUgGBgZYLJZIJNJoNPKJYTYxgwg3IsEuJpp+3uC/faDg5CTi9HjxTmrwPzsD/tnovbkkxHhRV7C8vNzIyGjr1q3Ozs5ksm66uWVq4v13fweaGF3LngkAAEjk1uTUABu7c1ev77xrdirA36EgP4tAIIyNjc188c7wsDA/v+HcOU9z88jq6jbtaOLs8zw1dHWftBK7oYUIPIUpnFB6R6QfuWT16zV7t+AUKnPIJzLD1jvWPST1ln1QXSs5Jb+6BU95+hkXRmNbR3ZpbXENtok0gmMoiusZM6K2Xd/YNzKjDNFS20JCoomIJkI1Cp8Dq69swKxC0SukiVklyPJ6TE0zoRqFq6jHwmrbYLVtpYiW4qrmHFh9YFwOuWdAItdw+GIUljImUWg1kUhlOwUkLL90rSYe/OUjVd/daa53c1VgbqJDaYYPDk/ijMi5Y+qBUXW/QMUeUTGHVcl5iMZW0vIL1YJswmFIPfiuPmvPCGvPSGvPSHhtm0SuYYvEZ6sCatnUZuo0DDc9KNJ4F04TmBp0B7cKzdBV6Qu/HVJir7GZeLV6akIywurDMBltvT0tDHozg4ai4ipQ9tdp6Xsx5//etuNFGeqdorefa3L+V3PaNUJp6fIrGeKrz6C3qlSKcTGfQW/uoaLo3Q1UEoJYnlXvYFX0wz8b7E3by6BETDG+Mbs+0jf3wBa7L/7qbWKw/KIBACjJcyNiyyYnRntoTRUlvuUlD8YyK0r9sa1lrD6sh6tRbLSPTorTsnABMvQiEejjbJ6oAIa1tE4wt4wPCClCtTGEMmBUCgxPAlmFbXetEk+c9j513j8mB9PGGHdOYV7VnSYGM+P+Vrvhr5U7XvHK/2do+0/lmSepzra9XluajulFWuY3oLSHaaaniUOMSkYbhquzWSuLWun8BEpLS5Oyk/zS/K7GXV1nv063mjinY/KKr7N2yrhlGm1yN9Y9sTGsnBbbUuGFMzve+u2xlm+ONn99BPXV4YYv9Wq/OIj4v/2V/9oL+/xC+c7weq/V7/4oFIq3t7e5uTkajd63b9//Gv7vh8kffo/+/t3Gd56rfw5SD4HUQyCpkD9e+uNHsZ8Wkossyyz/6vbXMwFnltloT2Z6WjMlE3I6cklwYyry2uRgZk6EfqrFF3XuXw5At0gKN/dF/RPl/g085GpFQWpTU9OiTt7S0mJnZzc6Oqqr2i5XEx96Xbvk+TeqiXF1/TMBAIBKpRoZGSGTyXV1dTAYrLGxsbu7e2bXGy0KhZLJHIyMzLexiYBCS/r7+wEAmH2ep4YONTEH3jgwLBZL1XnwRjOXcO/wdK2jhCcXnrjmcOqGY3hKIY3FzyqtR+N0ts2E1tWyS2vzyptauoTG9hEzorZd39gnIh3X2SsRy8b7h8b7hyRiWVM7BY5c7kyahRTd0k6WyuTjE5MajUaouxUtGcUI7ZY3YxIFhy8SS1U8gUQ7ajg0NhmRUkSmcyRyDQpLuWLuzeGLtJeA0M1y8Itffuk21jYffPDBoa2vqzt2TQ+4qQcjZeyQzjqnKD/7nv4xjkDdP6JmDav7hlW9Q6r47Jo6NGH5hWpBNOHaSPQxiYI9KOwfFPYPimbWsjwaYxJFCaIlPlMH7qVl4bdDYpQhsw+nVCo4bFJRjnVRtnVRtnVhttVM5F0/kP9/Hzf98uex/D/nf/Bnq0/eK4kO0UklAz2P0qnoqSkZk4GZWbMS53Is4tCXKX97fdLnSOm368O2fxpusy/UeJvXe6/1XN9eu/+LlP27Rcubfq6lKMcVjylRTkknJgQj/F7+EH2QR+UOdA30kzgsAodN5PQTXJyuR0d6L7+sGRaliTjaeEUVztwy3sIqwcE5Dd85IJQBozJgWAoMTQC8cSAtv+3shYADh5x37bXPr6E6JjOveulME6OY0M9qtq+H/7ge/uNfgkL/DDX8U8VfIeE//NF/9zeWptDyBgAANNOa4UnR6QK3t/wPn85z1VXRC28lW1tbc3Nz08cQGBZoEmLyg/f3f3F/8Q92EN1q4qN9k1d8/W3z+Ks3Qg0uB/qktVrW+x5v/eYMdeMZ6sYz1O/vRff3p7q+u9S5/Rxh8/6qzzcEv7vK3Z9AIDA3Nz99+rS7u3t8fLyent7H1z9+0+zNt2699bbx229effN/L//vKwavvGLwyuvXXn/d7nX3NPfrWdf3Qfet6OLi6WmNUjE+SCtvyTjS23hbIypQDEZKeiyhfptjbrxXb/MuO/bf5eZ/Lws1Ks9PbW1tFQgEK1eZhbBsTdT++/4uOVW/3dHExAbOTAAAwGQyq6urY2Nj3d3dY2JiqqurORzO3C/wnp4WCiWOjollZfVEIqmvrw8AgNnneWroVhM5w2KxVB2ZUnzbMSQmrVTrKLEZZWdvutxxCulkcFmDwszSupXQxOzSurzypkt3PWe7mlcYFEtmjCNRwm83C7/dPI5ENWA6S6oX95fT0opuaSfnliJ9wqFC0fg1C29drWiBFlT19PNni6B7SGpaIUKrieHJhVpNnJFI7SXAU5i23jrYBVcsFltZWh3a+rqK9Asw4DjN82sptcqM96OzR9nDSvawijms6uOrGEOqnkFVTEYlsmm5G6rNUINqbyXSUdiumSUs+oY2+oa2s8JG39Ba39BW39Aahe16VpoYG365rwczNSWdnBwbHWEJRvqG+T38QeoQjzI40MnldHB6sLj0mLJf9+d/8Oeya+dvH9+ena6DSwMAgK/bYWoXSiGXTEgE99es0KpsTXO//fukz5Fpw9dlR5+r+uKPjn950eu913j2R1SnP1L8+Dz28xct1q9ffun5WS7Y1iKRaJCEhz1YZx13LTXuWmayaUNtdg8d7eRwLSLca/llzbCoh85Y2jisEnfHLNbOEdrNFAxPqAUyYFgKDE4CPAnAGQdo/KnMMsKuvfY7dtnmVHU76FQTib09d6EJz5lceM7kwvMXA9cZuD9vcA1y3PiPR67cCEjFkPsAABDKJEawwL8FHD8AtSzt1s1/U8BiWkkoFNbX1+c9BrNEs698vtqQ9Klx+651Tn/UrSY+2jfFI5k+yU2XDYPPXfD3TWu1qvc9hv76gSBSvz/d/f2pru9OkL5F8GHxvQF7YP/4xv+tVe7+Dh06dPHiRW9v78jISCsry/j4+Pyy/BJESUVDRSO2sQxRFpUcZeduZ+dul5qbmlqQWlhSiOvEdbO7V1QTp2TCQVo5MnojF+82NZyhdUQB4Xh/8/6m5C8KrV8vN/1bafjt0pykdmybQCDQrPSeTE8D/E7nhWpiCmpgJhgMRmlpaVpaWlZWVm5ublpaWlxcXFlZmVYEZ+ByBQkJcH19Z3Pz8JqaVqlUCgDA7PM8NXSoiamFNe2dfcKJKZegZKeARBSWMiiY8AxLM3UKPXXD8eQNx6CYjB4SIqugZGU0sTa7tPaiqftsV3MPTmkj9UgGhsXlSHE5UjIwXNvSUVCumwlrTy7ayNovJQdOZbCmlMp2UndoQg6yqX35hSbnVtDZfHgt5pqV7+5Td+66hB29bH3OxCUhq3xobDIsqSAuEwYtqIEWVKfmV6XkVSXnViblVIQlFVh7RS+/dAAAXF1dD+38UEozrSz0Kc4OSIz2ykjPYA+rmcOqviFVfg2InwAAIABJREFU75CKMaii81Q0rioCWl6D0kHKWqoasC0EGocvqkWT7kdHLboDiSY9Ghy+6FlpYlSwAQZdKBhhy6QiiWRkXDwkFnKFY/1jApZgpG+E3zM8RGd3t3ZXFxBSIipSQ42v6GXoSBO9nA7WI6FDgz2Tk2OS8WGxeEgkHKDXwpFmN0q/XS87+hxwDCLYAaHufLPn+nbV6Y+A7S+1fQLJ3LGRpIseKwvqWF4azmZ1cAc6SfgyYnsJAVuExxS0t+Xh2gq6yHV1yJybRsfDQnT55RMLF6BLHkQMdbwEjr15K+qWabRvUCGhe2h4EphZ18wSAzlwkqFx1I5dtlt3WGdVdtsn6VITJyZlDYSu895Rfzrs/Ift3v9z4c5LLqc+9rp5IyS5HkcVT8g44uGwlrxPA099Hnjarz5dMCnSVdGLmpsoFAp5j9DV2xVeHf5D8A+7cr8xwe0yad+mc02ct3uKq2YEZmL8M9riqhlWdb5Hm746Q/3+3mhi94ZTnd9d7tyB4MPa5FX+TNNfij750uvNVe7+Nm3a5ODgAIVCY2KijYyMzp8/HxMT4+/vb2VllZqampCQ4OnpeeXKlfPnz4eFhTGZTD6fPzExoVAo+Hz+MhvtccgnhjkduS0ZR7h4NykvUTEYIemxFBBPDrcfwmZ9WR7zS1HcrdJEr9K8VHw7hs/nK1d977ZHYQ/yFSrNM1extRz3NDGtmTsTMBgsLS0tJyenpqamsbGxqqoqOTk5Nja2qqpKJpPNbLIlEIirqrD+/mm+vokVFQ3auQKzz/PU0JUmthGpcZnwkppW9pDQ1jsmPLlwYFg8ODrhE5GRlFsZmwELikrOyYhhtme31Ob29uhME9lcfm0z/lFXO3DOLDq1ICELhibQJkQ9sj4/WZ/fhKinppmYU1a7okVrwyM4idj1YHNnZFN7Sg58+aYYnwWjsYbQBJpzYNL+s2ahifnnTFxuOQTDazFDY5OhifmFFY31aEIdGl/XjK9txiObcIimdgSqvaZRB+vRAABwDYo6dHqPpNc7NjowrxBWgWhGtVH6+GqtIPbwVHSuijqg6uaoQlPKqnQ0DRQAgMp6DBpPlcg1wyJpWmFNXEZZXEYZvBYjkanFQqmkvUOC6xyn9I63ESUShUSueVaaWJjjWZTnV1EWjahKLS9LKCuOYdCxowLW0CCN2o3OyQxNTfJNivdKiPWIjnRxdTK+ckkvLzdVJ5VMTbCGJtnnZfmVFUcXFYTn54TmZAah6wrI5XmFZ48ivnpJ8AsE2AcBjr4KGH4BbHm+7RNIqd72tqwsnZSOqErJSHUtyA2El8WXFMb0s0isPnwtIic50Sc+xjMu2s3B7uptkxP5eck6KU7LorbXbqGIW0kcv4iKK1dDDC4F+IeUNrazuRKgXwywREAOnGR8N37HLttd+xxvOeXBsUN2OtVEAABE4xM1zcQd1yM/O+r71m2jl0P11oef1E90x3MY/ImxTGL1pshrrzruvFsSQuDqcuHzwlsJMR9oNBreCt+XvO+XnG+MsL+49urdwf38Y8aHN1p/1KEmPrWrsq7zPdL41YNxxM7v7nQfy+cldUyh44ecr+J+2Z774Rfur69y93fs2NEbN27Y2NhYWFicPn3622+/vXDhwpEjR3bt2mVra3P79m1DQ8Njx47p6+u7ubnxeDyVTr+eal4GqfCmdP0y/3+QK693Vl8jlR3H52/DZn2DzfmxInZPcbJldUU+kUikUqmjo6PL3MhGVwyNCkWTsmeuYms5IAAAOKS1pDSyM1u42ggNDc3KyqqpqUGj0Wg0urW1taKiIjIyMj4+fmhoSK1WaxtXoVByOMOFhTVQaBESieJyuQAAzJzkqZHWzHFIm3+i3qI3xKEx0wpr4rPK69s6I1KKqlB47SY42I5e3ohkYFhM6cR3N8Q05HvU5bgxO3W0ABUAAABgc/k1je2zXe3YFRufcOj4xCS8trUJ1z05ilN0nlN0npscxVU24jOKdPY1548WvV3feM+pO5Zu4VQGi8Pjz4wmCkXjyKb20IScZS5tiU4r6WYOSuQaJJqkb2jLHhRae0bHZcC0D52DE/J6mBxdZTcvsUU111ycu9ujYuJjqxoJnUxx75CaMaju4anoPCWNq+oeUFE4qq5+ZVBiSWWdztZvVtS1NeOpErmGPSjUN7Q6ed32yCULa8+IcalKyBVORCZMBkeO5xSL8uESoVSrib4RKYudmv04Fn47ULvRNRUJ+dm+WeleiXGO1mZ6rc2lQ4M0ckdDRlqg0dVDjvbXfDzNPd3vuruYujrdCQxwbWubv69aLGRifXFBWEq8Y0KMXUykTWSY1R3j/ekpPuyednReovsbr1N3vgkcfRXYCgE2QYBvIWGvQkpcXVUq1cTExPJL72fTyopjwoNvubsYXD6/Gd9ejazJCg6wNr11+uaNEzdvnLh2RT8uxptO09l0VWBRX9bniG/qFA+INYj2AQePvLMX/I/96hGb1tA/DrBEQK8QMLOF7thlu++w2zVLaG4rv6VfZZuoY00EAGBSJk/KR7jHFN1Mi92WYfa8185XvPd71qdGoQt/TbX7i82On8OuoXoJKo1ah4UuvJX8/PycnJxsHyYgIMA7yftNlzcv1G+z6txj27XTsmPHxcbvLzRs+Dr+/Z8Dfl6+Js7p/uYNm1qfw/VfGtC2eLJvXevec6f7WBo3jKHoShpzuYTdurfqs58zPvi382ur3P2dO3f27CUjk7vWxhZ2P/16/R+f/3vrrv0bN2/9eftOR69gR2fXo1ct9p64eO7cORcXFzqdLpev4AaZWga6ChrSThVFHNFGYdiBgpDdBSF7CiOOlqS51FTkd3R0zP7K37WAUq1mD/JBU3yKJoaUdkRX0XNaedqwt7fPzc1tbGyc0UQUChUdHR0YGDh7QxyBQFxaiv7/9s48PIoyz+O9zzwzs/vM4eaBGZ2dnUt37Xl21Z316dnR2R1xV12HQbQHZZiMiqPiweigItc02jiIxzh4YMIRbhJLIJhAhyPNpSaBEOhuAZPIEUi4AigJRwCRhGztH33Ue1d1dVd3J/l+Hv4gXVXv8av3+Nbv975Vw4ZNfuih1yoqNkd/TyRi+q9ofdOUJWL/VrIysf3UmU3h+mkLyl+fUxppbPns9IX2sxdPn+86fb6r/ezFz05f2Ld7++q5o564518fGnTVCm1aao2K5dhn7cuDNUsq3n/gqcm/uveZV96OvUo6sHZT1daGE+cu7Gk/saf9xIlzF1Z/EFq4rNK5rO8eMeHh0VP2tRy52NnJrE08//mF9zeF7x4xIZXs3p5f1riv9dNT51esq/U+OH7HrgNPT5r21txlrSc6jradnTpr8Z79zsrET/Yd1AIbC0sCs5cG55SuXV+3d28sytwZF4hd9Qc7Pz7Q9VrR8tUb07NbSNf11Ru31IQ/ScjEP78xb9Tzr4+bUtBxrvNkU+vn45/74oGHzr0x/eTuwx3nOjsudJcHq+995OkbbrghLbnbe93u6dNtvvHDqj9c1thQ807x1N/f99/jxz6665PMvVDzr68+Pa/ohU/CG1YVTvnL96/Y++jN+sPXRDWifo1r9mWu8jHPHj90aN++fWnMdF9Tw2/v8axZOf+ZUUNLigvTmDKPdQF094TwhztPt1/QD5/urv7k1CN/LLpzyIvT578f1Yh72/VR4xbeOvC5R8cUl20/FW7t/uioPn5O+mUiybp9oSteu+vLEwf8rW/A18YP+PqYAVdOuqt8+/tt506bX5wMSQWdt23bVkHzwQcfBDcH7511b79J/W4rc09ouOWR2hu/8vyXXBNceX/Ku3PqnanLRGb6E/4bv/7lO9Zf8/jeXx48d/DNZt+y1nlNXzQs7Jh0d/X1t1defUvFVTcu+McfT7wsw9Of5+c3TZgVDGxvK9zY1P/xd35w7Q35oyYP/N3IW+95ZM6mttqmtkHTNl33+xeH/e7+jMlEXdePHz9eIeGjjz46fTrNDSwtfNHZ1fpZe/ORY/gn/OfSdb21/fzE4tpZa/csqT2ybOvRwsLC4uLiYDC4ZcuWLVu21NXVVVRUFBQUTJ8+fceOHYnFBN3d3cePnxw9uvD++18sLFwcHe6XbT1q+m9J7ZH5HzRP0rZ+tD89e9q7u7s/bTu1rjo8bUF50bury9fW1u1oOnDs1IFjp+p2NJWvrV2yVHNOJl7q7j55umN5sOaBpybPWPjembPnor+Xrfnw/S07A/vC35mX/515+YF94YoNW+ctXu1c1m3tp/e1HHl49JSoLiR3Oi8NbPjz63Pb2lPqom/OWdrQdKS4bP3g4WP+554nvA+Ov23YqIG/e2bymwuPtp19bea7u/cdTFfVhHR2Xfqk6UDBwuXhPW31LWcbD13YfaRr1+GuxkNdjQc7Gw521h/o/Lilc0dz16szylat35yufFduqK0ONSZk4u35T9427A/jphR0tHWcmzH34p1DOu+468KbBVGN2HGhe/a8kptuvjVdMtEep0+1jX92aMWK2fNmv/j4iEHjxz566FBLJlcCvfrSqKl/Hlk+eexr37+i1eft+u2P9P/6sn69S7/Wpbtd537gKv3uNwqGD09vIGzv3oa77rjuweG3BFaUnPjsWBpTToXBY7Zt3H6q7bx+/Jy+v/1Sad2nDz45Z9qcjVGNuLtNf3LMgqdeWFYe+ix0pDtyTA8f1cc5LBNbz5yYuWX55f6BX3r6hq8+deOVEwePWDT52Jm27v/L5n6Cs2fPnqQ5c+bMqY5Te4/vHV0+2lN47S8WXxmViY8WPfqG9sai8kXV1dUpZspMf8J/49e9PDD4Lw/uGRDoLNz7ef3Oi5vmtfvvrr7+l0H3LRVXDXjvh/8x+x+uHv/NDE9/V9z+VD9/pP/Mz7/9+sF+Ty771sAxdz399oARr/S/f0bejM+/Pevz/s/VXn7/2z/9zehMykTQ+4i9jX17S7tfC01YsGnCgk1r164tKiqaP3/+mjVrqqurKyoqZsyYMW3atKVLl+7atYucab74onPz5vo//OGNV16Zt2fPHl3XoymY/Fu42a+FVkfS86LpKJ2dXZ+2ndoUrl+wLDh90Yo5i9cUl28oLt8wZ/Ga6YtWLFiyYk3Fu08Mu355yZvHjjSnMd8ol7q7j33Wvr1hz6FWY2nwu8vXr62O7DvZvnRP7dI9tftOti9fWzureIWjWQv3rBSXronuaEkxr7/OfLd+7+FdzcdmlgQGDx+zYl3tI2Nf9U+dF2loPtp29tXpmtMyUdf1ppYjb80r27m/Y3dr165olPlgV8PBzo8PdO1s6dzZ0rmjuXP7/q6XCpdVrEtPOFXX9cC6mqpt9dFN3NXbGqJbVSIN+zvOXjy7a/+56rrzNXXndu+PasSiuYsefvixQb8alF2ZeOrUidFPDRk3etjop/NfeWncrk8+zvBq8SmT/zjq5uuKb/1pbM/KgL+ru9I17TLX7Mtc537g0r/nau3vWvOjy18cPDiNmR5o2fPkyEElxQWtRw6kMdkU+d8/1q0Nn/z0nH70rH7ojF5/vGtt3aHNjSeiGrHxhL6y9tDq0PEth7qiGnFbqz7WYZl48VLn/rYjzy5/yz1pyOWjb7lnxrPbD+7uvOT42jXbhA+GxwTG/GfR9T+bf9WAN28qXFK4devWAwcOHD1q/9N2CcjpT/jvvpIxt6/88W93/vTJPYPKO6bPPuaPxppvXXnVze/98BeLv++Zcfk/j/1Ghqe//gPHfmXijq++1HLZ+Kp+T77Xf/DEfxv6gnvI898cPvdv3uj4+nPhvGeD/e4r+PffjIVMBKkg+GjP4cOHKyoqZs2aVVhYOGPGjIKCgmnTphUXF1dXVx8+fDixNrG1tW3p0vdLStaNGzdr2rR36uvT9qF6e3R3d7efOvPxrv21kYZNofqaUH1NqH5TqL420rC9oalpf8vqZbOd0IgyFpZWFi5aEVhft3xd7fK1tWXBzX+ZubhwYXkGsk7sWTn/+YWlgQ0Llqwid7TY5uWCkugrbxLfWVm1cevmj3Z3XOg+2nb25YKSXU2Oz817mw+/WqgtXrVl6Zpti1dv1VbWlQS2LFpeu6B887z3auYuq55dWl20pGr0i7PS9e4hXdeXB6u1FRs21u5Yv3n7uk3b19Z8FKyOVFaF13wYWvNBaNUH21a+v7ViY11ZZc3seSUPP/zY0HuGDvn1r7MsE0+eGPWE98Hht019bWIolLb4u3X+POmJF0f8Zu3Tj28ceM0XN3657kpXYPDNK154oXzMs6Xf/UZrf1f937vevfbqd19I2yv6dF0/2f5p2Xszz3akbaNuWrjpsc3jZ+55o/Tga0sOvKK1TClpmVzc8sLCZv+C5ufmN0+c3/ynec0T5jZPmNs8fm7z+DnNY+c0DxoXcVQm6rp+8VJn5OCumR8umxpctGpH1aVsv5fElC3NWyatnjRk9pAp2pSV61ceOuTsEheSBTvfum351XeHf+Ktu+6ZXd4R4VtiGrHsh79Y/L2fF3/3+re/9U9jvp6x8kT5yzvrfvJ85WUjtH73FVxx/1sDhk8Y9MC4Ox76088em/q1Jyr6DZ/Z776Ca4ZPGfLIGMhEkAquVQAAAAAAAHCk/xPgAAAAAACgF+C6kD2Y93UDAAAAAIDcATIRAAAAAAAIgEwEAAAAAAACIBMBAAAAAIAAyEQAAAAAACAAMhEAAAAAAAiATAQAAAAAAAIgEwEAAAAAgADIRAAAAAAAIKAHyMSQ3xWUfgk5UjXSXRVKnz0AALlPubd0pK8JmfYm+k5NAehRpCQTa8qKiorKahyViSFfQDF2lHtL/Vo67SGhqdBdOtRVOtQlyi5SNdIVPSqXswAAi2jBaF8bKn8C7DuKLYVMjVFrqKsHKDDIRAByEpsysaasqKioqKSyssxhmdhU6FZor5A/s67EkC8gV6XqogoS87uMQXyoq3SoK1AYiR80pKfkBJ2YTV2lfs0wRbmXvxASNmmU9zo7lHvpBtDLyXTv7mXmVT9gZ55eZl4A+gwpBp1rHJaJWnCoVzpTZH4cTKtM5C6JVI2kxBw7TVLjrBYkfC1NhW7D9WKcZljPRtn6OpCJ2QYyMSUyFWmxSi8zLwB9hpyWiU2FbsXIolyzKIPwwI30hQjxRAVoZNrUWZnIjqQqmciVhPQmpiATY/YJFEYMWxFanPKA8qYI+QKG49MXpEU8eS1RmGgucYPHUzBOiDlH3VUhw1Eq9arS95QsjyqCySJy5TKVJV22SUzGts1L1JF1LUdLm6gdmYVZplH7jPQ1GYaSP5VxSLuMIFmjPNGrAoUR4nLxrRHLxITlJY+IZKmC5RrRCCkbSpuQ8ASTTMkGQ5Q5NfPKM03ccclyF6rZiywsbb3xBP0aUSlvKJFjoTdeHmkz6zHmBQBYI5dlYrpdiSFfgBxlyr3SUGzIFxBm7axMpByEOjFNiuZLLSgrfOrexHJvYCTpntQSiZCDe1Ohmx7WqfsV8rMCiAmp039S1uYfAEJ+d2CkkWCoPH4XVPeUaT9yiwlR3Gt6ERVnBzNsmlflj2FaiOD5SpKprmvBkW6jtdteH8Z2GTrZaHtI2DNaGMO84luj9CZqQVE5qVyi8kJSHbpBxktl4u4SZsoEAZi6pG5eWU3dgZFkU+dsJfMmmrbekC8w0h1I1CKkhWKjUMyYROxCOkT3HPMCAEzIXZmYdldiMjEsVrjEk0i/TJQ+8VO+JWHJyYds4WCt1NkKxKOtwCZNrOvOuheWTM2KTORmndjvql0O3CXiGVeM9F6b2cEUe+bVU5WJkhmUURh22wxbfl64ECfwhRFZO2mZmNQ6Ad6Y9nSMSTNL3bxSQUxHHrjxUCwTLTQzSUdWxytYeox5AQAm5KxMTPuqRInyS8Du/MiwN5FdmKibeBO5ggmkpH2ZKBrQBZEjJngkjUKKEiQqZcmbKBHK0grShTFbTsAjvdcWJzM5ds2bqjdRfC1TnWTajKrLCKwk0hnWzjcvtixZEnYtQVp0jKjXk80yBfPKM9U541iWiRbsJmn5ZjKxh5oXAGBCjspEB1YlmnieaPdG5ryJ9BYWcdDZSl6i3NMrE810NgMp5dPgTUxm+VqUFJfMO+lNtGnenJKJJl2GT4f2JjK2ddybyD2GZczdlVsy0Zo3MWmZ2HPNCwAwITdlojMbnNlgSqRqZGwlEzOthvyZ9ybqus5Ovdw0aYyJTYXuUrYuTnsTBRMPGflipQl9m9Q6hpjkYj4JizJRcU8FNlGExU1S1oKkd4T3viS7NjF588ZOIJU3YSXSntG1Ck7LRLMuowWZHQlkAcq9TAmF99fe2kRub4RoFV3IFxCZSGZeZabqh5xck4kWWq8dmdhzzQsAMCGl9yZSJC8XZTLRCVdi/GJqDyDzMhoiXKJRu0cFOweNlfLC4KaVEhJLD+mV/sbWQu4fIRODhbK68AW2vChT8M5FathlKiuPOPM6mw6q8s4koiKk0OHfLqm4lrM8E8lNbgqh98zSefptJZuCebl8uUcI4qpYOlFDKTJltogaf1ppMMouE52/yaw5yUjakFOczD92H7ewUwgupzOlLBD9k9PlIvOaZUq3QOp1BPbNq8iU2eBs/BnL2qyZSVuvdIs0nWM5s9+ZegtBDzEvAMAqOfixvhx7VyIAIGmUu4XwCj0AAOgh5KBMBAD0dCATAQCgNwCZCABIK2SUULR3VRFVBwAAkFNAJgIAAAAAAAGQiQAAAAAAQABkIgAAAAAAEACZCAAAAAAABEAmAgAAAAAAAZCJAAAAAABAAGQiyCCa1+X24SUoIHtEfG6XV/rFzd5EVmrad8wLQF/BvkxsrCyx/50+yMS+CWQiyDK9RMdEfG5XFGllIBMBAGnArkysKSsqqWw0BKMdpSiUiYnhLyonNC/5V+IU+UCkPCgjnotBHxIzmpepLmENr6Z5qWO2zOsYEZ+7L90pYE5uNVDHyXR1+5h5AQB2ZWJjZQmlC9m/U5CJOjcUcSNT+mUid10feSbWvJwipvx9EZ+bOZ5704TmVXlUQB8j9xqoo0AmAgAcJj1rE2vKEq5FZ2WiEWpxER4vCwejHjKvRrvK5JnqjBeN8jfyAyWZqi+RkmmmTMKMTnW53L6IIrgkzpQ3hdDfxitAoRkIOyhtbxz2asSpxvFEYdk8zWtKZJywJffgILwtKmIFcvsiQp+1yQ0nyuT2+eI2snLDSTMS+Vm54eJMuVStO1hFt1RSYTHi1iuoC1smhXnVDYkuMtuFlRUxi9NKuiJ/U5NxYFMVJS9UthUrDSleJ8HvphFpIlm3T5MOsLlvXgCA46RDJtaU2VudmGFvYsTndrvdtKuM+oseu+gpnJ2Smb8ZBxw1Yyoy5bJhJhK323BqMsv6VJlqXmqk1ryi8VwxgShEgok3IVrdRAoRTWNGfEZ9G7/Kakr5dVlrsnknPcVEM05cpWlaIh/FDacNTAftTVsZO0VSfypuuCpTkxvuEMrWS9eFLpOZeXULDSlxJf9MYVJ18RnKytA31X6oQdCHpW1F3ZDUlVEe5G6UdDDoaeYFADhByjKRXKSYPpmoeGhNRSayww8hWuhMzQKt1E+qfRmqTJNMl9YCikwFUkyj/F3mA73UhWEuE9Wpy2SirKYC76ZSCgrC6CrEqZndGFUtla1MdWf40tA3XJGpSbLOYGIk3rKJo2bmjf1gRSvwSdnTMSZFYkrDyNwk0DgXsLStqIcrRcFNDibTMnqaeQEADpCSTGysLLGtEdUy0SFvomKsov/LOWd4+ABSshJTNGDTqkHuTVJkKokksjFBSw/snAvDXCaq05V6EyU15c+XTnM2vYli1Wpyw+WxOdUNN5tBTW64LFPTGy5FcqWla01ar0K6mptX1ZDYq9OiY0wqw49ItuP6JnvxjJ+siGkbY6GZfXqYeQEAjmNfJtaU2X4TTtZkokJy0NexId1kgiDU7K7K1NybqFQN0kwt+QvEWtHUfZBpmSi6+cLQmzVtY604Sd5wtrHIW5mpN9H6DSfzcd51KC6AiTdR1pKsmFdyDuujzJy7y5aO4TyCnDdR3lbUw5WqMuqDqsbSw8wLAMgE9mRiTVkR5UbM+E5nerG3NJBDHeS0BBtIZH110rVf9FGBl0/huVMJQWZ8VKkGs0w534xQcXAh2gi9yJFPSml7B2SiYEkevzXb/ko82ZypvOECmzDLRJNpZcTfKjOYZWrthqcVZevl7hQTXZebN56YoPxcBxG6u1QNVJq0sjIWdEzMC8dVi24JIp+0pK2oG5K6MsqDbNsw+nwOmxcAkDVsyUTizdpFKbxiWyQTjRgNE6DixIo0PiY7GPG5vRoVA6LGO+4KapRkYkfSiLOgpLJMBReLAonxAZxOXZkpf1wlGZjNBV6ffLOjwryC+CUrGsSHzWpKJe32RRi5YXdfpKBEigivIuLsstzKBBez8lJuBmWmfH0c14iCTHm/GXmc17Fi86obEnXU7dPie6olSasbKF1kWWWYIcg4jRX8IrszO7rpbfrKtmJ2UF4Z05oyZ8jSzSXzAgCyRh/6WF+SocQenGlvJtddDbjhUbISCO9h2HAFAgBAhoFM7IWZ9mJyXSXihseATDQHMhEAkPv0FZkoebdrL8y0F9Jj7NhjCuosZAASYlGCsq2gIQEAcoW+IhMBAAAAAEBSQCYCAAAAAAABkIkAAAAAAEAAZCIAAAAAABAAmQgAAAAAAARAJgIAAAAAAAGQib0Y7hNooHej5Zd6/E3ZLgVwglB+XrAHvBonXOXpEeVMHadrGq7yeKrCzqWfPGF/wJHhJXdqmpXW2wO6TAoysaYs/qE+8vPOkIm5g7MykXvTtRbMyyvN81SF9Sa/pzQvL+DPdtfX8kvz8krz8tItnqI1jVXWGcJVnuTT7wsyMXpPPf4moYm4r0XnFPa7jFMzdNrJ8JwXbQN5pXm9bnbX8kvzc6slJ/2gkhh+1eNYpmoa7WKleXny7PqCTIx1maAWv0GUNcSfNDgBAAAL9ElEQVTfr7ApE2vKSHFYU2ZLKWZBJiq/DcF8rTTXvyOR5c808BNytP3lh+IdMtH0Q/l58fEiLxvyUQs6M8WG8p19CHY6fUto+dmX+yRhfyA2tBntjSArn+mx2BWT6DIMTX4PeSjRoYKaTkglxhS9gujtJv+J+jJjn15ABvt+uMpjpeUkN4qG8sk7pQXlSjHTo1zYH8io/rZo3swRyo8Ldy1fMB2LnrTTE3RurCwpq+nZMlHzkt87iAi+eZ9rZFUmCmdjY2jQ8vknyOwN5ZCJKZBrMlHXgvGhjZ6KEscz71C01BVtdJk4WpCTgEzbyImm4hR09UUu894mEzPqPLakY5r8nlTGAekNyrybvM/LxCa/J/ZIGfYHBI+mgoEqLTKxpqzIhkq0KxMJp59Xi33WKjFIk1+5omcL6gj7IbGIz8uO4IyxJB8gS+hJ4ziRa6JwicwZ+5OpilQp7eBMiFzqMmVlxUpX8i0wdWUUxonR5PfEPNhhf4Cb2JRDuRE8Ek2W5NH8EClcaGeDJH17MlGeaRzZ3Ex6T4kiRSOMcbPES06V2QjT5AW1ZOZ+aXg9EZlVhOcSMfS80nw/MagRv4s8wUYQh3VlWclUYV7yEO97NmI0Rnujq2NvrYXRKRI9IJGMvJ+adkXixKS7TOIc07ZH/Jm4a/HU4m0jqMVaZuI/Ah8k1aGY5hdLOeAPG7kY7c0s/ku0bfKu8UXiKsuqZL5fiMcW+eCgzNS09cprmojiSfuj0acC/rBspYEgvBtL0HACicosDdcQXdVT5Tf6Gt2FFT5p9hYQF+aHdN0svix4zpHWlB52yLooW29idCVHM1FDFMtE09ULRLIef4hob/Jh0NS8znUZykRVTO8wHrTEXt6Iz82MYSnJxMbKkkyvTaRqEPG53W43KfY4ZceMzBJvopk3gLEb7XnUNa/bbRxnJim6jHRCjN+DSVbk4GRSNnNhCKtLF5A1krIy5EVJe2zkMpFZnKEFOXVl/Bn2B6Rha9kiDxsy0VKmQhkXymeHb/pPZsLLo4YbdtJN1kUkrmko3xMwLMMMDdT6ceNB00jSmjeRUznKTFXmZWaOUL5iLZEQO62Tauia1+V2uy33U0td0VaXiWYnnGKV3kR29CeFZpPfE/B46ActUmKSeTE9MfpbfsDjMVqmpll6GqRdgHRTZ4rE92K7MpGCTVadqbL1KjMN+wMeT8JDRj/JUOmE8vMCHlkK4vEqWqqE6UKalkhK1WWoxX+GMz6Rn6m7S/igwtxEoZXiOkkyjllwJdLDqbr1hqs8ngAzmvHpK72J8ucNogpavlTYCR72LJk3vV2Gul9il6ESbtpPhzexsbIkU95EbjwmKyQYrNmf7MlEwVXkT4xR6UmFmR5IJatO1nTqsScTzYykrIzkJGtIh3KBEDHkTlLhJMnJSctEi5kKZKJgDCKHCYVM5EcTGxsAZTKRfSinVbjJAnNrwSZB1WSZKs0rqEKyEdXkmyfbUahea9L9dYtd0d4aFlmwj1nvW8rpQloZGLdG4IJN3GJlT0ycrN4mJbq5gpmyifHHEEXiqkzLRJG2sNJhmXPUmSq7jDJTRiiQpWXNK36sVewUYUoVx6TLSJzuZDHUOkbmC6SGDlUuEk+5pT0xtNFUrVdkT2tDtIHwniYz/giHcRsyMaUuI2knluGeadP0QhxbYWcbMpEfsYlfBGFlNkRkSyaKjpK/MYlyMpG8mJCJonAVEbEy3UFjTyaKkqU1r6IyxK8py8TEn+pOYtZF2cBoWmSixXFBcJpJbFohE9MgjxTeRNrzJI10C577FTKRupANuCgyVdWL37KgigRJypVs8+S7EvGLST8VX596mWKXyaN16rWJxhTOTCGC7hafOEUxMi4KafbYIOrOomapUaFPqS8kVheTqKj0+VDeitSZmnQZRaaMCiFkIn+++F7IBytxxzHvMlRImhNzJjpGsSqRECsixzMJv51ZWlO6tNxCF1nrNZVW3PniGllRbBTKYdCuTExnl0laMvZ0mciNx6R3zm4U1vRSU2+iLZloIgSz5k20IBPTEXQ2/rTvTRQE1+BNTFomMilYlAWsV4mvmjTTZL2JSWKjdXIdhWz35q88cCrorJihTbewxKdwwaoybm+jwpvIYUcmmrtGzOY8WxOtcnDIvEzkTccnq3awSZ6vkusynHnVOkZp/Hg0VhzepZJhZaKkppxHkPMmSluvaMB03JtoNgw6501Udhmm/NkJOteUFRGysLGypMhO1FkpE2PP8AJ9Ri/uo07hRA1bXyZG7aLWOXK7QKQClM7HrkzkV7VzSxfZhNlVhdTWHbWbUPYjUwhLMtHWa0fkw7RqxR4/3BubQ5nnUemSEXtrEyWZUuUUrk2ULgvTWV1IPfQzcQTjtQVJFTtZmcgO3wKZaFScWObC18u6N1FtXtE0ltQwp3TcxUIOgkclql+6mGXBqn5qqSva6TKqGdrCTmctmOcJ5rPzB/fmHeYxhk6HDxfakYncVXTPdUQmmg0OWZCJgnXAdLJma/VkekXZZdh7qu5fzECn1h+x8/P9ouWk7OJjazXlFhiIts3JWy89CgkVoc21idzWk7gDXj0Mqs2rytR+l+HX8iYnE9O4hSW+fcWpLSwymUgFgdy+CC96pBHnqAm90oP0tfzEIDrG7Ak2/nT7IkRm0QuMvMU7s/nZizos8gwKrxRF35kFh8I81ZVhs7Y+6XHrqLiwCB03EW11lMYgjAQ9/hC1c1CwUTeZt0+bbLiTrwyj8+VDLUT1o0kJNx4G/OHEjrakikrXlNlMZ/yZcCAplrhx9WX2vpD20Yg9N2aZKs3LWzjpR2FlZEDY0XSqV3g1wYOhqp9KuyJ9SlI6UT5DG6ZjzMvHNCVzEnXv+AleHEFjmwp1VBiwZvdViC5kdmsapxkbwKW9SZ2pYnBQZmrSelWZMhucDYuJ3h6QrzGTvXpVIpsp55yTWJ6N4QpWEJJGVj808sSu5U9TvbxCJVyoZpYfol8BrWy94SpPfohqMKzilNnQtPXKd80rhkHRtfSCQke6DDcdJBl0duqFODZJx3sTs/I2XaCbzcYAZIU0DQiOtO6kErUwQ5sh9FIktScMOAqllnLvQzumrkSbpFBTZevNuTcU9kice7121mQiVGL2gO1BzpEmeefQM1Bmu4x4BQJkYs6QhieBvgZkosOk9WN9WZWJkpdDAwCAXSQv0O950LEqbg2ovVA+SA/q7wgAFcrWS0ZaIRbTTE+UiQAAAAAAwHEgEwEAAAAAgADIRAAAAAAAIAAyEQAAAAAACIBMBAAAAAAAAiATAQAAAACAAMjEdGHro60AAAAAALlKqjKxsbLEmY/19Tgcloncay/xFRQAAAAAOEqKMrGmrKikpKTnyETqe9Aa993W3H2rrkAU4isoAAAAAHCSlGRiTVlRSWVjTVkPkYm0v0/zsh9xyV2ZKFGEcCgCAAAAwDlSkIlRkXjhQoZlIvmpPtFHtYjjXh/lL2RlYMQ4SiXKJx077PZFjFON44aLkhVt0XO9mpE+W2AjY7cvEk2Ir5PUb6h5e/ZnxQAAAACQw9iWiXGRmHGZSMHqJEpQRXxuSrlFfG6lqjLxJmpet9ttqDhN44PAAt9exOd2uxOF4hyaRo6a1+V2i1JQrHrEthkAAAAAOIZNmdhYWVJUVhMXjFkMOjPSztS9RrgNuRNNZaI6balMZKRqIhGBd1Mo+hQZw50IAAAAAKewJxMbK0uKaOwoRXsykdiFIlJ7ZjFp+sxk1iaaLV2UykTyV0Im8ueLU4BMBAAAAEA2SMN7EzPpTeQcbmrtRu3x4E/lXJEZlYl8gpItKQg6AwAAACAL5KxMjDkNlUIq4nNzW00YEclsbWYj1OzZiePsukbdAZkoWEkpFn3YwgIAAACAzJOaTKwpcyzoLJaJTFDZqyX2EvMH2as1r9vnU4ekJSsXBfugDTnHBsHJw8wGZyOdxOXkvmxNEnTGC3EAAAAAkAXwsb4cQiH78HptAAAAAGQYyMTcQekcxMf6AAAAAJBZIBOzCxmyhm8QAAAAADkEZCIAAAAAABAAmQgAAAAAAARAJgIAAAAAAAGQiQAAAAAAQMD/A59WTYjI3JBrAAAAAElFTkSuQmCC" width="640" /></div>
<div style="text-align: center;">
</div>
<br />
In the above example, the connection details that were just configured are retrieved, the URL is then concatenated with the path contained in the get method. A GET request is made and the response is returned as a string. The body of the response is then outputted and can be viewed in the job console. <br />
<br />
<div style="text-align: center;">
<img alt="" height="273" src="data:image/png;base64,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" width="640" /></div>
<br />
You can see that the JSON response is the same as the one shown earlier using the REST client. The JSON response is not the easiest to read and process, there are various classes available to manage JSON. One of these is "JsonSlurper" which I will use in the following example: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyepBxbVzkhR0MGT-XUSmhisn6QFdfxqkVeF4tmnQ34vdznfolP7ggRM6Q9DK_za7bnRPFmYuUte50YN-lEGxkRxyaxdcZYe_cpP_OEiYgF0TnMwg85hg_ULK1DH8bb23mUsSUuXWItLg/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="134" data-original-width="516" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyepBxbVzkhR0MGT-XUSmhisn6QFdfxqkVeF4tmnQ34vdznfolP7ggRM6Q9DK_za7bnRPFmYuUte50YN-lEGxkRxyaxdcZYe_cpP_OEiYgF0TnMwg85hg_ULK1DH8bb23mUsSUuXWItLg/s1600/image006.png" /></a></div>
<br />
It looks a bit messy because of having to define the types like Map and List because static type checking is enabled. Basically, the JSON body of the response is converted into a Map which means it will contain key/value pairs. The items key is extracted as a list and the first index entry converted back to a Map, the value from the name key is then extracted, stored and printed. I am sure it can be simplified, though with this type of JSON response I prefer to use different classes which I will include in later examples. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDuPN_KtYgivah7FPZ7XXvsgyBnyWA8oUleJtWt_vJUqeHBQB84smBBrQ2HzFYEiUMZwpsF_mIOtfEbTca5bMRR9d10RvflPNeqD4L6V_3cXAFNe4vqVKZkepsBa4FBnAQtpIlmtiqPp0/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="170" data-original-width="501" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDuPN_KtYgivah7FPZ7XXvsgyBnyWA8oUleJtWt_vJUqeHBQB84smBBrQ2HzFYEiUMZwpsF_mIOtfEbTca5bMRR9d10RvflPNeqD4L6V_3cXAFNe4vqVKZkepsBa4FBnAQtpIlmtiqPp0/s1600/image007.png" /></a></div>
<br />
The HTTP response also has methods to extract the headers, status code and text. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=6575283218005807475" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeX7kpsX0DEfeGQUgHlPUhK3I7ymoF2cwmfwON5o0T0g0cmEivLNADyoJ73f9_EAX7t1UPFDkIppOHLhD-3aV6cpgscIRye9ZcXfB0zNJNvKVmbOOR1nX7RNlXOLl20bSh84Yis8giR1w/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="66" data-original-width="440" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeX7kpsX0DEfeGQUgHlPUhK3I7ymoF2cwmfwON5o0T0g0cmEivLNADyoJ73f9_EAX7t1UPFDkIppOHLhD-3aV6cpgscIRye9ZcXfB0zNJNvKVmbOOR1nX7RNlXOLl20bSh84Yis8giR1w/s1600/image008.png" /></a></div>
<br />
This produces the following output.<br />
<br />
<div style="text-align: center;">
<img alt="" height="175" src="data:image/png;base64,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" width="400" /> </div>
<br />
The status code is useful for checking the HTTP request returned successfully.<br />
<br />
As mentioned earlier there are two ways to make a connection, the named connection which all the previous examples have been using. It is also possible to use an on-demand connection, based on the same REST resource call, this can be achieved with something similar to:<br />
<br />
<b>// call REST resource to return application information</b><br />
<b class="yellow">HttpResponse<string> response = connection("https://<cloud_instance>/HyperionPlanning/rest/v3/applications","username","password").get().asString()</string></b>
<br />
<br />
My choice when using REST calls with authentication would be to use the named connection so the credentials are not displayed in the rule. It also makes more sense to manage the connection details centrally instead of having them in multiple rules.<br />
<br />
The previous examples have provided the basics of making a REST request but just returning the application is not really that exciting or useful. For example, what if I wanted to run a Data Management rule from a form which will load data from Fusion Cloud or a file or another cube in the application or even a different EPM Cloud instance? Soon I will be able to add on-premise sources to that list with the forthcoming EPM Agent. Anyway, Data Management has a REST API which I have covered in previous <a href="https://john-goodwin.blogspot.com/2016/03/fdmee-web-services-part-2.html"><b>blogs</b></a>, so with a bit of Groovy scripting it is now possible to execute a data load rule from a business rule.<br />
<br />
In the next example I am going to run a Data Management load rule from a form, the start period of the rule will be based on substitution variables. This can all be achieved with REST calls and the concept is similar to something I covered in a previous <a href="https://john-goodwin.blogspot.com/2017/09/fdmee-load-rules-driven-by-substitution.html"><b>blog</b></a>, though this time there is no need for external scripting.<br />
<br />
Once again to keep it simple, I have a basic form which has data populated up to May. <br />
<br />
<div style="text-align: center;">
<img alt="" height="139" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7wAAADQCAIAAACr//rcAAAgAElEQVR4nO2d628V17n/99+CVOm8qRBb/At96RfoKKoiBdsROq0UNZWin1BDBU1SURtDnQIBDjHG3PEhZsc2AdoEc3LjUgLBIaa5kEBOThtIRAjIoT+DVJjzYu89s9aatWZmzR7Pmtnz+eh5Yc+ePZfvrP3Md9Y8s6bmAQAAAABAJDXXGwAAAAAAUHQwzQAAAAAAMWCaAQAAAABiwDQDAAAAAMSAaQYAAAAAiAHTDAAAAAAQg8E0/23ml2tGeyJi7Z6n1h9+7tU3xz+8taB++cJL/mxDMx8ZVnx8JFjaS6f9yV+ODAXTf3nkWmjhnud5H00cDuaZ+NJ+r0Pbqd/B/3p+/L0zN/6p+apGn8Mjf9PMeOPYa+qSzZrEIYozfdz++wt3vjg58cZzGw48ua69nHX7ejdMDEyc/+vfHyZbxsNTY3vF3Xl6/NNkGxyOPU+uP/zc7pmTV+9pj7IlkUeztboDv9p+cuTtG/OhLwutUX8cPc/zTk8HSxu54E8WW6PQkiMRFxUbwrrsiP4Vtw79Bx/d0R76WD3FCFqj+LtuxoqRC7rjO7vxBXVOk3rzN+bGxxu/Wr//ibXtZf5uf+9w45Wpy1d/TKlNEh49enTnhx8+uHR54vXpba/u3vinVzb+6ZXtr+6eeH36g0uX7/zww6NHjxZx9QAAUDDSmuYgxlbt/fAb6cuZmeaeteO7dQ4mD9MsmK1f7Fd2UK/Pc8duhlZxb2J7aIFOTPODW3/Zf/jfo3dz7PynD+KWc+fcb9fKX3zhhNkoRpvmoAk99cq7l2NXHYOFyXtyq7q6Kprm4Fe2/zfHwlenmZlmfQu5+JeVoeVo1Pvx032v7F8RvfETH6s/z455/Pjx3bv3Prh0+UhjateeA1t3jGzavG3D8JYNw1s2bd62dcfIrj0HjjQmL1y8dOeHu48ePc56/QAAUEQ6N82jPWvGnj95W/hydqZ5zeiKze9+HvpuvqZ5tGfN6JMjF6QTs1af7WduK2t4cOGltaHZ8jfND67tHt6TZDdXDJ44dStqSbfffD3kYPZueN/US53QNI/2rBldsWmmM99sZfJGnz50VbSJlTbNa0Z71ow9M6H45uxM85oDWy6qmyaKZlTv1oX1vx9L9PMMXQV1wuPHj299+937Z8/v3n9o48tbB/+4WRtDL2/dve/gu2fO3br17ePH+GYAgO4nE9M82vOHt4QTe5amOeTIPc+FaVY3Q6vP2unjypn77Imfh2fL2zTfPj6yL/mhjDSv/7tvWPeVHefUI6TZ4PhQjKwldqa5Z+3rjTvBlytvmkd71hzcclG8+MnQNId/pDcPbtbMJqn34NrIpkSOuRnqZW0H3L17772z5/9z15jJLouxY2TsvbPn7t69l9HKAQCguCQwzbpz9vx3n43vEK3Y+O6gQzhb0zza88LktNz9mb1pVrbzx++vfzY3PibXM7x44rTvJmU7smJt8+y+d+NZaQVnDx1ozvDzF4Q64HxN8+3T05JxX7v/N+MfXPxHq4x4/rsbZ44f/8U6UfCx5479r35Z19/+tT/b9uMb1usNaKINfnDv668/OzneeErsiV/72sHrydVQiGl1C3e+njk0LnSTj61/J/jUoWnuoAHHYf4VL9z59vpHH2yTKx/kuzqJfsVhJNO8dqy1/M3v3hBnunPm+dZPe6/YOEX11K7odYcHj89d/a75gMHD7/8Rajxr9m08m7AuP4pHjx5duHR5975DijnetPmVV3buemXnrk2bX1E+Gtt/6INLl6lvBgDoelKaZs/zvAfn1+ktSNamec3ok6MXxb7MRTfNbb45Pf2ksI8vnW6flSXTvPelkUbz75WHrgrf9vfl8LqdggPI1TTLfcMvHj34sc5Y3Ppw46DQq/fC8VO6zuYL4wd9KX775j3h39FfT2l9dvwGL3w884xgfRb1aHretZ0bgnU90wiMXNVMc5uHlyfECwlx37MwzZunX2pdWTUmhMuqhdPTrZXunBRyiKDegw83CI8JmqqGFj5+9/+9KKxu+O1wKZct39/54bXG1MY/qc54fOL1H3+8/+OP98cnXlc+2vinV15rTH1/54eOVw4AAIUmK9N8eOfH/gfZm2bl3nFuptnzbk9sD9zkitF2baZkmg+PnG7/u/4vQV/z1+8+1/KgJw5OODLN0nZqCl18Fi7+5WnhMkDpMvc8z/OublG6lmffejpmp5Js8MOzhwLz3bPpv6/qZ4vF2jSvOxW0qKqaZs97cHXLH7QXElmY5pHzx0daP5/nTwYFDKf3tm68PHfsXbEIxFcvcNWh377CNycbwpyvHfw68YYauHDpw117DoTLMCYmp5szTExOhz/dtefAhUsfdrpuAAAoNqlM84N7X392eWSrUJ4h3aDPyjRPbhHt1NApv9Y2R9Ps3T7Z0PhdxTT/zR8/K7BcwRd3nv9cHHguR9O8cGoyWG/UMBeeUmYaVnXh/eP+nfT2IGJiN/bBbbNpN1gaSCHNUHqe58UdzX/e+vqzydFDohUTN7i6plkoIpJny8Q0X/CHXBQGnvOvvg7v/FgaeM5X7/IR4SJTKe1Q0S8hNa+9Pr11x0jYFr+6e9/7Z8+/f/b8q7v3hT/dumPktdenO103AAAUm2weBHxy76zwCFdWpnn6+IPZjcHt17FnGi17kadplh7m832napqDoeXaA8899PvYnjt2U/JbOZpmqTB05/nox+wM5slTdkccLuPzqSP+V34+9mFo+ck22O+SXzPaQWeh3YOAyqgsxX0QMH1rSWqapaHEA4eaXE9JMcU0B1dE4d/OCydOy3eWfPXEhfzHkWuROymN6tj5Fci2V0c3bd4WdswTk9PN0FrqTZu3bXt1tMNVAwBAwcnANK/4/bHjUsVhdqbZ826/cyyoKm4/KJaraZakaDs/1TR7VxvjrX9bA8/5HWAHtlz0CmGa4wZhiJpZHJ5ZrHgW/a6mEjrhBov+zOxZY7AxzeuO7JZru6tsmg2NMyPT7F1cv1b4IYgeffuZ2wlMc+wP3GrmWIZe3rpheIviiU+/897/X2hdEmrLMzYMbxl6eWuHqwYAgILTmWleu+eZsXOhl3LZmmZxGNewzbo9vTMYemLF9jPfFM40j+/+XKgxaA48F/x77M9e6U2zWKPy871iHYbYzzf22zeVgbcKaJr39G2feTv0+kNb0yw+8YlpNpnmFaMXxRbyy4kvxX+fadzwSmKah7fuOP7nN5szmEzzH7ds73DVAABQcFKb5j2/Ofb5Lf07bG1Ns3jS1dmsW2eeDwZY2PvS6XvOyjP0pnn6uCe+x2TvxrOCkWp2PBfBNIffvaLsqLE8Q6xdVp8RlF53oq4iRXnGIprmp/d/eF3/ymhr0yy2urKb5hv6gvsMTHNTpUCfze/eCH4mzUvleNMsj0gTJo/yjNgHAf+4eduOXWMdrhoAAApO8gcBH37/5dy+neLArnuenfh0XvNl4XRrfvjMwjR73ufHXgvW++KJg0cK9SBgczuDB+lWHrrg/93avHeOrUiwrjisTbO08YaB5HQLlwtJLWp1juy7blqmgwcB57/77OSBI8Jg22NPjZ7/H50IQmvUjhzied5imeYufhCwtWvBZWdj4nT779abgG7s3qQxzdImRQ8kJ790UxwRJR2mBwGjTfPWHSP+DAAA0K3Yjp6hvF4u/PZdTx7YSxqfVUA8WcabZs/7crfwerD2y0RyMM33Gjtih5xrbWfwyP8fDrbHYms7MHH+sg05J47HHBtPj39qu8HS8rMfck4Zilj/6jhxuAZxcDSRoGy9q0zzp9sWbci51q4FY1OOPf2HthtuP3GofbahaEPOvbp735nzLQHPnL8QHkCDIecAAKqA/ZBz6uttwy/ikgcvOxJ21d7Cx6cEMzc5HXT+GW2W/JXQiTkN8bZAXqlQs6stdNa8NLu9a65Ms/Jyk7XjO2f/qdnNv59/SXxJhNQnLQ3pFR/SC9UTbPCt8+uE5cue24qIo6le6YVfeSiXKJzSvEj8wbWdQk+82KNZatP8zalJodGKw/BlZ5p1L832b2XoHwiWX27S8+L0dKgM3fO8+dlT4ptxMnq5yZ3wy01Ov/Ne880mzTj9znu6l5vouwcAAKBrSDVO860Lksd68dif5fOF//KCpkdZNfremc++bxZyLNz59uLbb0nv8RJfCBJls+S3YCyuaX74/T8+Oz0lv1/a+Brt9nb6Lwf2wx/Ay5lpDr1Ge82+X+0PDsf8d5+dnJiWX6MtSSoOz2zccukWeTAgXfQGz39348xbb/3m98IF2OK9Rlu50ls7vlspXJYveFYMHhv/4EarZP/Bva8/+mCbOCq59OhqSU3zP299Njcpv4k689do+7smlVusGRVvZRhG0Qm9RnvtobUT/uvfH37/5dz4/tfk12jvfem0/haBFdrXaA9v3dF8h3YzhrfuED/dve/QBV6jDQBQAVK+EVB+v7QyTrP8rri4sLihLw3bnKlpjg+5tkFvgqUCzR7xGabsTXNMCLIo/awxsWLTjNDPKlWnmKV+eGpMGOEkeI2FxQb3rBl9+tDV6JGkI4kxecr7upVxmpUqhZiQetND9i4i/A1L/iCg9oeQELvR1pUqCLtxr7XP8AUmWKzpXzMqVm2ZTHPojlZMaKtu0nH37r33zp7/z11j4drlcOwYGXvvzLm7dzPw6wAAUHBSv0ZbsWJKkYZaSGoMsfvW82I7U6Vhm9eM9uRlmtVTssEEyz1qY+vfiZnfknSm2fMeXNs9vCfJt1YMnjglDrktDs8cOa6F1CEdvB7SYoNls56C2J5RpU2qRRqKqzaHWo/UFaY5/HBCpqZZuQkjVK4bTbPnebcurP99It/85NZ3O2s8Eo8fP7717Xfvnz2/e/+hjS9vNdnloZe37t538N0z527d+vbx48eZrR4AAIpKatMcKtL4w1/OSuet2++NiwMXaOLfh05KFs3zElQgSMM29+Rhmvc8O/6x2ollMMHyA0ziQ5Apb3bLpDXNnuc9uPX2ROOpKFO45xehIbfFF/7FFYxKpc/t1yIm3OCxp3ae+bRT05NAYbVIozEhN79v/vrWs+siN3Xd4eH31YcpS2+a1+5fd/J/Qn38mZpmuSVYjHL9443JscNRaWTt/t9MfKQdEaUTHj9+fPfuvQ8uXT7SmNq1Z//WHSObNm/bMLxlw/CWP27etnXHyK49+48cnbxw8dKdH+4+eoRjBgCoBB2Y5lC/b/j2+vyNufHxxq/WH3gy8CJjT/z+wK+2vzn+wd91w9UleXRMHLZ50Uzzun29GyYGJs7/VfcEkrHnWBxyWLJurk2z53met3Dni9NTbz4/fOCp340pu3nmRvgBQekhwl9PqQ/PKeiGCYvc4LV7nlr/X8+Pv3P6M82zifYkfFXNf0tFGtvPqJdDP/79zPE3nx8+0Pti0De/4nf7e4cbrxyf+0I3MHlJTXNrp6Yuh15OFNIzA9MsPucw9tJpu8co52/MTU688dyGII34G/+RYeDtTHj06NH3d364cOnD1xpT23aODr289Y+bt+0YGZuYnL5w6cPv79yhjhkAoFIYTDMAAAAAALTBNAMAAAAAxIBpBgAAAACIoTtMs93QZhHVk2xwAUCcMHYVxtFDnQAAAEAKMM1scNFAnDCYZgAAAMdgmtngooE4YTDNAAAAjukO0wwAAAAAsIhgmgEAAAAAYsA0AwAAAADEgGkGAAAAAIgB0wwAAAAAEAOmGQAAAAAgBkwzAAAAAEAMmGYAAAAAgBgwzQAAAAAAMWCaAQAAAABiwDQDAAAAAMSAaQYAAAAAiAHTDAAAAAAQA6YZAAAAACAGTDMAAAAAQAyqaf7kq5sEQRAEQRAEQYihMc15+XUAAAAAgHKAae4UFLMFxWxBsbLDEbQFxQCggGCaOwXFbEExW1Cs7HAEbUExACggmOZOQTFbUMwWFCs7HEFbUAwACgimuVNQzBYUswXFyg5H0BYUA4ACgmnuFBSzBcVsQbGywxG0BcUAoIBgmjsFxWxBMVtQrOxwBG1BMQAoIJjmTkExW1DMFhQrOxxBW1AMAAoIprlTUMwWFLMFxcoOR9AWFAOAAoJp7hQUswXFbEGxssMRtAXFAKCAYJo7BcVsQTFbUKzscARtQTEAKCCY5k5BMVtQzBYUKzscQVtQDAAKSIRpvja8vFZbPnxN+vzEqvC0aqNL7teGl9cCVp3IaVOuDS/Pb2XpkRW7NrxcI9GJVWl1K4kIVqhtTG5fdu2sG/UpPtIR1By+dDn1xKruTcaYZgAoINE9zapFvja8vHuzdErCyV02fHpTWGVUxTQGOb1n7kp0ptlGHu38uOccCZlmWfmUfRH2prk8Bx3TDAAFJK48Q3QvWGYdoeQeOpOV50SVDzrFZIHwzDKY5rITY5pTHgxMMwBArsTXNLcNjGKZT6wK3xT2p/mTrw0vX75q1fI8axTyJqRYZNeycGdWJ5x4fbJquD1vIHu0wuIZMVhR4a5z4vrmRS+gU0ZsUYEg7W9Ei2AStthYmGbNDvoaLR++5n9XmqjoXx5nVRqSmmaleWt/xcFvYtUq6ZiGFq5mG7klFBtMMwAUkCQPAp5YVastXy5a5iAxC1ZaOPP6dxsrUJtgUkxXaCpIJEuoiinWkwdfilM4WJIyZ7GOgEYxaSN9z2xUpj2r7K7VL+lE0AtbdBLVNAdKhXZQa6pMTgvPvAgkKM8I2qfQvMO/4uCv4FDrD6Uu25Tn2GKaAaCAJBs9Qym5kzKv9hbhCaELpAS9Gp0Qmdzb7tk/i4XF0Iop6qY/z0XOGX+AXGJ6dDLwB6r99QwtSmd7o0WIF7aIWPY0R7YHvT7CP+WRpUQkfRDQ2D7bDVj6NZ+I6mmOzzaFBtMMAAUkmWlWUq2a9MUsL08sT45OTXxyb58I9VcQWjET3G+NmlM6XxbuGGgV02x7rDKeJ3bqq55PK4Kxe7XQ2JZnJOpUlhciTi7WNVZXEFeeoftI14DlHBJlms3ZppxtHgCgAKQ2zdrnisQuwKqaZk3vZ1uF5H0/RpcTqXCJe5rb2xxrak0tKlyKYOxpxjRr79SfWNVyZcVqLd1BGtNMTzMAQMFIZZq1N3OVArzKmmapqrT9f7iKVq7SjSo9TK5wdDlvYTCcDq8NL68tX67t/YxQRnxiUJnBVNNcTdOsrdmQXNWJVbVVw3jmRSGNaU5e06xO1NY0l6xeDtMMAAUknWn2dA9iB3fTlw+f0NwN71K0iomjXIRGug4/IhgSU+/t4hTWF3IU7hxpPB2eWFVTDX6kMuLnNqNndIVp1mBuD60vyDMIE5to9IdsSGWaDb/i9sTlw8PhUqblw8OrdNVcyqTiH2VMMwAUEF6j3SkoZguK2ZKTYuW5iigdtHlbUAwACgimuVNQzBYUsyUfxfDMiwdt3hYUA4ACgmnuFBSzBcVsWXTFSnPTvqzQ5m1BMQAoIJjmTkExW1DMFhQrOxxBW1AMAAoIprlTUMwWFLMFxcoOR9AWFAOAAoJp7hQUswXFbEGxssMRtAXFAKCAYJo7BcVsQTFbUKzscARtQTEAKCCY5k5BMVtQzBYUKzscQVtQDAAKCKa5U1DMFhSzBcXKDkfQFhQDgAISZ5qnVupePVZbOdX8YOWUusCrQ0vD068OLQ3NKiw5vJQSYUzuzR1cOnQ14YKuDi3tSIiplSVRUlbs6tBSdbubbUhRbmqljZjm+Usjk0C4jRl/l6mWf3VoaVurQB5hotQ4sxNQvxM2B7k0aPNqaE81v4U4mr+VjNqBuoUdHIpOsxmmGQCKSBLTbEidOnt8dWhpeH6Nv55aKUwpo40JMCX3qZW1pStXJj4JpjhfhldYDhkVxUJNrO0DpInW5/AOT/qFQm+aF2XvtK2o88ZpXJc2WZSiGVth6IxQ9j6taVa+komGHbWwDBoMphkACkgHplljm8PZOuhMEiaHUmpp/J4GfXJv7WLyk0d1TXOojU2trC0dmhL7OdPIg2lOhWvT3F0Hzsd4By98udi5ac4kF2CaAQBCdGSalZ7lkGVu34NUU2gopV+VHVKp0CZ3f4+1Zw/xlurSoavyfer2txQbKfwv3dWWJ5fSNCtb3vpPmijJGJLP/97SoSG/B0/STCj4UOsPpoKlafu7a7XayqHFMY2JsTfNhjbi6dWLLM9QG6d8tMTFiQpJZQMG6fQ7ofxkTCuQtit2DyN/U0rLMS8j/e7q8+qQkjF1iTJGQ7NpXjp0tVUYN9TauNZspn0T19fctlCb0K0ytJEJtjoBmGYAKCAdmmbBNkfcE0xkmsth+MLokruwP9pe9WCCdHaTbKH5BK/659a3ymuaQ/vun3vDFTxSMWj4mk2jrHJDRHaFipWQFqx4jPKY5ug2Ymh8UTXN0gESjktYM0FxzZFItBPiVNMK5K+KqzO2j5jfVMgGmhpSut015VV5VeFmJ4qubYHmq/KVU/5S5EvLqN+P3OZjTbNcjqeslp5mAOg6OjbNYseFKUuqKTTGSJYLTXIP94vG9wcnNM3q15VTfyk0DCum+LPAiqgTQy1HmKA0Vb0tCZlm5ROtytqHW/PEzjSb20hU40thmtWN8GdLeGs/tqbZuAKTKYtoH4kvRI0qdbK7xrwqtS1zazauxPgcrbaNm/XR5ug402y8Q4hpBoDuJM3oGaE0qfbUqOhTtdyLUhLDFybe0Ij/G8+vSXuaxUny8SixaQ62XdxzySoHrk8WItBN2f+plbXa0qXhYTi0rjD4RruCo9Na00xJNnqG4XcZfBbZ+OxNs/5giPVGMU5StxNqj69hBYbu/4j2EWOao9YauzXxuxvRGSEkw8iu2ohiFnNLUPbarE8oe5gvx2MvXTDNANCtZNDTHD+XLoWKJaMWz8sVD22FrvE8ZnS2NuUZeh9UZtPsb/zUSs0ZX+7b1HSrmUxzreWbVS27wzRHlmfo2khk40tnms2GLa7KN7QT4f786BVIHxt/A+lMs6mjOfXuRuZVf88j+3AjTHN0f0VkJ3rr++HFaNuEvEpjRzOmGQC6FGemOcVaikkSxeQb5B30NGsLW7rBNLf2WGN8myd0oWLV0Nun7Wn2NdPVx3SpaTa3kUXvadYSKqs178TUypp6qJKkheBOV0zfdMY9zRa7G5MlWm10Kq6nOdwG7U2zXh96mgEA4nFims3FpCUkbtRhf2r0eSZcB61UImr7CkWXUWrT3Dx5r1y5NHTmXrpypVyxEVXTrG9UvvrybIkrx8tV02xuI5GNz940hxcX1UmrmW6qOjIebeMK2tsaU9Os/U2pS01cL22zu7F5Neip7rimWf1YNeepapoV5x1z2YRpBoDuxE1Ps9T5J1ma8iEppvRqBsgnmmB3DSctcabW6VTTa9q+YWwqXSgoESNbaysuw2dsyVWJ7ch0JSbomcQ0S0dDu2H5Yt/THNFGDI3P3jTrVqW7n2J0UNqdMB9gYX5lkeoFkrF96I+p9jIjrFInu5sgrypl2vKVmjFJ2pnmdPqEZxPbiO7WAKYZALqTItQ0l7aT2fM8WTGjZ9aekpT6x9bZSDxRtecQT31iaWWrFlHbPVpcDKdD5d58E10nryhfqJZD+ldXMJvINEtrCb1pJXdsx2k2thFP3/jiTLPUODX9spofsrgJUX3imo+CaouoFUj7Eb4k10w3/qY0vxxTiXLa3U2UV+Udl5dqOti2ptmL0EdYnzROs/KJUkQl7nroC+l/NZhmACggcaYZ4kAxW8qnmOvrkfIpBjIcQVtQDAAKCKa5U1DMlsIrptwwcP0YYAkUgxg4gragGAAUEExzp6CYLWVQTLrd7rzqpQyKQRQcQVtQDAAKCKa5U1DMFhSzBcXKDkfQFhQDgAKCae4UFLMFxWxBsbLDEbQFxQCggGCaOwXFbEExW1Cs7HAEbUExACggmOZOQTFbUMwWFCs7HEFbUAwACgimuVNQzBYUswXFyg5H0BYUA4ACojHNBEEQBEEQBEGIoZpmAAAAAABQwDQDAAAAAMSAaQYAAAAAiAHTDAAAAAAQA6YZAAAAACAGTDMAAAAAQAwMOUcQBEEQBEEQMaExzQsP/0UQmcQnX92cv79A5BlojuzVCWRH9urEJ1/dfOPcF0TOobR2TDOxiEFudZJYnW9DBQPZkb06geyuZHfuICsYmGYivyC3OkmszrehgoHsyF6dQHZXsjt3kBUMTDORX5BbnSRW59tQwUB2ZK9OILsr2Z07yAoGppnIL8itThKr822oYCA7slcnkN2V7M4dZAUD00zkF+RWJ4nV+TZUMJAd2asTyO5KducOsoKBaSbyC3Krk8TqfBsqGMiO7NUJZHclu3MHWcHANBP5BbnVSWJ1vg0VDGRH9uoEsruS3bmDrGBgmon8gtzqJLE634YKBrIje3UC2V3J7txBVjAwzUR+UaDc2uiv1fqPOt+MXBKru7XPDdRrYXob5q9cGVpWqw9cca9bmWVvylgLtfDJ3lqtVh+adS1O18ouxOxgvVarLRucc74lXS57VZv6fKFM8/ATtdoTLzjfDEwz0WVRnFMapjmXmBuoW/oGTHMm0XISspLNiV3tJAqTYeYG6rXePpLM4kdVm/o8phnTTHR9FOaUhmnOJzDNjuLK0LJarbevXxR/drDe29ff3U6iKBmmmV6aRyHivkq3hHPTXMGmPo9pxjQTXR9FOaXdl01zq6+iRSv5Nt1bI/iopCe/AptmsXhDPBb1gcH+1uTSnvYKYZobk72BgHMD9frAoOAkjM2+f2CwLh2U8kRBMszRvmbTnRuo12p9k8JB0bXtkmvuWPa0Tf1on3BomuU0wr+liCKa5iNrflL76aoj7en+v80/htf8pH0UfjbsepsxzUTxoyCntPn7omme7BUM8exgvTVdvsEXTC9bFNU0S35idrDeklqSXfYcpYpimOa5gbpwNVIfmm34TiKy2ZdTc/eyt2Kyt+3MpLwhVd8KbbvkmjuWPXVTl242zg3Uy9ctUjbTXKv925pXz33xxvP+71wAABGUSURBVLkvXn32p+XtmcY0E/lFMU5pC/NixrwyJ/Vl+uUByq3V0pYNODfNCi0PrZbHtE9syJ5JtGWcHay3xGz0Lxucm/edRMJmX7YoRIYJ3cVq6Wlq2yXX3LHsqZu6aKavDC0rYZ9I6Uxz0LuszFaqwDQT+UUhTmn3W4lVMm2NfsHX+Wcywa7h3tKEsad5dlAzrMaywbnQ2UvqJSpRFMQ0zzf6m12YR/va/4oVL7HNvmxRhAwj3/dXepRFbcULxRJr7lj21E1dKMkoY23GfPlMs2668y3HNBNFjiKc0oQcGpRnBA9fS90/mOYOI9I0a+uVMc2ZRNB52az1nOz1b0kL96zjm33ZogAZpimsgl/6gmnOOlI39ft+tillbcY8phnTTHR9uD2lSUbNT6maDglMc1Zhrmn2dVamI3smIdzxP9pXHxhsdcJZN/uyhXPTrHn4wT8WmvIMrZkuXxTDNFs29fsLrVLmwVLWZsy7Ns2vPvtTv0b5jeEnWn9jmjHNRIbh+JQmpMvgFqqYQ8UhP3FvGUTcg4DiNYxQ38mDgJ2G4CSkt2yITiJJsy9buDbN2hbbnhj1IGCJNXcse+qmfj/4SnmTjEv7OPxErW18X+ip1Xp2vXHuizfO7fpZrfaTZ0+9ce6LN86dWvVvtRqmmSBSh+tT2sLRPr+qLeh7CCbW6gNXDPdMS3tiK6ppXpAfE5RvnvrDcpXzZOZa9vDzZ215hV63RM2+bFEg2YWYHazXavWBNwxtu+SaO5Y9dVOPPGSlCOflGS/0tHX1u5zPtQfKqNVqtdrPhnf9DNNMEKnDuWmuYKA5slcnCi17+c1xKWWPjnKOm+HL7txBVjAwzUR+UeLcWtpAc2SvThRadkxz8WJ2sG73ytIiBaYZ00x0eZQ3t5Y30BzZqxOFlh3TXKiQX19VxsA0Y5qJLo9S5taSB5oje3UC2ZG9OoFpxjQTXR7kVieJ1fk2VDCQHdmrE8juSnbnDrKCgWkm8gtyq5PE6nwbKhjIjuzVCWR3JbtzB1nBwDQT+QW51Ulidb4NFQxkR/bqBLK7kt25g6xgYJqJ/ILc6iSxOt+GCgayI3t1Atldye7cQVYwMM1EfkFudZJYnW9DBQPZkb06geyuZHfuICsYmGYivyC3OkmszrehgoHsyF6dQHZXsjt3kBUMTDORX7wDAAAA0BVoTDNBEARBEARBEGJoTLPzexBEd4QHAAAAnVED1wTHQjk2mGYik/jkq5v5ZhXwPM9DdicguxOQ3QnInj+uHSNgmolFDhKrE5DdCcjuBGR3ArLnj2/d3vzKI/KMT766iWkm8ggSqxOQ3QnI7gRkdwKy5w+mGdNMdHmQWJ2A7E5AdicguxOQPX8wzZhmosuDxOoEZHcCsjsB2Z2A7PmDaS6vaZ7srdUHrqSceLSvfeTrQ7PJvNfsYF0oxQ6vJXFcGVrWydcJyyCxep7neTOrl/SMXI/6uIU8l+10H2T3PC9Wdv0810d6lggIHyJ7MlLJLqi7ZMnqGX+y+XD4ILvneXGyG+QlyXRKtOxC8xXnSptkMM1lNc1H+zTONeHE2cF62yvPDdRrtb7JOOM1N1CX7HXTQPc2Utk4THO+QWL1WnnQmFivj/S0P7w+0hOc0WyniyC7Fye7cR7DSRDZE5JK9pnVgpebWS18mMCBI7sXI7tRXpJMh0TKfn2kJ/gwSauOlR3TXEbTPNmr6e61mxj43UZ/rdZ/NNJ1He3TdEgLztsyMM35RuUTq99xEHU+C3Jj8J/tdAlkj5PdOM/1kR6dosiehLSyS4Yi5B10jk0E2WNkN8pLkumEONmFZqz8mzrJYJpLaJob/bW+SdV6Jp+oelbfQ88N1GvLBudCa5RNtjauDC0TSjeChcjTWwtpbsBgvzqdWJyoemKdWb1k9YyaPUXUj9qZ0na6DLLHyG6eR98HhOxJ6EB2CeHTJKUeyB4vqYg/J0mmE2xze2yrTiA7prmEpjnwo6H+2iQT1a7lOE8c3zEsLWF2sN5avsas13obbSfd7qUO5icWJ6qeWJtEJFY1Mbb/t50ug+yeFym7cZ6Z1UuW9PT4BYfiLW1kT0Ya2SWEjlHD4ZBBds9LJrvneaK8JJnOiZLdVJ6RPslgmjHNk701bQez+PVIU3tlbla7OtMXffccsc1EdkFi9Txr09wzct16ugyye14q9yad5oTbqMienM5Ms3QETIdDBtk9L6lpDvk4kkxnxMmuebCvgySDacY0d97T7C9WHVsjGKNDfNYwplyEyDhIrJ5HT7MjOu7yRPY0dCB7c1ABcw0zsptJILsqL0mmc6JkF5+/jGjaFrJjmqtnmo01zaYwzeCPZNd83LC9TM02+M8jmso2MM2LGCRWz4tMrNQ0Lx4ZmmZkT05a2RMMu4HsZhJ1eYZHVyTJdEbyDhHjnBayY5qrZ5rtR8/QDpQR1CI3+qVPG/2GUZzb68U05xskVs+L741g9IxFIYV703T2RI8zIIHsnpfSNOtH2DIeDglk97wY2Q3jxpFkOiaFae4gyWCaK2iaxSHkshinWXTJreEy6gNXQnZcqnXGNOcXJFbPS/7Yk3Rqs50uguyel869yWWzgklD9qSkLCXXfsV4OESQ3fOsbmcFkGQ6JWl5hippuiSDaa6iaZ7XVxubhpwLfUUsxlA/qg9cEXqydYXOmOacg8TqeXpnpt6H0w0PYDvdB9k9L152w7RAXeUTZE+EvezK+9HCYwpEj4eL7J4XJXukvCSZzohp7abWmzLJYJpLa5oJIlmQWPVcH1mdaEjVlCC7HmR3ArI7AdmdsJiyY5oxzUSXB4lVz8zqZO8hSAmy60F2JyC7E5DdCYspO6YZ00x0eZBYtcysjns1cGcguxZkdwKyOwHZnbCosmOaMc1ElweJ1QnI7gRkdwKyOwHZ8wfTjGkmujxIrE5AdicguxOQ3QnInj+YZkwz0eVBYnUCsjsB2Z2A7E5A9vzBNGOaiS4PEqsTkN0JyO4EZHcCsucPphnTTHR5kFidgOxOQHYnILsTkD1/MM2YZqLLg8TqBGR3ArI7AdmdgOz5g2nOOaKOhfI/ppnIJEisTkB2JyC7E5DdCcieP5jm/E1zLUTrWCjHBtNMZBIkVicguxOQ3QnI7gRkzx9MM6aZ6PIgsToB2Z2A7E5Adicge/5gmjHNRJcHidUJyO4EZHcCsjsB2fMnbOBgUdFq3joWyrH55KubBJFJ0JyQvTqB7MhenUD2nCN/11hxTKb5k69u0tNMLFYs5oU3AABAJfB9m/O6hYqER3kGkXN8wi08FyC7E5DdCcjuBGTPH0xz/qbZeCyU/zHNRCZBYnUCsjsB2Z2A7E5A9vzBNLuKT3i5CZFPkFidgOxOQHYnILsTkD1/MM2YZqLLg8TqBGR3ArI7AdmdgOz5g2nGNBNdHiRWJyC7E5DdCcjuBGTPH0xzeU3zZG+tPnAlbuKVoWXiM4f1odn2R0f7NBP10VpI/1F1XQm+qy4nvM0R808ejZ7ZtEDbFd1fmB2sizJZfTdNiFvo76b9ZicJEmsMM6uXhFg943me510f6RGn9oxcD39JmCiC7DGYZI84HMieDUKzlmU0yYvsWWCSXWzxfkuXP0D29Bhbu+d5njezOjQ1WnZMc1lN89E+jbfTTGz0a33t7GC9PX1uoF6r9U3GObzQkpsTF880J5k5I9M8O1iXLgka/bVarbeRsXnNQJNUQWK1Yma1kCs1GdXzmmm4Nf36SI9ypmuB7FZIshumI3sWXB/pCSRNIi+yZ4FJ9pnVglWmtWeNsbV7/hR5UqzsmOYymubJXk2HqHbiwuxgXWeIJ3tFU9joD/Uih41drbevf9ngnLjk3j69I8/GIOZnmucG6qpFPtpneT2QOjDNhUJOq9dHenTnqpnVYi6V//NBdguSWGZkzwTBFMj/muRF9iwwya60/PjDIYHsMRhbuyd0KIuZJ152THMJTXOjv9Y3qZot7cT7C0f7aqLTNRg130PPDdRN89d6G5O9gY+cG6jXBwYF0yzXgbQWcmVoWa1/oFX50H9UXG+jv1bze7jnBoLiiP6j8tKERWmXXx8Y7FfrTKQdDC1cZ5o1ey3PoFuCMN2/MlG09f/VSvGGvJtJNlvWIUl3OIk1MWrXgr6jWUnEhhMasifG1JEmT0f2TDDZCJO8yJ4JUe5NNxuyZ0KE7DOrl6yeiTsuGtkxzSU0zRE9lDo3vKxeV72X2rUsdzzr11XrbcwN1NvfujK0rD40G9R+SEsIqh2aDi9sKFsLFNxhe56gbkTal8jlh+tMgu8aFh6+DhG9eNgxa5YgThc2L8o0m6Twi5vjNluz8HjfTGJNitrfObN6yZKenh613FBNpJzPOiNRNzOyZ4XhhrVJXmTPhpg6AU+ZjuzZECe74pITyI5p7mrTfGVomWgErwwta3pNnWmO6mptm7PZwXrLojX6lw3OBQXTV+ZmtZuhuLrm9Ia8VSYHL7lJm+WLTtTm8kB6FtB3t0k2L+YQJNvU+wk22z+CNkFiTYiaIKV8K9Rq6BJr+AyI7Akx3HmOPX8he3o0jzqZ5EX27Ih+wizk75A9G6JkT2CalS9hmrvaNKvR9l4pe5rbRSD3F472tf8VO27b/bXNUgnVEbaXo9QVyMNWmGoVIpYf5WiNC48xmsHAIMYlmArBo0xz3PQEmx2MeRL97Cam2RqTeQvNQCdQliT1zMieEeKTZ82BBYyXgrT27DDI3kadhOzZECM7Pc0lCqem2VjTHGea7zfLmid7/R5roTyjFu4xNZQTiI/ZGUsmQuUZhuXHmeZ0z/PFLmGxTXPMZvvPfcZ3PJNYExHrmanyXAwSe2ZkzwZFNmqa88Eku/+h0qGJ7JkQKbtmCjXNBY5cTLOmR7n5aarRMxoL8/cXjvbVBwZb/c2BadZ0OUc6RbEgxJ85Ygdtly/VOaQagiN2CWnKM5Ka5kSb3bbO1DRngubJHE2vAw+2Z0zsA1ECyJ4FRhvB6BmLidm9GR6DRfYssDXNjJ5R4Minp1keTE2wnkJfb9JxmpvLaVYOBH7XN82S86vFmebmcoSH3nxPHCxKcIRRy0/wIKBm4VKExrcWNTEtITSP8FBguwKkOQJG/PVD6CFCw0qVy5tkw9WRWJOgS4/yiHPCUBpCpRtDqHZE8o5mD9mzwTgwsEleZM8Cg+ymq0ZkzwZja28R0j9Wdkxzd5vmBeE+vjrwsK46NnrIudAqFBfeXs3AFUMdSHhINdHvBl+Xt7BdRW1cvj/knH7cN/3ClVDKiGURTEvQDTkX2PparTlOX9z1Q7CbSTY7XNgd6ZgxzckwnbuCZ0iM70gz1HQgewJsOpo9z0P2bLBu1cieBRrZlVeOKhojexYYW7vnmW9pmWXHNJfWNBNEsiCxOgHZnYDsTkB2JyB7/mCaMc1ElweJ1QnI7gRkdwKyOwHZ8wfTjGkmujxIrE5AdicguxOQ3QnInj+YZkwz0eVBYnUCsjsB2Z2A7E5A9vzBNGOaiS4PEqsTkN0JyO4EZHcCsucPphnTTHR5kFidgOxOQHYnILsTkD1/MM2YZqLLg8TqBGR3ArI7AdmdgOz5g2nGNBNdHiRWJyC7E5DdCcjuBGTPH0wzppno8iCxOgHZnYDsTkB2JyB7/mCaMc1ElweJ1QnI7gRkdwKyOwHZ8wfTnHNEHQvlf0wzkUmQWJ2A7E5AdicguxOQPX8wzfmb5lqI1rFQjg2mmcgkSKxOQHYnILsTkN0JyJ4/mGZMM9HlQWJ1ArI7AdmdgOxOQPb8CRs4WFS0mreOhXJsPvnqJkFkEjQnZK9OIDuyVyeQPefI3zVWHJNp/uSrmxrTvPDwXwTReXie53wbKhjIjuzVCWRH9uoEsucptdY0Lzz8F6aZWJRo9kY434yqBbIje3UC2ZG9OoHseQammcg7+IUje3UC2ZG9OoHsyN71gWkm8g5+4chenUB2ZK9OIDuyd30YHsjENBOLFvzCkb06gezIXp1AdmSvToRlxzQTixL8wpG9OoHsyF6dQHZkr06EZf8/11Rwjqa4WhwAAAAASUVORK5CYII=" width="640" /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
The idea will be run the rule to load data for June which is based on two substitution variables for current month and year.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii6QtYWLkbmGlUc6LGGo5ONEieLzQETp5kSBOnIZJi8GQ2Svp0jHJS3BC_AVUzWSQiJfLBcCX-eRgGTBK4P3usiBmWYdFXlAV0Xm9K1tLxaqbBd6FS1qFGvZFhFlDJZ9aUI_ODbq2WUU0/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="215" data-original-width="323" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii6QtYWLkbmGlUc6LGGo5ONEieLzQETp5kSBOnIZJi8GQ2Svp0jHJS3BC_AVUzWSQiJfLBcCX-eRgGTBK4P3usiBmWYdFXlAV0Xm9K1tLxaqbBd6FS1qFGvZFhFlDJZ9aUI_ODbq2WUU0/s1600/image012.png" /></a></div>
<br />
The current month sub var value can be returned using the following REST request. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSh4548w9qV22M32oJ_zL7xR4cyq63xnwl8UpgFVE2BsL1DJuZKP-KDx-IqKeHHZLJ0I9-Q5uVRMk01bTAmbAU8HsXUAR00aDdUx8qfRj3FLrteYwQvTmpO4lZfXYULa1xLeFJEn9qckQ/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="149" data-original-width="721" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSh4548w9qV22M32oJ_zL7xR4cyq63xnwl8UpgFVE2BsL1DJuZKP-KDx-IqKeHHZLJ0I9-Q5uVRMk01bTAmbAU8HsXUAR00aDdUx8qfRj3FLrteYwQvTmpO4lZfXYULa1xLeFJEn9qckQ/s640/image013.png" width="640" /></a></div>
<br />
To return the current year sub var value just requires a change to the variable name in the URL. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK83h9BTTNngy3Yt6PP6VI63wG_U3GXGAzG9Vm8_aEtdQl9mT1SJPymrVf8Kja0tbKES3ytizQdJ9X5Uz_rmW256P_bvq_8fmqA366lmgJ36nAcW24EkhrYEavOTy4z1LDZSLLn1uEIhg/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="144" data-original-width="686" height="134" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK83h9BTTNngy3Yt6PP6VI63wG_U3GXGAzG9Vm8_aEtdQl9mT1SJPymrVf8Kja0tbKES3ytizQdJ9X5Uz_rmW256P_bvq_8fmqA366lmgJ36nAcW24EkhrYEavOTy4z1LDZSLLn1uEIhg/s640/image014.png" width="640" /></a></div>
<br />
The load rule can be executed with a POST request to the Data Management REST API URL, the body of the request contains the rule parameters in JSON. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAoV0sNXjZuUAJ6MK_JLjLn2sNLkkHSPQKi3c1TIHAZ5B_taMtaW-gCXAoW8o9nne8yhwBjz3LXSwXKtRVkqI_rAvH8rRCP3ICHpTqylVRDnsQwvkBUTi0ZleI1mjjIDHag2Jf5yAJy7U/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="216" data-original-width="369" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAoV0sNXjZuUAJ6MK_JLjLn2sNLkkHSPQKi3c1TIHAZ5B_taMtaW-gCXAoW8o9nne8yhwBjz3LXSwXKtRVkqI_rAvH8rRCP3ICHpTqylVRDnsQwvkBUTi0ZleI1mjjIDHag2Jf5yAJy7U/s1600/image015.png" /></a></div>
<br />
Now we just need to replicate these REST calls in a Groovy script.<br />
<br />
Let us start with the current month variable.<br />
<br />
<div style="text-align: center;">
<img alt="" height="112" src="data:image/png;base64,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" width="640" /> </div>
<br />
<br />
It is pretty much the same as the earlier examples, a GET request is made to return the sub var information. This time I am using the "JSONObject" class to extract the sub var value from the returned JSON.<br />
<br />
If the script is run, the sub var value will be written to the job console.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiAAmQRxUoafwVqD6QS_5ScTt1GvbmikOETeNW68ITyCY5BnEaqpeQ6RRk3kObLCdShAAm9HQwLsVohZ9NfWvJyooZsWRzfEA9fI8WARM9P2pgi9lLVC0nscGehNjfkNsygD1GwQkkJes/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="65" data-original-width="309" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiAAmQRxUoafwVqD6QS_5ScTt1GvbmikOETeNW68ITyCY5BnEaqpeQ6RRk3kObLCdShAAm9HQwLsVohZ9NfWvJyooZsWRzfEA9fI8WARM9P2pgi9lLVC0nscGehNjfkNsygD1GwQkkJes/s1600/image017.png" /></a></div>
<br />
On to the current year variable. <br />
<br />
<div style="text-align: center;">
<img alt="" height="112" src="data:image/png;base64,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" width="640" /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
This will produce: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV9Nhyf1GbVXBBQN8pyFdsqNlepI6N3GK6Z6nGZdbN9BxJKMMn1EshM663SUG7BJSWMHZrh3WSpYXH42LlADyHFwt97ndV_cgRVns0jo_wOdCTZ1cE7UIkj6cIKQ0sN8-VWRGD995REkQ/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="67" data-original-width="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV9Nhyf1GbVXBBQN8pyFdsqNlepI6N3GK6Z6nGZdbN9BxJKMMn1EshM663SUG7BJSWMHZrh3WSpYXH42LlADyHFwt97ndV_cgRVns0jo_wOdCTZ1cE7UIkj6cIKQ0sN8-VWRGD995REkQ/s1600/image019.png" /></a></div>
<br />
The start period for the Data Management rule can now be generated from the stored variable values. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJS-Viv3KBRwD1J1ep-xuxyIc-zf9BpaGokEpYHpSIwioH18YQf66q-OJCPzh735alAWsd_AXeKmKfsTvMCWSTEh60nWVzcvuQEX8mc52q2KPBq5a-HA_NpAZ0Xa3RoxF-9_3SF4Hve6E/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="71" data-original-width="351" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJS-Viv3KBRwD1J1ep-xuxyIc-zf9BpaGokEpYHpSIwioH18YQf66q-OJCPzh735alAWsd_AXeKmKfsTvMCWSTEh60nWVzcvuQEX8mc52q2KPBq5a-HA_NpAZ0Xa3RoxF-9_3SF4Hve6E/s1600/image020.png" /></a></div>
<br />
The start period is now in the correct format. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_EJvMzeh3Hp5cFvYijcEb5e1cvHGBcqcxWUiH9z40Lz4ntqmLIs84PxIE-xeyMoYHH94j4eBtnyYHVRhd_HvRWqxhtLiF6snS4vfjGl4mDRqhWxvmpLBke90vkRG1zkK2ctz04iAXEl4/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="63" data-original-width="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_EJvMzeh3Hp5cFvYijcEb5e1cvHGBcqcxWUiH9z40Lz4ntqmLIs84PxIE-xeyMoYHH94j4eBtnyYHVRhd_HvRWqxhtLiF6snS4vfjGl4mDRqhWxvmpLBke90vkRG1zkK2ctz04iAXEl4/s1600/image021.png" /></a></div>
<br />
Next the body of the REST request can be created in JSON. Once again, I am using the “JSONObject” class to handle this. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfMkXzGUPympom8BRWfBORlM1LpwQw_rROS81zihAFZww3ixD2FE2Cpb4hiwLSssvzVHqNGAdTKtwISxNCl9knmvKKLyBsPHx-ddUv-rC-aimhKSaw2J7yKsrsL4VxlZDDV8tW0hoRJr8/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="229" data-original-width="359" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfMkXzGUPympom8BRWfBORlM1LpwQw_rROS81zihAFZww3ixD2FE2Cpb4hiwLSssvzVHqNGAdTKtwISxNCl9knmvKKLyBsPHx-ddUv-rC-aimhKSaw2J7yKsrsL4VxlZDDV8tW0hoRJr8/s1600/image022.png" /></a></div>
<br />
The JSON created matches the example shown earlier in the REST client. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnSte6cQcuQ9_pl9JJ7s3VcUv20Bm0Llo4zI9XgTaup8zTNWmM0I8Q1YYr0KyBWJAKels_ReJSO1ZrXV2_l6LrXagGxQX32_1i7XLMo1tJdUePVMbiSSBe3T-IiFlVR2szWFNlAQeTqsU/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="99" data-original-width="671" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnSte6cQcuQ9_pl9JJ7s3VcUv20Bm0Llo4zI9XgTaup8zTNWmM0I8Q1YYr0KyBWJAKels_ReJSO1ZrXV2_l6LrXagGxQX32_1i7XLMo1tJdUePVMbiSSBe3T-IiFlVR2szWFNlAQeTqsU/s1600/image023.png" /></a></div>
<br />
A REST request using the post method which includes the JSON in the body can now be made. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOyswchxRRSHIHyfN8q6_rdhI4I6IiobMICSkRV0nUUcGkXppBCr476EOimtQyegyq00hHUKkQ-lUgT8G3XnHyBgVgtqca7grk2hAwbVCIaLHj3v91-0Vv5oSh-N2V0_hjBPB2BhoLLNA/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="85" data-original-width="514" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOyswchxRRSHIHyfN8q6_rdhI4I6IiobMICSkRV0nUUcGkXppBCr476EOimtQyegyq00hHUKkQ-lUgT8G3XnHyBgVgtqca7grk2hAwbVCIaLHj3v91-0Vv5oSh-N2V0_hjBPB2BhoLLNA/s1600/image024.png" /></a></div>
<br />
The remaining part of the script checks if the return status code equals 200, if it doesn’t then an exception is thrown. This will generate an error message back to the user with the status code and text.<br />
<br />
If the request was successful, the returned JSON information in the response is processed. The rule status code, rule status text and process ID are stored.<br />
<br />
If the rule status code is not -1 (Running) or 0 (Completed) then an exception is raised, an error message will be displayed to the user with the process ID and the rule status.<br />
<br />
<div style="text-align: center;">
<img alt="" height="168" src="data:image/png;base64,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" width="640" /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
If the script is run and the Data Management load rule is executed successfully the job console will contain. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFYGvvpYGi-7yxV_1Ub-cOji0oej-eNvvcUCtneefUjsRne5GgOKBi1FzQbQIum5H7objB11QucwPB1sQeVHNRsC0-KinuZV0kGq7htuEAcUIGzwBJuNr4awBK309wl_EdHkF9ZLvsLq0/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="66" data-original-width="535" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFYGvvpYGi-7yxV_1Ub-cOji0oej-eNvvcUCtneefUjsRne5GgOKBi1FzQbQIum5H7objB11QucwPB1sQeVHNRsC0-KinuZV0kGq7htuEAcUIGzwBJuNr4awBK309wl_EdHkF9ZLvsLq0/s1600/image026.png" /></a></div>
<br />
If it is not a long running rule, then you could enhance the script so it checks until the rule completes.<br />
<br />
In Data Management or Data Integration process details you will see the rule has been run.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQQJMQ_3UBBerDaZyUiMowbbD9z_k5XGka4Yze4Vwlhar_dOhbCabxHucVaxpnw9bS_-_byKNL2AodVuzpamEd6SDi-5apTyKBOnsdlZJXMt4zryofW-6beR0-bNAMYLDciO8dm-nhGeo/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="151" data-original-width="411" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQQJMQ_3UBBerDaZyUiMowbbD9z_k5XGka4Yze4Vwlhar_dOhbCabxHucVaxpnw9bS_-_byKNL2AodVuzpamEd6SDi-5apTyKBOnsdlZJXMt4zryofW-6beR0-bNAMYLDciO8dm-nhGeo/s1600/image027.png" /></a></div>
<br />
Now all that is left to do is add the rule to the form. I added a menu option to the form which runs the rule. <br />
<br />
<div style="text-align: center;">
<img alt="" height="137" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7MAAADMCAIAAAAu4GOxAAAgAElEQVR4nO2de1QUV77v66/DWuM6y5s5x2tyXGYyZmbNuSs3w0i86+SeTMhJ7szEmQxOnCSTcUYeOa5knCQmYxIm0dGoiYKtwfgAgojgm2iDPASjAr6VGNEWG3wQwDFEwVFABG1Aoe4f3V21d9Wu6q7u6q7ezfezfn9oUV2PX9Wu+vTuX+0SRAAAAAAAAIAoClZvAAAAAAAAABEBzBgAAAAAAABRhBkDAAAAAADgBmYMAAAAAACAKDLMuLH6T3PyEnRiXsH0xdtmr91beKrdpfzwiUXSbLbqMxqrrMiVl7aoRprcnGuTp/9pe5Nq4aIoimfs2+R57M2B7jWxnewd/PyDwsNHW28zPsrIz7bcRsaMreU7lEvWzokvyOSUVRj/vKvz6932XbOXbp4237uc+RuTltrT7LVftg34t4yBqvwN5O68Unjevw1WR8G0xdtmr6/e3XCTeZQNons0Pavb/GbW7twDrbdUHybORvZxFEVRrCmTl5Z7QppMno3EmawLuSifQazLGPqt2HPovzrTyTz0PvNJhnw2ku3aHVNzT7COr2PZAuWcWtm71eosLCx+c/Gml+Z5l/nhpqSM4jWlpxt6A8yNPwwNDXV2dX1Vd9q+syxz7fpln65Z9umarLXr7TvLvqo73dnVNTQ0FMLVAwAAsA7jZixH/owNp65QHzbNjBPmFa5naUo4zJgwqtc2KXaQnZ/Z5VdVq7hpz1It0BIz7m/fs2nbC/q7mV97vt/XcjqPz51Hf3BBpbYN6puxfApNX3PotM9V+8CAyU1brVzdSDRjuZVter9c/RXUNDNmnyEn9ySqlsPIXu/5jWs2TdXfePtZZfMMmuHh4e7um1/Vnd5eXLquYPPq7NzlKzOXZqxamrFq+crM1dm56wo2by8uOXGyrrOre2ho2Oz1AwAAsJhgzDgvYU7+B7uvEx82z4zn5E1deeii6rPhNeO8hDl503JPUHdfZn6yjl5XrKH/xKJ5qtnCb8b9TeszCvzZzanplVXteku6vnenSlM2LD2i1d/spxnnJczJm7q8Ojg5NmRyea9sbSBdcESb8Zy8hDn5r9sVcmyeGc/ZvOqkctPIpGlmr/3E4o/y/Wqeqq86wTA8PNzece3Isdr1m7YuW7E6/ZOVzLCtWL1+45ZDR4+3t3cMD0OOAQAgqgjSjPMSluwj7t5mmrFKu0XRCjNWbgYzP/PKKhS352OVL6tnC7cZX6/I3ej/odQ11G82ZrA+kn1ceYQYG+w7FLZqEGNmnDBvZ3Gn/OERb8Z5CXO2rDpJfsMx0YzVjfTqlpWM2ajs9TflLvdLi92h/O4aBN3dNw8fq/1sXb6WE5ORnZt/+Njx7u6bJq0cAABARKBrxqwb861rFwqzSd8qXC937ZprxnkJC0rK6I5M881YsZ29N1ouOAvz6fKDhZU1kjLSzjF1nvsWvmHZMWoFx7Zuds/w8gKiNje8Zny9poyy83mb3i/86uS3ntLeW9daj1ZUvDafTHj+7PJv2MtqOfCWNFtWxdLFbMv0a4P7b16+fGF3YfF0sk993o4tLf5nQ4GPs87Vebl6ayHR4Z2/+KD8VwvNOIgT2BfardjV2dFy5qtMulCB/n3Gr1ashjLjefme5a881ErO1Hn0A0/T3kCenGT2lJ3K87elVzgbrrmL/gdufKs6eeZsXHbMz1p5PYaGhk7UnV6/cavCgJevXLMmZ92anHXLV65R/Cl/09av6k6j5hgAAKIJw2YsiqLYXzuf7Rlmm/GcvGl5J8leyZCbsZcrNWXTiH1cVOO99VJmvGFRbrH734lbG4hPS/uybX4OcZsPqxnTvbwLi7acZdlD+6ll6UT/3IKKKla38YnCLVIq5u69Sfw3761Spkz73mDX2erXCb8J6dEUxaacpfK6Xi+WbW2kmbGXgdN28tsCue9mmPHKskWer0/FduK7k6umzLPSnBLiGkJkr//UUuL5PK0iH9fZQ+8uJFaXcUBdeWWUG51dO4pLl32q1N9C+87e3r7e3r5C+07Fn5Z9umZHcemNzq6gVw4AACBSCN6Mt+Wclf5gvhkrfuoNmxmL4nV7lqyMU/O89ZKUGW/LrfH+d/Eeudf48qHZHtGs3GK3yIyp7WTUpUi4Tu55hXB9Ree3KIqi2LBK0Uns2PeKj53yZ4MHjm2VDTth+f4G9mw+MWzG86vkM2qkmrEo9jesWsL8tmCGGefWVuR6ms8Hu+V6g5oNnp9QZpcfIms2pOzJ6qxq+wqu7C4m5tyx5bLfG6rBibpT6wo2q6sm7CVl7hnsJWXqv64r2Hyi7lSw6wYAABAxGDTj/puXL5zOXU1UU1C/p5tlxiWrSGeyVUn1r2E0Y/H67mKG1CrMuFEagkr2KvmDObUXybHbwmjGrqoSeb16g0iIitJPdVZdRyqkH76943CRHdJbMh2BbjA1TEEgo9GJoujraN5uv3yhJG8r6VvkBo9cMyZqfujZTDHjE9KohcTYbdJXrG05Z6mx26Tsnd5OfJNUVGIoYS8hYHbsLFudnat237XrNx45VnvkWO3a9RvVf12dnbtjZ1mw6wYAABAxBPsE3rQNDuLZKbPMuKyi37FM/rU0//Vij0OE04ypp+gkuVSasTw6m3fstgGpt2x2+VVKqsJoxlSxZk6t/vNtGoYkKnaHHIziYul26SMv559SLd+/DZY61+fkBdHtZ+wJPMWYJ5H7BF7gZ4u/ZkwNuS1rqP/5pDKmMGP5a4+67SyorKF/I5KyRy7k1e1NujtJDYwY/NeMzLV5y1dmqrXYXlLmDqY3L1+Zmbk2L8hVAwAAiByCMuOpH5VXUFWA5pmxKF4/WC5X+nqf0AqrGVOp8Oqd0ozFhuJCz389Y7dJXVmbV50UI8KMfQ1xoDczOYwxWYVMSi2jOtnPDSYlTFtMfWDEjOdvX0/XW49kM9Y4OU0yY/Hk4nlEQyBFPOvodT/M2GcDNzSzT2wrVi/NWKUQ35qDh++4PN/7mNUUSzNW2VasDnLVAAAAIodAzXhewev5x1WvoTJqxuRwp2qXul6WIw/sMDXr6JWIM+PC9ReJkgD32G3yf8u/ELk3Y7Kk5OUNZNkE2WOXP3evYuyqCDTjguSs6gOqF/4ZNWPyUUuYsZYZT807SZ4hf7I3k/99vbhV5MSMM1ZnV3yx1z2Dlhl/sioryFUDAACIHAIw44L3yy+2s1/NatSMyTsry6Xaj34gD1+wYVHNTcuqKdhmXFYhki/12LDsGGFL7i7kSDBj9YtIFDuqWU1B1hMrH86j3v2hXEUA1RQhNONXNp1qYb8J2bAZk2cd72bcyi6CN8GM3VmS87PyUKvcTNzfh32bMT3ei5pwVFP4fALvk5WZ2evyg1w1AACAyMGfJ/AGbjQ7N+aQA6AWzLKfv8VYGnFP1X7qy4AZi+LF8h3yehdWbtkeUU/gubdTfoItcesJ6d+ezTtYPtWPdfnCsBlTG68xFhtr4XRxp4HSmu0bW7SWacETeLeuXdi9eTsxKHX+9Lzav7OSQJyNzHE5RFEMlRlH8RN4nl2Tv1sW22u8//a8Fqd1/XKGGVObpD8WG/2aSXK8kcDQegJP34xXZ+dKMwAAAIgC/B+bQvFCNfVLZUV6bCxqHFMC8o7o24xFsXk98UIs75s1wmDGN4uzfY7a5tlO+YH6JVu8w5l5NYucn7dR28hxi33GK4XnjW4wtXzzR21TDNnLflkaORgCOb4YiVxKHlVmfD4zZKO2eXZNHt4x/5UlXuX1PurHfN4g0kZtW7t+49FaTwKP1p5QD0+BUdsAACDKMDJqm/KtrepXT9Hjf21Xq7PoOltFGFtJmdyNp+lS9EdUd99A8H3vp1dK1NEyi48Z74L27ppVZqx408e8whzHbcZuttUuIt+YQPUuU6Ni+Q7qPeF+bHB77Xxi+bRYG0LnaCq/zqlf8kdXFFQx3o/d35RD9KmTfZNcm/GVqhLipCVHsjPPjFnvgpZ+lGA/iUu/6SNhYVmZqjRcFMVbjiryNTEmvemjU/2mj5qDh92v+XBHzcHDrDd9sPsAAAAA8IjB8YzbT1AitbD8C/qmII3k7xaRGXmHj1644a67cHV2nDywj3pzFfl2DD2Xol8JEVozHrjx7YWaUvq1yZpvh/Zup/TOWymkMbAsM2PV26HnbHxzk3w4bl27sNteRr8dmkopOYyx5pZTv2jLY7rpb/Cta61H9+17/yPiW1bo3g6t+Do3r3C9opiY/lYzNb288KtWTxl9/83LZ77KJEfvpp4Z5dSMb7dfcJbQL1g2/e3Q0q5R1RFz8sgfJTTGqFG9HXre1nl26a3mAzeanYWbdtBvh96wqIbd2W8I5tuhM1Znu18N7Y6M1dnkX9dv3HoCb4cGAIDowvA78OjXJivGM6bfjuYrDPz+Tg1vbKoZ+w66FIFtulTRZAL58JD5ZuwjiLQoekx9xNTl1USPKVVMop3qgap8YvwQ+Z0OBjY4YU7eK1sb9Edc1sWHySleQ60Yz1hRVOAjqH5xlcPphLRh/j+Bx2wIfmJsVHJF0YKx8aGZD8/JpkvW2c/JI4ustMxY9duUj2AWyQRGd/fNw8dqP1uXr64nVkd2bv7ho8e7u02QcgAAAJFDAG+HVviWoqZCWdypGWRHrCj67Balhjeek5cQLjNW3nc1TJfuG8tffNDH/AYJzIxFsb9pfUaBP5+aml5ZRQ5NTQ5jrDtqBNW1LL8Q0cAG00YeAD77OBXnpLKmQqHO2qEsH4oKM1Y/MGCqGSt+TiGqyTXNWBTF9hOLP/JLjqetPhTcyUMxPDzc3nHtyLHa9Zu2LluxWsuJbStWr9+45dDR4+3tHcPDw6atHgAAQAQQgBmraiqW7DlG3ZyuHy4khwVgxAu23ZSHiaIfBQPU8MYJ4TDjglmFZ5XdURqmSz85RD59GOBv0zSBmrEoiv3tB+zF0/XMr+A11dDU5CvufBVxUuXI3hcB+rnB+dNzjp4P1mz8yLCypqLYTp9+V77cN2u+7qbO35ZxRPkUI/dmPG/T/N1/V/XWm2rG9JlgYDTo3taS/G16l5F5m963n2GONxIMw8PD3d03v6o7vb24dF3BptXZuctXZi7NWLU0Y9UnKzNXZ+euK9i0vajkxMm6zq7uoSFoMQAARBsBmbGqB1f9a/itVmdhYfGbizdPk4Uj/6WPNr+ZtbfwqzbWiG/+PLNFDm8cMjOevzFpqT3NXvsl69EfzT5gcmheys+sNmNRFEXR1fl1TeneDzI2T/8wX7GbR1vVT+ZRT++9Vap8ak0Ba6Qt3Q2eVzB98ecfFB6sucB4KNA4fr63ZT9VU5F1VPmdp7ftaMXeDzI2Jy2Ue9mnfrgpKaN4TYXza9YA3pyasWenSk+r3tSjyqcJZkw+e5C/qMbY84u3Wp0l9l2zl8qXEWnjz2gMUG0KQ0NDNzq7TtSd2lFcmpmTZ1ux+pOVmdm5+faSshN1p250dqK2GAAAohWVGQMAAAAAADAigRkDAAAAAAAgijBjAAAAAAAA3PBuxsZGB9OpaMQGRwBIjhpjVb/6A4kAAAAAQB+YMTY4ckBy1MCMAQAAgPABM8YGRw5IjhqYMQAAABA+eDdjAAAAAAAAzAFmDAAAAAAAgCjCjAEAAAAAAHADMwYAAAAAAEAUYcYAAAAAAAC4gRkDAAAAAAAgijBjAAAAAAAA3MCMAQAAAAAAEEWYMQAAAAAAAG5gxgAAAAAAAIgizBgAAAAAAAA3MGMAAAAAAABEEWYMAAAAAACAG5gxAAAAAAAAoggzBgAAAAAAwI1sxucuXUUgEAgEAoFAIEZsUGZshZoDAAAAAAAQEcCMAwcZMwoyZhRkjHdwBI2CjAEArAVmHDjImFGQMaMgY7yDI2gUZAwAYC0w48BBxoyCjBkFGeMdHEGjIGMAAGuBGQcOMmYUZMwoyBjv4AgaBRkDAFgLzDhwkDGjIGNGQcZ4B0fQKMgYAMBaYMaBg4wZBRkzCjLGOziCRkHGAADWAjMOHGTMKMiYUZAx3sERNAoyBgCwFphx4CBjRkHGjIKM8Q6OoFGQMQCAtcCMAwcZMwoyZhRkjHdwBI2CjAEArAVmHDjImFGQMaMgY7yDI2gUZAwAYC0w48BBxoyCjBkFGeMdHEGjIGMAAGthmnFTxiRBmJTRRM1ZOUM9bWTDuoI3ZUwSZGZUhmlTmjImhW9lgUNnrCljEiNFlTMCzRsnSTCE8hyjzy9j51k05ifyoY4g4/AFdk2tnBG9F2OYMQDAWrT6jJUe3JQxKXovxQGivoLTVsc2v5GMMmMMCw5cjKMSlhkbSQ9zfihyGFGZMZ35ADscjJsxPwcdZgwAsBbtagpSUeDFLFRXcNXtip+7UXhgZYxOEMSYBmbMOz7MOMCDATMGAIBQoVdn7LUUhRdXzlD/hitNkyY3ZUyaNGPGpHCWFIQbVcZ0O4mJH1JZiSO/hMzI8M4rp10/w+RtT15RxH2Z8dXLTt7wWZkhzyg5Id5P6CdBK7GRjQEzZuyglKNJGU3SZ6mJivzzo0/c4K8ZK05vZiuW28SMGdQxVS1cebWhz4TIBmYMALAW/SfwKmcIwqRJpBfLV1/Cl4nbq/Tj4AgoJdDKGKv4k0gRnUJlMskab/lDvjIsL0kxZ2QdAUbGqI2UxFgzM95ZaYVWfoiVBHZiIx2/6ozlTKl2kGlOWjoFMQ4BflRTyOcncXqrW7H8L/lQsw8l62rDz7GFGQMArMXX2BSKMjjq8sr8Ra+S6MzgoH8iGHSv4F5Flm5V6mQwk0nmjX0z053T9wGyEq1nFmUJUDquqHFGsdxWPwm+ExuJGOwz1j0f2Pkh/sNPWjjC3yfwNM9P7wlMteZKvT5j31ebiAZmDACwFl9mrLieKq/s5KWcnsjPhThgfF/BvXc79tcEZjL9+HlUb07qphhxx4CZMca2+8yMKJLd80qxYyZBs6M0ojFaTeFX9zC9EHJyZH2Rigp8VVOw/sQ6gelriJ4Za19t+DznAQAgvARgxswHesjOvJFqxox+TG8W/O/F0VQZ3Qxz3Gfs3Waf5qp1RqkrBzT7jGHGzB/WK2d41CuyzpboIBAzRp8xAABYh0EzZv72qiiKG7FmTFV6ev+vrmylK2f1ygH9z7B+iW3EoHHPa8qYJEyaxOzH1MkM+aieYgatOuORacbMEgtKnSpnCDMyIMYhIRAz9r/OWDmRWWfMWXkbzBgAYC1GzVhkPeYs//g9KaOS8eN1lMLMGDmGhGpEaPWzeapksgXOV4bZdRcRdyPUvOdVzhCUFq+bGfLvRsamiAozZqB9Png+QM9ATHTDyD8wh4DMWKMVeydOyshQVx5NysiYwSq+UkyK/KMMMwYAWAveDh04yJhRkDGjhClj/HxV4A6c80ZBxgAA1gIzDhxkzCjImFHCkzGIcejAOW8UZAwAYC0w48BBxoyCjBkl5Bnj5jd2XsE5bxRkDABgLTDjwEHGjIKMGQUZ4x0cQaMgYwAAa4EZBw4yZhRkzCjIGO/gCBoFGQMAWAvMOHCQMaMgY0ZBxngHR9AoyBgAwFpgxoGDjBkFGTMKMsY7OIJGQcYAANYCMw4cZMwoyJhRkDHewRE0CjIGALAWmHHgIGNGQcaMgozxDo6gUZAxAIC1aJtxaSLrZVtCYqn7D4mlykU12GLV0xtssapZiSWrl8IRmldw9w7G2hr8XFCDLTaoRJQmcpJJOmMNtljldrvPIUXmShONJFN7fm7SRKA+xzTbZUDLb7DFenMlp4eYSJ2c5iWQvRNGDjI3MK+rqj1ltAVfuNuKSeeBcguDOBTBXs1gxgAAi9E3Y43rI8uBG2yx6vkZEl2aSEzh0VVktK7gpYlCbGKi33e6AG6K6hXykUZFxlSnmPdmT000fKMO8s4eUbDNOCR7xzyLgj85NdfFvFhwcRobQqPHQbH3gZqx4iOm5DCoM8yEEwZmDACwloDMmOHG6kuy3C1ETFZdN7mROgbsK7hnF/2/Q4xcM1adY6WJQqytlOyxDCQ9MOOAsNqMo+vASWj+Fqf+Thi8GZtyLYAZAwBGNgGasaKPWOXF3p8MlddJ1XW7gdYgrmBewaU9Zt4iyF9AY20N9M/K3k8pXJH4P/UjND2ZSzNWbLnnf9REKo2q9Emfi7XZpL44KmdEfYayXKBUXhqz51oQhERbaMzQb4ybscY5IrKzp1tNoTw56aNFLo7MEPUrv0bq2DuhaDJaK6C2y+ce6rYpxZmjvYzAd5d9XbUprpisC6WPHGqbcaytwVPHZvNsnGc2rX0j1+feNtU5wVqlaiP92Go/gBkDAKwlYDMm3FjnJzy/zJgPq1PDuoIT+8PsH5cnULcwyv207+JKSfZ8il8zVu27dINVF9xQBZrqL2aMzCp+2qDVT+EL1IIVIsGPGeufIxonn16dMXWAiOOizhmRccaR8GsnyKlaK6A/Sq5O8/zw0aZUrqd1IgW2u1rXVXpV6tOOTDrzDNT+6p1YKi2F/v6o137oc96nGdPVc4rVos8YAMAzQZgx2QWhdSlUXid92CJfMK7g6h5O3z27fpqx8uOK+zsXOVRnTCFhsm8oJ6rOHGKC4lRlu4fKjBV/YWaZ+VRpODFmxtrniN7JF4AZKzdCms3PX+J91hlrrkDLvHTOD7+/bWpmKZjd1byuUueW9tmsuRLNB1iZ57h2fpjXaF9mrPlbH8wYAMA9xsamUF0LlX0uStjXY7o/hBOrU+PbWsj/a95E/e0zJifRx4NjM5a3ndxzyodltaMTIedNsf+liYIQG6se5IKpfvInvAUXwdZ/mop/Y1NotEv5b7onn3EzZh8MsjzIhy6ydkLZd6uxAo2OfJ3zw4cZ663V59b43l2dHgfiYqjb6apTe6J9Jij2Wjs/qquH9ndun99PYMYAgCggqD5j33OxrpNkGaeBB9UiD2bVrObNSlNfjVRTsGWHZzOWNr40kXFbp3spGR1kWmYseORYmcvoMGPdagrWOaJ78gVmxtpW5qvyVrUT6p55/RVQf9ZsA4GZsVaXccC7q3tdlfZctzdWx4z1OyV0u8M9n1cvhnlO0KvU7DKGGQMA+McCMw5gLZGJPxmjf88Oos+YWYcSDWbs2WOG3brv2kQVqUa/HbPPWMoZq5wlSs1Y+xwJeZ8xE1Wpq/ZOlCYKykPlz2VB/s3KRy+zyX3GBnbXx1XCc46W+uozVp+Dxs2YnR/0GQMAAEWYzVi7wJNDfI3OK03Vv5moa5MV1YHMXj9SJbg2Y/cdOjExVnV7jk1MpAss9OqM2SeVlH16Nr+rufmqM9Y+R3RPPuNmrF6cXncrY7pWkZDm0dZcgXdbfdQZM9uUcql+1zAb2V2f11W5zznoOmPln5UGHlCdsUKvfXw3ghkDALgn3H3GVDce5S38QWVM0T8pQ99N5N3VuDORM3numYz+T+/vu1qVBhGKzgjQzCpI9W2ZUifyPNL6ukXk0x8zpo4Gc8PCi/E+Y51zROPkM27GrFWxfhnR1CTmTmgfYGJ+xSKV34I0zw/2MWV+l1BnKZjd9eO6qiidpr+OaV4kjZlxYPlRz0aeI6xOfpgxAIB7rK0z5ra7WBRFOmOaYsy87yhqEj23HPJu5J2DvL+R5Y6e+kBmR2fkonHPU/yU7obVXUumT1V6Qf2XVcTqlxlTa1G9diTsGB3PWPMcEdknny8zpk5ORg8royGTm6DXu834k1wcobcCaj/U37sZ0zXbFKPlaJUNB7q7fl1X6R2nl6p1sI2asaiTH2J91HjGir8oap7IXVd9IPBWAzMGAFiLthkDXyBjRuEvY1Z/6eAvY4AGR9AoyBgAwFpgxoGDjBkl4jOm6Pq3+vk7DjIGfIAjaBRkDABgLTDjwEHGjMJDxqhfxy0vUuEhY0APHEGjIGMAAGuBGQcOMmYUHjM2bCmNrVes3QAQJDiCfiK1OB6vEgCAaAJmHDjImFH4ypjizj1EcC9cOJvbwrYuEApwBNWQTUntx3xdJQAA0QfMOHCQMaNwlDGFEN+7d+/u3bt3794dHBwcCCP1TZfDuTpgOjiCTAYHB90NShJlqcVxdJUAAEQlMOPAQcaMwkvGSC12O7FbiF0u1507d27fvn379u2+sHCqsTk8KwIhAkdQgbv53Llzx+VySYrs9mN3o2tsvWL1BQAAMKKBGQcOMmYUXjKm0GK3E9++fbu3t7enp6e7u7urq6szLNQ6zoVnRSBE4Agq6Orq6u7u7unp6e3tvX37ttuPSTmGGQMArIUyYwQC0dh6pbH1SkPLt87mNmfzNwIAwGyOnKw/drrhyzPnTzY0nT7Xcubi353N3zib2xpavnU3QMuvAwgEYsSGoGPNAIxApA5jd2+xIAhW97IBEFUIgnDp0qW2traOjo7Ozs5bt27dvn3b3XMs1VRYfRkAAIxcYMYAULhvzPfu3RscHHS5XGE2Y6v3HoAQIpmx0+m8ePHipUuXrl696pZjl8s1ODh47949mDEAwFpgxgBQkB3Gt2/fhhkDYBaSGdfW1jocjvPnz1+6dKmjo6Orq0vRbWz1lgIARi4wYwAoJDN2uVy9vb0wYwDMQjLjmpqa48ePOxyOixcvtrW1Xb9+vbe31+VywYwBAJYDMwaAwm3Gg4ODd+7c6enpgRkDYBaSGe/ataumpqa2ttbpdLq7jXt6eu7cuTM4OAgzBgBYC8wYAAq3GbtLKbq7u2HGAJiFZMZ2u3337t2HDx92OBzNzc1Xr17t7u52F1TAjAEA1oJR2xAIKhpbrzib2+qbLp8+1/LlmfMwYwDMQjLjZSuzstZtKNhmt5fv+eLAsQO1p788c/70uZb6psvO5jaM2oZAICwMyoxdA/cQCFPi3KWrt/pcPEZP753unr4bXT0d125cbrsKM458mttvfvz5yQf+sHHHsa//0XPH6s0BmkhmvDY3b8u2z8vKKw4cPHLKUX/+YvPltqsd127c6Orp7unr6b3js53ye4XhOpB2pH0kBMwYEZLgtyXDjPmipTi7fQwAACAASURBVOPmR4V1z3/0xezcQ8+k7thU3djefdvqjQJsJDP+LCd305ZtpWW79h84XHf6zLkLX8OMuQikHWkfCQEzRoQk+G3JMGNeGLh77+//6Fm0rW768uq3cg6u2VU3+W87XlpUvK7S0d7dZ/XWAQaSGWdl52zcvLWktLxm/6GTpxwwY14CaUfaR0LAjBEhCX5bMsyYC1yD9y5e6V5W7HhuQeVfcg/l7nWkFR1/r6DmP97IS5izreALx41brrtDQ1ZvJqCQzDgz67MNm7bsLCmDGfMVSDvSPhICZowISfDbkmHGkU//3XtNV7tXlp8dl7Tl48IvJS2ekbn75YyyiX/KjktetfPYhX/cRFlFZAEz5j2QdqR9JATMGBGS4Lclw4wjn2Pnry4srIt9szirwpFZWZdWdPzdgv0zMit/90npC8tKfpNW9OTs9eOenbe15qzVWwooYMa8B9KOtI+EgBkjQhL8tmSYceTz5Pu7fvrX8v/3t4pX1xz8Y0b1b5Z88bP5u/7zrzsn/sX+6Kzt/+uNz7//35v/x28yH0taZfWWAgqYMe+BtCPtIyFgxoiQBL8tGWYc+SSkV//X3yoe+dO2H/33poeT1j/4h7X/9lLW/3x+1Xd/nTH6l8v++VnbqF8s/efJtv96O9/qLQUUMGPeA2lH2kdCwIwRIQl+WzLMOPKpPHtl4Y5TP3nz85/8ectP/rQh9tW82P/OiU3JjE1c+ePpK348PePH0zMeS1m5vqbR6i0FFDBj3gNpR9pHQsCMESGJCGrJxSmCkFLk9/wwYy5ovHoz60CTTqw99PWN3n6rNxNQRKUZO9LjBEGYmO60fEvCEFamvd42URBUF/OSJEEQ4mwOqzMTtWlXhMH7KacBM0aEJPhtyTBjAEJENJqxMy1OSEoeEbpgcdo9ZhyXVq+aCDMOW8CMEYiAg9+WDDMGIEREoRm7Ly/1tomCkFRs9caEPiw346TkFLJ73pEel5ScAjMOX8CMEYiAI0JbsqfXwYPnCltvmyjEpRXLf0q0w4wBMJ/oM+OiZHeHpTMtThCSS27J15m4tPQUzwVF8rZ620QhJS09TmBUBfAR1ptxcUmS7MHOtLi4tPQUOsPKK3xRMnFo3NUvxH+5iAg522/1EfdT90ku9d9L/1XdT3n8xggzRoQkIrEl95UkEa3UkR5HtHD57nU6LU4Qkj+HGQNgNlFnxiVJXv2Sryd9iopYQprd03nTskhJu8eMnWlxRJ7jbI5iyYw1rvBUN6czLY4/V4uMs911q89PM5bvp1S74CdgxoiQRES2ZCf1ixvdkqVrZc+ZpT8RJn5cR5mxhTIBQNQQbWas+j3KcxlRFFdoXGp4jAgwY5cjPc6Tw+KUienOW5IZa13hSWOut03kUNQi4mzv8+TcHzNmnPyWb7mRgBkjQhKR2JLl/0oQv/54my7MGIAQEWVmTP9Mr+gbJm3Aa2Z8WkKkpF1SruIUd56Lkr3/JeuM1Vd4ooKCx1IKi9OuCD+rKdTTLd9yIwEzRoQkIrElu8f3kVqpRkuGGQMQIqLLjN3XEwUsaYAZmxJyZ6S71LgkSSqWIKopGFf4PqmrmMtSCovTrgiYMQIRcFjbkh3pcXIvgnTdZHQtwIwBCB/RZMaMAkpJ3Rg/KDONmb+IDDN2FSXHpaV7eo59X+H7XJ7y4nQuSyksTrvW/RRmjEAYDYvvW8Q1Uf7Fk7xQkkNjwowBCAtRZMb0YBSKiXpP4PFnCZGSdsKMqberkGbMvML3yR/hsZTC4rT3adxPicdPPSc5zBiB0A+r71uuomSp0kzuRZAnCnFp9eyfOGHGAISI6DFjjWfpHOlxghCXtosetU0xmhtvlhApaVc+4+jNJNFVzL7C6x4yLiIy76fkGHlJxSVJMGMEQj8sb8kBB/NNHxbKBABRQ/SYsX7waQP+RESnXT/4HJWC+7TzGTBjREiC35YMMwYgRMCMeY+ITrtuONLjyJfn8RX8pp3TgBkjQhL8tmSYMQAhAmbMe0R02vUOh8D1G6S5TDvPATNGhCT4bckwYwBCxEgx4+gNpB1pHwkBM0aEJPhtyTBjAEIEzJj3QNqR9pEQMGNESILflgwzBiBEwIx5D6QdaR8JATNGhCT4bckwYwBCBMyY90DakfaREDBjREiC35YcUjPu6elZvHhxcnLySy+9lJycvHjx4p6eHrMWDkCEAzPmPZB2pH0kBMwYEZLgtyWbbsbnaz/flz9zg+0Pn3z81vz58+fMmZOdlb150+bs7Ow5c+bMnz9/2cK31i76Q1nWzHO1pYMDd4LWDwAiFJgx74G0I+0jIWDGiJAEvy3ZdDP+fMnTlauf/ejNJ37x1MT4+Pjf/va3b7/99ty5c99+++0XXnghPj7+Z09OTP3D9zb89fubF794u+dG0PoBQIQCM+Y9kHakfSQEzBgRkjjILQcOHNi/f39VVdWePXvKy8uDN+Pl04UThc9vXzf7bRZvvfXWrFmzchc/W7xo7EfT/q3nxpWg9QOACEUy49TU1AULFixbtiw7O3vjxo07duwoLy/fs2dPVVXV/v37Dxw4YPVlAAAwcqHMGIFANLZecTa31TddPtXYXOs4Z4oZ71817ppztWL6sCgODQ3dvXu3v7+/6aht29x/WfgyzBhEM5IZf7w0Y0VmTu6GrYU7d1VUHdp/vK7Wce5UY3N902Vnc1tj6xXLrwMIBGLEBmXGlvdgI6IjLLz1Bs/w8PC9e/cGBgb6+vrcd/FQmDGpxbdv375Ul12a/u8hM+PSREEQEktDsGQD9LcdtD33fqW5C+07v33m9DUNQS+nNFEQYm3BLwfoIplxXl7e9u3bv/jii9ra2nPnzn3zzTednZ19fX0DAwP37t0bHh62eksBACMXmDHC5Dh36aqFJ3TwmG7Gy/6oNGP3KgYHB10uV19vX8/NnuavsnemPxLdZtxgizV/I8wyWphxWDDLjHm/yHAK0m4JSHv4gRkjTA7em7HpZmz7g3Ao59EbFwvcCx8eHr53925zc/ORI0fq6+sdDsfpU6eP7NtYvPaN7EUzTtedaGxsbGxsPFl3smx3hTm7BDMO23KALjBjrkHaLQFpDz8wY4TJwXszNt2M038vHM1/qqu1aHh4eGho6N7duwP9/dXV1VlZWcc02L9//7r8/N+/8opJ+0SZsVsCjxyxPf/9UYIgxIx+bGZRU39/2+53Hh8zShCEUd9/3nakQxRFr8wWNRXNfGx0jCDEjP7h87aDbf3ScvvbDmZOd39KGDXm8emZns9517KkaMVTo2OEmNGP/HCcIMPU444jmdMfHzc6RnAv7BFpI+S/KlbUYIuVlxlra2C4Nz2lv6nonWcecS9FiBk97vGZRU39ZFIavCuzPf+Id2WP0LsMggFmzDVIuyUg7eEHZowwOXhvxqabcdrLwpH1T3U2Fw0NDQ16C4v37du3deuWobuDojgsiuJg763+Lnkt1679Y9vnxU/8YkqwO+NBZcb3jRkzatyT72TZC2y/+1GMIMT+4hdjRj06M8tuz3rn8TGCEDO1sEv0iOWYMWNixj23oMA775gZlV2iKIpiR2niGEGI+dHvbAV2e9Y7T46LEYQxiaUd0lpiYmLG/GJBgT3rw8+KDtlXTxsvCE/81W63H2tVbmB/7dyHBWHUo9NtBXa7PevDX/4oRhBins5pIVc07sl3srwripm0oqGrfo/9r08Iwvhpq+32PfVdPsy4Y/OUGO9C7AW21x4fIwjCmFk1/d7N9Zixe6cff81WYPfu8sML6kw6EiMcmDHXIO2WgLSHH5gxwuTgvRmbbsYfvyQcynvq+tf2wcHBfperr6+vp6dnz549Bes+u956ZujuoCiKjWs+OTozWfpIR0f31s/Ln/rlL4PcFy8qMxbue7nI2yNbO3e8IAixS+o9HaNdm6cIQsyMStHbKyvZrtdgH15QJ4r9+/58H/kxUew7kvqwZJGliYIgjE89Ive26lVT1Pz1e6PHJJZ2SRO6CqfGeOeuW/CwIDw8t1ZaVMfmKaNGP7LouKjo69U145Z1U8aMogom6hY8LH1YXk6DLVYQXi6SV5b/bMzoxz85o5tg4B8wY65B2i0BaQ8//ptxSZIQl1Yf4MSiZO+PnnE2h3+C5UiPI35/Va/F76i3TQzm4wiDwXszNt2MP3pBOJj71LUL2113XH29fTdv3uzsvLF7d+XKv7xR9YfnOpy1dYv+eiZt4fW6EwMDAydPnjx27NipU87CHRVPTn7OpH1SmzGhfg22WEF4ZEm9NHf9kkc8czfYYpXltw22WEGYtOKCWDPrPkGYsrmL+JvYkvmEIIyfW6tcpfxJv+uMG2yxnsVfWDFJuwbYfzPW+LB7a4nldBVOjRFifjQj/3hzF4ooTIY24/kv3n//uHHjxo8f/+CDM0skM27KSZhAkJDboloO7xcZk6hOZWZH/qtEajXzD/SntaZLIO2iKPpKe0tuAiuNxGTFn5D2CMRfMy5KZuipnxMd6XFeIXamxQlCcokvu3KmxVEO7bbkpOKAXA1mHN7gvRmbbsYLpwr71z51tbHw1q3em93dN67fuNbRUbFrV85HCx2L5x9779W6he+3HzkgiuLdu3ebmpoaGxvPnft6e9Gup3452ZxdYpgxYYsq/ZV1kiWW3o8TWslaUQBm3N/17fnjFfYC2+xpz/xwdIyneFisnBGj/TmjZtz3j8una+z2rA9fneIpW3b/lVhOf33Oc+NipFrk6bYdX6HO2CQIM353ytix97+Y7u4zLpz54EOTP3W6zXjfexMS1mqKhyiKcAVRFD1GpaVo1amED1enyjO25CZ4/92SmyDPozWdBGkXfaS9JTdB/iOZdi2dRtojE3/MuCSJ0XFrbKIstcUpgpBSpKtWRcmMrmVCrw0GzDi8wXszNt2M5/9G2Lt60mXH+q6uruvXr3e0t1/59tvysrJt27b1d3UenZl8ve5Ez9cXr9edkD5y/frNHcXlT//q50HvjRuzzThmRqW5ZkzY6Kgx3/ve41Nmz5oy3rNVugNrGDDjjn3vPCo9fPe9R56Z9mHiEywzFkVRFPsuHd9he837uF7MJFs95NgEZDN+d/LYsY+9XeCtpji6dPJDk9c4+wYGBppyfj0htUp/ObxfZIJG6mfUUDRKykj/qk4l7Uv+n9Z0CqTdR9oJz1X8tyU3gZVRpD1C8cOMi1OE5BKlX/o/USmmkig70+KEielO1Rppk2ZGvW0iUWkhL4Se7lmIewPSU5TTEaEJ3pux6Wb8twShbPG4c/vnf3up8ZvWxr9/7Wy5UL+z6PPNBfl3rrXfG3D1d14/k7bw6Mzk4eFhl8vlcrna269vt5f/9BfPmrRPQZnx0znfEIuSJmlWU7gLMwyZcUvmE4Jw35Rcp1y/UDvXa8aMaooLKyaNGjNt61WWGVObK/c3e8qiU6sv9Xn/2LV5iqYZS/R3fbkwVhDum1XD2nBgDM06Y8KM9703IWFts/5yeL/IBEt16oTUaqWH6SDNqfyI18W0ptMg7T7Srm3G7C5jpD1S8bvOmNnz6s9EZSexL/H13cVLLcGRHudZPsPIhaRiry57+5vl+RGhCd6bselmPOc5YedH4/Z9+r1dn/z7/vwp1XlT9uZOyfvkTxmvvlL2f//3N1/urUn8zZm0hf1dnS6Xq7q6uqKiora2dtvnhbH/5ycm7VNQZkw+Zde3789jBOGJzBbtJ/DGvHOItRZdM1aWPnsW5dkq5RN4/fVLpC2mjPabnKcF4b4/7/PO2FH08n0CuStkNXV/W/6UGLUZ3yp9bdzoMfIyRLEj/1mYsUlomTFRTbHnvQkTEhKkmkzWr8twBTd+m7Hcg6xUL+//tabTIO2iqJ92rWqK6lTmWY20RyrWmDGrq5j8uK651jsdzNVpfVBSZJ1tRpgXvDdj0824cNkf17zx8JLf/9OiF//po99/d8Hvvjv/xe9++Odf5q/8tNW+bd9LzzZmr+j5+qIoivfu3bt27drVq1ebm5vXrl07ZuwYk/YpODP2DqdWsOC5cTFEZYHPUdtoD3Z769NzC9SjtrXkPB0jCO5h4+wFtumPjY4ZNWqUtFX0imY+OkoeOq5m1n2C8HBiln1PfZd3OWMe947uNmrSJO+u9NfMGiMI7uHn7Pasd575/qiYUaNi1H3GXZUzxgjCqEenfJglDSAXM2kFXgJiBkwz3rvo6Qcf/Nmnpzr7+voGLmT/egLRZ6zxIzTvFxlz8M+MVbKmVLGE3BbN6TRIuyj6TjvjiTrqGBBnNdIeqfDYZywtVjlyhTwCBvmQn4/qDoTJwXszNt2MW84ePFK6Zs/Ghbs3LKzMX7hr/cLyvIVrVyxct27deYdj7/uzzx3c/y3N2bNnP/3003Hjxpm0T0GZceySopznfzg6RhBGjXl85vbzffJyFW/6mJl/inrTh6KHuGPfO4+NjhHcQ1so6Dhic6/D/QaO/K/a9s26zzusski+6SNm9A+Jl4D01+d4Xlgyo5Jajme20kRpK/qbimY+Lr+/Y8Gu8xdznvaOMkf2Pfe37f5QeiGIap9BEKjNuOiDn44fP35modaobehF08YPM3aPiKBdyYo+Y+PopZ188FGZe8VsSHskE3oz1qwz1gqtGaTB4NzP+XmXydgG6UFArSoLmHEIg/dmbLoZMzlw4MDHH3/8ySefrGGxfPny119/feLEiaav1xiMUdsACByFGae/eP+4cT9dtFdnPGO4gjZ+dV7SM6DOOHh00q5Im+acSHukE3ozNj42BXMYCrk+uDiF+mtxisZox971wozDG7w347CZ8auvvvqDH/zggQce+Nd//dd/UfHQ9x568qdPmr5eY8CMgamQZrz6tcfuv//FNYo3fex5Z8KE96ooM2a4Be8XGXPQNWONMcAwNkXQBGDGjL5h/aFCKJD28BMGMyZHYTNjPGNShT2DUcSl1aucm6o/hhmHL3hvxuExYz6AGQNTkc04PekxctQ2uc/4Qs6vJ6RWec1YYxRY3i8y5uD/IAkERCkrJc9a00mQdlH0v5pCmVLKgBlP6SHtEUQ4zPgWuwJYa9Q21UfI2gnln+LS6ok+aVbxMcw4zMF7M4YZy8CMgalIZpyeFDt27Nj75XfgPfjQQw/9pcJdTbFPfnkb3gqmg1LR5P8rXrimGOZDfkSM9jCt6RJIuyjqpV0URerVg9TZqzUdaY9E/H87NALhV/DejGHGAIQIzfGMNeuM2fB+kQkVLbmpfo1vHCBIOxukPeqAGSNMDt6bMcwYgBABMw4t1an+vfkjQJB2Nkh71AEzRpgcvDdjmDEAIQJmHFKqUzV+jzcJpJ0J0h59wIwRJgfvzRhmDECIgBlzDdJuCUh7+IEZI0wO3psxzBiAEAEz5hqk3RKQ9vADM0aYHLw3Y5gxACECZsw1SLslIO3hB2aMMDl4b8YwYwBCBMyYa5B2S0Daww/MGGFy8N6MYcYAhAiYMdcg7ZaAtIcfmDHC5OC9GcOMAQgRMGOuQdotAWkPPzBjhMnBezOGGQMQImDGXIO0WwLSHn5gxgiTg/dmDDMGIETAjLkGabcEpD38wIwRJgfvzRhmDECIgBlzDdJuCUh7+IEZI0wO3psxzBiAEAEz5hqk3RKQ9vBDmTECYUpwfTo1tl5xNrfVN10+1dhc6zgHMwbALCQz/nhpxorMnNwNWwt37qqoOrT/eF2t49ypxub6psvO5rbG1ivRfZHhN5B2pH0kBPqMEeaHVfddU2D2GQMAzCL4PmMAAAgdMGOEyXGO859+YMYAhBRUU3AK0m4JSHv4gRkjTA7emzHMGICQAjPmFKTdEpD28AMzRpgcvDdjmDEAIQVmzClIuyUg7eEHZowwOXhvxjBjAEIKzJhTkHZLQNrDD8wYYXLw3oxhxgCEFJgxpyDtloC0hx//zbgkSYhLq/c1sd42USCIszm8fypKZkxkh2chKUXKdfnxWeVy1NusM39Jkf7MWgs0uqI+lyM9jkyToc8GEuQWSrtpfLP9Cd6bMcwYgJAimXH6i/ePGzdu/PjxD/5s6SnCjKtSJ3hIyG1hNVLeLzJhoSU3gZnGaim7EyakVousPyDtgaOVdjfVqaqpSHsE4q8ZFyUzBI4xsTiFKa+O9DjvdGdanCAkl/jSONWS3RNDZ8b+zGySGTvS4yjvL04RBCGp2GRDNSEnAQXvzRhmDEBIcZvx6tceu/8/3i6qrT13bu/Snz340KwStxk35fx6QsLaFlH0SAYlbx54v8iEnpbcBNm0qlOlf1enEj5MTBdbchO8/0baA0Yr7R6qU5X+i7RHJv6YcUkSo2uTOdHlSI9jWW9JEml+xSmq/mC1vQlJySkT053kkpOS2dptjgWGz4ydaXFKDy5KNij9AQfM2BcwYwBCiiAIeXnvThk79sV0bzVF4cyHHppV0dc3MLDnvQkTUqu81RTVqUxZ4P0iE3II4aL+q5A1eTY60Uh7YGilXRSJrmHSjJH2CMUPMy5OEZJLlEbFnNjnKkoWSJ3VsDFJlJ1pcVrzC0nFJUmyLDrT4uLS0gkzpss2PAupt00UUtI8hQopReR6i1MEQeqrdqbJtQwpRfTSiEUxlx+Xlp6iLAuhdlC1cJYZM/aanoG1BGK69PVDkVvpv8xU7KJ305/NpvPgT8c2780YZgxASBEEIS896bGxj71dINUZF8566KG/VPQNXMj+9YRfr22W6ozZssD7RSbk6CkaazblDEh7QOikvTp1Qmq1r+OCtEcKftcZM/saWco7MS5OKVjKTmK6C5m9LiGp2JkW5/1UvW1inM0hl2pQS5CLE9wap7ZGzwIJBfTOI5d5UPuiu3x1WYj8WY2Fq79skMKt1mLGEsjpxObpmbFWKqSCY1+bzVi4bznmvRnDjAEIKYIg5L07eezYKelfqMx4zzsTJrxXNQwzDhIfP+uLiunKNCPtgeEr7QoVRtojFVPNuN42kbS9ettEt1CyzFiv09RrYI70OI+HFadMTHfKRcz1TgdzMxTq5p5eTG+VlqZTymhk+aRuGvkOQD2EJymsP5vn4xD4t6l9fmy2dASNBO/NGGYMQEjRMuNfrXEyzVgtdbxfZMKD/qNdKolTKhrSHhh6affDjJH2SMDcPmNFeAUrwD5jb81Gn6so2ftfsgvW2/PqrmxQap93OYoyAHpQCK3SAp3l62mr5sJ92KQ87IbmErSKs/XM2Nd0PzZbHlFE/6FJmDEAwD/QZxx6yCft3KMlUFlUTkLnpTn4SDv6jHkhLGasWWfsy4z73KXGJUlS3zNRTSGo+z41fv0nn2/TrHBQVVNoLN+XGQf2IJ3PJYTajH1stvTApe8uZN6bMcwYgJAioM441CjSRguZeoQEFLyag27aGVOQ9kjFVDNm9A27/xrQ2BTFrlt9rqLkuLR0T8+xbMaMzmNdHSTrN6SZdXbQ6PKpsoSABrjwuYRAqin8NWO/Ntvrx6gzBgAEg4CxKUKNtqJpjA2GQRLMwKgZI+2Rirl9xvR4ZIRfEr22/o5n7F6O+4d+WWolM6b0TqeawvNfR3qc9yPOtDhiWAl5UYT26S3fjyfwGAunQjUONJkTrSWo5iGexvMWbLjHl/D9JUH19J7GShXfYfwb8Y33ZgwzBiCkCIKQl5c3f8pY5njG+96bgPGMg0Zj3GKtQSqoElekPWA0h4v2oMo/0h6ZmF5NIf3srhygl1Wxqj9qm2oVCtWWK4A1yjbUo5KRUksWEJPL9FY2ay5fGrWNPXQae+GKUJT20knQWgJr1DbZ3QXBPdSdry8J8m76s9nqYmtdLYYZRyKHV0yL1+K9QvZnCt+Lj5+24rD0cc+/O785tmnuu5mHw7btIPoQ1O/Am1nYyXwHHksURLiCXxDvuiNf56FCynE10m4CjLTLsL6ZIO0RiP9vh0Yg/Arem3G0mvHk6W99wGBtFfszWmZMTAcgICQz/kJ+Au+bTsKMh+Un8NjwfpHhFKTdEpD28AMzRpgcvDfjaDVjgzqrZcAwY6DHd0Y9sH17sf48MGNOQdotAWkPPzBjhMnBezMeqWZ8rnLFmy88+0x8/DPPTl+48xyrz5iqyoAeAwbfGfXAoz/+z6ysdTrzwIw5BWm3BKQ9/MCMESYH7814RJrx1dJ5v4qPf2bKn9PXbVm34t3fPzt9+jS1GTcfLNryUUp8/JTZa7ZsKTrYHK7tB/zwnVEPfGfUA08+OVlHjmHGnIK0WwLSHn5gxgiTg/dmHK1mrPcA3snMlPj4X71XeM7zgasHl0+LR50xMI7bjL8z6oHHH//Zpk3sxzthxpyCtFsC0h5+YMYIk4P3ZhytZsx+Am9tVWdnZ3P+G/HxU5Z8QXykOf8NmDEwjmTG9333oYd/8BPmPDBjTkHaLQFpDz8wY4TJwXszjlYz1tHZwyumxce/kU9VR5TOmwwzBoaRzPjZyb9taDjHnAdmzClIuyUg7eEHZowwOXhvxjDjzs7Ozs4vlkyBGQPDuLX4d79L2bO3WmsemDGnIO2WgLSHH5gxwuTgvRmPQDNGNQUwi++MemDq1D/u3FmuMw/MmFOQdktA2sMPzBhhcvDejEegGXc6cl97Jn7yX7bIT+CtmP4MzBgYB+MZRzFIuyUg7eEHZowwOXhvxtFqxhrvwHM/g+dW4WemvLIwa8uWrLm//zk5ZDFlxqXzJsfH//a9LIzaBgIFZswpSLslIO3hB2aMMDl4b8bRasb647Z1dn5zbNPcpF/9PD4+/ue/Spq7ZfVf2GZ89eBnb079eXx8/DPv77BshwDXwIw5BWm3BKQ9/MCMESYH7804Cs0YgEgCZswpSLslIO3hhzJjBMKU4Pp0amy94mxuq2+6fKqxudZxDmYMgLkIgvDx0owVmTm5G7YW7txVUXVo//G6Wse5U43N9U2Xnc1tja1Xovsiw28g7Uj7SAjKjF0D9xCI4EMURcu3IeC403+3785AT++dG109V9v/ATMGwFwEQfgsJ3fL1sKyXZWHDh9zcdCY1AAAAG9JREFU1Du/brl0tf0fN7p6enrv9N0ZuNN/N7ovMvwG0o60j4SAGSNMDvcXXMs3I+CAGQMQUoI3Y94vMpwG0o60j5CAGSNMDt6bMcwYgJACM+Y0kHakfYQEzBhhcvDejGHGAIQUmDGngbQj7SMk/j+U4YVZfhECDgAAAABJRU5ErkJggg==" width="640" /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Selecting the menu option then runs the Groovy script business rule. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0ZeFbU6YZxpqTpvIURDumkpMS303ftCdLGK0pEn9QFDl5mzIPtfqIr6Uiwe7FcJdOfvZuJ_uW2moEcDkwjQv_nTyr8iwYY-IN9VenvFAx6dKOifj_jaWjSekaj9KrShPZffq7N_7jX4w/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="119" data-original-width="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0ZeFbU6YZxpqTpvIURDumkpMS303ftCdLGK0pEn9QFDl5mzIPtfqIr6Uiwe7FcJdOfvZuJ_uW2moEcDkwjQv_nTyr8iwYY-IN9VenvFAx6dKOifj_jaWjSekaj9KrShPZffq7N_7jX4w/s1600/image029.png" /></a></div>
<br />
Once the data load rule completes, the data will have been loaded and viewable in the form. <br />
<br />
<div style="text-align: center;">
<img alt="" height="134" src="data:image/png;base64,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" width="640" /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
To provide an example of the data load rule failing, I updated the script to include an invalid URL.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-HbikIuOle8Hde1prCFD7PF2Lb_HR1h2hkzCmRfsElyb8iU8zZntu1wE05tClgRC6Cl-JUbIJ3-emcAzdn5tAyFQOsKDUNnCx2_XmldCVp4b0wH8nr4lzkGwOwXwp64lIhHMrgYCpSFg/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="103" data-original-width="485" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-HbikIuOle8Hde1prCFD7PF2Lb_HR1h2hkzCmRfsElyb8iU8zZntu1wE05tClgRC6Cl-JUbIJ3-emcAzdn5tAyFQOsKDUNnCx2_XmldCVp4b0wH8nr4lzkGwOwXwp64lIhHMrgYCpSFg/s1600/image031.png" /></a></div>
<br />
I am going to leave it there for today, in the next post I will go through connecting to an external Web service which will return exchange rates, these will then be loaded directly to planning.
</div>
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com3tag:blogger.com,1999:blog-6575283218005807475.post-9863454347368100602019-06-10T00:48:00.000-07:002019-06-10T11:17:49.804-07:00EPM Cloud Data Management - New Data Export to File functionality<div dir="ltr" style="text-align: left;" trbidi="on">
The 19.06 EPM Cloud release brought new functionality into Data Management to export data from a source application to a file. No doubt you are probably aware that this could already be achieved using a custom application, though this new option provides many enhancements over the custom application and will end up replacing it. The Cloud Readiness What’s New document provides a good explanation:<br />
<br />
<i><b class="yellow">“The Data Export to File option in Data Management enables you to export data from an EPM application to a data file. You can use the data file to load data into an ERP application or an external system. The new Data Export to File option provides several enhancements over the existing Custom Application option and will provide performance improvement when using the Simple workflow mode option.</b></i><br />
<i><b><br /></b></i>
<i><b class="yellow">Both the Data Export to File option and custom target application options are supported in this release. Eventually, the Data Export to File option will supersede the custom target application option due to its enhanced functions and capabilities.</b></i><br />
<i><b><br /></b></i>
<i><b class="yellow">Starting with this release, you can migrate your existing custom target applications to Data Export to File application using a new Upgrade Custom Application script. The new script is available under the System Maintenance and it can be run for an individual or all scripts”</b></i><br />
<br />
This new functionality certainly sounds promising as custom applications have always been lacking in functionality and with no custom scripting in the Cloud, the output file is not always in the desired format. I know I have had issues with extracting data and loading to target systems because of the limited features in Data Management.<br />
<br />
In this post I am going to look at the new functionality and the aim is to extract data from a source planning BSO cube and generate an export file.<br />
<br />
To keep things simple, I will be using the sample Vision application which has the following dimensions.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0L0JY9i9rtXe8080INtGE2CAFT0B7zziMsWvG68tWKNqDk4jxvSwjv1lhmvK1wM-gIM99MSVOh51k6GYy42hePWfFqmt6fPyteu34cD1uSB-dQcZU4dBXtU95q5-6tVx1rQkuKPFfLRU/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="281" data-original-width="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0L0JY9i9rtXe8080INtGE2CAFT0B7zziMsWvG68tWKNqDk4jxvSwjv1lhmvK1wM-gIM99MSVOh51k6GYy42hePWfFqmt6fPyteu34cD1uSB-dQcZU4dBXtU95q5-6tVx1rQkuKPFfLRU/s1600/image001.png" /></a></div>
<br />
To start off with the “Data Export to File” option, a CSV file is required which defines the target columns and the order they will be in the export file.<br />
<br />
I generated a file with the columns that I wanted in the final data export file. There is no need to include an amount column as that will be automatically generated.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfnU9X8RgSiX9oFDaGMLpiEMNtNqqKaWy8nmJxOaGEwGGWYHXZsmoQpyXyLd6ozkJ3T0c3hNmFI2Ac3JFI6ua1PvpzEiqPC2cD4upEXYdmGlonHlYfvVUxE17pj2fw5DciSet3CfxcwqI/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="47" data-original-width="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfnU9X8RgSiX9oFDaGMLpiEMNtNqqKaWy8nmJxOaGEwGGWYHXZsmoQpyXyLd6ozkJ3T0c3hNmFI2Ac3JFI6ua1PvpzEiqPC2cD4upEXYdmGlonHlYfvVUxE17pj2fw5DciSet3CfxcwqI/s1600/image002.png" /></a></div>
<br />
Just as with a custom application, a new target application will need to be created. The filename will define the target application name in Data Management. I named the file “DATA_EXPORT.csv” which means the target application will be “DATA_EXPORT”.<br />
<br />
A new local target application can be added.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK3i8zGJi_l7xES_lKP5pvZHRvPi1eG5ZPD0Tz-RRycUZIK3XfIqhhFyzbGJwhNact2RowsXz0S9tJKyVcY9l5PXvHmzzFEK9PN6DubfSNg469oeSuHHf99DPgaQD_U1HxNV32aXtDsb8/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="116" data-original-width="187" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK3i8zGJi_l7xES_lKP5pvZHRvPi1eG5ZPD0Tz-RRycUZIK3XfIqhhFyzbGJwhNact2RowsXz0S9tJKyVcY9l5PXvHmzzFEK9PN6DubfSNg469oeSuHHf99DPgaQD_U1HxNV32aXtDsb8/s1600/image003.png" /></a></div>
<br />
There is now an additional option available to be selected called “Data Export to File”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj7ktjxILMg1S_MkB_yLSjT5vrx3TuJzt9KqhEV1Njl7IQJYg7-tS2Dv1MXKRu72t8bp9a-omLETzJZVrXZiqLbrjkAgBexU6yeZVxOP_USVIyIFezuAhWn-K0-hMt9En9BqGXKrGs-ys/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="197" data-original-width="287" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj7ktjxILMg1S_MkB_yLSjT5vrx3TuJzt9KqhEV1Njl7IQJYg7-tS2Dv1MXKRu72t8bp9a-omLETzJZVrXZiqLbrjkAgBexU6yeZVxOP_USVIyIFezuAhWn-K0-hMt9En9BqGXKrGs-ys/s1600/image004.png" /></a></div>
<br />
As soon as “Data Export to File” is selected, the file selection window is displayed. The file containing the target columns and order can be uploaded and selected.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtGVpl4D6PclxuORx1AGlnGzNH9Pm_1IO9m3TnnuO1XRurRzRzOyhpj4dHHSqw59vI8msmLmphyphenhyphen0S3p5hpQER2iB7FKueeSmLpfA3aejFXxYqYI61m2aqY5eaZDoGXmE3ZEUr7EtuBUVU/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="116" data-original-width="471" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtGVpl4D6PclxuORx1AGlnGzNH9Pm_1IO9m3TnnuO1XRurRzRzOyhpj4dHHSqw59vI8msmLmphyphenhyphen0S3p5hpQER2iB7FKueeSmLpfA3aejFXxYqYI61m2aqY5eaZDoGXmE3ZEUr7EtuBUVU/s1600/image005.png" /></a></div>
<br />
Once the file has been selected, the application name will be generated and it is possible to add a prefix. If you want to keep the target name the same as an existing application you could add a prefix. I covered the ability to recreate multiple versions of the same application with a prefix in a previous <b><a href="http://john-goodwin.blogspot.com/2017/11/fdmeedata-management-common-questions.html">post</a></b>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3v_8eZF8AnU7fI9VP9Adv_tlHeBnGAvdXhoWMufyD5_fkFI4Lff-pF71hzYNGVm0NPwdyyUzRY62O7nyGFoRA0nTYsAJ5g3IsXk0IEwJpx7LBqIiqebtKXxXLM1YRNAcMPdBhp1VH_RE/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="195" data-original-width="472" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3v_8eZF8AnU7fI9VP9Adv_tlHeBnGAvdXhoWMufyD5_fkFI4Lff-pF71hzYNGVm0NPwdyyUzRY62O7nyGFoRA0nTYsAJ5g3IsXk0IEwJpx7LBqIiqebtKXxXLM1YRNAcMPdBhp1VH_RE/s1600/image006.png" /></a></div>
<br />
I will leave the prefix as I am happy with name generated from the filename.<br />
<br />
The new application will now be created with a type of “Data Target”.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8bm-cue5osIFR_pstBTW9sS15xWSV9yHEehUNmYOyvw_D-oJt2hNK6KtxP6iJgukvXOy9PatM2GFrIdXto862RPAUYTKW_lm0958MVpHO_fSf1G-s5UkxgTVPyiMrZGA9R0q__OoQUr8/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="228" data-original-width="755" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8bm-cue5osIFR_pstBTW9sS15xWSV9yHEehUNmYOyvw_D-oJt2hNK6KtxP6iJgukvXOy9PatM2GFrIdXto862RPAUYTKW_lm0958MVpHO_fSf1G-s5UkxgTVPyiMrZGA9R0q__OoQUr8/s640/image007.png" width="640" /></a></div>
<br />
The dimension names and order are built from the columns in the file that was uploaded. The first column in the file will be defined with the “ACCOUNT” data table column name. This doesn’t mean the column has to be the account dimension, it is just one column must be defined against the “ACCOUNT” data table column.<br />
<br />
For each of the columns the target dimension class will be set as generic and assigned a UD data table column name. The column order will define the order of the output file. If any of these settings are not what is required, they can be updated.<br />
<br />
I am going to update Year and Period dimension classes so that they will be driven from the POV.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDgiYwFGaILsxN_HsMEoxH3nFFyG7_nRq1ELbhZoNc7vsmDZ48tH9azKbxBG2DTth-rI1W5j9_CZTSX8OpUH6MKRAzs7cUZbFBIU-clPEvVB3dnhbixA_dYkuoa3pwgh7xHU_GkBJo3mY/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="234" data-original-width="484" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDgiYwFGaILsxN_HsMEoxH3nFFyG7_nRq1ELbhZoNc7vsmDZ48tH9azKbxBG2DTth-rI1W5j9_CZTSX8OpUH6MKRAzs7cUZbFBIU-clPEvVB3dnhbixA_dYkuoa3pwgh7xHU_GkBJo3mY/s1600/image008.png" /></a></div>
<br />
There are several different application options available. Some of these options I will go through later in the blog to demonstrate how they operate, many of the options can also be set at data load rule level.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpX-TQ17eCqhZhiyH7-5y2PJfQUxbRIephzEj6tbGCfDrpxO2-FkjXgcEdo5hgJHf1yd_bWpiYCYIbtmUecBob-PsjIyA-5kliqyE7cprXiXTBhwvRmdvOwfHUYfVZ800oE7adf5CUI84/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="324" data-original-width="477" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpX-TQ17eCqhZhiyH7-5y2PJfQUxbRIephzEj6tbGCfDrpxO2-FkjXgcEdo5hgJHf1yd_bWpiYCYIbtmUecBob-PsjIyA-5kliqyE7cprXiXTBhwvRmdvOwfHUYfVZ800oE7adf5CUI84/s1600/image009.png" /></a></div>
<br />
You will notice the workflow mode is available, and by default it is set as simple. I covered the different workflow modes in my previous blog <b><a href="http://john-goodwin.blogspot.com/2019/05/epm-cloud-data-management-workflow-modes.html">post</a></b> so have a read if you are unclear what the options mean.<br />
<br />
The simple mode makes sense as the idea is to export data out of the source application and create an output file in the quickest way possible, with the simple mode it doesn’t need to go through the full process of archiving the data.<br />
<br />
The “End of Line Character” option depends on what type of system the output file is going to be loaded to. For demo purposes I am going to set this to “Windows”.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheBy9KZHZgSdCztsc7IB0C41UQXUMcJQxWC64XCbV7phULNlLH8gqitKglypWAO4SXBBxtJpWXh9IJtJnTiLrXNUfUfkygyc3tuLVdh_0r5eEM5mC-E6XSh54W3TuQ09eNm9C-ssEXjOE/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="85" data-original-width="135" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheBy9KZHZgSdCztsc7IB0C41UQXUMcJQxWC64XCbV7phULNlLH8gqitKglypWAO4SXBBxtJpWXh9IJtJnTiLrXNUfUfkygyc3tuLVdh_0r5eEM5mC-E6XSh54W3TuQ09eNm9C-ssEXjOE/s1600/image010.png" /></a></div>
<br />
For now, I am going to leave the remaining properties as default.<br />
<br />
The next steps in building an integration are the same as you would usually follow. This can be done either in the Data Management standard interface or through the Data Integration simplified interface. I will show screenshots of both where possible. I did cover Data Integration in the simplified interface in a previous <b><a href="http://john-goodwin.blogspot.com/2018/07/epm-cloud-data-integration-comes-to.html">post</a></b>.<br />
<br />
An import format can be defined, selecting the source application to extract data from and the newly created application as the target.<br />
<br />
The source application dimensions can be mapped to the target output file.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNVRmYKYSE5dgSjC16mB2fgq4lS-_FHrBSJR995Nm3LH3pOoC3qaEbq_QyvsDtAr2d97YCh87xAJQvdFMNok4Kx7bEPMpkyKppsI1btnmC1yA3xFqM85264nvKvtJ0gpGciLXojbYRSxE/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="305" data-original-width="770" height="253" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNVRmYKYSE5dgSjC16mB2fgq4lS-_FHrBSJR995Nm3LH3pOoC3qaEbq_QyvsDtAr2d97YCh87xAJQvdFMNok4Kx7bEPMpkyKppsI1btnmC1yA3xFqM85264nvKvtJ0gpGciLXojbYRSxE/s640/image011.png" width="640" /></a></div>
<br />
A new location is created where the import format is selected.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6yUlK_-lix8n1tiXkSPzQOmOoDiG6hfRLXOIbSwuYH4MdQBMf2igxiYEknTxMSyJ2-hQuEZ5JBG6-WqpXKGcZzB741fHcnvcGpUJQbBZjzitaYLhTfVERezCnqQnDbR8lTGmCJeZ1zck/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="185" data-original-width="765" height="154" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6yUlK_-lix8n1tiXkSPzQOmOoDiG6hfRLXOIbSwuYH4MdQBMf2igxiYEknTxMSyJ2-hQuEZ5JBG6-WqpXKGcZzB741fHcnvcGpUJQbBZjzitaYLhTfVERezCnqQnDbR8lTGmCJeZ1zck/s640/image012.png" width="640" /></a></div>
<br />
The equivalent in the simplified interface would be the source, target and location are defined in the general section. The name of the integration is basically what would be the data load rule name in Data Management.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0bNXtS78h0EHV5HhyphenhyphentP97rWYLzE0ErtL6ODueGTr-9NTol2Tfjr_SKFaK8UU7HaWgvDnNtvjbgKY6yNxMHllbzieOKxmWnXesXNNKSQwfhH3nOGLerqRRWORfiIX-5mtIQh4JMYLy9ZM/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="624" data-original-width="1317" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0bNXtS78h0EHV5HhyphenhyphentP97rWYLzE0ErtL6ODueGTr-9NTol2Tfjr_SKFaK8UU7HaWgvDnNtvjbgKY6yNxMHllbzieOKxmWnXesXNNKSQwfhH3nOGLerqRRWORfiIX-5mtIQh4JMYLy9ZM/s640/image013.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
The import format is part of map dimensions. As I want to keep this simple and don’t require data load mapping between source and target, I have added target expressions.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_4lKtXsmnWNfmGad7yX4U_CjcJgay1g_up2cDgEe9PnY0H293LdUx6hOAZzxlbu5JBlxU9ruDbdvY9d_0j1-pzdY8p8JaO8diTly875yUK7q8sj-Eam2z2OssKd4PP09lurqwxXEiAW0/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="516" data-original-width="1444" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_4lKtXsmnWNfmGad7yX4U_CjcJgay1g_up2cDgEe9PnY0H293LdUx6hOAZzxlbu5JBlxU9ruDbdvY9d_0j1-pzdY8p8JaO8diTly875yUK7q8sj-Eam2z2OssKd4PP09lurqwxXEiAW0/s640/image015.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
The target expression will copy the source value into the target. Once again, I covered expressions in detail in a prior <b><a href="http://john-goodwin.blogspot.com/2018/11/new-functionality-was-added-in-epm.html">blog</a></b>.<br />
<br />
Since I wrote the blog post, source expressions have been added, which pretty much replicate many of the target expressions.<br />
<br />
Now on to creating the data load rule where the source plan type is selected. Source filters are added, which define the slice of data to extract; for any dimensions not included in the source filter the level 0 members will be extracted.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-xkEtDjzS0l66MxwXf_HYxxv_gpzSwwwT5dOvcceJ0PVGcwq-YLt2amdONV4u29_MXpsCz_2uakUL9nA0Y3vi-S-Z0CG3qpto3pW96qjzSZBJGZmNLq2SrOuNwxRihDVPMkvo1XNdakA/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="290" data-original-width="711" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-xkEtDjzS0l66MxwXf_HYxxv_gpzSwwwT5dOvcceJ0PVGcwq-YLt2amdONV4u29_MXpsCz_2uakUL9nA0Y3vi-S-Z0CG3qpto3pW96qjzSZBJGZmNLq2SrOuNwxRihDVPMkvo1XNdakA/s1600/image017.png" /></a></div>
<br />
As I mentioned earlier target options can also be defined at either application or data load rule level. The default values in the rule will be picked up from the application level assigned values.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNMnMkHVV9_QJ_Z3KTSoDjR2Rd4QAhS6lpTPGpvaVrfDFHlsn39WNQX1lIKaY1hL04eGE62YMFKkn7777-akYEk_UFRHzcqVsk62hyphenhyphenSGUY1a-YwFeNHggHXE62LNF_DADQKQhWlVFIY8g/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="250" data-original-width="399" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNMnMkHVV9_QJ_Z3KTSoDjR2Rd4QAhS6lpTPGpvaVrfDFHlsn39WNQX1lIKaY1hL04eGE62YMFKkn7777-akYEk_UFRHzcqVsk62hyphenhyphenSGUY1a-YwFeNHggHXE62LNF_DADQKQhWlVFIY8g/s1600/image018.png" /></a></div>
<br />
The exception for now is that the workflow mode can only be set at application level. I will leave the remaining options as default for now.<br />
<br />
In Data Integration in the simplified interface these are set in the options section.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDVRZ2vApeE4QKxyU747Du2jhRZanGomNfloFAt9bnnAfq1guyB0g-z7J5OKK5qYhTXE7ipjgTQV_obBju2UKBC6uuh-dJl4ojH5YpEuK3KPfylBy21PGMXoIpHdzlHvivh801yLnnt-M/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="641" data-original-width="1441" height="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDVRZ2vApeE4QKxyU747Du2jhRZanGomNfloFAt9bnnAfq1guyB0g-z7J5OKK5qYhTXE7ipjgTQV_obBju2UKBC6uuh-dJl4ojH5YpEuK3KPfylBy21PGMXoIpHdzlHvivh801yLnnt-M/s640/image019.png" width="640" /></a></div>
<br />
Now we are ready to run the integration, which will extract data from the source application and create a data export file.<br />
<br />
With the new functionality there are no changes in the way the data is extracted from the source application.<br />
<br />
For a BSO source application this is achieved using the DATEXPORT command. This can be viewed in the process log.<br />
<br />
<b class="yellow">FIX (@Relative("Account",0),@Relative("Entity",0),"BaseData","May",@Relative("Product",0),"Actual","Working","FY19")</b><br />
<b class="yellow">DATAEXPORT "File" "," "/u03/inbox/data/Vision_Plan1_382.txt" "#";</b><br />
<b class="yellow">ENDFIX</b><br />
<br />
For an ASO source application the extracted is carried out using MDX<br />
<br />
<b class="yellow">INFO [AIF]: Extract Script (MDX): SELECT {[Period].[May]} ON COLUMNS,NON EMPTY {CROSSJOIN({[Version].[Working]},CROSSJOIN({Descendants([Entity].[Entity],[Entity].Levels(0))},CROSSJOIN({[Year].[FY19]},CROSSJOIN({Descendants([Channel].[Channel],[Channel].Levels(0))},CROSSJOIN({Descendants([Account].[Account],[Account].Levels(0))},CROSSJOIN({[Scenario].[Actual]},{Descendants([Product].[Product],[Product].Levels(0))}))))))} ON ROWS FROM BVision.Vis1ASO</b><br />
<br />
These methods of extracting data will mean that only numerical data can be extracted from the source, maybe extracting all data types will be available in a future release.<br />
<br />
With the workflow mode set as simple there will be no data records displayed in the workbench.<br />
<br />
Data Management will look like the following:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFCiE3i5JNNckqF9tkuQTVEvpR-Zcc0Dp8ba7KuK6f3f35PSP7wMOqSOHaGR1eVCQMFFsbKe1JVfWq2N8gRchTL47UxMuLa9EKHsKHRgAS_iW8kjnMI6umdi0NNNDcyYUDRm8zO35WdDo/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="200" data-original-width="647" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFCiE3i5JNNckqF9tkuQTVEvpR-Zcc0Dp8ba7KuK6f3f35PSP7wMOqSOHaGR1eVCQMFFsbKe1JVfWq2N8gRchTL47UxMuLa9EKHsKHRgAS_iW8kjnMI6umdi0NNNDcyYUDRm8zO35WdDo/s1600/image021.png" /></a></div>
<br />
In Data Integration the fish are no more, and the workbench will look something similar to:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBJb87p_3Yp94eltrPZXLoUXerxDK7igtAJMQeTDBzisrTCocPgDXqyGP_DJxpvjAd80gbMEw_Ljl6tMqwCYOG7VRNGRySME9Fbk25YU4_L-qgmFvjdLrajOi7jEBK1gC2RZL4F78oCwE/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="272" data-original-width="1212" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBJb87p_3Yp94eltrPZXLoUXerxDK7igtAJMQeTDBzisrTCocPgDXqyGP_DJxpvjAd80gbMEw_Ljl6tMqwCYOG7VRNGRySME9Fbk25YU4_L-qgmFvjdLrajOi7jEBK1gC2RZL4F78oCwE/s640/image022.png" width="640" /></a></div>
<br />
In process details the output file can be downloaded,<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNiWpeUH4k1EYSNSEHTMvTQuRAXw0tAuPjHN9H9XbFtc2vsIVQdOb7o8sGpGitTuChGXySyomTdnIWcAFHdgAnXdO5wfPzv8f9E97kYamJjNfBzrEHai9MU5k4XbdgXTSdTs4-UL-ljoI/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="126" data-original-width="772" height="104" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNiWpeUH4k1EYSNSEHTMvTQuRAXw0tAuPjHN9H9XbFtc2vsIVQdOb7o8sGpGitTuChGXySyomTdnIWcAFHdgAnXdO5wfPzv8f9E97kYamJjNfBzrEHai9MU5k4XbdgXTSdTs4-UL-ljoI/s640/image024.png" width="640" /></a></div>
<br />
or through Data Integration which also highlights the location of the file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSVWcjKxymHWZBOlJpobbidDy_p24e1OWMzn8vHKCb12ObXHFoS8gh-NigSCdZvO1bZeM8sU958X1KQniAnNDCMj-y5gPzkHjS6hCYrV9U_0OyTVbXR1G36BXzj51nNLn3zeE653Yc-iI/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="168" data-original-width="714" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSVWcjKxymHWZBOlJpobbidDy_p24e1OWMzn8vHKCb12ObXHFoS8gh-NigSCdZvO1bZeM8sU958X1KQniAnNDCMj-y5gPzkHjS6hCYrV9U_0OyTVbXR1G36BXzj51nNLn3zeE653Yc-iI/s1600/image025.png" /></a></div>
<br />
By default, the output file will be created in the outbox directory with the format:<br />
<br />
<b class="yellow"><Target Application Name>_<process id="">.dat</process></b><br />
<br />
The file can be downloaded through the UI or alternatively using EPM Automate or the REST API. The issue with EPM Automate is if you run the data load rule it will not return the process ID, so it is not easy to know what the filename is going to be. This is not a problem with the REST API as the process ID is returned in the response when running a rule. I wrote a post about how this can be achieved, which you can read all about <b><a href="http://john-goodwin.blogspot.com/2018/01/epm-cloud-capturing-rejections-in-data.html">here</a></b>.<br />
<br />
A workaround for EPM Automate is to set a static filename in the options of the data load rule or target application.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinpcgRXbJ_HN2K8A-5D34kXGMQpHwRGKtQgtGu_MbjA-prWH98e0hZHWJeLdvQTLPxFueKtNJLWl3GdGaEqJYpE3m80f7bu_E6hhQ7Rh4b0HQ5sVaK8w0BW2pdbjBA3VioGZFSH570ofg/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="189" data-original-width="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinpcgRXbJ_HN2K8A-5D34kXGMQpHwRGKtQgtGu_MbjA-prWH98e0hZHWJeLdvQTLPxFueKtNJLWl3GdGaEqJYpE3m80f7bu_E6hhQ7Rh4b0HQ5sVaK8w0BW2pdbjBA3VioGZFSH570ofg/s1600/image026.png" /></a></div>
<br />
If the export is run again the file is still generated in the outbox but an additional copy is created in the standard repository directory.<br />
<br />
With the logging level increased to 5 you will be able to view the output files and locations in the process log.<br />
<br />
<b class="yellow">INFO [AIF]: Name of the output data file: /u03/inbox/outbox/DATA_EXPORT_384.dat</b><br />
<b class="yellow">DEBUG [AIF]: The output data file has been staged: /u03/lcm/DATA_EXPORT.csv</b><br />
<br />
The file is accessible through the inbox/outbox explorer.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxbsO95ePFE7RRV6lQhQW2mve130yOLQuRZAW_iI387OS_fcj3HN7MuucAJ6x4fkhMyS4VxQ9kEDLz9w7V7RctoEyvLfLk7KgbT5hvAmShdPF8fu8C4dK2UTUC9WZpAwcUVKYV4lQuG_o/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="172" data-original-width="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxbsO95ePFE7RRV6lQhQW2mve130yOLQuRZAW_iI387OS_fcj3HN7MuucAJ6x4fkhMyS4VxQ9kEDLz9w7V7RctoEyvLfLk7KgbT5hvAmShdPF8fu8C4dK2UTUC9WZpAwcUVKYV4lQuG_o/s1600/image027.png" /></a></div>
<br />
The file can be simply downloaded with EPM Automate.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH0mcaN-cB3V3RoO6osMFTq-9yhm44gGfYDu9tY_6gXh43J9gP_w9ZIEMtEK3oKLlg2HX1oYg67bbRO4Shw9q_PS7qoMFIflJV2Uftj7jD8EiPCbTzVzaz8AogTxl_c6_L1Oikt02arJk/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="64" data-original-width="614" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH0mcaN-cB3V3RoO6osMFTq-9yhm44gGfYDu9tY_6gXh43J9gP_w9ZIEMtEK3oKLlg2HX1oYg67bbRO4Shw9q_PS7qoMFIflJV2Uftj7jD8EiPCbTzVzaz8AogTxl_c6_L1Oikt02arJk/s1600/image028.png" /></a></div>
<br />
<b>Please Note:</b> If you have the workflow mode set as simple then you will need to run the full import and export process together. If you run an import then an export, the output file will not contain data records. Basically if you are using the simple workflow mode then don't execute from the workbench.<br />
<br />
The output file columns are the same order that was defined in the target application column order.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYPccX3XnmPPfpSI6qvPQ9pHZWbfNfqa5fivfGIxiGysDZRnsAwD3AdmuchShyphenhyphenxkYN1VCUKSbKI5p3mTawuJ5cK3mtr07XXKRJ1du6JGXQyoLaB69TyUtJXYrZd6aOPFCRSE9baQV7bIA/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="223" data-original-width="414" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYPccX3XnmPPfpSI6qvPQ9pHZWbfNfqa5fivfGIxiGysDZRnsAwD3AdmuchShyphenhyphenxkYN1VCUKSbKI5p3mTawuJ5cK3mtr07XXKRJ1du6JGXQyoLaB69TyUtJXYrZd6aOPFCRSE9baQV7bIA/s1600/image029.png" /></a></div>
<br />
The header column names match those defined in the target application, this is much better than the custom application method where the column names would be data column names, for example.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfFzmklbp6TNiisgn3YWSOO59zEW8JbDOV74DeHX6hSbhQYd0_sWrV0DWm_3guOYw2B1Si_mcb31EAPwj1US1IS6pA52eHrEniKbMZS8LMuk8DKNH2yRz4GtJchfYi_Dft0ZdO3RgznkA/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="90" data-original-width="421" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfFzmklbp6TNiisgn3YWSOO59zEW8JbDOV74DeHX6hSbhQYd0_sWrV0DWm_3guOYw2B1Si_mcb31EAPwj1US1IS6pA52eHrEniKbMZS8LMuk8DKNH2yRz4GtJchfYi_Dft0ZdO3RgznkA/s1600/image030.png" /></a></div>
<br />
With custom application there was no ability to remove the header.<br />
<br />
Now with the new method it is possible to remove the header by setting the “Include Header” value to “No” in the load rule.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgigJ7K2aXO0YQnSIwmnUwh95IXwDRbSjOEFDHwP6kCqxdFtAVdnzk6UW9IxcEj_m5ZxhIRY6kdKe3j7WSpq-KzXnVB8-yu9o2SYB2Su_ay0I6do705Co8Oj-JSH__WzVFDYNAIBmTBCgI/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="169" data-original-width="424" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgigJ7K2aXO0YQnSIwmnUwh95IXwDRbSjOEFDHwP6kCqxdFtAVdnzk6UW9IxcEj_m5ZxhIRY6kdKe3j7WSpq-KzXnVB8-yu9o2SYB2Su_ay0I6do705Co8Oj-JSH__WzVFDYNAIBmTBCgI/s1600/image031.png" /></a></div>
<br />
If the export is run again the header is not included.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilGAk5sjF06ewET1NBvvPmJrqs-KpyhADLNdntl7Bc6voQ3eviY337UX1OreLSxh1-VLhmYMGG7r4wKls4cmUPVvsoMLS83qetIfU0VqvOUDnnU4MmPOSnRE5bYdDUIQkTT_nvc5b3pPA/s1600/image032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="163" data-original-width="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilGAk5sjF06ewET1NBvvPmJrqs-KpyhADLNdntl7Bc6voQ3eviY337UX1OreLSxh1-VLhmYMGG7r4wKls4cmUPVvsoMLS83qetIfU0VqvOUDnnU4MmPOSnRE5bYdDUIQkTT_nvc5b3pPA/s1600/image032.png" /></a></div>
<br />
If you want to sort the data by column then the “Sort Data” option can set to “Yes”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmDvWzEse0K_ZCuf8y5ln8dH4yv5FReb8S2NW9bafsgRGQmGgzPqrXVDdJf4jXcoTKkmJw8XCz_LMrgQIa6MrAp8Ukhw41jh-YGxjIcwEUdtpge7JJ4Ez1NzHlupMtfmVcxJ2_ctkyR4U/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="21" data-original-width="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmDvWzEse0K_ZCuf8y5ln8dH4yv5FReb8S2NW9bafsgRGQmGgzPqrXVDdJf4jXcoTKkmJw8XCz_LMrgQIa6MrAp8Ukhw41jh-YGxjIcwEUdtpge7JJ4Ez1NzHlupMtfmVcxJ2_ctkyR4U/s1600/image033.png" /></a></div>
<br />
After running the export again, each column has been sorted.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBxJWEDN8DPfAGZlA_MJWdwmGGjlK5DOW4EdddXGf3QmCmYBX3LrpmOJqyIbMjTYGliW76nfwyMf2tsQLirOqYRkRam71hQ-HAlBTeDUOZmtjQMppYM3431B1QTMSN0K8uhPlNJZepKZ4/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="185" data-original-width="413" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBxJWEDN8DPfAGZlA_MJWdwmGGjlK5DOW4EdddXGf3QmCmYBX3LrpmOJqyIbMjTYGliW76nfwyMf2tsQLirOqYRkRam71hQ-HAlBTeDUOZmtjQMppYM3431B1QTMSN0K8uhPlNJZepKZ4/s1600/image034.png" /></a></div>
<br />
In the process log, the SQL that is generated to create the output file includes an “order by” clause.<br />
<br />
There is an option to accumulate the data which will group the data when generating the output file.<br />
<br />
For example, if I update the target expression from copy source to conditional.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPyTJWt3ljTBiI1wdsrBeNjwuDwWGPrxSVMxqtf-fAkofbP26PwV2NCItWubMImJFJUbH5087Ahi5GgTf-_lwjWzFaNLTOU7LcE4GnDFkfLtvENsVzefLYupYNuqw8DkQRE8bGuuzxtx8/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="184" data-original-width="662" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPyTJWt3ljTBiI1wdsrBeNjwuDwWGPrxSVMxqtf-fAkofbP26PwV2NCItWubMImJFJUbH5087Ahi5GgTf-_lwjWzFaNLTOU7LcE4GnDFkfLtvENsVzefLYupYNuqw8DkQRE8bGuuzxtx8/s1600/image035.png" /></a></div>
<br />
The entity dimension is assigned to UD1 in the target application. The above conditional statement will map entities 110 and 111 to 100.<br />
<br />
In the workbench there will separate records for the source entities that have been mapped to a single entity.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvKVHrhjUH20s7WXrYBIeUkUbOt9r_uVdDkRN5QlcCKM4X3C5b1YApUlJV4GLNXUlvSw0Npuu5Z26sk8_MEbTuZqhiwXNJeK3zcRMTChhP-mJZlZBy9DviO1B0cEAvX0hlDwxvtC1KW70/s1600/image036.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="56" data-original-width="471" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvKVHrhjUH20s7WXrYBIeUkUbOt9r_uVdDkRN5QlcCKM4X3C5b1YApUlJV4GLNXUlvSw0Npuu5Z26sk8_MEbTuZqhiwXNJeK3zcRMTChhP-mJZlZBy9DviO1B0cEAvX0hlDwxvtC1KW70/s1600/image036.png" /></a></div>
<br />
If the “Accumulate Data” option is set to “No”<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCV6fEP7AaKKXFe-99T-_fQ6Ej6KeEF3HpgNGMnf3bgE4uXlyXUtFlV8HSXSkhYYyvU8xb5HA4mPCSDsKsb1LUrEwofnrmVUWDH9L03cQDB3pZHiLfbRBFJ6Gh8oJlvHJmStJHqaZkwqc/s1600/image037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="23" data-original-width="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCV6fEP7AaKKXFe-99T-_fQ6Ej6KeEF3HpgNGMnf3bgE4uXlyXUtFlV8HSXSkhYYyvU8xb5HA4mPCSDsKsb1LUrEwofnrmVUWDH9L03cQDB3pZHiLfbRBFJ6Gh8oJlvHJmStJHqaZkwqc/s1600/image037.png" /></a></div>
<br />
separate records will be created in the output file (I have included the header again).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7b1r-RUZiq0DEEfNdTymKHfiwR2ERWeN-uoqIoXUD2fF0TBRQVrI0ysXPYxA5i-nxyc7_lb7ulujol4cme6tXlFn3GSLFtlZwfDZu-kMcLepWbd0mmenLNdkOF2jFMA6VqZ9j1_vNH84/s1600/image038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="85" data-original-width="411" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7b1r-RUZiq0DEEfNdTymKHfiwR2ERWeN-uoqIoXUD2fF0TBRQVrI0ysXPYxA5i-nxyc7_lb7ulujol4cme6tXlFn3GSLFtlZwfDZu-kMcLepWbd0mmenLNdkOF2jFMA6VqZ9j1_vNH84/s1600/image038.png" /></a></div>
<br />
If the “Accumulate Data” option is set to “Yes”<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-2aM1ciJBMlrEvO8RZSzArbr09lggGF60P1hTvj57LxD9SIjAgWuOIUlfMEWBBv0YDnMWMVMHQJRuL-capCKigPiDSkc62JoUKMJMAVVzIvBcG3enXM04AlOD4KEfsiSrQIJ6nIluEms/s1600/image039.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="22" data-original-width="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-2aM1ciJBMlrEvO8RZSzArbr09lggGF60P1hTvj57LxD9SIjAgWuOIUlfMEWBBv0YDnMWMVMHQJRuL-capCKigPiDSkc62JoUKMJMAVVzIvBcG3enXM04AlOD4KEfsiSrQIJ6nIluEms/s1600/image039.png" /></a></div>
<br />
the data in the output file will be grouped and the amount summed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg85Nvsgki1FRV_wPeAKS_ploeTdku3_5elgrOL-92lQ4W3jJ4gguMmXTtUqV0uQ1v3IycEO5BQ-sbWCLxw6RsRSDwZEnuqDhyphenhyphenMGK5vHKdvEed7pXVM1pkBlTydD4Tww2mtMK5DmsUBUpI/s1600/image040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="59" data-original-width="414" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg85Nvsgki1FRV_wPeAKS_ploeTdku3_5elgrOL-92lQ4W3jJ4gguMmXTtUqV0uQ1v3IycEO5BQ-sbWCLxw6RsRSDwZEnuqDhyphenhyphenMGK5vHKdvEed7pXVM1pkBlTydD4Tww2mtMK5DmsUBUpI/s1600/image040.png" /></a></div>
<br />
In the process log there will be a “group by” clause included in the SQL statement that generates the records for the output file.<br />
<br />
Moving on to the next option: “Export Attribute Columns” which is useful for assigning static values. These are not to be confused with planning attributes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7I2LtvBfVzmljHE23vgZ2l0KDcSpBUeNI7QCqxMLwOO4rRuLD0mnMfexF-kBBwMplVxoSaYPwepxhAMU3PAEdfPinvAtuvBRrh88xiEAMsYrkNaRI8baI4tOWFfl-uH6PFYGpW1tNcIs/s1600/image037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="20" data-original-width="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7I2LtvBfVzmljHE23vgZ2l0KDcSpBUeNI7QCqxMLwOO4rRuLD0mnMfexF-kBBwMplVxoSaYPwepxhAMU3PAEdfPinvAtuvBRrh88xiEAMsYrkNaRI8baI4tOWFfl-uH6PFYGpW1tNcIs/s1600/image037.png" /></a></div>
<br />
For example, in the target application I added a new dimension, set it as an attribute dimension class and assigned it to the “ATTR1” data table column name. The column order for the output file was set to 6.<br />
<br />
<img alt="" height="187" src="data:image/png;base64,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" width="640" /> <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
In the import format the target was mapped and a constant value applied to the source.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<img alt="" height="193" src="data:image/png;base64,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" width="640" /> <br />
<br />
In the data load rule “Export Attribute Columns” was set to “Yes”. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkOfKNSPp-zDOmVOv85zvQeAtFAAsS5Ql7nnS2FKVOsmuQEiDoDIO6BRBYgd7aRwVPVrY13kEkKw4IksVFiaKhty76t6Hv-rMQzary4KnqhY7ERGwDrwwSnskQys5_azdhe6Y6RZ2WiOU/s1600/image040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="26" data-original-width="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkOfKNSPp-zDOmVOv85zvQeAtFAAsS5Ql7nnS2FKVOsmuQEiDoDIO6BRBYgd7aRwVPVrY13kEkKw4IksVFiaKhty76t6Hv-rMQzary4KnqhY7ERGwDrwwSnskQys5_azdhe6Y6RZ2WiOU/s1600/image040.png" /></a></div>
<br />
The workbench confirms the attribute is being populated. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfgodWEmoZBWRovXYMFYUSMU8drmvsG5b_DQXlXzuyN3OMWFQkSyPGrQ54cTaZzlUWDv90xOXHOu4WtuNwaGJPq08rSgCMtahnS9g52GE4yE5dQuYHdurny-EYXnl2DumzQ3rMS9qXTC0/s1600/image041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="212" data-original-width="640" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfgodWEmoZBWRovXYMFYUSMU8drmvsG5b_DQXlXzuyN3OMWFQkSyPGrQ54cTaZzlUWDv90xOXHOu4WtuNwaGJPq08rSgCMtahnS9g52GE4yE5dQuYHdurny-EYXnl2DumzQ3rMS9qXTC0/s640/image041.png" width="640" /></a></div>
<br />
After creating the data file again, the new attribute column was included.<br />
<br />
<div style="text-align: center;">
<img alt="" height="96" src="data:image/png;base64,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" width="400" /></div>
<br />
Going back to before adding the attribute, if the order of the columns in the output file need to be changed then all that needs to be done is to update the target application.<br />
<br />
If I wanted to move the account column from 1 to 5 then the column order can be updated.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_lMk7kPPKbKxNVMY8W9IIQj8pmkyvTsqr3P0cAczHDjSfSstqV2fmcviVqIHG7zA6yhjy2q-5sSeVbIzHNxMD7zVNmq6QQwQzMpiS9uBXo_XYpRJR8BYTQHTQcmE8uUhKU2fpjJlC-X0/s1600/image047.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="228" data-original-width="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_lMk7kPPKbKxNVMY8W9IIQj8pmkyvTsqr3P0cAczHDjSfSstqV2fmcviVqIHG7zA6yhjy2q-5sSeVbIzHNxMD7zVNmq6QQwQzMpiS9uBXo_XYpRJR8BYTQHTQcmE8uUhKU2fpjJlC-X0/s1600/image047.png" /></a></div>
<br />
The account column has now been set to 5 and the other columns adjusted accordingly.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgITTxGsIHcq_JtvzPndpkU_BXpqa1yb5WV987sqS8P-V8313omIBpSTM7tpXGToBI9Xid2wyoF6zQ1JqAVOCKQ2u5QA9Of20ZHW79LvPyThx4jNAQHxQ3BB4xGIR1Mnsflfpvyz9d3X98/s1600/image048.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="222" data-original-width="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgITTxGsIHcq_JtvzPndpkU_BXpqa1yb5WV987sqS8P-V8313omIBpSTM7tpXGToBI9Xid2wyoF6zQ1JqAVOCKQ2u5QA9Of20ZHW79LvPyThx4jNAQHxQ3BB4xGIR1Mnsflfpvyz9d3X98/s1600/image048.png" /></a></div>
<br />
Running an export again will produce the output columns in the desired order.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidoqYcq9FbCS1274uIMCJd0YS7wB1D_SQbbUHTwCGqgASLt6iRNFfr1dKt23Dzk5nQiXd9gRerbWxluYH1vQ7GLub9q1ml3SNHhWvlbsxd_elY9_vh0i8iJsrOosMOynBicE_lUriXPT0/s1600/image049.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="106" data-original-width="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidoqYcq9FbCS1274uIMCJd0YS7wB1D_SQbbUHTwCGqgASLt6iRNFfr1dKt23Dzk5nQiXd9gRerbWxluYH1vQ7GLub9q1ml3SNHhWvlbsxd_elY9_vh0i8iJsrOosMOynBicE_lUriXPT0/s1600/image049.png" /></a></div>
<br />
On to the final option and that is the ability to pivot the data, this is a great feature as in the past I have had to write a script to change the format of output file from Data Management. As there is currently no custom scripting allowed in the cloud this had to be achieved outside of Data Management.<br />
<br />
The “Pivot Dimension” can be set. In the following example I am going to set this to period, this should pivot the period members from the rows into the columns.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXz-fXUrhAgAwAGMPZlTv74vGlmVaP0zHci8uNqX4yK28bt2F0L6ZKCfmowq0Nc35NSbUH5hL9PA9djJM05PNfAzRYE-NtN-iC7EVMhqosU08lt5RVJZyofn-6a6KuXOXmz-rsxt9kFxs/s1600/image050.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="23" data-original-width="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXz-fXUrhAgAwAGMPZlTv74vGlmVaP0zHci8uNqX4yK28bt2F0L6ZKCfmowq0Nc35NSbUH5hL9PA9djJM05PNfAzRYE-NtN-iC7EVMhqosU08lt5RVJZyofn-6a6KuXOXmz-rsxt9kFxs/s1600/image050.png" /></a></div>
<br />
This time the integration is run for multiple periods.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkuqpwRrb4VnpYhWbt7SkCHB07jDHENYu0Bzu5FBTed8jtYeA7b1eoWk4QKl2n8KlisdnLZRRmPIpVmIESG0-ZQgkkCDnIuHSCS1CcYGJPn00-jcHqKo8vpyn3Vq4QjiiimroHSsaFL1o/s1600/image051.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="441" data-original-width="573" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkuqpwRrb4VnpYhWbt7SkCHB07jDHENYu0Bzu5FBTed8jtYeA7b1eoWk4QKl2n8KlisdnLZRRmPIpVmIESG0-ZQgkkCDnIuHSCS1CcYGJPn00-jcHqKo8vpyn3Vq4QjiiimroHSsaFL1o/s1600/image051.png" /></a></div>
<br />
The output file now has the period pivoted into the columns. Nice!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgenizfp4zefoU0DkVHjDFPXO2m41F2WUL0LhdqJYkMU8RDxXU3BRbY_3NFkXa6j43BjsT6BO5SS2thTsndJvQ_T7v9zZ7HnOXCS4RgMpnqvSAQBoIT2TGgfhHnny8IH7rwDihGa8kYDbk/s1600/image052.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="143" data-original-width="407" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgenizfp4zefoU0DkVHjDFPXO2m41F2WUL0LhdqJYkMU8RDxXU3BRbY_3NFkXa6j43BjsT6BO5SS2thTsndJvQ_T7v9zZ7HnOXCS4RgMpnqvSAQBoIT2TGgfhHnny8IH7rwDihGa8kYDbk/s1600/image052.png" /></a></div>
<br />
In the process log there will be a “pivot” clause included in the SQL statement that generates the records for the output file.<br />
<br />
If you are currently using custom target applications, then now is the time to consider converting them to data target types. This means you will be able to benefit from the enhanced functionality and at some point, I am sure custom applications will be no longer be available.<br />
<br />
There is no need to rebuild your integrations that are using custom applications because there is a system maintenance task available to handle the conversion.<br />
<br />
Let us take an example. I have the following custom application which has rules associated with it.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk_B9uK64xmX_9Nxk8Je2dZBWDWbzHLWCmR8JBg3pimpdU1O6vEaNiKYdE91n5T7yFFkDLaOBsxcHshnuieGnhxdb0f8a-SvCc40mOU_PpbU9CHR5YoQa2kDh2Cu06s9qbrnYgEt6L3Uo/s1600/image053.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="230" data-original-width="552" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk_B9uK64xmX_9Nxk8Je2dZBWDWbzHLWCmR8JBg3pimpdU1O6vEaNiKYdE91n5T7yFFkDLaOBsxcHshnuieGnhxdb0f8a-SvCc40mOU_PpbU9CHR5YoQa2kDh2Cu06s9qbrnYgEt6L3Uo/s1600/image053.png" /></a></div>
<br />
The custom application has these options assigned to it:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQt2GLTT2jHpMcXK2vkVbRI0aYJs1IP7OtAHdj0tPlsoJnAMi47wkezFtIerYz5sHtoG0m0h3UlEvUb7o3mmwEgkKUcznyLRDwk9OtOl8w_vK2Sej1zsgT7KC-udWVISV0hoYHqKpKj7Q/s1600/image054.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="152" data-original-width="441" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQt2GLTT2jHpMcXK2vkVbRI0aYJs1IP7OtAHdj0tPlsoJnAMi47wkezFtIerYz5sHtoG0m0h3UlEvUb7o3mmwEgkKUcznyLRDwk9OtOl8w_vK2Sej1zsgT7KC-udWVISV0hoYHqKpKj7Q/s1600/image054.png" /></a></div>
<br />
There is a custom script available in system maintenance tasks which will convert the custom application.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUvlCInKR8RlqsCphqRWvOgRKr-zPn1EntVp7cg39AvvWZ5GXY3AN9aT_VOpZITMnHKxmDIz3iDuUz5O5inUccp_ACFATGOVqZWmJWTyCSiO5WUIkieLY79xQ1DAcZcfykdwgYe8avjto/s1600/image055.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="132" data-original-width="477" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUvlCInKR8RlqsCphqRWvOgRKr-zPn1EntVp7cg39AvvWZ5GXY3AN9aT_VOpZITMnHKxmDIz3iDuUz5O5inUccp_ACFATGOVqZWmJWTyCSiO5WUIkieLY79xQ1DAcZcfykdwgYe8avjto/s1600/image055.png" /></a></div>
<br />
After executing the script, the custom application can be selected.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2-ydXbdP9ja_QcMNh_wclBVL7ueewO_9tesYj2ccipxIK7ViOud852RNJT_ny_1mDppFjVAmApgyH2aHwF2KFqpmbaaTke6VI24gnXrV1mimfxoCCHixCTcKdqlyuyih5_R9K7TEUKGs/s1600/image056.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="79" data-original-width="373" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2-ydXbdP9ja_QcMNh_wclBVL7ueewO_9tesYj2ccipxIK7ViOud852RNJT_ny_1mDppFjVAmApgyH2aHwF2KFqpmbaaTke6VI24gnXrV1mimfxoCCHixCTcKdqlyuyih5_R9K7TEUKGs/s1600/image056.png" /></a></div>
<br />
The script will then run SQL statements to convert the application. After the script has completed, the target application should be a type of “Data Target”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLIs-dGsIB3xoT1o9A7AEvSgbZMUNH9jsZyyCzqIMc-B3xUdlX7PQRUkY5q4p83O3SALkiCjBccrPh5IQKOm5DshlVib1S_d3arz0pvT17jR8lT58nwxMmQVACgI5vEJ3Uvlc_0rQ9eME/s1600/image057.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="224" data-original-width="529" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLIs-dGsIB3xoT1o9A7AEvSgbZMUNH9jsZyyCzqIMc-B3xUdlX7PQRUkY5q4p83O3SALkiCjBccrPh5IQKOm5DshlVib1S_d3arz0pvT17jR8lT58nwxMmQVACgI5vEJ3Uvlc_0rQ9eME/s1600/image057.png" /></a></div>
<br />
You may need to make some modifications to dimension details like applying all the column orders.<br />
<br />
The application options should be verified as they are set as default. I had to set the download file name again.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCagiwAb0HRcOJDMUHnSo-hwtvgW7Z7c7km6BAb-k6HUytHgYWSzhP2Gd9wAHrZ4Ouo8MValOa_Vt3AVJBOHK3s2H_wiHvKCAQ6GgtgRPm0tK2XWRHX6C71CN_F-Z4MaKaHkBQVMFCqZE/s1600/image058.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="266" data-original-width="299" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCagiwAb0HRcOJDMUHnSo-hwtvgW7Z7c7km6BAb-k6HUytHgYWSzhP2Gd9wAHrZ4Ouo8MValOa_Vt3AVJBOHK3s2H_wiHvKCAQ6GgtgRPm0tK2XWRHX6C71CN_F-Z4MaKaHkBQVMFCqZE/s1600/image058.png" /></a></div>
<br />
Remember the options can also be set at data load rule level.<br />
<br />
You should be able to run all the existing data load rules, but regression testing should be carried out to highlight any differences. It is probably a good idea to clear out any existing data if you have switched from full workflow mode to simple as it will still be archived in the TDATASEG table. Hopefully the simple workflow mode will work for you.<br />
<br />
If you want to automate the process outside of Data Management/Integration, then this can be achieved with EPM Automate or the REST API. I have covered these many times in the past and you can read about a similar example <b><a href="http://john-goodwin.blogspot.com/2018/01/epm-cloud-capturing-rejections-in-data.html">here</a></b>.<br />
<div>
<br /></div>
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com6tag:blogger.com,1999:blog-6575283218005807475.post-54601667642298917622019-05-26T08:18:00.000-07:002019-06-10T11:04:39.518-07:00EPM Cloud Data Management - Workflow Modes<div dir="ltr" style="text-align: left;" trbidi="on">
The 19.05 EPM Cloud release brought new functionality into Data Management which provides the ability to set workflow modes. The documentation provides the following information on the workflow modes.<br />
<br />
<i><b class="yellow">“By default, the data load process in Data Management is designed with a well-defined process flow that provides a full audit of the data load process and the ability to drill down and view data in Workbench. However, a full data flow may contribute to lengthy processing times due to archiving of data for audit purposes. Workflow mode options provide scalable solutions when processing large volumes of data, or when an audit is not required and performance is a key requirement.”</b></i><br />
<br />
So basically, if you are not interested in viewing/downloading data from the workbench or drill through functionality and are looking for improved performance then maybe the workflow options can help.<br />
<br />
I am not going to go into great depth, but behind the scenes the process flow of data in Data Management is all built around relational database tables and many SQL statements, no doubt you have noticed them in the process logs and increasing the log level will output in much more detail the SQL that is being executed at each step of the process. There are lots of different database tables involved which I am not going to bore you with, for this post all that you need to understand is that data flows through a staging table called <b>TDATASEG_T</b> where mappings are applied and ends up in a table called <b>TDATASEG</b>, the data that is viewable in the workbench is from the <b>TDATASEG </b>table. There is also a staging table for mappings called <b>TDATAMAP_T</b> which are archived in table <b>TDATAMAPSEG</b>.<br />
<br />
The three available workflow mode options are:<br />
<ul style="text-align: left;">
<li><b class="yellow">Full</b></li>
<li><b class="yellow">Full (no archive)</b></li>
<li><b class="yellow">Simple</b></li>
</ul>
Something to be aware of is these options can currently only be defined at target application level.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAg7-Ekofll4Zb1CUg6bwNHpSJigr2tWRwsIKug8bO3WrA-8sgvE7X-VjfY3rFnKIZJq7isS7S8Px1MrYf0UammOftZwRFEQRO8ecMuJjjQRYFaGxpkSGjOYgdXW58wr0myhYL5-Jhw5s/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="91" data-original-width="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAg7-Ekofll4Zb1CUg6bwNHpSJigr2tWRwsIKug8bO3WrA-8sgvE7X-VjfY3rFnKIZJq7isS7S8Px1MrYf0UammOftZwRFEQRO8ecMuJjjQRYFaGxpkSGjOYgdXW58wr0myhYL5-Jhw5s/s1600/image001.png" /></a></div>
<br />
The “Full” option is the default and it is the workflow mode you will be used to, there is no change to this and data flows in exactly the same way through the staging tables and can be viewed in the workbench. Drill through functionality is available if required.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglasN11GFsdkawQa-xoQlNGh9k_VIYbDruGYyUt8auf3-E68KJoZE8rfAHaJg5ZKQ-_OCO71JNGc437_S9fYNoK_EKRB-Bm_pwONlgvFkezB8E1raQWgI3ZGUEhj5W_vO9EyNwOHxAYPA/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="251" data-original-width="900" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglasN11GFsdkawQa-xoQlNGh9k_VIYbDruGYyUt8auf3-E68KJoZE8rfAHaJg5ZKQ-_OCO71JNGc437_S9fYNoK_EKRB-Bm_pwONlgvFkezB8E1raQWgI3ZGUEhj5W_vO9EyNwOHxAYPA/s640/image002.png" width="640" /></a></div>
<br />
If the logging level has been increased to 5, then in the process log you will see after the import and validate stage the data being moved from the staging table TDATASEG_T to TDATASEG.<br />
<br />
<b class="yellow">DEBUG [AIF]: INSERT INTO TDATASEG (columns)</b><br />
<b class="yellow"> SELECT columns</b><br />
<b class="yellow"> FROM TDATASEG_T</b><br />
<b class="yellow"> WHERE LOADID = x AND PARTITIONKEY = x AND CATKEY = x AND PERIODKEY = 'YYYY-MM-DD'</b><br />
<br />
The mappings that have been applied are also archived.<br />
<br />
<b class="yellow">DEBUG [AIF]: INSERT INTO TDATAMAPSEG (columns)</b><br />
<b class="yellow"> SELECT columns</b><br />
<b class="yellow"> FROM TDATAMAP_T</b><br />
<b class="yellow"> WHERE LOADID = x</b><br />
<br />
Before looking at the other workflow modes it is worth picking up on the point that the mode can only be defined at target application level. To minimise the impact to any existing integrations and to separate the different workflow modes it is possible to add a duplicate target application.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJWX-21qqtpyxYPD2Ley-TP5mSkzOj9FPi0nlmoZxd3Q6hUcSBo5I9DP2iQDrHLThBg8H8rDhLjP98AfiL9BBFhzafnp2cxgWmimFnlqhwOf0ISYKguigLZJR8YXalfaf-3q91LLK1xRs/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="127" data-original-width="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJWX-21qqtpyxYPD2Ley-TP5mSkzOj9FPi0nlmoZxd3Q6hUcSBo5I9DP2iQDrHLThBg8H8rDhLjP98AfiL9BBFhzafnp2cxgWmimFnlqhwOf0ISYKguigLZJR8YXalfaf-3q91LLK1xRs/s1600/image003.png" /></a></div>
<br />
The same application can be selected, and a prefix applied.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjINGHRmUEe4E6v-Pwrh9ylu_rzfHNuh0mJNOErYyFI3BzPjOy2gcCwsyG4JqFP6aOUmQTLRCNcK-AbadBNxroYQ4vRSDeUTFUGARE_ieonjHcJ9-EYRp4jYcSUP8a7g-72LN7TT7VhH9Q/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="187" data-original-width="473" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjINGHRmUEe4E6v-Pwrh9ylu_rzfHNuh0mJNOErYyFI3BzPjOy2gcCwsyG4JqFP6aOUmQTLRCNcK-AbadBNxroYQ4vRSDeUTFUGARE_ieonjHcJ9-EYRp4jYcSUP8a7g-72LN7TT7VhH9Q/s1600/image004.png" /></a></div>
<br />
A duplicate application will then be available.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb5iQwj5e13iVvaSgSjJi8IB_S0ZBBFhGzV_WvvSxgXVddIxTb0GZMx36KRAF2OY0xt4wFSC-cOUuN8YMovLNgVT-UljE5xQTTxnyYhI42Zizt2XfuaUVm9CBF2X7FP95UkT64XgIL8yg/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="141" data-original-width="391" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb5iQwj5e13iVvaSgSjJi8IB_S0ZBBFhGzV_WvvSxgXVddIxTb0GZMx36KRAF2OY0xt4wFSC-cOUuN8YMovLNgVT-UljE5xQTTxnyYhI42Zizt2XfuaUVm9CBF2X7FP95UkT64XgIL8yg/s1600/image005.png" /></a></div>
<br />
<div class="MsoNormal">
The workflow mode can be defined for the duplicate
application.<o:p></o:p></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg22gf2l_GCaW4DFKFDBDL6zrhaHhxYS1QuO9OyYkRwb-eUhC4Ac_zVkCrYfrD2euNFB4kEGRabHpcr0IpjJN7ROnerCs0whqeCf_kymdaOM4Buf4K907yceeU9bYW2c59ujG_jcoxLhUE/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="104" data-original-width="139" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg22gf2l_GCaW4DFKFDBDL6zrhaHhxYS1QuO9OyYkRwb-eUhC4Ac_zVkCrYfrD2euNFB4kEGRabHpcr0IpjJN7ROnerCs0whqeCf_kymdaOM4Buf4K907yceeU9bYW2c59ujG_jcoxLhUE/s1600/image006.png" /></a></div>
<br />
So, let us have a look at the “Full No Archive” workflow mode.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgehTUt0t0sYNQ25t-s970wQr8xl7JmsQNhbVr5-T1P2AihxUF4Xf3M-rGLaasP1Ol6RfvC0MgHk2-r_VkNy1V8RnSmGwo14l8nh0WbUnqZcgb0To7oMKPFxyiOZfLBueNBPTVrvLgZqOk/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="89" data-original-width="392" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgehTUt0t0sYNQ25t-s970wQr8xl7JmsQNhbVr5-T1P2AihxUF4Xf3M-rGLaasP1Ol6RfvC0MgHk2-r_VkNy1V8RnSmGwo14l8nh0WbUnqZcgb0To7oMKPFxyiOZfLBueNBPTVrvLgZqOk/s1600/image007.png" /></a></div>
<br />
This mode operates in the same way as the full mode until the export stage. If you run an import the same process will be followed, after validation the data can be viewed in the workbench.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEg7K-nwhSNJmJTYFLtofZy7QWrkrOlsnMYRU96AjqVBJ980eyeg-ietdD2qDrMxSpE1puAXH9urU1_ixbduDK1TH21uVmYsplqnNiODu2CaW61haQYsOBEtuwv6h1AAwBEPI4CK4spvw/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="215" data-original-width="747" height="184" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEg7K-nwhSNJmJTYFLtofZy7QWrkrOlsnMYRU96AjqVBJ980eyeg-ietdD2qDrMxSpE1puAXH9urU1_ixbduDK1TH21uVmYsplqnNiODu2CaW61haQYsOBEtuwv6h1AAwBEPI4CK4spvw/s640/image008.png" width="640" /></a></div>
<br />
At this point the data is still being held in the TDATASEG table. After an export has been successfully executed the data is no longer available in the workbench.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3R4bg_bfIPQOF19hO0MX1cwrJH6nshjYie05W7YKeXhrhv_Gl_Uk2gsDtAkPBdAVsoDafdLc9tywNLji7zi0sRMjM13UsSy5ob2Y5fwOulLzo1w7DK0NR6dIXWjeCI6oNurl4HyEBjqE/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="199" data-original-width="675" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3R4bg_bfIPQOF19hO0MX1cwrJH6nshjYie05W7YKeXhrhv_Gl_Uk2gsDtAkPBdAVsoDafdLc9tywNLji7zi0sRMjM13UsSy5ob2Y5fwOulLzo1w7DK0NR6dIXWjeCI6oNurl4HyEBjqE/s1600/image009.png" /></a></div>
<br />
In the process log there are entries to show that data has been deleted from the TDATASEG table.<br />
<br />
<b class="yellow">INFO [AIF]: Executing delete statement:</b><br />
<b class="yellow">DEBUG [AIF]: DELETE FROM TDATASEG WHERE LOADID = x</b><br />
<b class="yellow">INFO [AIF]: Successfully executed delete statement</b><br />
<b class="yellow">DEBUG [AIF]: Number of Rows deleted from TDATASEG: x</b><br />
<b class="yellow">DEBUG [AIF]: CommData.deleteData – END</b><br />
<br />
Now this workflow mode is not going to offer any direct performance benefits, but it does keep the space used and size of the TDATASEG table down to a minimum as data is deleted at the export stage. This mode is not going to be of any use if you want to view the data or keep for audit purposes and you do lose out on drill through functionality.<br />
Moving on to “Simple” workflow mode which is where the performance improvements should be seen.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi07th-gFdv_cAWo_R8OSluLZLPuLYxAAh13hdAGZr8__1McXDSPfWp8sdl4yKMyrYE2lYWjx6Wbi9eB4ktp1MrlEM9SHaqRcuzjXrtkCFGCX-an6L2BPPa1YWcYzqpkZV7nOIZxLpf35I/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="86" data-original-width="373" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi07th-gFdv_cAWo_R8OSluLZLPuLYxAAh13hdAGZr8__1McXDSPfWp8sdl4yKMyrYE2lYWjx6Wbi9eB4ktp1MrlEM9SHaqRcuzjXrtkCFGCX-an6L2BPPa1YWcYzqpkZV7nOIZxLpf35I/s1600/image010.png" /></a></div>
<br />
The simple option does not move the data from the staging TDATASEG_T table to TDATASEG and after the mappings have been processed in the TDATAMAP_T staging table they are not archived in the TDATAMAPSEG table.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKJ-JLpmhHXL3E3fkuyqB-QQ78UaARYjlXs-lCINUzyGq93YQ21fHAcZFeWxGQpn_cTLzHecSTu8YqxmeHigGmksEX7jvBCxKn65skfTnND0OcFCSsYmJh2ClkNbMxb4eA0gtFuQS92TE/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="200" data-original-width="643" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKJ-JLpmhHXL3E3fkuyqB-QQ78UaARYjlXs-lCINUzyGq93YQ21fHAcZFeWxGQpn_cTLzHecSTu8YqxmeHigGmksEX7jvBCxKn65skfTnND0OcFCSsYmJh2ClkNbMxb4eA0gtFuQS92TE/s1600/image011.png" /></a></div>
<br />
As the data does not exist in the TDATASEG table then after the import and validate stage completes the data cannot be viewed in the workbench. This also means any auditing or drill through capabilities have been lost.<br />
<br />
There is also a slight difference as well in the export stage. With the default full workflow mode, data is extracted from the TDATASEG table using a database view.<br />
<br />
<b class="yellow">DEBUG [AIF]: SELECT '"'||ACCOUNT||'"','"'||ENTITY||'"','"'||UD1||'"','"'||UD2||'"','"'||UD3||'"','"'||SCENARIO||'"','"'||YEAR||'"','"'||PERIOD||'"',AMOUNT</b><br />
<b class="yellow"> FROM AIF_HS_BALANCES</b><br />
<b class="yellow"> WHERE LOADID = x</b><br />
<br />
As already stated the simple workflow mode does not load data into to the TDATASEG table and it persists in the TDATASEG_T staging table, this means the same view cannot be used.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDnWwQIA0UZZVMRt7h2gdJaren_oySwZfK3DcpBTKQdQT2jBtS-SPFTo8Mb1U0r-mQlPkz77hB5-p7b8hfjDjZAOH6wjg57XkzhWJviZg3f-x3jKVgd4mU4ddw1RkUFCr1MxOQoy1KGUs/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="204" data-original-width="698" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDnWwQIA0UZZVMRt7h2gdJaren_oySwZfK3DcpBTKQdQT2jBtS-SPFTo8Mb1U0r-mQlPkz77hB5-p7b8hfjDjZAOH6wjg57XkzhWJviZg3f-x3jKVgd4mU4ddw1RkUFCr1MxOQoy1KGUs/s1600/image012.png" /></a></div>
<br />
From the logs it looks like another database view has been created which must extract data from the staging table.<br />
<br />
<b class="yellow">DEBUG [AIF]: SELECT '"'||ACCOUNT||'"','"'||ENTITY||'"','"'||UD1||'"','"'||UD2||'"','"'||UD3||'"','"'||SCENARIO||'"','"'||YEAR||'"','"'||PERIOD||'"',AMOUNT</b><br />
<b class="yellow"> FROM AIF_HS_BALANCES_T</b><br />
<b class="yellow"> WHERE LOADID = x</b><br />
<br />
Notice the database view name is suffixed with “_T” which indicates it will be looking at the staging table.<br />
<br />
<b>Please note</b>: When using the simple workflow the full import and export has to be run in the same process. This means you should not use the workbench to load data when using the simple mode.<br />
<br />
If you execute from "Data Load Rule" then the import and export will only be allowed together.<br />
<br />
<div style="text-align: center;">
<img alt="" height="111" src="data:image/png;base64,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" width="200" /> </div>
<div style="text-align: left;">
</div>
If you don't do this then the export to target will not contain any data.<br />
<br />
So how about timings, is the simple mode much faster than full mode?<br />
<br />
For a simple test I took an import file containing 1 million unique records of data. I ran the full import and export process for a single period for both full and simple modes. The time was taken from the start of the process up until the data was to be loaded to the target application.<br />
<br />
<b>Full mode = 10 minutes 52 seconds</b><br />
<b>Simple mode = 6 minutes 14 seconds</b><br />
<br />
For a single period that is nearly a 43% improvement<br />
<br />
I then ran the same test for 12 periods which means 12 million records were processed. I do have serious issues with the default way that multi periods are processed, instead of the data load being treated as one, each process is repeated for each period which is extremely inefficient. Hopefully one day this will be addressed.<br />
<br />
The timings were:<br />
<br />
<b>Full mode = 2 hours 43 minutes</b><br />
<b>Simple Mode = 1 hour 11 minutes</b><br />
<br />
From the timings you can see it certainly does make a big difference for multi periods. Though it does beg the question to why it took around 10 minutes to process a single period but 2 hour 43 minutes for 12. In theory it would be quicker to run each period individually.<br />
<br />
I had to base the above timings up to the point where the data file is generated at the export stage, this is because the process failed with an Oracle database timeout error: “ORA-00040: active time limit exceeded - call aborted”. Unlike on-premise FDMEE it is not possible to change the data load options to a SQL based load which loads directly to the target application instead of creating a file first before loading.<br />
<br />
To further improve performance, you could also look at using expressions which I covered in a previous <b><a href="https://john-goodwin.blogspot.com/2018/11/new-functionality-was-added-in-epm.html">blog</a></b>.</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-11333994353717725682019-05-04T11:25:00.000-07:002019-05-04T11:25:32.586-07:00EPM Cloud 19.05 – REST API and EPM Automate new functionality<div dir="ltr" style="text-align: left;" trbidi="on">
It has been a quiet year up to now for new functionality in EPM Cloud, but that has all changed with the 19.05 release. In this post I am going to concentrate on the new features that have made their way to the REST API and EPM Automate.<br />
<br />
There are new REST API jobs to import and export security, export audit records and the job console, and finally the ability to sort dimension members. Not all of these are available in EPM Automate yet but no doubt they will be included in future releases.<br />
<br />
In the post I am going to go through each of the new REST resources, providing an example using a REST client and a simple script which can easily be updated for the different job types. I have covered the REST API many times in previous posts, so I am going to assume that you understand the basics.<br />
<br />
Let us begin with the resources that I feel will be most welcomed – the ability to import and export access permissions. If you would like detailed information on access permissions, please refer to the <b><a href="https://docs.oracle.com/en/cloud/saas/planning-budgeting-cloud/pfusa/setting_up_access_permissions.html">documentation</a></b>.<br />
<br />
All the new REST API functionality is available through the jobs resource, which uses a post method and has the URL format of:<br />
<br />
<b class="yellow">https://<epm_cloud_instance>/HyperionPlanning/rest/v3/applications/<application_name>/jobs</b><br />
<b><br /></b>
The body or payload of the REST request is where the job information is defined using parameters.<br />
<br />
So, let us take an example of exporting access permissions, this can simply be achieved with the following:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkj_ejWi8ebnMPKXofR1JO2zw0vcsycY17rdS-LsQsS2BgeDiRhLcm5ywO49EwdvwLjz-jG0K12LES-UVilzUd9JjPoK_l_MLj1edx1h7hAB7GPPluY9utkwiVEF0EJT0QjFPdK6jioXQ/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="206" data-original-width="548" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkj_ejWi8ebnMPKXofR1JO2zw0vcsycY17rdS-LsQsS2BgeDiRhLcm5ywO49EwdvwLjz-jG0K12LES-UVilzUd9JjPoK_l_MLj1edx1h7hAB7GPPluY9utkwiVEF0EJT0QjFPdK6jioXQ/s1600/image001.png" /></a></div>
<br />
The “jobType” parameter for exporting access permissions should be “Export Security”<br />
<br />
The “jobName” parameter can be anything relevant, it is just the name that is going to be shown in the job console.<br />
<br />
The “filename” parameter is optional, if it is not supplied, a CSV file will be created with a name containing the administrator who ran the request, description and current date/time.<br />
<br />
Once you have the basic authentication details you are ready to execute the request.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0FeBEIzjjWweCJsYRI01jK0aGA4pjJLOp4QJyasGikz6UVQDD4225J6DJJzlePej8QhjCKIVt_RUkCFJApS07-P5Jh9uqHFLVPhJfdWKmOyw51CFTKApzxsnj65QOdcfIC82fkN6kyD0/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="222" data-original-width="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0FeBEIzjjWweCJsYRI01jK0aGA4pjJLOp4QJyasGikz6UVQDD4225J6DJJzlePej8QhjCKIVt_RUkCFJApS07-P5Jh9uqHFLVPhJfdWKmOyw51CFTKApzxsnj65QOdcfIC82fkN6kyD0/s1600/image002.png" /></a></div>
<br />
After the request has been executed, a response will be returned containing all the job information.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicL64WuEvUjZJG8MwzVqdmHMT_O-8rNiFDHTabJcTooUbXxuu5imfZaDAdaxk5SrxXxOTXjIOOg-hyUjb2eyn8VIBoiT7nQT3caTCkmF4CNAWwmu6lv4uZX1RoKXT51eQH4W6s6MMSQPA/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="143" data-original-width="374" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicL64WuEvUjZJG8MwzVqdmHMT_O-8rNiFDHTabJcTooUbXxuu5imfZaDAdaxk5SrxXxOTXjIOOg-hyUjb2eyn8VIBoiT7nQT3caTCkmF4CNAWwmu6lv4uZX1RoKXT51eQH4W6s6MMSQPA/s1600/image003.png" /></a></div>
<br />
A status of -1 indicates the job is in progress, to keep checking the job status, a get request can be made which includes the job ID.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRKITG1YQbqjwtvx41b40MZC8B4ORBtVIR5su_jCJwIku62xAeX-LJG-7dOiG671m2f7gv_dVxLt6rumLzkrQmg8TXWwZ7QYUr99YTlM7wqTZVNYItn0nlt5PtCzD3FF1rlBNlmIVBTOo/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="183" data-original-width="888" height="131" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRKITG1YQbqjwtvx41b40MZC8B4ORBtVIR5su_jCJwIku62xAeX-LJG-7dOiG671m2f7gv_dVxLt6rumLzkrQmg8TXWwZ7QYUr99YTlM7wqTZVNYItn0nlt5PtCzD3FF1rlBNlmIVBTOo/s640/image004.png" width="640" /></a></div>
<br />
This time the job has completed, and the export was successful. You can see that the filename I provided has been automatically generated as a CSV file.<br />
<br />
The file is available within the EPM Cloud instance and can be seen through the UI in the inbox/outbox explorer.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWdwp2pB0k5QexT4FH1ZD2oR9C9AMBovfQY4eNrZj75Y9L4l844fKZfQRP7WT9yCVAWzMIvgFibHnRTbETC4WDcSrVErzDvyxRjLecDjVstepviojJtDz6P7dUJJLF-5Un_aBPjYKpidI/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="173" data-original-width="251" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWdwp2pB0k5QexT4FH1ZD2oR9C9AMBovfQY4eNrZj75Y9L4l844fKZfQRP7WT9yCVAWzMIvgFibHnRTbETC4WDcSrVErzDvyxRjLecDjVstepviojJtDz6P7dUJJLF-5Un_aBPjYKpidI/s1600/image005.png" /></a></div>
<br />
If I had executed the REST request without the filename parameter:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ9eRpYyWsZ65fOKjyDYPq_fERjreg_HJK6pMw2TTJfiKCFDT7fZiBHiYLcUUoi_wo5pa-SHNGc_MsDQxKYrSxaJNEZkZqaZKAKpJ5UvyIESnMjg3lFuvgYwIwk1Cli4Yr7kS8IPNLIcU/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="74" data-original-width="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ9eRpYyWsZ65fOKjyDYPq_fERjreg_HJK6pMw2TTJfiKCFDT7fZiBHiYLcUUoi_wo5pa-SHNGc_MsDQxKYrSxaJNEZkZqaZKAKpJ5UvyIESnMjg3lFuvgYwIwk1Cli4Yr7kS8IPNLIcU/s1600/image006.png" /></a></div>
<br />
The file would have been generated with the following naming convention:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO-BwR3dKWBciTmx1aNachlKwIFIw5zSRg37TPPmqmWPLxNxZr0Lt1KORAdVbkW82yl_t6UyeAcsrPqeqRo1PUKBeC7aDqDmgNiMNnuJDOXjfyGt4tkjwpwXfxtIyvlE9yKxM6F4OLFsI/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="176" data-original-width="558" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO-BwR3dKWBciTmx1aNachlKwIFIw5zSRg37TPPmqmWPLxNxZr0Lt1KORAdVbkW82yl_t6UyeAcsrPqeqRo1PUKBeC7aDqDmgNiMNnuJDOXjfyGt4tkjwpwXfxtIyvlE9yKxM6F4OLFsI/s1600/image007.png" /></a></div>
<br />
The file can be downloaded from the UI or by using EPM Automate or using the REST API, an example being:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXa9DGDiGSm8VTg5wa0fuhAGK62UtWJrgHWLFzkNBm59IF44GIzDEtWqCgmRtXLWz3IjpMqqn-5SncI-2WxM53cKKQrb2oIlmjDtdXjh_WNMV3QmwJEuvoyW2S7gUdHGVSvfR_NzajySs/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="215" data-original-width="793" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXa9DGDiGSm8VTg5wa0fuhAGK62UtWJrgHWLFzkNBm59IF44GIzDEtWqCgmRtXLWz3IjpMqqn-5SncI-2WxM53cKKQrb2oIlmjDtdXjh_WNMV3QmwJEuvoyW2S7gUdHGVSvfR_NzajySs/s640/image008.png" width="640" /></a></div>
<br />
As the file is a CSV type, it can be opened and viewed in a much more readable format through Excel, or a similar application.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi84qqSi1HG1VosiQk9fch1kJ1Q93DCIL66yAZfhMjibiLgxZ5M1n2asL7CfMCvh74vyRUd9wK23uFCM8bPl5mRA7mQPLHqxQuW_e02COXAlG78sSldz3sBoQJX1_zNtDUm2CkuDCzRUqA/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="128" data-original-width="773" height="105" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi84qqSi1HG1VosiQk9fch1kJ1Q93DCIL66yAZfhMjibiLgxZ5M1n2asL7CfMCvh74vyRUd9wK23uFCM8bPl5mRA7mQPLHqxQuW_e02COXAlG78sSldz3sBoQJX1_zNtDUm2CkuDCzRUqA/s640/image009.png" width="640" /></a></div>
<br />
Most of the headings should be self-explanatory, the name column is the name of the user or group, the “Is User” column defines whether it is a user or a group.<br />
<br />
The object type is an artefact within the application and can be any of the following:<br />
<ul style="text-align: left;">
<li><b>SL_FORM – Form</b></li>
<li><b>SL_COMPOSITE - Composite Form</b></li>
<li><b>SL_TASKLIST – Tasklist</b></li>
<li><b>SL_CALCRULE – Rule</b></li>
<li><b>SL_FORMFOLDER - Form Folder</b></li>
<li><b>SL_CALCFOLDER - Rule Folder</b></li>
<li><b>SL_DIMENSION – Dimension</b></li>
<li><b>SL_REPORT – Financial Report</b></li>
<li><b>SL_REPORTSSHOT – Financial Report Snapshot</b></li>
</ul>
The access type is the type of access permission, this can be: NONE, READ, WRITE, READWRITE or LAUNCH<br />
<br />
The access mode is the inheriting access permission, this can be: MEMBER, CHILDREN, @ICHILDREN, @DESCENDANTS or @IDESCENDANTS. The documentation provides further details on the these.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdEOHJuP7dqd0s8WHAAR9Jzvjx6uzqOiDJtUrr0O8JGf1tWeKclgNxXgcOFDEvxSrYZz_hUYjFRsRJznZZJ16BqcYrpIZo_hr99PyyyyV-XJI-ZTs-KuzU4iG4kmuIDml0giJVTHhX9jk/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="252" data-original-width="732" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdEOHJuP7dqd0s8WHAAR9Jzvjx6uzqOiDJtUrr0O8JGf1tWeKclgNxXgcOFDEvxSrYZz_hUYjFRsRJznZZJ16BqcYrpIZo_hr99PyyyyV-XJI-ZTs-KuzU4iG4kmuIDml0giJVTHhX9jk/s640/image010.png" width="640" /></a></div>
<br />
I will provide details on the “Remove” column later in this post.<br />
<br />
In the previous example the access permissions were exported for all users and groups. It is possible to restrict the export to specified users or groups.<br />
<br />
To export access by group the “exportGroups” parameter can be used and assigned with a list of comma separated groups.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOWoUna3xuGLM3dbiaq0JAlSh_SZzGFSeb7353uKe4acj9aTqgQkCN3cPjoi-DkU4ebgm7IDvxH7u04t9RsBUIEUQJ6efzfpxKUBnVWmk9Sd5YSAynzbpaDLb3ysToNVcdPlNrkVMFpkU/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="217" data-original-width="548" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOWoUna3xuGLM3dbiaq0JAlSh_SZzGFSeb7353uKe4acj9aTqgQkCN3cPjoi-DkU4ebgm7IDvxH7u04t9RsBUIEUQJ6efzfpxKUBnVWmk9Sd5YSAynzbpaDLb3ysToNVcdPlNrkVMFpkU/s1600/image011.png" /></a></div>
<br />
The above example will export access permissions for only the “Analyst” and “Reviewer” groups.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhslQrxVZBpGZD-sGyIICYWxxv4kG56_ghAF9aZXXTaZmM7fA0LRSVgxG9JHcnORw7oEid59D0nAADIIOcW_k4wTbrkqb2mJKMh8VlcqLlYqmD5mPUpqNjCH81KjQQunOhh7hMJ3pp-7To/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="120" data-original-width="832" height="92" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhslQrxVZBpGZD-sGyIICYWxxv4kG56_ghAF9aZXXTaZmM7fA0LRSVgxG9JHcnORw7oEid59D0nAADIIOcW_k4wTbrkqb2mJKMh8VlcqLlYqmD5mPUpqNjCH81KjQQunOhh7hMJ3pp-7To/s640/image012.png" width="640" /></a></div>
<br />
To export access permissions by user, the “exportUsers” parameter can be used and defined by a list of comma separated users.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgROeSha5fCcKtfKasNij3YxM7B6_-IFefN7ukP_EEry_PC6bu-EY5eZfF8vfyLYU4LbLRDg7_K5vti9Sb9Co2vMFEVTCDvPwVU6XDfU29v713FcoAjN7lQrOKdMaj90YDKixWfnw7941k/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="221" data-original-width="553" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgROeSha5fCcKtfKasNij3YxM7B6_-IFefN7ukP_EEry_PC6bu-EY5eZfF8vfyLYU4LbLRDg7_K5vti9Sb9Co2vMFEVTCDvPwVU6XDfU29v713FcoAjN7lQrOKdMaj90YDKixWfnw7941k/s1600/image013.png" /></a></div>
<br />
The above example exports security for a single user.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8GTBUOK1p3fy2dgjgDsMyvfrnhu9XkUbDqDNL4I-RpIshrJTNqhLlEw8I6IYOcPYDu74pOiMPd689p3tiITVn9JJHxq7HIdKf9InVq2rXBaur0aItmeyHTZGyFjchKwhKhBmgbMb2dW4/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="105" data-original-width="728" height="92" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8GTBUOK1p3fy2dgjgDsMyvfrnhu9XkUbDqDNL4I-RpIshrJTNqhLlEw8I6IYOcPYDu74pOiMPd689p3tiITVn9JJHxq7HIdKf9InVq2rXBaur0aItmeyHTZGyFjchKwhKhBmgbMb2dW4/s640/image014.png" width="640" /></a></div>
<br />
To automate the process of exporting the access permissions, you can easily convert this into script. Most programming languages support REST in some form so pick the one you feel most comfortable with.<br />
<br />
In the following PowerShell script, a REST request is made to export access permissions for a group named “Planner”.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimq7vnNhpsBvHnkEz7n9cDKYny3g4ojPmVCVPv6ZxGj60N8ZB0fTwYMCXoiON1xZ18oAa9ECQO11TaGkzIIN6AutMJ_5Vx3dndy-k_oJSL1i9RXE8Pg8UvgWaca0IUGrlk4N9plCFAJvE/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="802" data-original-width="679" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimq7vnNhpsBvHnkEz7n9cDKYny3g4ojPmVCVPv6ZxGj60N8ZB0fTwYMCXoiON1xZ18oAa9ECQO11TaGkzIIN6AutMJ_5Vx3dndy-k_oJSL1i9RXE8Pg8UvgWaca0IUGrlk4N9plCFAJvE/s1600/image015.png" /></a></div>
<br />
Once the REST request has been made the status can be repeatably checked until it changes from progressing.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2KQ2PluhAhcrI_uxmuQi69fegowjVgXE4PkbwZSyfmDB6WTlqyOGw43bkMtIOBysfVG-72uqbim2W0LXQ8eYVnwJhCqgd4r5goV4R_8ZPCYvlhKUadw03ZkLLWAuf5Tv2F-ezZA68bxg/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="436" data-original-width="594" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2KQ2PluhAhcrI_uxmuQi69fegowjVgXE4PkbwZSyfmDB6WTlqyOGw43bkMtIOBysfVG-72uqbim2W0LXQ8eYVnwJhCqgd4r5goV4R_8ZPCYvlhKUadw03ZkLLWAuf5Tv2F-ezZA68bxg/s1600/image016.png" /></a></div>
<br />
Finally, a separate REST resource can be executed to download the file from the EPM Cloud instance.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvdc67WX2Ps9YQjJHfoc2JMQCR0kaU5dtW4oGB9rPMJX6iveHOCU9ggXoIxck4nwQam9JfdnbHO6aVkmox5Sb42pFc4gDep4tSUm4ENk2kIab389Ux8eO5DIxqxK9Ud-c7gnJLlYGZ-RY/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="207" data-original-width="806" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvdc67WX2Ps9YQjJHfoc2JMQCR0kaU5dtW4oGB9rPMJX6iveHOCU9ggXoIxck4nwQam9JfdnbHO6aVkmox5Sb42pFc4gDep4tSUm4ENk2kIab389Ux8eO5DIxqxK9Ud-c7gnJLlYGZ-RY/s640/image017.png" width="640" /></a></div>
<br />
The file that has been downloaded contains the access permissions for the “Planner” group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuchXvPQqdbQ4JSlyuzYC6J9poKogU2w9PsHJSB3JVS_0sIwNLzcrclqxbseOzHlPy1X_PnUcklr_kb5AyDEg1Ehlg9QPaUl26DMsOzsYKFM5oDpfie1iRRt_iz1z5InOXYPnm4QZ7MI0/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="80" data-original-width="152" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuchXvPQqdbQ4JSlyuzYC6J9poKogU2w9PsHJSB3JVS_0sIwNLzcrclqxbseOzHlPy1X_PnUcklr_kb5AyDEg1Ehlg9QPaUl26DMsOzsYKFM5oDpfie1iRRt_iz1z5InOXYPnm4QZ7MI0/s1600/image018.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglUtOU5FETu-YoEbVd0TTgKfeFzape9T1TFUcaP9D97PxrA3azxZBP29uNgsq9I8VATsY_CEhlXghoEAeSXq32o4NgE53C-gAhXukhZWe4Oaae20LRoqS80MiXcgaVJQqh-z-vEFCKcOc/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="58" data-original-width="649" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglUtOU5FETu-YoEbVd0TTgKfeFzape9T1TFUcaP9D97PxrA3azxZBP29uNgsq9I8VATsY_CEhlXghoEAeSXq32o4NgE53C-gAhXukhZWe4Oaae20LRoqS80MiXcgaVJQqh-z-vEFCKcOc/s1600/image019.png" /></a></div>
<br />
The script can be modified to work with any of the REST API job resources contained in this post.<br />
<br />
Moving on to importing access permissions and I will start off with a CSV file that defines permissions for a user and group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxjtrGaLxnHMP7kdN4pZu_4a2crsQSzBM__8l6nGuY-oPNglmNBTSZP2Z8v5o8W4NwkQFv0jat-1XvmhpJIQPxGprATl-gcGm3EHwvD3vrbLclO7goDt3V6o4ziJBV0OIOMYSZBriWb-Y/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="82" data-original-width="726" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxjtrGaLxnHMP7kdN4pZu_4a2crsQSzBM__8l6nGuY-oPNglmNBTSZP2Z8v5o8W4NwkQFv0jat-1XvmhpJIQPxGprATl-gcGm3EHwvD3vrbLclO7goDt3V6o4ziJBV0OIOMYSZBriWb-Y/s1600/image020.png" /></a></div>
<br />
The “Planner” group will be defined with read access to the form folder “Long Range Plan”.<br />
<br />
The user will be granted read/write permissions to the “Total Entity” member and all its descendants.<br />
<br />
To demonstrate the “Total Entity” member has no user access defined.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7C5r5PbwyonFg9aNAEu5o7F9ZQTQsleYzMGcOvhUiQpzdHU-kZa3GaItVQCV-LzmuKTcQxNP8v_V7reWZkfq4i0H7qUc9pmtUche37U69-GIaebcShstCbX9BhbRirWkUTULqIxXh1t4/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="225" data-original-width="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7C5r5PbwyonFg9aNAEu5o7F9ZQTQsleYzMGcOvhUiQpzdHU-kZa3GaItVQCV-LzmuKTcQxNP8v_V7reWZkfq4i0H7qUc9pmtUche37U69-GIaebcShstCbX9BhbRirWkUTULqIxXh1t4/s1600/image021.png" /></a></div>
<br />
The “Long Range Plan” form folder has no group access defined.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtVOslefhF0Pm9R9ysiAbxc7UjaftLhhIaA0sbU_vpV4gmLCsqKIiBXIw92GYx5CvJNLBLbSN_du9hH5HYE5K2ZTxzI89M0ciB8SjnX5kiM7zhl-RGCoe_-kDOKm7H2vEZcMDzpOP7YSg/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="176" data-original-width="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtVOslefhF0Pm9R9ysiAbxc7UjaftLhhIaA0sbU_vpV4gmLCsqKIiBXIw92GYx5CvJNLBLbSN_du9hH5HYE5K2ZTxzI89M0ciB8SjnX5kiM7zhl-RGCoe_-kDOKm7H2vEZcMDzpOP7YSg/s1600/image022.png" /></a></div>
<br />
The CSV file must first be uploaded to the Cloud instance and this can be achieved using a REST resource, an example being:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxnnKKIsbn1EpcQrr25THC4zQRfW810kMjOyVD_EGJn0deQKbzDlA9F16LIIuefk-x45Y59DwrfZ1N92dx9gPRhiwpSWQadVJHPcn7516zEO44o5PoSmXRqc_KKA6azkDsxtcy0YeiEEQ/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="132" data-original-width="995" height="84" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxnnKKIsbn1EpcQrr25THC4zQRfW810kMjOyVD_EGJn0deQKbzDlA9F16LIIuefk-x45Y59DwrfZ1N92dx9gPRhiwpSWQadVJHPcn7516zEO44o5PoSmXRqc_KKA6azkDsxtcy0YeiEEQ/s640/image023.png" width="640" /></a></div>
<br />
Once the request has been successfully executed the file should be available in the Cloud instance.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiChHI7ZEr_enXewJZ2A4ts-p4S19cD_ULX9BbkCav5dcN8P8QnoZIZC5n2z7yV_L8w-Ygjs6MGKsoePLH1j2WWTCLINYxLL8Ab0T23Lc-fO78WF9rmnKlns2Q1xZqCXXRzJcB8p2fg-ak/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="177" data-original-width="254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiChHI7ZEr_enXewJZ2A4ts-p4S19cD_ULX9BbkCav5dcN8P8QnoZIZC5n2z7yV_L8w-Ygjs6MGKsoePLH1j2WWTCLINYxLL8Ab0T23Lc-fO78WF9rmnKlns2Q1xZqCXXRzJcB8p2fg-ak/s1600/image024.png" /></a></div>
<br />
The access permissions can then be imported using the REST resource with the same jobs URL and post method.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3Da9s7CwPbWafYi7wGDbHkRCkSmZwN6kd5Ow10kUDLhJIo9th8ahIQPUC0Gp5raN80y_gJQwz6AfSOyLz-19RUIOsifqyjQCIz0Dy-EB7mUWN_9wrqtSJGCN4RwM0D-oGu_tuzxGQcXE/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="199" data-original-width="551" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3Da9s7CwPbWafYi7wGDbHkRCkSmZwN6kd5Ow10kUDLhJIo9th8ahIQPUC0Gp5raN80y_gJQwz6AfSOyLz-19RUIOsifqyjQCIz0Dy-EB7mUWN_9wrqtSJGCN4RwM0D-oGu_tuzxGQcXE/s1600/image025.png" /></a></div>
<br />
The “jobType” is “Import Security. The “jobName” can be anything relevant.<br />
<br />
Just like with the export security resource the “filename” is optional.<br />
<br />
Once the request has been sent, a response containing the job information is returned.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPNcLzANcIuqrrQw671o-tDn_q2qBuzWqwRovk8-pNGaRJR-QBMfjbSSzY4zdVOUc2Z4545rwCFgyUnKgyCZ-qgS0GnY12xUVRZz5mL0-1mdSXxAk57m4JSeJtnzeHktKamaIJPMtN9k0/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="141" data-original-width="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPNcLzANcIuqrrQw671o-tDn_q2qBuzWqwRovk8-pNGaRJR-QBMfjbSSzY4zdVOUc2Z4545rwCFgyUnKgyCZ-qgS0GnY12xUVRZz5mL0-1mdSXxAk57m4JSeJtnzeHktKamaIJPMtN9k0/s1600/image026.png" /></a></div>
<br />
This can then be checked by including the job ID in the URL.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvdtlnYuk6izEm-DeUwbxUyiSmyFnlbKOo-ydvscoe_ln-ctq_lLVqOt1GQHj6OKtNmdAqCEw1jdxSwneN_0n_wTtVm2dG-m0vrHRMw0MsQ__I9eH2QbtpL6aTFpIo8OO6rsBmyJ8vjr0/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="218" data-original-width="991" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvdtlnYuk6izEm-DeUwbxUyiSmyFnlbKOo-ydvscoe_ln-ctq_lLVqOt1GQHj6OKtNmdAqCEw1jdxSwneN_0n_wTtVm2dG-m0vrHRMw0MsQ__I9eH2QbtpL6aTFpIo8OO6rsBmyJ8vjr0/s640/image027.png" width="640" /></a></div>
<br />
The import failed as the filename was incorrect. The filename is case sensitive, and I incorrectly set the first character as upper case.<br />
<br />
After rectifying the filename, the import was successful.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXpwkpPDr8Jn8IC8asAboiE_1v4O75tW2zZsVqAGAtiCWotKbA9zTL4SOfXADw-5otdgvdjOYeo5sQXWH02nnakxrNB50_ZDOzktVAaOv4hCYiUu4WCCP0R5sUEuOrZ6G4Lx6zKiqNylw/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="123" data-original-width="883" height="89" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXpwkpPDr8Jn8IC8asAboiE_1v4O75tW2zZsVqAGAtiCWotKbA9zTL4SOfXADw-5otdgvdjOYeo5sQXWH02nnakxrNB50_ZDOzktVAaOv4hCYiUu4WCCP0R5sUEuOrZ6G4Lx6zKiqNylw/s640/image028.png" width="640" /></a></div>
<br />
The response includes the details of how many records were imported and if any were ignored.<br />
<br />
To confirm the import, the form folder was correctly assigned with the group.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXzERjWwuE9XOp1hK91kEbW2ArFk8fLwM0IgvlUH2kxYoy2iu9-ay6qMym-ojzOiK4Xj8w7ekkRyNUDmnWU5qgrdElPYAUbr6kQ7klHJqBmiiJlZoR7TiMZwzonZb9NMeygli6JKHAtCE/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="117" data-original-width="378" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXzERjWwuE9XOp1hK91kEbW2ArFk8fLwM0IgvlUH2kxYoy2iu9-ay6qMym-ojzOiK4Xj8w7ekkRyNUDmnWU5qgrdElPYAUbr6kQ7klHJqBmiiJlZoR7TiMZwzonZb9NMeygli6JKHAtCE/s1600/image029.png" /></a></div>
<br />
The member permissions were assigned to the user.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJHRTtPH6O3sjxbhnWldCgsFYlbjBWKCWCaQiQHOuuF3oTPLQR8S0E0bjB-Mjr9GbjQzrkrsjtf6nzYoY5SRKyKmXGdV8DESsUc8snvJXVuMQqcyA8LV4qer75UPpRaSxpxbGUbIRvZD4/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="204" data-original-width="476" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJHRTtPH6O3sjxbhnWldCgsFYlbjBWKCWCaQiQHOuuF3oTPLQR8S0E0bjB-Mjr9GbjQzrkrsjtf6nzYoY5SRKyKmXGdV8DESsUc8snvJXVuMQqcyA8LV4qer75UPpRaSxpxbGUbIRvZD4/s1600/image030.png" /></a></div>
<br />
It is possible to remove access permissions, and this can be achieved by setting the value in the remove column to “Y”.<br />
<br />
In the following example I am going to remove access to the “Planner” group for the member “BS”.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil2ibSTd8hDOeBK6sB2BDFvai62XGHdjLy-DQtsLraIPGAYyO9DFokkpxfsZIbTo-89Lp3FNKklRHypcHR8Ir9y2kaBDDyMQawIKffOq1FaMkCTmYtxm7tlethg92yEgQkGF2D2vwG5eQ/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="62" data-original-width="694" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil2ibSTd8hDOeBK6sB2BDFvai62XGHdjLy-DQtsLraIPGAYyO9DFokkpxfsZIbTo-89Lp3FNKklRHypcHR8Ir9y2kaBDDyMQawIKffOq1FaMkCTmYtxm7tlethg92yEgQkGF2D2vwG5eQ/s1600/image031.png" /></a></div>
<br />
Currently access has been assigned to the group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi-EcL7bO04HLjh9T5TSdOVynq5hksRrgZ4MJlbhW1VHWmO6oEMKMUvVRj5w2v0oab_JAH419hLuwC2WSBJeO9jOPakGMPhqlpOz3u8E54xWuhnuOC2G7o6gNwbrSCo-nzy8XQ2_Cnefk/s1600/image032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="223" data-original-width="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi-EcL7bO04HLjh9T5TSdOVynq5hksRrgZ4MJlbhW1VHWmO6oEMKMUvVRj5w2v0oab_JAH419hLuwC2WSBJeO9jOPakGMPhqlpOz3u8E54xWuhnuOC2G7o6gNwbrSCo-nzy8XQ2_Cnefk/s1600/image032.png" /></a></div>
<br />
The CSV file was uploaded, and the access permissions imported using the REST resource.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8N_HNsV6yqtIfN9Ytg1DE6_Fy_BRDB55VclCZIcDHAjvUxoo4wGdcSRfwWyAk-gwqtDaYInZSOhl4Vo33Un1YaUdnTZdHGIeIuXJh56vzLGQ3aBg2hzglkk7LF0uqNymHTZFwBQ8NOgk/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="163" data-original-width="383" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8N_HNsV6yqtIfN9Ytg1DE6_Fy_BRDB55VclCZIcDHAjvUxoo4wGdcSRfwWyAk-gwqtDaYInZSOhl4Vo33Un1YaUdnTZdHGIeIuXJh56vzLGQ3aBg2hzglkk7LF0uqNymHTZFwBQ8NOgk/s1600/image033.png" /></a></div>
<br />
The response confirms 1 record was successfully imported.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2VuG7CwPeWR92NcVXVEYi7kcXwyQZls85HnjpttO6IJmGzO5GvBOdVQ2fqI4yBJm5dXwbM7BsiZhtiMEE9xEZHwO6gVNLW42Faoe_mYcjN4KFJkWE1EPkudngtW4dCoTpWgNtAolcQ3w/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="121" data-original-width="872" height="88" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2VuG7CwPeWR92NcVXVEYi7kcXwyQZls85HnjpttO6IJmGzO5GvBOdVQ2fqI4yBJm5dXwbM7BsiZhtiMEE9xEZHwO6gVNLW42Faoe_mYcjN4KFJkWE1EPkudngtW4dCoTpWgNtAolcQ3w/s640/image034.png" width="640" /></a></div>
<br />
Checking in the UI confirms the access permissions have been removed for the group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMW-WUQ6i3ZshYE72a4doCATcf-Agi1uv5lEBw-Gv0oXrFhjKn3Xymfiitxa92nY4IDMXxgdOzTIRUVXgikvZoUSMHF6P67VGPXCKeSN32zMspA5WtB9HTaqSOeJujYAS12hV-ALIUrXk/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="221" data-original-width="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMW-WUQ6i3ZshYE72a4doCATcf-Agi1uv5lEBw-Gv0oXrFhjKn3Xymfiitxa92nY4IDMXxgdOzTIRUVXgikvZoUSMHF6P67VGPXCKeSN32zMspA5WtB9HTaqSOeJujYAS12hV-ALIUrXk/s1600/image035.png" /></a></div>
<br />
On to the next REST resource and that is the ability to export audit records. Please note that you will have to enable auditing in the UI if you have not already done so.<br />
<br />
Once again, the URL and method are the same.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_JuA01bVkU6tPdlBCeO-Utw9yDXjhiOJ1uF5L4-zsVULnDvxLcjWcVSU7TWsq1-_hyX97uxS0dR3eGdRw3Auk3tCWao4-E0KhBANO1uFfFWlyGTAwrVgQA1z8Bd4ASogvyGaOhK9Y8q0/s1600/image036.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="216" data-original-width="553" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_JuA01bVkU6tPdlBCeO-Utw9yDXjhiOJ1uF5L4-zsVULnDvxLcjWcVSU7TWsq1-_hyX97uxS0dR3eGdRw3Auk3tCWao4-E0KhBANO1uFfFWlyGTAwrVgQA1z8Bd4ASogvyGaOhK9Y8q0/s1600/image036.png" /></a></div>
<br />
The “jobType” parameter should be “Export Audit”. “JobName” can be anything relevant you decide on.<br />
<br />
The “filename” parameter is optional. If it is not included in the body of the request it will be generated in the same format as previously explained, the only difference is the filename will include “AuditRecords”.<br />
<br />
The “ndays” parameter defines the number of days which audit records should be exported. The values can be 1,2,7,30,60,180 or All. If not included the default is 7 days.<br />
<br />
Once the request has been sent the audit records will be exported and a zip file produced which can be downloaded.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnHDM02vZNG2DpHjZPQhlXoCMEpZWTh9vB3wjB7e_Ef-f59mKYo10HNC-2BkIjWbOo5GrT5pkf7mZxpw3HEMkve1B7nvsyGUxF0MZazl0cgU8XqJdiBE6N8DxwgB0XBmXmVqXjbH1r9CU/s1600/image037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="174" data-original-width="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnHDM02vZNG2DpHjZPQhlXoCMEpZWTh9vB3wjB7e_Ef-f59mKYo10HNC-2BkIjWbOo5GrT5pkf7mZxpw3HEMkve1B7nvsyGUxF0MZazl0cgU8XqJdiBE6N8DxwgB0XBmXmVqXjbH1r9CU/s1600/image037.png" /></a></div>
<br />
The zip file contains a csv file with the same name.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiRGwOQw9gMyRPpRN83rysBYFxVnTDPy7fbBkHZEGLlp4aZ7pZAej-qgcVGd7A5m9WesBsapOd0V9n2c6H6OSlj_5V9SwtckbMncdCB1p0kSTd38ii-nF4TS7mM481IxZN_TGCXLt-rbw/s1600/image038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="180" data-original-width="1117" height="102" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiRGwOQw9gMyRPpRN83rysBYFxVnTDPy7fbBkHZEGLlp4aZ7pZAej-qgcVGd7A5m9WesBsapOd0V9n2c6H6OSlj_5V9SwtckbMncdCB1p0kSTd38ii-nF4TS7mM481IxZN_TGCXLt-rbw/s640/image038.png" width="640" /></a></div>
<br />
The CSV file is in the same format as that viewed in the UI.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIq1FzN7NyIkC3me_EyXMRhw0CIpmQIgVtPPkCioBq8qt5543e-y2zEAwmH6Gz3yRaN4HeUMwNFwf4v9CnbNEoQjfBlaJsA92SHqfX6Zh-_pIYUtqyLLHm9XQ0WOJfRT1OTLfZUBHkAyE/s1600/image039.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="407" data-original-width="1461" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIq1FzN7NyIkC3me_EyXMRhw0CIpmQIgVtPPkCioBq8qt5543e-y2zEAwmH6Gz3yRaN4HeUMwNFwf4v9CnbNEoQjfBlaJsA92SHqfX6Zh-_pIYUtqyLLHm9XQ0WOJfRT1OTLfZUBHkAyE/s640/image039.png" width="640" /></a></div>
<br />
It is possible to export audit data for specified users.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiezx2O6aQRHQ3u42xLEmV5IGPizzogU3N_obqMrzDHjrg5iAVtU1pMHFwfd7gfWcOKqLPfucz6Gug_zymP6IBI0BAcU4k4rddD9vUvG3Cel5MJA1G7nIDUTzEhszgkyN2YecRbSKVFXHs/s1600/image040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="157" data-original-width="315" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiezx2O6aQRHQ3u42xLEmV5IGPizzogU3N_obqMrzDHjrg5iAVtU1pMHFwfd7gfWcOKqLPfucz6Gug_zymP6IBI0BAcU4k4rddD9vUvG3Cel5MJA1G7nIDUTzEhszgkyN2YecRbSKVFXHs/s1600/image040.png" /></a></div>
<br />
The “userNames” parameter can contain a comma separated list of users.<br />
<br />
The generated CSV file will contain only audit records for the specified user(s).<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNj_uKMhOBWhSIH6VBZcR24KJrwtvmOe3h5dLiPvIQQbzSpBD0HO0j8wzZDIlbjYeGDjWhEojLGMa8kFyue1j2tNhR_IpVQ6A6D5mpfRxzp9quGS199v2u8u2oNST7D1dDTHrv3z1N7DM/s1600/image041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="63" data-original-width="1049" height="36" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNj_uKMhOBWhSIH6VBZcR24KJrwtvmOe3h5dLiPvIQQbzSpBD0HO0j8wzZDIlbjYeGDjWhEojLGMa8kFyue1j2tNhR_IpVQ6A6D5mpfRxzp9quGS199v2u8u2oNST7D1dDTHrv3z1N7DM/s640/image041.png" width="640" /></a></div>
<br />
Next REST resource allows the export of the job console information.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg00pRJ8A2jvmOESLru_rgKJ966yvtZWJeE1DhZ0zRG2p216u2xmA7WkRT2ZpFRwFySlqkx26pu4ryY7pF9M0R2ZCvE1NacwzSczGm3kvfp4PkCCiyJvTQDTh3fYPgcoAUdSXcYKZhVmfI/s1600/image042.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="204" data-original-width="552" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg00pRJ8A2jvmOESLru_rgKJ966yvtZWJeE1DhZ0zRG2p216u2xmA7WkRT2ZpFRwFySlqkx26pu4ryY7pF9M0R2ZCvE1NacwzSczGm3kvfp4PkCCiyJvTQDTh3fYPgcoAUdSXcYKZhVmfI/s1600/image042.png" /></a></div>
<br />
The “jobType” should be “JOBCONSOLE_EXPORT”. Define “jobType” to anything you want.<br />
<br />
Again the “filename” parameter is optional. If it is not included in the body of the request it will be generated in the same format as previously explained, the only difference is the filename will include “PlanningJobConsoleRecords”.<br />
<br />
Just like with the other resources the job can be repeatedly checked until the status changes.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJuChXUzzv28qLTs00gomqrBdh7vS3fi4cExjIjwtnC-3-RxwNRJq0cBUnzcx8-ZrfVmZ4_IHa0xp5wai_EQzSiHWW-S9zx1wa7qfAlGU4OE9wmXVCNsljxdQzaQtpbvYa_v8fYsdgafE/s1600/image043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="108" data-original-width="890" height="76" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJuChXUzzv28qLTs00gomqrBdh7vS3fi4cExjIjwtnC-3-RxwNRJq0cBUnzcx8-ZrfVmZ4_IHa0xp5wai_EQzSiHWW-S9zx1wa7qfAlGU4OE9wmXVCNsljxdQzaQtpbvYa_v8fYsdgafE/s640/image043.png" width="640" /></a></div>
<br />
A zip file will be created which can be downloaded using either the UI, EPM Automate or REST API.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzBExKMTdODrJ9UFPMGS52WZT1ZmXZTkpEwM3BRhjYS7VgFLrXPXUDTbVqcaotqFt24KIlwbqY7THOvCg8Jm6_6TpHbW90kvZ5JzlFV-5QN4oDYkY3ULuiK9jt2i0ziNxe6c8TuzOQtTA/s1600/image044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="173" data-original-width="259" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzBExKMTdODrJ9UFPMGS52WZT1ZmXZTkpEwM3BRhjYS7VgFLrXPXUDTbVqcaotqFt24KIlwbqY7THOvCg8Jm6_6TpHbW90kvZ5JzlFV-5QN4oDYkY3ULuiK9jt2i0ziNxe6c8TuzOQtTA/s1600/image044.png" /></a></div>
<br />
Unless specified with parameters in the body of the REST request the only job console information exported will be for rules and with a completed status.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpmqusDSR5E1kYiSQ3i99UOb-s1KTukAptjpqX4FO4DE6gI16FPS3UYRkcMnVetawD3_bJCK8HzfO1MZEZVZWEN0Uyaz-J_Im0BDBr1vvd4znVpyBerzP5DqXqx8eSZNUCf499JyqrEKA/s1600/image045.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="82" data-original-width="1264" height="40" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpmqusDSR5E1kYiSQ3i99UOb-s1KTukAptjpqX4FO4DE6gI16FPS3UYRkcMnVetawD3_bJCK8HzfO1MZEZVZWEN0Uyaz-J_Im0BDBr1vvd4znVpyBerzP5DqXqx8eSZNUCf499JyqrEKA/s640/image045.png" width="640" /></a></div>
<br />
By default, 7 days of job console information will be exported. This can be changed using the “ndays” parameter. The possible values can be 1,2,7,30,60,180 or All.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhyUvR2o1hGqKPGM71zO4ZeI_GBCb3uoLc9BSoTTXILtwv-XZ5j-edFmeItQEkYiq_nfsB1jFLPdz1SgZa_wlNjL0lTLagQD8nn5YmpX7z8mH4MBL_ySJUMl6btkqllXvkk0_TAWxfqvc/s1600/image047.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="156" data-original-width="371" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhyUvR2o1hGqKPGM71zO4ZeI_GBCb3uoLc9BSoTTXILtwv-XZ5j-edFmeItQEkYiq_nfsB1jFLPdz1SgZa_wlNjL0lTLagQD8nn5YmpX7z8mH4MBL_ySJUMl6btkqllXvkk0_TAWxfqvc/s1600/image047.png" /></a></div>
<br />
You can define the job types included in the export with the “jobTypes” parameter. This can be a comma separated list, please refer to the documentation for the full list.<br />
<br />
In the above example, job console information will be exported for all records and job types.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-YNouy4r2tUwf8xRUkKrYkvYOXEk6CF-Vh4lfnGfecAjHvOWRutO1MZRMbFpK97VfbU8HITmta842yRwueW29bbO4cZ723AutgEBzCxApGof3JCa_4oEqcpDMDwtfJKM3Qs1WIFN-1u8/s1600/image048.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="120" data-original-width="767" height="100" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-YNouy4r2tUwf8xRUkKrYkvYOXEk6CF-Vh4lfnGfecAjHvOWRutO1MZRMbFpK97VfbU8HITmta842yRwueW29bbO4cZ723AutgEBzCxApGof3JCa_4oEqcpDMDwtfJKM3Qs1WIFN-1u8/s640/image048.png" width="640" /></a></div>
<br />
To export the job console information for importing and exporting security the following parameter can be defined in the body of the request.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_nlD4VN1ouUtpi1YLETaZfiDbTRzzNLgXXL5-kv8V4BMHAbPd5BdPTEtK9TSLm-K2oV_K96-dDA9aLIMa-Ox6YVPgc3SLEzJK9EfF4heXeVHeM_uhsub8QwQSAAlLxVwTz9nfKiua_4E/s1600/image049.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="153" data-original-width="428" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_nlD4VN1ouUtpi1YLETaZfiDbTRzzNLgXXL5-kv8V4BMHAbPd5BdPTEtK9TSLm-K2oV_K96-dDA9aLIMa-Ox6YVPgc3SLEzJK9EfF4heXeVHeM_uhsub8QwQSAAlLxVwTz9nfKiua_4E/s1600/image049.png" /></a></div>
<br />
This will produce a CSV file with job console information for only import and export security jobs.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-Q8zSH9GxSQaKs32a_3Y0rW9OYqun62avbVCTYmyZ-Sg3vuyE12CtegXuoyPf4M4sMojDEUwu6LBaWI7I6J-Umfx3Ud2Zg_nm7LUlZEF_fF57RiJjbDZLYo6swz-_I4u9PuPQdecBmlk/s1600/image050.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="180" data-original-width="1396" height="82" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-Q8zSH9GxSQaKs32a_3Y0rW9OYqun62avbVCTYmyZ-Sg3vuyE12CtegXuoyPf4M4sMojDEUwu6LBaWI7I6J-Umfx3Ud2Zg_nm7LUlZEF_fF57RiJjbDZLYo6swz-_I4u9PuPQdecBmlk/s640/image050.png" width="640" /></a></div>
<br />
It is possible to restrict the export to the job name.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpKWE70C8459k2vr77LCmNUe5KkLTPUk-qLR4EM_oRpUIaC4wLSfvl0bWqGjlr__E10vWhgQv1Sl7566IjiQL96WiLDSmVpoMeRBvCKsnBhX425IClqZiSLT6Mdubp-oo7xM2QecqIL1M/s1600/image051.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="176" data-original-width="502" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpKWE70C8459k2vr77LCmNUe5KkLTPUk-qLR4EM_oRpUIaC4wLSfvl0bWqGjlr__E10vWhgQv1Sl7566IjiQL96WiLDSmVpoMeRBvCKsnBhX425IClqZiSLT6Mdubp-oo7xM2QecqIL1M/s1600/image051.png" /></a></div>
<br />
In this example the job console information is only exported for jobs that have been named “MTL Import Security” and “MTL Export Security”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYtLH33SUccr22l3yPvmY5ctyEDyawxhpjZhMVAniiUWeGh3XflrQuB0TCwMq3ctFMXk45GOcAEIuAcvUYBkvJxKN5BP9De3AnU_pgwlQfJGKrEw-jDFcJOv2AR8sSUFjEGYFFRzjJXYg/s1600/image052.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="141" data-original-width="504" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYtLH33SUccr22l3yPvmY5ctyEDyawxhpjZhMVAniiUWeGh3XflrQuB0TCwMq3ctFMXk45GOcAEIuAcvUYBkvJxKN5BP9De3AnU_pgwlQfJGKrEw-jDFcJOv2AR8sSUFjEGYFFRzjJXYg/s1600/image052.png" /></a></div>
<br />
By default, only jobs with a completed status are exported. This can be changed by using the “jobStatusCodes” parameter and a list of comma separated codes.<br />
<br />
The possible values are:<br />
<ul style="text-align: left;">
<li><b>1<span style="white-space: pre;"> </span>Processing: Current jobs under execution</b></li>
<li><b>2<span style="white-space: pre;"> </span>Completed: Successfully completed jobs</b></li>
<li><b>3<span style="white-space: pre;"> </span>Error: Jobs failed with errors</b></li>
<li><b>4<span style="white-space: pre;"> </span>Unknown: Jobs completed with unknown status</b></li>
<li><b>5<span style="white-space: pre;"> </span>Completed with Threshold Violation: Jobs completed with threshold violation status</b></li>
<li><b>6<span style="white-space: pre;"> </span>Pending Cancel: Jobs with Pending cancel status</b></li>
<li><b>7<span style="white-space: pre;"> </span>Cancelled: Cancelled jobs</b></li>
<li><b>8<span style="white-space: pre;"> </span>Completed with Errors: Jobs completed with errors</b></li>
<li><b>9<span style="white-space: pre;"> </span>Completed with Warnings: Jobs completed with warnings</b></li>
<li><b>All Export the jobs with any status</b></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7Rohz7yo9yg-BiU-0zLw94FAmv_MNl51kUaSOXjDqINiIwLpRDkaZ2hDiQ0mZP8vGhDe-Eed0afLw6WsHMcXCWAF5-YCiyFLWg6EjsUbMq18qr9rm_dWagiQWjH4Dj9vgLJsT0OcwdXI/s1600/image053.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="177" data-original-width="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7Rohz7yo9yg-BiU-0zLw94FAmv_MNl51kUaSOXjDqINiIwLpRDkaZ2hDiQ0mZP8vGhDe-Eed0afLw6WsHMcXCWAF5-YCiyFLWg6EjsUbMq18qr9rm_dWagiQWjH4Dj9vgLJsT0OcwdXI/s1600/image053.png" /></a></div>
<br />
In this example, job console information has been exported only for jobs that have errored.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP_wZsrN52e0GqExJK3zIPXMkkOnKamMOuVMW62RzGT0KFo11XLNKRkckIPwlmX-WPqMwpimHE61iWMnUzK2WRBeFgHHMdd_k7U6UeL2tgANMwl5I56NqpeIj7HvEztd2gyGaLeu0JgE0/s1600/image054.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="140" data-original-width="1306" height="68" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP_wZsrN52e0GqExJK3zIPXMkkOnKamMOuVMW62RzGT0KFo11XLNKRkckIPwlmX-WPqMwpimHE61iWMnUzK2WRBeFgHHMdd_k7U6UeL2tgANMwl5I56NqpeIj7HvEztd2gyGaLeu0JgE0/s640/image054.png" width="640" /></a></div>
<br />
In the zip file that is produced there is a folder called “errorlogs”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim-rehi81EOfiniNTeQvagmQe1Rik-GDQeCHxsBbY1GS8j29ISSmFeuVAixwN0NQXxJmEqynmEgWxQIi_mf7GGe4s0rTVxD94V-xxjM3J0a8iSq0Fn1CkwFEiaFxXZtFH8ScVAWFo9ke8/s1600/image055.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="114" data-original-width="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim-rehi81EOfiniNTeQvagmQe1Rik-GDQeCHxsBbY1GS8j29ISSmFeuVAixwN0NQXxJmEqynmEgWxQIi_mf7GGe4s0rTVxD94V-xxjM3J0a8iSq0Fn1CkwFEiaFxXZtFH8ScVAWFo9ke8/s1600/image055.png" /></a></div>
<br />
This contains additional error files that match by job ID.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4YbKS38wvufcxyLt0Ckz4-6jjj-NAaSaZmcMQABhLZQOJJIAbrgUJS4HPufsHCZxP78XCxMow5wsM6Fz7uL14A-dISnp8UUBgQpNSdjaAQIPniKtAKVZqpPs_tjHUPPl3f6tbm8nSMbg/s1600/image056.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="153" data-original-width="279" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4YbKS38wvufcxyLt0Ckz4-6jjj-NAaSaZmcMQABhLZQOJJIAbrgUJS4HPufsHCZxP78XCxMow5wsM6Fz7uL14A-dISnp8UUBgQpNSdjaAQIPniKtAKVZqpPs_tjHUPPl3f6tbm8nSMbg/s1600/image056.png" /></a></div>
<br />
So for the job ID 18 the error file includes the following information.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirz3sOyF0S2s_oIf_hBkyHCXVx7Su-0LxeyFDcoQTp1iUvvzfviRqdO114btJ3C3ln7v0MsLcPU30Fug_-kkTtx3De7-q9vwF_4jH-LnFhb8QRpTdJyuksjWALV8Iz_q8oNo7mTG-PWm0/s1600/image057.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="105" data-original-width="885" height="75" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirz3sOyF0S2s_oIf_hBkyHCXVx7Su-0LxeyFDcoQTp1iUvvzfviRqdO114btJ3C3ln7v0MsLcPU30Fug_-kkTtx3De7-q9vwF_4jH-LnFhb8QRpTdJyuksjWALV8Iz_q8oNo7mTG-PWm0/s640/image057.png" width="640" /></a></div>
<br />
If the error files are not required, the “exportErrorDetails” parameter can be used with a value of “false”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinYL1xkeo71e_H2haif3szIpERf1M6SO4LalFkgsQT-RtkFMIxhQUmtqxMdsARx5QgvixYqbKxZMn_NEmHwI-Sy6XIdEWJww2fPVF2LPEQXVcaak-NVxLcTwznjJQ7pH2yWjz3YfCV0zQ/s1600/image058.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="188" data-original-width="367" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinYL1xkeo71e_H2haif3szIpERf1M6SO4LalFkgsQT-RtkFMIxhQUmtqxMdsARx5QgvixYqbKxZMn_NEmHwI-Sy6XIdEWJww2fPVF2LPEQXVcaak-NVxLcTwznjJQ7pH2yWjz3YfCV0zQ/s1600/image058.png" /></a></div>
<br />
This means the folder in the zip file will not include the error files.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIdfJI2I3qFLi58od3I5_JX44REs3yaqhAnJNVQGJu0QU51mQFs3QGqjah-5wwojrddgYaKj5koj0oUclRS8LUu83MPotWpuX_nsBLhYc5cAKPO0GtpyibMfx1EzipBBFnsckoa7LqvoU/s1600/image059.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="69" data-original-width="273" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIdfJI2I3qFLi58od3I5_JX44REs3yaqhAnJNVQGJu0QU51mQFs3QGqjah-5wwojrddgYaKj5koj0oUclRS8LUu83MPotWpuX_nsBLhYc5cAKPO0GtpyibMfx1EzipBBFnsckoa7LqvoU/s1600/image059.png" /></a></div>
On to the final new REST API resource and this allows dimension members to be sorted.<br />
<br />
The same jobs URL and method are used.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicb1ksY_Y2ArYU_ZIiZQgUpZmZR6Yb_mhAqfQg95KgIxvaqHBqEy1Xz-3GNb3kz0KQcXaA-qDN5WtPzlz9BGY5d1Fbud0FnojrqiNy-4tXuPoyGBWOUzi5LJfVImg5oD6NY6oT3mm0jvY/s1600/image060.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="201" data-original-width="550" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicb1ksY_Y2ArYU_ZIiZQgUpZmZR6Yb_mhAqfQg95KgIxvaqHBqEy1Xz-3GNb3kz0KQcXaA-qDN5WtPzlz9BGY5d1Fbud0FnojrqiNy-4tXuPoyGBWOUzi5LJfVImg5oD6NY6oT3mm0jvY/s1600/image060.png" /></a></div>
<br />
The “jobType” should be “Sort Members” and the “jobName” can be set to anything relevant.<br />
<br />
The “member” parameter is the parent member whose children or descendants are being sorted.<br />
<br />
By default, the sort will be applied to the children of the specified member and in ascending order.<br />
<br />
The above example will sort all the children of member “SortMe” in ascending order.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8LzdePFCJ8hocuqr0Yq6NVPKwvhnvqbjorIFpPOqqfLPkzV69j9_HlMoMtf-uip28S6bN1CRVl0fw3r9Fgt9SkW_hmhpUUDAP4tYtd5__X4ylgiQv7sEeb_LsmhN8cZrP_GhnU1OVZBg/s1600/image061.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="185" data-original-width="135" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8LzdePFCJ8hocuqr0Yq6NVPKwvhnvqbjorIFpPOqqfLPkzV69j9_HlMoMtf-uip28S6bN1CRVl0fw3r9Fgt9SkW_hmhpUUDAP4tYtd5__X4ylgiQv7sEeb_LsmhN8cZrP_GhnU1OVZBg/s1600/image061.png" /></a></div>
<br />
Just like with all the other resources the job status can be checked.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidxTEqGuTqPymMqs62j9pC_ikP3bEtJy59F8SThGcQcLj0L77jia8y67aglEOqmi-JLn_4B5n3077ltAGJD16D9uGGL4PkoVvIjS11LTjt365O89v46ju-vhIBRIY_d8a9E4QBUg44Icc/s1600/image062.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="108" data-original-width="417" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidxTEqGuTqPymMqs62j9pC_ikP3bEtJy59F8SThGcQcLj0L77jia8y67aglEOqmi-JLn_4B5n3077ltAGJD16D9uGGL4PkoVvIjS11LTjt365O89v46ju-vhIBRIY_d8a9E4QBUg44Icc/s1600/image062.png" /></a></div>
<br />
The children of “SortMe” have been sorted in ascending order.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCishHt76gvZn9hCHsq35SZWCbbHLZFrK0DatGh_vPwfqdVBXxU382fxQ8Fdbu5LQDEJPPaD7aSpURdtqTGQDDpRB3KE-Daky6AOGD9CupN0EO0xu6EEEa1O2caczLDV9xbO4-Wy32s6Q/s1600/image063.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="186" data-original-width="135" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCishHt76gvZn9hCHsq35SZWCbbHLZFrK0DatGh_vPwfqdVBXxU382fxQ8Fdbu5LQDEJPPaD7aSpURdtqTGQDDpRB3KE-Daky6AOGD9CupN0EO0xu6EEEa1O2caczLDV9xbO4-Wy32s6Q/s1600/image063.png" /></a></div>
<br />
Now let’s add some children to the “Z_Product” member.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQsd-xvc0QKz6vvqjKm44ptIp8NtvgxZqeEH7aJ_BFaqthtwe16rr4gzXSOIuiN6N5gxCGfpqKNUpwNZm1OwqaqRfpd0jMoJIoEizHO6SRFbUKZHinlnvZW0CwSwoTRZQq5Hs8eLJqQgE/s1600/image064.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="117" data-original-width="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQsd-xvc0QKz6vvqjKm44ptIp8NtvgxZqeEH7aJ_BFaqthtwe16rr4gzXSOIuiN6N5gxCGfpqKNUpwNZm1OwqaqRfpd0jMoJIoEizHO6SRFbUKZHinlnvZW0CwSwoTRZQq5Hs8eLJqQgE/s1600/image064.png" /></a></div>
<br />
The body of the REST request has been updated to include the “order” and “type” parameters.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizkFTxLyh_ZO1jLin6E0PZrXcWKFY_yAIG7zCPdJnIt8aOSsWmQG_yg6Pfdw5XVLWyELAhpQo31zgPme2kwHm3vRjEuCcqfwPLWgrl0khsrfgTppn7mE-mT0VjfxrsYUFUSgGY_WtXqDg/s1600/image065.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="171" data-original-width="379" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizkFTxLyh_ZO1jLin6E0PZrXcWKFY_yAIG7zCPdJnIt8aOSsWmQG_yg6Pfdw5XVLWyELAhpQo31zgPme2kwHm3vRjEuCcqfwPLWgrl0khsrfgTppn7mE-mT0VjfxrsYUFUSgGY_WtXqDg/s1600/image065.png" /></a></div>
<br />
The descendants of member “SortMe” have been sorted in descending order.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9IU0zFxxeTV3oKZbAFGD40xDrsXWVHWHTbmnW5lboezMmcHMdB1nkg-xljP5ICd9oNLAROIP4hyphenhyphenD87OU04BYEKT9SkbkT93blmdLQaUO69L-LIYTK2p5J-U1_t0EvhnkMlSIz_OY2yGw/s1600/image066.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="117" data-original-width="108" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9IU0zFxxeTV3oKZbAFGD40xDrsXWVHWHTbmnW5lboezMmcHMdB1nkg-xljP5ICd9oNLAROIP4hyphenhyphenD87OU04BYEKT9SkbkT93blmdLQaUO69L-LIYTK2p5J-U1_t0EvhnkMlSIz_OY2yGw/s1600/image066.png" /></a></div>
<br />
This sort functionality has also been added to EPM Automate with the “sortmember” command.<br />
<br />
As you would expect it is very simple to use and the command has the following syntax.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj2PrHNVsXxwvYUZTAZrGFkFhEMYwCKMI88p92LZq9_3Hh52rnKwSx_krOxP39dcdkWH_Cg2Xuzn91BhwJ-bJkodEQHo-I0eZe5ojPEdNNC5GxPw2Zur0yxSQEMIi46mTteP3tDigcBfg/s1600/image067.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="132" data-original-width="845" height="99" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhj2PrHNVsXxwvYUZTAZrGFkFhEMYwCKMI88p92LZq9_3Hh52rnKwSx_krOxP39dcdkWH_Cg2Xuzn91BhwJ-bJkodEQHo-I0eZe5ojPEdNNC5GxPw2Zur0yxSQEMIi46mTteP3tDigcBfg/s640/image067.png" width="640" /></a></div>
<br />
The following will sort the descendants of the member “SortMe” in ascending order.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO6R06rBz4on5NDk7uqvtVfpTSvBYkM78pmZ7Cjgl3PYPrSwu420UICSm8AIiz88LjRtgmwoC_oQiYCYkK-MbmX7-W8PbF7JCAIRYh8dXBjxSCBtfZZOC7zki5KoeIP4kKN08mKRjh9RM/s1600/image068.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="65" data-original-width="812" height="50" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO6R06rBz4on5NDk7uqvtVfpTSvBYkM78pmZ7Cjgl3PYPrSwu420UICSm8AIiz88LjRtgmwoC_oQiYCYkK-MbmX7-W8PbF7JCAIRYh8dXBjxSCBtfZZOC7zki5KoeIP4kKN08mKRjh9RM/s640/image068.png" width="640" /></a></div>
<br />
I didn’t need to include the “order” parameter as the default is to sort in ascending order.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWYelnb-Smhh5i49o3onQB2krF_a0xhY7Cg5vYfrV6Xlqe7b4fooXEKVJHLgTOj4bpMyODN4jiTfRdexqm6ON38req2IwC5J2PeCiVK06I0KJf-YICppTCWIh-GHB02yhUNNGAYybt870/s1600/image069.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="116" data-original-width="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWYelnb-Smhh5i49o3onQB2krF_a0xhY7Cg5vYfrV6Xlqe7b4fooXEKVJHLgTOj4bpMyODN4jiTfRdexqm6ON38req2IwC5J2PeCiVK06I0KJf-YICppTCWIh-GHB02yhUNNGAYybt870/s1600/image069.png" /></a></div>
<br />
Another new command to be introduced into EPM Automate allows the application to be put into administration mode or returned to all users.<br />
<br />
This functionality has been available in the REST API for a while, I covered this in a previous blog which you can read about <b><a href="http://john-goodwin.blogspot.com/2019/02/epm-cloud-new-rest-apis-to-manage-and.html">here</a></b>.<br />
<br />
The new EPM Automate command is named “ApplicationAdminMode” and only requires either “true” or “false” to be included.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr_GWNgn44ouat2ueSs0wDwdifg4mVSRadhCo4BrfkyqOdcbsH5D5RsJXGCJ6r8j0Hv-L8wOu6TL2E0daKopbhIj8sVUtaqf03kPqNurd08XVirynaFvDgw7W2ZxRtPUrWIlx3EXiccJg/s1600/image070.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="104" data-original-width="570" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr_GWNgn44ouat2ueSs0wDwdifg4mVSRadhCo4BrfkyqOdcbsH5D5RsJXGCJ6r8j0Hv-L8wOu6TL2E0daKopbhIj8sVUtaqf03kPqNurd08XVirynaFvDgw7W2ZxRtPUrWIlx3EXiccJg/s1600/image070.png" /></a></div>
<br />
Before running the command, the application is available for all users.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeTDSlelrHOluoRUADH8ApA_KCw8wUp4w0dtAHH9vmmJyWVHYjE0PbdaQ5h0fsw7C3neIbkTTJZJjeIajrF9mP-Zq_YW0M55-7BjYZ0BB5pOkYl9tsl0YJB5z7D2S4xqDwLVKxEsJSUKQ/s1600/image071.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="38" data-original-width="485" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeTDSlelrHOluoRUADH8ApA_KCw8wUp4w0dtAHH9vmmJyWVHYjE0PbdaQ5h0fsw7C3neIbkTTJZJjeIajrF9mP-Zq_YW0M55-7BjYZ0BB5pOkYl9tsl0YJB5z7D2S4xqDwLVKxEsJSUKQ/s1600/image071.png" /></a></div>
<br />
Running the command with the “true” parameter puts the application into administrator mode.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh62BQWi9d_He31pEYBqb1oBCjVS4FX8F8z6H_qhlR-XsUEIg5q8y28-Rse9JnJqYehLrqh57uqUTAu_8T-oReSNS_bRkBLHDI2qzeoABZqgAk1ACSjS14aSwG7syeMFdcUH31dNm_4Hdk/s1600/image072.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="78" data-original-width="673" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh62BQWi9d_He31pEYBqb1oBCjVS4FX8F8z6H_qhlR-XsUEIg5q8y28-Rse9JnJqYehLrqh57uqUTAu_8T-oReSNS_bRkBLHDI2qzeoABZqgAk1ACSjS14aSwG7syeMFdcUH31dNm_4Hdk/s1600/image072.png" /></a></div>
<br />
This is confirmed by checking the settings section in the UI.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOlPQTnTIZRDczzuqX6rqV3cuyYWjAoziz9mprKTEjMUzPH4ffRJq309dTtNU7Mx9FfSwPhmb-g9xsbAQ22-FCipZz10lecfiWa7SRffmYly6qlpCRbQkStPphFF2ebMBc7Fcbg18lGzo/s1600/image073.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="33" data-original-width="475" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOlPQTnTIZRDczzuqX6rqV3cuyYWjAoziz9mprKTEjMUzPH4ffRJq309dTtNU7Mx9FfSwPhmb-g9xsbAQ22-FCipZz10lecfiWa7SRffmYly6qlpCRbQkStPphFF2ebMBc7Fcbg18lGzo/s1600/image073.png" /></a></div>
<br />
The application can be returned to all users by issuing the command with the “false” parameter.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM4Q1fJJ-sipNtz0Nml2PkfQFNRL0IprOZmsJsmb8l9rP7Jc9jar3dAZH0qSsrfRS8u03znlGIyjXLXiRdmL6ghzxP4W8hBWTBpwOvs0lJ1Pj6d29ByDqch8NN_1Fwd8ymkvZuKUCfUbU/s1600/image074.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="77" data-original-width="625" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM4Q1fJJ-sipNtz0Nml2PkfQFNRL0IprOZmsJsmb8l9rP7Jc9jar3dAZH0qSsrfRS8u03znlGIyjXLXiRdmL6ghzxP4W8hBWTBpwOvs0lJ1Pj6d29ByDqch8NN_1Fwd8ymkvZuKUCfUbU/s1600/image074.png" /></a></div>
<br />
The application is now all enabled for all users.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV1zBkGtijVb_6ercnyGGFbJM4b98o7bylVFu5yzfyeLjGzUqKqrOUrLmQqgxq6bwvc5B7KVfnub9876oUEqLbCi6dqtTY99W_Vbb0DQTPf-Ytfi57IEA983jOrO5Jo_XWJy4xBxIGQT0/s1600/image075.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="40" data-original-width="476" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV1zBkGtijVb_6ercnyGGFbJM4b98o7bylVFu5yzfyeLjGzUqKqrOUrLmQqgxq6bwvc5B7KVfnub9876oUEqLbCi6dqtTY99W_Vbb0DQTPf-Ytfi57IEA983jOrO5Jo_XWJy4xBxIGQT0/s1600/image075.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
That completes my look at all the new REST API functionality and some of the more useful new EPM Automate commands.<br />
<br />
I hope you have found it useful!</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com2tag:blogger.com,1999:blog-6575283218005807475.post-79971980762565344892019-03-24T12:06:00.000-07:002019-03-24T12:06:18.401-07:00Hybrid FDMEE and upcoming Oracle Cloud changes<div dir="ltr" style="text-align: left;" trbidi="on">
If you are not already aware, there are security protocol changes being made in the 19.05 Cloud release that will affect hybrid FDMEE implementations.<br />
<br />
An excerpt from the Cloud Readiness document:<br />
<br />
<i><b class="yellow">“Starting with the May 2019 update (Release 19.05) to EPM Services, Oracle will support only Transport Layer Security protocol version 1.2 (TLS 1.2) to communicate with EPM Cloud. To ensure the highest level of authentication and data encryption security, TLS 1.0 and TLS 1.1 will no longer be supported after your environments are updated on May 3, 2019.”</b></i><br />
<br />
Now I have already read an article on this topic and Oracle support documents which outline how to be compliant with the <b><a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS</a></b> changes, but in my opinion the guidance has been made overcomplicated and confusing.<br />
<br />
In this post I am going to provide my take on what is required to be ready for when the security changes are implemented. The objective is not to overly complicate matters, nor to advise to apply every critical patch update across your whole EPM estate. The idea is that you already have a functioning hybrid FDMEE implementation and you need to know what requires updating which will have minimal impact to your environment.<br />
<br />
Please note this is just my opinion, so feel free to disagree and challenge my view.<br />
<br />
Basically, FDMEE integrations with EPM Cloud are achieved using the REST API, communication between FDMEE and the Cloud is only from the FDMEE Java web application. This gives a clue to where to focus first and that is with Java. If there have been no updates to the version of Java deployed with FDMEE 11.1.2.4 then it will be running Java 6 update 35. This version of Java is so old it does not support TLS 1.2 so when the upcoming changes are made, FDMEE integrations with Oracle Cloud will fail.<br />
<br />
The Oracle Java roadmap highlights just how far behind 11.1.2.4 is. If you put it into perspective Java 12 has recently been released and 11.1.2.4 is running on Java 6 which extended support ended in December 2018 so there will no further patch updates.<br />
<br />
If you want to read about this in more detail, then take a look at the Oracle support document – “<b>Oracle Java SE 6 and JRockit End of Support (Doc ID 2244851.1)</b>”<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT7bYlZRoKC99EiBZPhEcyBoFvEMJLBvsxiLpxR4c7nz43K-0SkKvjLeK5FHkKwgOQBZmWdTv6ZjaTQb-veziiRas-tzRqsVllCQIqk6w-JrGmpYtgvTjQRa-vQw-CxsNCUqFjk1JXMFU/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="478" data-original-width="547" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT7bYlZRoKC99EiBZPhEcyBoFvEMJLBvsxiLpxR4c7nz43K-0SkKvjLeK5FHkKwgOQBZmWdTv6ZjaTQb-veziiRas-tzRqsVllCQIqk6w-JrGmpYtgvTjQRa-vQw-CxsNCUqFjk1JXMFU/s1600/image001.png" /></a></div>
<br />
So, what are the options when it comes to updating the version of Java to support TLS 1.2? Well, 11.1.2.4 only supports Java 6 and 7 so you can forget about anything higher.<br />
<br />
If you have already updated you EPM environment to Java 6 update 121+ (don’t hold me on that version though) or to Java 7 then you should be ready for TLS 1.2, though to be sure you should really test to confirm.<br />
<br />
Before making any changes, I double checked the supported protocols against the EPM Cloud instance with the help of an <b><a href="https://www.ssllabs.com/ssltest/">SSL labs</a></b> test.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEdXI4LfkgeLolWYDAQg8-j1I2rafSpU3iouQ-hjNbcR8QGi9bKuS-T2KerGhbpCi8kpwRmSyNpbPhmpMkhedeQhxwoQhZYW06Lxm74IKAtnb79PpwyW-h5mhT5xpV51j8TDjqav3NkpY/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="198" data-original-width="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEdXI4LfkgeLolWYDAQg8-j1I2rafSpU3iouQ-hjNbcR8QGi9bKuS-T2KerGhbpCi8kpwRmSyNpbPhmpMkhedeQhxwoQhZYW06Lxm74IKAtnb79PpwyW-h5mhT5xpV51j8TDjqav3NkpY/s1600/image002.png" /></a></div>
<br />
Only TLS 1.2 is enabled which is what I wanted to see. If you have time and would like to test out on an Oracle Cloud instance, then raise an SR and they will provide temporary access.<br />
<br />
In FDMEE I added a new target Cloud application.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4nfaNLeLSgNSi6P5UghNeO_UAm_4gzLMJ7VPKCdqdHiEj5nlcimdLSONMQxZmPtxLNSlhx4Qf4FOFqAye7ub8B1VlbFyfj6C1GAI8e3thV2ta-Se0fvSutvK9iF__ePe28Ne2gsO7oxA/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="143" data-original-width="129" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4nfaNLeLSgNSi6P5UghNeO_UAm_4gzLMJ7VPKCdqdHiEj5nlcimdLSONMQxZmPtxLNSlhx4Qf4FOFqAye7ub8B1VlbFyfj6C1GAI8e3thV2ta-Se0fvSutvK9iF__ePe28Ne2gsO7oxA/s1600/image003.png" /></a></div>
<br />
Instead of the application selection window being displayed, an SSL error was generated.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6tKBA7amQk8UxkKUZk43fT320ixwobDXvEgsYrs_8J-YKCk1W7ORMf2X0r4TprzWbg0UImO_JZRLck-dP84M3D4YCd7GhXPaALz_Tk3lmugoGDdE4_SIMUGV1qUD4-Bd2cQshYjVlC7g/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="152" data-original-width="373" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6tKBA7amQk8UxkKUZk43fT320ixwobDXvEgsYrs_8J-YKCk1W7ORMf2X0r4TprzWbg0UImO_JZRLck-dP84M3D4YCd7GhXPaALz_Tk3lmugoGDdE4_SIMUGV1qUD4-Bd2cQshYjVlC7g/s1600/image004.png" /></a></div>
<br />
With TLS debugging enabled, the logs confirmed that the issue was related to communication being initiated with the TLS 1.0 protocol.<br />
<br />
<b>[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)', READ: </b><b class="yellow">TLSv1 Alert</b><b>, length = 2</b><br />
<b>[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)', RECV </b><b class="yellow">TLSv1 ALERT: fatal, handshake_failure</b><br />
<br />
I will go through what I believe is a simple method for updating Java to a version that should support TLS 1.2, it is not the one which Oracle sometimes advises and involves finding and replacing Java versions in files.<br />
<br />
I am going to start out with Java 7 as that makes more sense to upgrade to. My example will be on Windows, but the concept should be similar for other operating systems.<br />
<br />
If you look in the middleware home directory, you will likely see the following Java versions.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXWOAbzN4yBR-xVEFmXmE834WJ_q-ZkkRQehDAB9BQdYSeJk-sbh07gMKABQOS1t-HFQaElen5U3KB4hRFy9UTieApA71N-PVr0pLX614ENf4L_I4iH7AuMCbgKJN2H9b9z_BZnYx_t34/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="104" data-original-width="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXWOAbzN4yBR-xVEFmXmE834WJ_q-ZkkRQehDAB9BQdYSeJk-sbh07gMKABQOS1t-HFQaElen5U3KB4hRFy9UTieApA71N-PVr0pLX614ENf4L_I4iH7AuMCbgKJN2H9b9z_BZnYx_t34/s1600/image005.png" /></a></div>
<br />
It is only the JDK which will require updating to Java 7, this is because JRockit does not exist after 6 so we will configure to only use the JDK.<br />
<br />
If you are looking to download Java versions from Oracle support, then I recommend the document – “<b>All Java SE Downloads on MOS (Doc ID 1439822.1)</b>”.<br />
<br />
I am going to be updating Java to the following version.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJji7bUgU1HP1FO5wnL8OsYozmE-spL2J4tPCPV8mVW-Q1mJKsvXQnqtInqbxZ11Hr9qqeAQmh6wWWvK1byc_ssNSRi1EYXcuGcx01ou8S1alrsrLCRIxRlyhrhvxZodwifnxqKrwTdXc/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="142" data-original-width="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJji7bUgU1HP1FO5wnL8OsYozmE-spL2J4tPCPV8mVW-Q1mJKsvXQnqtInqbxZ11Hr9qqeAQmh6wWWvK1byc_ssNSRi1EYXcuGcx01ou8S1alrsrLCRIxRlyhrhvxZodwifnxqKrwTdXc/s1600/image006.png" /></a></div>
<br />
The patch is simple to install as it is just an executable.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh72zUSk_NQOtUxdxesMg8cgOtuIKJTrKAnuTHu29-giv5egNDSEZck-alFA7mKI_A2viq8RLFvxsfpMuY7-dCEIbePuGhhOKFg-80RUubS_bQthEm4WaRQBKZ5_eyRnfZ6Rgyo_5dM9Xc/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="51" data-original-width="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh72zUSk_NQOtUxdxesMg8cgOtuIKJTrKAnuTHu29-giv5egNDSEZck-alFA7mKI_A2viq8RLFvxsfpMuY7-dCEIbePuGhhOKFg-80RUubS_bQthEm4WaRQBKZ5_eyRnfZ6Rgyo_5dM9Xc/s1600/image007.png" /></a></div>
<br />
I set the install path to be the middleware home directory, so it is in the same location as the existing Java versions.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfMqVSJ03u02zNi5RxtNV5BixKHBTs4Ja7vHyCVhuKgO4dm3NBb5SM9CuWJDM1jKnnW29zTttoUWKzhZ1Sls-Ao-DDCJ7s5gLiuqEPxpfYTkUwfvNkPvRJukI3iRjvBVV2lc7AiaU2-1Y/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="393" data-original-width="514" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfMqVSJ03u02zNi5RxtNV5BixKHBTs4Ja7vHyCVhuKgO4dm3NBb5SM9CuWJDM1jKnnW29zTttoUWKzhZ1Sls-Ao-DDCJ7s5gLiuqEPxpfYTkUwfvNkPvRJukI3iRjvBVV2lc7AiaU2-1Y/s1600/image008.png" /></a></div>
<br />
There are now three Java versions.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB3BS1b1AwE0392x7l5WlkoJylbxXfE9CZnoRjfzsGT5ueIMahr1svuvEvF-1Ivl0RToOQtvsJoYOTpJk5eQtPBHyV7_hYafwm2YGCwRrR-T0a45MMhLi_pw3US2L5hi1SocSweLS_3_8/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="127" data-original-width="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB3BS1b1AwE0392x7l5WlkoJylbxXfE9CZnoRjfzsGT5ueIMahr1svuvEvF-1Ivl0RToOQtvsJoYOTpJk5eQtPBHyV7_hYafwm2YGCwRrR-T0a45MMhLi_pw3US2L5hi1SocSweLS_3_8/s1600/image009.png" /></a></div>
<br />
The Java 6 directories were renamed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaODzN-zm5vpK2-LcwZjJGnZgAoqUQno4EZfmqs_qZzdrzYMc32dS-S0pP14AqsBCqr6I3D1q7T8VVjkAnR7JxQjV9JbEOAZ4W1TVqNRMuyYAs3-uESxWQ2WT13xDoHmoeL3aRpDCiIs4/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="103" data-original-width="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaODzN-zm5vpK2-LcwZjJGnZgAoqUQno4EZfmqs_qZzdrzYMc32dS-S0pP14AqsBCqr6I3D1q7T8VVjkAnR7JxQjV9JbEOAZ4W1TVqNRMuyYAs3-uESxWQ2WT13xDoHmoeL3aRpDCiIs4/s1600/image010.png" /></a></div>
<br />
Now the next step is to use “<b><a href="https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/mklink">mklink</a></b>” to create a symbolic link to the new Java location. The old Java 6 directories will be set as the link name. This means anything referring to jrockit_160_37 and jdk160_35 will be directed to the new Java installation, so no need to mess about trying to find and replace Java versions in files. Also, if you update the version of Java in the future, it is as simple as recreating the symbolic links.<br />
<br />
The syntax for “mklink” is:<br />
<br />
<b class="yellow">mklink /d <link> <target></b><br />
<b><br /></b>
<b class="yellow">/d</b><b> - Creates a directory symbolic link.</b><br />
<b class="yellow"><Link></b><b> -Specifies the name of the symbolic link that is being created.</b><br />
<b class="yellow"><Target></b><b> - Specifies the path that the new symbolic link refers to.</b><br />
<br />
It is as simple as running the following for the JDK.<br />
<br />
<b class="yellow">mklink /d E:\Oracle\Middleware\jdk160_35 E:\Oracle\Middleware\jdk170_211</b><br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc8nC_BPRQhkIGHA0OKUf4bUk7CgBrnz0b_aZs2Q18bbzYyFHlO_21QUdPSpg1bxeL9jChPJ8ZE33sf30-Xc4moGrqEXP2Z2bG4k5x36n58NBB6nhIoLm3wpYJ-oxhgJrJ-r4nT2eMgo4/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="75" data-original-width="786" height="61" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc8nC_BPRQhkIGHA0OKUf4bUk7CgBrnz0b_aZs2Q18bbzYyFHlO_21QUdPSpg1bxeL9jChPJ8ZE33sf30-Xc4moGrqEXP2Z2bG4k5x36n58NBB6nhIoLm3wpYJ-oxhgJrJ-r4nT2eMgo4/s640/image011.png" width="640" /></a></div>
<br />
Then for JRockit:<br />
<br />
<b class="yellow">mklink /d E:\Oracle\Middleware\jrockit_160_37 E:\Oracle\Middleware\jdk170_211</b><br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn3hVcw4zzU8ihemd4y8Kb0vpFSnYACCkQRKbM3IoAOJHXoap0DLR4q4suiUVU_ooz9AseAktugD_VzYRzZ08igR7qNf4hhHwpcCjLE-DPUXKlOxmD9BDdexf4pvt1mX53ahNjNBN3kIc/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="71" data-original-width="820" height="54" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn3hVcw4zzU8ihemd4y8Kb0vpFSnYACCkQRKbM3IoAOJHXoap0DLR4q4suiUVU_ooz9AseAktugD_VzYRzZ08igR7qNf4hhHwpcCjLE-DPUXKlOxmD9BDdexf4pvt1mX53ahNjNBN3kIc/s640/image012.png" width="640" /></a></div>
<br />
In the middleware home directory there are now two symbolic links created.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6hNJU0RzfVU1YiZY_9o0JAvfr-Wvm1NO6qzraBboTaXTJVYCd8PFXzOuHm6qAOGUgDGvdzfd97Czb9td1ZeQd8sGVvBP-g8noYPXA28egPFxsMXgHupNZxRq5zOaDfe1PvcFkl-dU5qI/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="98" data-original-width="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6hNJU0RzfVU1YiZY_9o0JAvfr-Wvm1NO6qzraBboTaXTJVYCd8PFXzOuHm6qAOGUgDGvdzfd97Czb9td1ZeQd8sGVvBP-g8noYPXA28egPFxsMXgHupNZxRq5zOaDfe1PvcFkl-dU5qI/s1600/image013.png" /></a></div>
<br />
The properties show that the target is the Java 7 directory.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMY35k4SMl61bappogtqtX1FR0p7pcF4QE4XFWpDqkADclerXPFbtg5wuvqqxAYcu1UG7Xq29LOdVVZ6rmod3rPrX6iKm3H2qvmvnJeIguyCchXoD5mqWhl8EwHzH5V3htYy2PLWEhojo/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="216" data-original-width="377" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMY35k4SMl61bappogtqtX1FR0p7pcF4QE4XFWpDqkADclerXPFbtg5wuvqqxAYcu1UG7Xq29LOdVVZ6rmod3rPrX6iKm3H2qvmvnJeIguyCchXoD5mqWhl8EwHzH5V3htYy2PLWEhojo/s1600/image014.png" /></a></div>
<br />
For example, if I go to the Java 6 JDK directory it might look like I am in that directory, but it is pointing to the Java 7 directory.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD97pbI0DKckGv36pfbfZqkOP_vUSz1CGAlDqv6-Fc96onOspZNccVE306e8QIv-Qvrah2iQRqwrljmWeHonxzS6RxS3ZeLf90ed6-5WQZDN5hyphenhyphencsvqTESl5jtHShiZmxHUJqvtRy-o0I/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="100" data-original-width="530" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD97pbI0DKckGv36pfbfZqkOP_vUSz1CGAlDqv6-Fc96onOspZNccVE306e8QIv-Qvrah2iQRqwrljmWeHonxzS6RxS3ZeLf90ed6-5WQZDN5hyphenhyphencsvqTESl5jtHShiZmxHUJqvtRy-o0I/s1600/image015.png" /></a></div>
<br />
This makes life much easier as there is no need to go searching through files to repoint to the new Java installation.<br />
<br />
Please note if your environment is across multiple servers you will need to update Java in each of them.<br />
<br />
There is one more change that needs to be made before I can test. Each of the Java web applications will be accessing a Java file in a JRockit directory which will need pointing to the equivalent JDK directory.<br />
<br />
To make this change, the Windows registry editor is required as well as the key for each of the web applications, for example:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8TQo8YEYbNIf8mwicQEqAVeRNi0Hzz3pIM8gNVcH_ILMUkWLj6qejT2Khj4fEdDM56CAclX66GH9IEHDfiA64RElQAwK1k-BuvW8Jk2Tddjq3myQg5nd9akK7-Oznj0czKWYDIS2xEOQ/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="218" data-original-width="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8TQo8YEYbNIf8mwicQEqAVeRNi0Hzz3pIM8gNVcH_ILMUkWLj6qejT2Khj4fEdDM56CAclX66GH9IEHDfiA64RElQAwK1k-BuvW8Jk2Tddjq3myQg5nd9akK7-Oznj0czKWYDIS2xEOQ/s1600/image016.png" /></a></div>
<br />
There will be a “JavaDll” string pointing to a JRockit directory.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp1y1FyebXUkTjc7MT9FJwBnbhRrm4AwJ5gdL73cUnrtN3vzhMLO0-gBjZU8jzleySfBRzFCVf0aAAEOLemX48l_hC1apiZX5i79IyyHlvlI31G3N8JGpE2KkiCWnUo6Q7EHQzL-izfRk/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="176" data-original-width="394" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp1y1FyebXUkTjc7MT9FJwBnbhRrm4AwJ5gdL73cUnrtN3vzhMLO0-gBjZU8jzleySfBRzFCVf0aAAEOLemX48l_hC1apiZX5i79IyyHlvlI31G3N8JGpE2KkiCWnUo6Q7EHQzL-izfRk/s1600/image017.png" /></a></div>
<br />
This can be updated to the equivalent JDK directory, notice that this is kept as the symbolic link location so no modifications are required if Java is upgraded again.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ8Laxl5X-G3aavmlA8klOlMxXR-kBEA5agQOctjG-p9ZE2wnkswEt3EtHEuMaeE63oGPk7kviit0QjDSDJpcnSNUgZe7Hf0rnv-8pM3aasdPe_xTHZJcAL6QhyEb7KmQIFxhyphenhyphenIm3oURk/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="176" data-original-width="394" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ8Laxl5X-G3aavmlA8klOlMxXR-kBEA5agQOctjG-p9ZE2wnkswEt3EtHEuMaeE63oGPk7kviit0QjDSDJpcnSNUgZe7Hf0rnv-8pM3aasdPe_xTHZJcAL6QhyEb7KmQIFxhyphenhyphenIm3oURk/s1600/image018.png" /></a></div>
<br />
This change will need to be made in the registry for each of the Java web applications.<br />
<br />
All done and ready to test once the services have started.<br />
<br />
In FDMEE a new Cloud application is added.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4nfaNLeLSgNSi6P5UghNeO_UAm_4gzLMJ7VPKCdqdHiEj5nlcimdLSONMQxZmPtxLNSlhx4Qf4FOFqAye7ub8B1VlbFyfj6C1GAI8e3thV2ta-Se0fvSutvK9iF__ePe28Ne2gsO7oxA/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="143" data-original-width="129" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4nfaNLeLSgNSi6P5UghNeO_UAm_4gzLMJ7VPKCdqdHiEj5nlcimdLSONMQxZmPtxLNSlhx4Qf4FOFqAye7ub8B1VlbFyfj6C1GAI8e3thV2ta-Se0fvSutvK9iF__ePe28Ne2gsO7oxA/s1600/image003.png" /></a></div>
<div style="text-align: left;">
</div>
<br />
<div>
This time the result is much better, and no error is displayed.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRp_WRKIBmZzRdTPPwDyiDchwhDp3W04LUsx8FtzGa4ghy9LZhQn3-mgio1ouNUsf-V385B9T1P0J_sOD47dgWG1YM302kWedE-o_u7L1Sd4UXEXMPyWfdW3OKLeffN0rKTFcRiQJiiGk/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="130" data-original-width="326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRp_WRKIBmZzRdTPPwDyiDchwhDp3W04LUsx8FtzGa4ghy9LZhQn3-mgio1ouNUsf-V385B9T1P0J_sOD47dgWG1YM302kWedE-o_u7L1Sd4UXEXMPyWfdW3OKLeffN0rKTFcRiQJiiGk/s1600/image019.png" /></a></div>
<br />
With TLS debugging enabled, the log this time confirms the communication is using the TLS 1.2 protocol.<br />
<br />
<b>[ACTIVE] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)', READ: </b><b class="yellow">TLSv1.2 Handshake, length = 87</b><br />
<br />
To be sure everything is working as expected I tested out refreshing metadata.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEGMGcKvfzDnZbwcGRg7VFuRO9rxaAurMwWB9DEYkE7Qp00lKbZS4hZINBAl8X42vNkvGWMhIm8FpwkIbkeg7Mu23dvfzXJ2f9JowAxHmp_6i4L5XKO-tYc-oF0v2c43-p4gwXDUrJNXo/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="29" data-original-width="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEGMGcKvfzDnZbwcGRg7VFuRO9rxaAurMwWB9DEYkE7Qp00lKbZS4hZINBAl8X42vNkvGWMhIm8FpwkIbkeg7Mu23dvfzXJ2f9JowAxHmp_6i4L5XKO-tYc-oF0v2c43-p4gwXDUrJNXo/s1600/image020.png" /></a></div>
<br />
This was successful.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFajrnOy_RBicud1D1tiHmY__TkzVU9WRFoA7-6Q-Az0b1vHltWMoFdJHXYRnINtXSTDk4sx3zIjDS7q-K0UIBnmvWI14BsYbadQK5RiUPGL7ryW7uZJca2et5HCJWrURGOkf3mUjXgCA/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="105" data-original-width="477" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFajrnOy_RBicud1D1tiHmY__TkzVU9WRFoA7-6Q-Az0b1vHltWMoFdJHXYRnINtXSTDk4sx3zIjDS7q-K0UIBnmvWI14BsYbadQK5RiUPGL7ryW7uZJca2et5HCJWrURGOkf3mUjXgCA/s1600/image021.png" /></a></div>
<br />
Next, refreshing members.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHiema2lxdCoGTZr5z2-LFa94UIHcBZHKTVb9QRp4hOd9MYP0pZjPW3WapqNg8AC4VF2dG3RkedpprbYWrjwF_KrfQpzp-ig6VWwrq54A8T-BmcDSOqZFhwhHlhca-s6oj4mHRqNXpDU4/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="29" data-original-width="110" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHiema2lxdCoGTZr5z2-LFa94UIHcBZHKTVb9QRp4hOd9MYP0pZjPW3WapqNg8AC4VF2dG3RkedpprbYWrjwF_KrfQpzp-ig6VWwrq54A8T-BmcDSOqZFhwhHlhca-s6oj4mHRqNXpDU4/s1600/image022.png" /></a></div>
<br />
No problems with this.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyoJqJptVEA3FLSNiQ36gYMbb66uD2N3ObrgxJufHiEP2a8YBO_MBtw1iYdCtgUypTfi28bong2_YuS1iCjpe7BNNlt72CBwMBIDxY7Lha3IMyxG2rRU-mvFWvcOeJQ0Oai3wJ8bfFm0s/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="109" data-original-width="478" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyoJqJptVEA3FLSNiQ36gYMbb66uD2N3ObrgxJufHiEP2a8YBO_MBtw1iYdCtgUypTfi28bong2_YuS1iCjpe7BNNlt72CBwMBIDxY7Lha3IMyxG2rRU-mvFWvcOeJQ0Oai3wJ8bfFm0s/s1600/image023.png" /></a></div>
<br />
Now for a data load from on-premise FDMEE to EPM Cloud.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrXqJxlDumY2gpSHA1_BEr4BpRSMzKex8gWgBC1YJFc6sAl-Ey_5mSBGVNFEjBfiruXq0fTiOXabjgoDyCHigUz_E0jX5fbPnScEcDX3GHhI2PeHn9f9ZN2sWxZI9fFrAivbMTTfDuxmE/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="179" data-original-width="413" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrXqJxlDumY2gpSHA1_BEr4BpRSMzKex8gWgBC1YJFc6sAl-Ey_5mSBGVNFEjBfiruXq0fTiOXabjgoDyCHigUz_E0jX5fbPnScEcDX3GHhI2PeHn9f9ZN2sWxZI9fFrAivbMTTfDuxmE/s1600/image024.png" /></a></div>
<br />
I am testing out with a numeric load first which will create a file that is in the format for a direct load to Essbase.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieX1xm4jRmcvZOFh89xtEfs4FdHzBGFj1zrcV2g4UsVi3cpGsTp6d9FsiZEVe6UpNo8cQJgPQ1Q2SR63kbXberslCblhepLUysej6rgeLYPGIq13s6cnY-89NYbTL1iaVlFQ5H7iWuj7Q/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="87" data-original-width="436" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieX1xm4jRmcvZOFh89xtEfs4FdHzBGFj1zrcV2g4UsVi3cpGsTp6d9FsiZEVe6UpNo8cQJgPQ1Q2SR63kbXberslCblhepLUysej6rgeLYPGIq13s6cnY-89NYbTL1iaVlFQ5H7iWuj7Q/s1600/image025.png" /></a></div>
<br />
The file will be uploaded using the REST API and then again with the REST API a job will be run to load the data file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-cyOJcXLfyy1P2Bw6-blZNZTkuTXPTMQJtvB3Po-qy89oL_TrvuuptQYgMoDECcqmMvGfONsqfR3T4bEey9LUtWdb_oXllszAgh5lm5LVT_KRT9c2d90zPUqb5z5Lb9NwocavIwJX4KI/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="108" data-original-width="564" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-cyOJcXLfyy1P2Bw6-blZNZTkuTXPTMQJtvB3Po-qy89oL_TrvuuptQYgMoDECcqmMvGfONsqfR3T4bEey9LUtWdb_oXllszAgh5lm5LVT_KRT9c2d90zPUqb5z5Lb9NwocavIwJX4KI/s1600/image026.png" /></a></div>
<br />
<br />
I tested out the same data load but this time using the all data types method. This will create a file in the Outline Load Utility (OLU) format and the utility will be called to load the file through the planning layer.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2SlUzSXuI034YyZBJIJqALO1O7zt73mx61JTVmdc_xH8vlWorivschW_ycO927_4a4LQElLFJyg2FQIoAk6OE6k4z93CuD09EJb0n_oedWjEfbT-jHZclFSXB4zt76m2XZf4bsDPZ2KQ/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="182" data-original-width="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2SlUzSXuI034YyZBJIJqALO1O7zt73mx61JTVmdc_xH8vlWorivschW_ycO927_4a4LQElLFJyg2FQIoAk6OE6k4z93CuD09EJb0n_oedWjEfbT-jHZclFSXB4zt76m2XZf4bsDPZ2KQ/s1600/image027.png" /></a></div>
<br />
Once again, no problems.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSmyBXrcqhWngltj8ITyrj-VD8QD3MJldqJQBi_PMNjwUpGfn98VRUzcHu6MvnvD5MLopuFwiF0FUjW1uMTGyzWwglGzOEH3AjSDeWQXVgVc7DexTw-oRJ58Lh09fDDoPU56wr8I4uK64/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="109" data-original-width="537" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSmyBXrcqhWngltj8ITyrj-VD8QD3MJldqJQBi_PMNjwUpGfn98VRUzcHu6MvnvD5MLopuFwiF0FUjW1uMTGyzWwglGzOEH3AjSDeWQXVgVc7DexTw-oRJ58Lh09fDDoPU56wr8I4uK64/s1600/image028.png" /></a></div>
<br />
Next, on to extracting data from EPM Cloud and loading to on-premise FDMEE.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb1aw-bEd32m3_h4G-LOSXvXavZUaUTN-F0kwAOOOQsBYgPprfyVxcguhKo3_L6iX17tqws8NV1pb-KwTucqC5bu2Y9EbRSXC8y4oj7NI17mGx07xMUqzyGwN9QmBGPS5mPpJyTGnoQj0/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="109" data-original-width="646" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb1aw-bEd32m3_h4G-LOSXvXavZUaUTN-F0kwAOOOQsBYgPprfyVxcguhKo3_L6iX17tqws8NV1pb-KwTucqC5bu2Y9EbRSXC8y4oj7NI17mGx07xMUqzyGwN9QmBGPS5mPpJyTGnoQj0/s1600/image029.png" /></a></div>
<br />
All good. I did also test a custom Jython script which makes REST API calls to EPM Cloud and there were no issues.<br />
<br />
So all I have done is update the version of Java and everything seems to be working well.<br />
<br />
If you are adamant in staying on Java 6 then it is a similar process to update. The only difference is that JRockit can be also be updated.<br />
<br />
The final Java 6 patch versions are:<br />
<br />
<b>Patch 28414647: Oracle JDK 6 Update 211</b><br />
<b>Patch 28414796: JDK160_211 Oracle JRockit R28.3.20</b><br />
<br />
If you follow the same process I have previously been through, then you should end up with something like:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6LB6jG6DAVK5VpeQ_rUsekeMXIFtbyWMoUrOtfH5YYuBddPvmCBc-8QUvq2pgxZgp8_utGW0ssVOKXJ3LgQ1Dpn58cqTGwJGY1bagklkRQvDe2OZXMHL7Qe_aj2cZE3xjFzeUss7KS9k/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="142" data-original-width="147" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6LB6jG6DAVK5VpeQ_rUsekeMXIFtbyWMoUrOtfH5YYuBddPvmCBc-8QUvq2pgxZgp8_utGW0ssVOKXJ3LgQ1Dpn58cqTGwJGY1bagklkRQvDe2OZXMHL7Qe_aj2cZE3xjFzeUss7KS9k/s1600/image030.png" /></a></div>
<br />
Create the symbolic links using “mklink”<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_3mo_l_va_1sVrukkhJ57rpG1vvDrE4SgxkcShdFxgwJ_gsyFHl75KBO7bWwcm7srts5S51ojxpnw0ZfAEu_Q4jDkrAX3Up6_xhUGR81m4KMG_ytEoXlpfG-DaKrPgWSAQGZFw5a_ozU/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="110" data-original-width="867" height="80" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_3mo_l_va_1sVrukkhJ57rpG1vvDrE4SgxkcShdFxgwJ_gsyFHl75KBO7bWwcm7srts5S51ojxpnw0ZfAEu_Q4jDkrAX3Up6_xhUGR81m4KMG_ytEoXlpfG-DaKrPgWSAQGZFw5a_ozU/s640/image031.png" width="640" /></a></div>
<br />
You should end up with the following:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEELfSj6nzgxE_EBlpkbE2lhOTX-9jphwjyCZVxZ9NnFUKOooRG9WgeXEUDDN2c1hWNNDBItksE4vFVpmgNTEhi0DouCnIlFfpNMZOdmIUVdynTrqDr_AbGABiWt4yOpXZ3pJm3zB3zJM/s1600/image032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="181" data-original-width="147" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEELfSj6nzgxE_EBlpkbE2lhOTX-9jphwjyCZVxZ9NnFUKOooRG9WgeXEUDDN2c1hWNNDBItksE4vFVpmgNTEhi0DouCnIlFfpNMZOdmIUVdynTrqDr_AbGABiWt4yOpXZ3pJm3zB3zJM/s1600/image032.png" /></a></div>
<br />
There is no need to update the Windows registry as JRockit is still being used.<br />
<br />
I carried out the same tests in FDMEE and did not come across any issues.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr6XDVfsysxAwcQbP5N_RZFvjtfwInRtT0xWj1-TNIbvn9Lfmf4DMwG2eGdpiEYTb6R2TQ7Fkqub1fK-Q9LIjX8r3MNTb34hSJuuH-eUiBpsl3bfIyFGVvwszit6VtA4KgiMzD9zMcWKY/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="165" data-original-width="609" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhr6XDVfsysxAwcQbP5N_RZFvjtfwInRtT0xWj1-TNIbvn9Lfmf4DMwG2eGdpiEYTb6R2TQ7Fkqub1fK-Q9LIjX8r3MNTb34hSJuuH-eUiBpsl3bfIyFGVvwszit6VtA4KgiMzD9zMcWKY/s1600/image033.png" /></a></div>
<br />
Oracle do suggest patching WebLogic but from my testing it didn’t look like it was required for TLS 1.2. I can only assume it is for enhanced security reasons.<br />
<br />
If you look at the web application logs, you will notice how old the version of WebLogic is that is deployed by default with 11.1.2.4<br />
<br />
<b class="yellow"><Version: WebLogic Server 10.3.6.0 Tue Nov 15 08:52:36 PST 2011 1441050 ></b><br />
<br />
If you want to patch WebLogic, the process is pretty simple and there are lots of examples on the internet. Patches are applied using the BEA Smart Update (bsu) command line utility.<br />
<br />
The patch I am going to apply is:<br />
<br />
<b>Patch 28710912: SU Patch 7HKN: WLS PATCH SET UPDATE 10.3.6.0.190115</b><br />
<br />
This was downloaded and extracted.<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOjSgajyjbrSSF4NSQ-bmUoiDYsN6xIOelnqkabJWpD_flABUHjyGFE9g99hkO6ybTm401ugwPCeDZcjhulxnjvm4ktfL3LB3ACIxFpNfbSQCrM6sc0WQI8Hj8q54QoBbniMqvRfPIQJk/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="129" data-original-width="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOjSgajyjbrSSF4NSQ-bmUoiDYsN6xIOelnqkabJWpD_flABUHjyGFE9g99hkO6ybTm401ugwPCeDZcjhulxnjvm4ktfL3LB3ACIxFpNfbSQCrM6sc0WQI8Hj8q54QoBbniMqvRfPIQJk/s1600/image034.png" /></a></div>
<br />
Then the patch can be applied with the BSU utility through command line. I will leave it to you to find out what each of the parameters are :)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5RlMREDlvd8hCpbXZrSZ2z4oy5epQ42H-48YNE_vaerpF0pmYMZSakr_yhjQIK2KAceiIu8BqAQtBZ3cfTQUsz3WGqSQOjlMOMZcPXliBd4j5ajOz4zoMytwrAyF_CZoulh-k71tCVQI/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="156" data-original-width="1007" height="99" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5RlMREDlvd8hCpbXZrSZ2z4oy5epQ42H-48YNE_vaerpF0pmYMZSakr_yhjQIK2KAceiIu8BqAQtBZ3cfTQUsz3WGqSQOjlMOMZcPXliBd4j5ajOz4zoMytwrAyF_CZoulh-k71tCVQI/s640/image035.png" width="640" /></a></div>
<br />
If you have Java web applications deployed across multiple servers then the patch should be applied to each of these.<br />
<br />
Once you start up a web application the log should contain the patch information.<br />
<br />
<b class="yellow"><Version: WebLogic Server 10.3.6.0.190115 PSU Patch for BUG28710912 Tue Nov 13 06:00:38 PST 2018</b><br />
<b class="yellow">WebLogic Server 10.3.6.0 Tue Nov 15 08:52:36 PST 2011 1441050 ></b><br />
<br />
So there you go, updating Java might be enough to get you ready for the changes. Let me know if you see different results.<br />
<div>
<br /></div>
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com4tag:blogger.com,1999:blog-6575283218005807475.post-4934184165343413642019-02-03T12:11:00.000-08:002019-11-04T03:03:32.697-08:00EPM Cloud - New REST APIs to manage and optimise application performance<div dir="ltr" style="text-align: left;" trbidi="on">
The 19.02 EPM Cloud release brings new REST API resources to set the administration mode of an application and assist with possible optimisation of an application.<br />
<br />
The following is now possible through the REST API:<br />
<ul style="text-align: left;">
<li><b class="yellow">Set administration mode for an application.</b></li>
<li><b class="yellow">Perform a full restructure of a block storage cube to eliminate or reduce fragmentation.</b></li>
<li><b class="yellow">Compact the outline file of an aggregate storage cube.</b></li>
<li><b class="yellow">Merge incremental data slices of an aggregate storage cube to improve performance.</b></li>
<li><b class="yellow">Optimise aggregation to improve the performance of aggregate storage cubes.</b></li>
</ul>
Currently these are only available with the REST API, but I would expect the functionality to be added to EPM Automate in the near future.<br />
<br />
Up to now, the functionality has only been available either by manually applying or creating a job which can be rescheduled or run straight away. With the REST API you don’t have to be confined to these restrictions.<br />
<br />
In the post I am going to through each of the new REST resources, providing an example with a REST client and a simple script.<br />
<br />
Let us start off with the one I feel will be the most welcomed - the ability to change the administration mode of an application. I have blogged about this a couple of times in the past, the <b><a href="http://john-goodwin.blogspot.com/2018/03/epm-cloud-limiting-use-of-application.html">first</a> </b>was when the only way to automate the process was to either run a refresh database and change the administration mode or change the mode through migration files. The <b><a href="http://john-goodwin.blogspot.com/2018/05/epm-cloud-limiting-use-of-application.html">second</a> </b>post looked at the schedule job feature which was introduced in 18.05<br />
<br />
It is possible to change an application between administrators only and all users through the UI and this is under application settings.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG4159oCWib2nRjzpa_rEfkT_5lGlwzV_PlauL9BVBfI2OKCj8IOeGIbsGdL47qVwhVxf3eXoxWiIS9CeuaSvLDGpKf_puU2ohsArQnhuV_F3Ho3eFBtJknJGYco_KZv6zlS3GnahzXio/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="88" data-original-width="472" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG4159oCWib2nRjzpa_rEfkT_5lGlwzV_PlauL9BVBfI2OKCj8IOeGIbsGdL47qVwhVxf3eXoxWiIS9CeuaSvLDGpKf_puU2ohsArQnhuV_F3Ho3eFBtJknJGYco_KZv6zlS3GnahzXio/s1600/image001.png" /></a></div>
<br />
It is also possible to create a schedule job with the “Administration Mode” option.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg97jBRr57SirZ3c4WZ6GK7mA9OS9uEyqWENpKBRoiI0UmZApqDnZPL5b8oa2vfaqJBH3qvgqGga8yrH04iJYrG27QMCTl_q098cCZegVvLAwcjLyVyPOH3fkDYDk4-8SZuiCO2HhTladI/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="374" data-original-width="209" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg97jBRr57SirZ3c4WZ6GK7mA9OS9uEyqWENpKBRoiI0UmZApqDnZPL5b8oa2vfaqJBH3qvgqGga8yrH04iJYrG27QMCTl_q098cCZegVvLAwcjLyVyPOH3fkDYDk4-8SZuiCO2HhTladI/s1600/image002.png" /></a></div>
<br />
This can be run immediately or scheduled and allows the application to be enabled for administrator or all users.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYOPnLaqr8890En6Nzg_bSM4-0yiMMrXdf77qLTcUzvKKI7drni_qImiSBE2Q380ScOTrvx8ZRcUmGGWgLU7uGnlRcGXGcs6cEF472F14lQNLLRM6NariGNpTlmepQoMsasfjUUDHK5dQ/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="355" data-original-width="792" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYOPnLaqr8890En6Nzg_bSM4-0yiMMrXdf77qLTcUzvKKI7drni_qImiSBE2Q380ScOTrvx8ZRcUmGGWgLU7uGnlRcGXGcs6cEF472F14lQNLLRM6NariGNpTlmepQoMsasfjUUDHK5dQ/s640/image003.png" width="640" /></a></div>
<br />
Moving on to the REST API, all the new functionality is available through the jobs resource which has the URL format of:<br />
<br />
<b class="yellow">https://<epm_cloud_instance>/HyperionPlanning/rest/v3/applications/<application_name>/jobs</b><br />
<br />
A POST method is required, and the body of the post must include the job details in JSON format.<br />
<br />
The JSON should include:<br />
<br />
<b class="yellow">jobType</b> which will always be “Administration Mode”<br />
<br />
<b class="yellow">jobName</b> just provides a description of the job and can be named appropriately.<br />
<br />
<b class="yellow">loginLevel</b> is a parameter that defines which mode to place the application in, possible values are either “Administrators” or “All Users”.<br />
<br />
An example to put the application in application mode using a REST client is as follows:<br />
<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJrzrvKU2LIwD3-nA9bazKs_LQ7f7PvJMfRS4IUinzZtB3RXels4MjmeuBqCRsCUQojyB_ryh2yyVEfDaJyTpCsFAfhn4czzRhU1Yjly-lLwm3L1nRM5MbF412waYgkM3DgMI6p9j87pg/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="202" data-original-width="582" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJrzrvKU2LIwD3-nA9bazKs_LQ7f7PvJMfRS4IUinzZtB3RXels4MjmeuBqCRsCUQojyB_ryh2yyVEfDaJyTpCsFAfhn4czzRhU1Yjly-lLwm3L1nRM5MbF412waYgkM3DgMI6p9j87pg/s1600/image004.png" /></a></div>
<br />
The response from the REST request includes the status, job ID, details and a URL to access the job information.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkP-hhBCB8tkY1r3RYi4sAOLVqoi3XJY-_xy69TOvh5P3VEtYZa2qAXgtj21CvULxYiHKtzFhv_3ze_4eeLnCmPEn9YOI5TtF1hycN8DloGNcxsfNXCfd0DaZIzVJHT5ovBgIbgJ8Zomg/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="264" data-original-width="733" height="230" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkP-hhBCB8tkY1r3RYi4sAOLVqoi3XJY-_xy69TOvh5P3VEtYZa2qAXgtj21CvULxYiHKtzFhv_3ze_4eeLnCmPEn9YOI5TtF1hycN8DloGNcxsfNXCfd0DaZIzVJHT5ovBgIbgJ8Zomg/s640/image005.png" width="640" /></a></div>
<br />
The application mode change should be instant so there will no need to keep checking the status until it is complete. The job will be available in the simplified interface and contain the value that was defined in “jobName” parameter.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC9kH21Tsmc943Gryp_sTvEMbIBnF_AOwu1mtE_xyLtqScGjsCbBFHoIBOIUbH3o14Vc8nW4j6yi2MyEvIGYxdrmIsV98jQ36gJz0lVPYxuBkqh6EtDjKXkRlWPIO5tHcz6Un3WywHj3E/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="95" data-original-width="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC9kH21Tsmc943Gryp_sTvEMbIBnF_AOwu1mtE_xyLtqScGjsCbBFHoIBOIUbH3o14Vc8nW4j6yi2MyEvIGYxdrmIsV98jQ36gJz0lVPYxuBkqh6EtDjKXkRlWPIO5tHcz6Un3WywHj3E/s1600/image006.png" /></a></div>
<br />
Under application settings the application is now only enabled for administrators.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghDA-rxH8FQikgXXE665cg3I3oCWqx0DFdkvMpb8c5zbTGCfTs6_rIGVa4DfDH4MlZ5Um3YDNY-A0FylEpLILLAwtRmcnxvWNlO8go8BMqSd2LFLPxVYmEEMAu5mTA2qvQ_AoOyBFKv5I/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="40" data-original-width="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghDA-rxH8FQikgXXE665cg3I3oCWqx0DFdkvMpb8c5zbTGCfTs6_rIGVa4DfDH4MlZ5Um3YDNY-A0FylEpLILLAwtRmcnxvWNlO8go8BMqSd2LFLPxVYmEEMAu5mTA2qvQ_AoOyBFKv5I/s1600/image007.png" /></a></div>
<br />
If non-administrators try and log into the application, they will be greeted with:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3dUc29hMyy4dEEJcWaL37tLzlyfS37VNEX0JAouBwYHZ4vMsIrzozWACY6-nccNySrnRneqv1HJYmSDM4qs7Iy08vaEpCParTANPqF-5tnDgUMQu5ZOpOLMG6C7XBTFxRXr2eGh3foZk/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="90" data-original-width="464" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3dUc29hMyy4dEEJcWaL37tLzlyfS37VNEX0JAouBwYHZ4vMsIrzozWACY6-nccNySrnRneqv1HJYmSDM4qs7Iy08vaEpCParTANPqF-5tnDgUMQu5ZOpOLMG6C7XBTFxRXr2eGh3foZk/s1600/image008.png" /></a></div>
<br />
A simple change to the “loginLevel” parameter will update the application mode back to all users, the REST request would be:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqrYsQzGl5BqmDvX6SGepjcdqlsWmLEyzYz65dqYhsfzKFH7AadwQqRcJTMwsNjte12zcFLfrykyj6O08Nn10n6VlFssmO_LPVMGm_YCuYGBy6tVCEE7rWIk-U2giV6nO9kJmlKA_m4oU/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="123" data-original-width="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqrYsQzGl5BqmDvX6SGepjcdqlsWmLEyzYz65dqYhsfzKFH7AadwQqRcJTMwsNjte12zcFLfrykyj6O08Nn10n6VlFssmO_LPVMGm_YCuYGBy6tVCEE7rWIk-U2giV6nO9kJmlKA_m4oU/s1600/image009.png" /></a></div>
<br />
The response is similar except for the “details” parameter description.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvZiulCIdU9iE2Vky65YVmIvF-UUY28pzKLfbdEyD9eqi9FblG3NiMXKmWeyp9dpRZkYitJJiXnXmG-mba0jWNgxSAl0x_3l-4CkJt2o9nN3KgVnKcUglbkMV0X9_vNx2VtKTzKnflA9Q/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="122" data-original-width="700" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvZiulCIdU9iE2Vky65YVmIvF-UUY28pzKLfbdEyD9eqi9FblG3NiMXKmWeyp9dpRZkYitJJiXnXmG-mba0jWNgxSAl0x_3l-4CkJt2o9nN3KgVnKcUglbkMV0X9_vNx2VtKTzKnflA9Q/s1600/image010.png" /></a></div>
<br />
Once again, the job activity will be available in the UI.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSBxET4NSg3pozwt6-JfZ4uHrkicHwCfm9ydPgEFrG36pz7jALTcVn4nZyiLQSm7TDKftrEASu1vBEfyUbaAZzREKahnsxEqCZ7bzmjqMkaf_eG14TkMQJE2N4M4BK9E5-uIxooBl8FwI/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="97" data-original-width="287" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSBxET4NSg3pozwt6-JfZ4uHrkicHwCfm9ydPgEFrG36pz7jALTcVn4nZyiLQSm7TDKftrEASu1vBEfyUbaAZzREKahnsxEqCZ7bzmjqMkaf_eG14TkMQJE2N4M4BK9E5-uIxooBl8FwI/s1600/image011.png" /></a></div>
<br />
The application will be enabled for all users in the application settings.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJS9TygFEE8cdYpmd2nUwS-hlOQhvzWAC3fHXloNVePdk8ATemSvtLOA89y9TtreiA7QDtwqddGGqQpTP4oGTNlGBTtSe3TS2saBiGYbj09UEo1b_suTlu1r0Bnb__A9No6e7lsHkqmvc/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="35" data-original-width="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJS9TygFEE8cdYpmd2nUwS-hlOQhvzWAC3fHXloNVePdk8ATemSvtLOA89y9TtreiA7QDtwqddGGqQpTP4oGTNlGBTtSe3TS2saBiGYbj09UEo1b_suTlu1r0Bnb__A9No6e7lsHkqmvc/s1600/image012.png" /></a></div>
<br />
The body of the REST request only allows two values for “loginLevel”, if a different value is specified then the following error will be returned in the response:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY5F92cJwOxu-LDek-_KupcylRowiIdvJtqNhyphenhyphenB4efd7pDkAu-pdtyri8pcOVjvgZjqdAsvQOiN77DMmS9u4lEegPM7qx1dEzFM3sN64MCngBYqtVUm-LNFeXWbqIhLN_2EWxqQZ68Qys/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="126" data-original-width="711" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY5F92cJwOxu-LDek-_KupcylRowiIdvJtqNhyphenhyphenB4efd7pDkAu-pdtyri8pcOVjvgZjqdAsvQOiN77DMmS9u4lEegPM7qx1dEzFM3sN64MCngBYqtVUm-LNFeXWbqIhLN_2EWxqQZ68Qys/s1600/image013.png" /></a></div>
<br />
The reality is, the process of updating the administration mode of an application would need to be automated, this can be achieved using most scripting languages.<br />
<br />
It can come down to personal preference or company policies to which language you select. The following is an example using PowerShell which does not take much effort to put together.<br />
<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZrgeU5GKQHKIzswFLjCirB2eINXNCjKiKv2DDjzEcKNLtoHrb7CHDg2xfosv54Kg_-AK-sn78Ib5603hKqdnQT2J0Ne_C7y_Lc74lfd0-81hK0JP2wIkHHcIz_FpYOagL0vl-KaWTfMo/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="764" data-original-width="678" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZrgeU5GKQHKIzswFLjCirB2eINXNCjKiKv2DDjzEcKNLtoHrb7CHDg2xfosv54Kg_-AK-sn78Ib5603hKqdnQT2J0Ne_C7y_Lc74lfd0-81hK0JP2wIkHHcIz_FpYOagL0vl-KaWTfMo/s1600/image014.png" /></a></div>
<br />
As the new REST functionality is all based around the jobs resource the script can be easily reused.<br />
<br />
To update the application mode to all users, the only changes would be to the “jobName” and “loginLevel” variables.<br />
<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi02d08pmFv2FqfezYPT0V9xnFtt3dLAalgveh0xcGmr-H4ryGEO2TILH25HuRJpXD2rEk6y-5XaYuiAARaEefsn3MsplIctNJd3bSkp4qzOaRwHQJCLWH4oJ7ao3owaopvTIXKWZQiU4g/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="57" data-original-width="281" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi02d08pmFv2FqfezYPT0V9xnFtt3dLAalgveh0xcGmr-H4ryGEO2TILH25HuRJpXD2rEk6y-5XaYuiAARaEefsn3MsplIctNJd3bSkp4qzOaRwHQJCLWH4oJ7ao3owaopvTIXKWZQiU4g/s1600/image015.png" /></a></div>
<br />
After making the changes, running the script will enable the application for all users.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQaBHmPtMl_Xh8TYMAUAv3LzdgvCr_QSzGzXzkMrM2Za327hcGuJXF9davr4AN5ShtY72WhW663A9AygvDBcHDIM04DYSmxaB0f7Xbhf8SnUi2kZ_HqG2iK8tsT-c9fosAhlpYNksRCR0/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="226" data-original-width="579" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQaBHmPtMl_Xh8TYMAUAv3LzdgvCr_QSzGzXzkMrM2Za327hcGuJXF9davr4AN5ShtY72WhW663A9AygvDBcHDIM04DYSmxaB0f7Xbhf8SnUi2kZ_HqG2iK8tsT-c9fosAhlpYNksRCR0/s1600/image016.png" /></a></div>
<br />
On to the next new welcomed feature and that is the ability to restructure a cube using the REST API.<br />
<br />
It is possible to restructure a cube manually through database properties in Calculation Manager.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpCOLkRnSqQJZ6jyq0GtCUZ-1kcmVT6R-Jok4VfdqKVF7Rw195fjsFnJzMPQFtC4Nz6UHLZb5z3DSGNIurAVdoQ56seDDxKbaOjiAuDba7ZE8hBLnA3xIS3e1t1WeNNa30s14LFlVMA0s/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="222" data-original-width="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpCOLkRnSqQJZ6jyq0GtCUZ-1kcmVT6R-Jok4VfdqKVF7Rw195fjsFnJzMPQFtC4Nz6UHLZb5z3DSGNIurAVdoQ56seDDxKbaOjiAuDba7ZE8hBLnA3xIS3e1t1WeNNa30s14LFlVMA0s/s1600/image017.png" /></a></div>
<br />
This can be automated by selecting the “Restructure Cube” option when creating a new job schedule.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8d6951yjlM8gQ8hPUWeSQGHoOi_jm3SLHdNcT3bwS-NUHD3NXI1Rk0RbWJePKckP-THnr4QL2CwMF_k8Y8fMUY8Xx3egesZ01lddj427I6kuft1WQVR_RHUqUFl1n3SgELPrL6O1rc7k/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="26" data-original-width="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8d6951yjlM8gQ8hPUWeSQGHoOi_jm3SLHdNcT3bwS-NUHD3NXI1Rk0RbWJePKckP-THnr4QL2CwMF_k8Y8fMUY8Xx3egesZ01lddj427I6kuft1WQVR_RHUqUFl1n3SgELPrL6O1rc7k/s1600/image018.png" /></a></div>
<br />
The cube which requires restructuring can be selected in the schedule job options.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Jx-r2Zix4of6_c3bh3M3txU8wCIIUPMbIoGO40Vd7zBxPdN3eGMwwh4u5exTotLga5VsIliCyMCq2INbZ-leud3I5Cn_tRVYoR4vYbEG76MleyMlFlXh0X1_n4XUnnJ9STwuaf8tTwY/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="147" data-original-width="970" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Jx-r2Zix4of6_c3bh3M3txU8wCIIUPMbIoGO40Vd7zBxPdN3eGMwwh4u5exTotLga5VsIliCyMCq2INbZ-leud3I5Cn_tRVYoR4vYbEG76MleyMlFlXh0X1_n4XUnnJ9STwuaf8tTwY/s640/image019.png" width="640" /></a></div>
<br />
To achieve this through the REST API it is the same job resource URL and POST method.<br />
<br />
This time the “jobType” will be “Restructure Cube”, the “jobName” can be named appropriately and “cubeName” is required to define which cube to restructure.<br />
<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwfqQtHFcQxuH2d50GYstQshvFs8WXVhw4AUehaWPSlzQH37Yi2-K1-T_x2eQ6Sa0sE0OtkQv_L5vlRIEBqRD9fmM0QpWwpTBNodfRnW3NUTsLBho3TREgL2T8EMifTem_SgWsISdOEfU/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="202" data-original-width="582" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwfqQtHFcQxuH2d50GYstQshvFs8WXVhw4AUehaWPSlzQH37Yi2-K1-T_x2eQ6Sa0sE0OtkQv_L5vlRIEBqRD9fmM0QpWwpTBNodfRnW3NUTsLBho3TREgL2T8EMifTem_SgWsISdOEfU/s1600/image020.png" /></a></div>
<br />
As a restructure is not instant, the response will no doubt inform that the process is running.<br />
<br />
The status values are -1 = in progress; 0 = success; 1 = error; 2 = cancel pending; 3 = cancelled; 4 = invalid parameter<br />
<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpvgbjUxVN7yCHPmJytUEk8jD8EZ0OBBbxFfXsMN0XVqsOuMIvna1aVgBmFcO0staTNroCT8J9_a0WNlzzyM8Af1yfrfwDxT08Zj_GEZLSYcc1DE2pX2Q9mtx1RY2fGGENADULe9CrtcE/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="360" data-original-width="604" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpvgbjUxVN7yCHPmJytUEk8jD8EZ0OBBbxFfXsMN0XVqsOuMIvna1aVgBmFcO0staTNroCT8J9_a0WNlzzyM8Af1yfrfwDxT08Zj_GEZLSYcc1DE2pX2Q9mtx1RY2fGGENADULe9CrtcE/s1600/image021.png" /></a></div>
<br />
The response includes a URL to the job status, which can then be accessed to check whether the process has been completed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQp62-9bPUvp1bxinJRjjv_VurULOI0gweuNri0Ztzwgw-Vbt8bJD2BW0PGy9WkbuIYugHIrmZ83vQXV2qJvRPHkcJMp1ma5DFNb60Da-E6_WcUB0wqWKFhjEMy3YlzX1HAo3SVC6f6SA/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="182" data-original-width="611" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQp62-9bPUvp1bxinJRjjv_VurULOI0gweuNri0Ztzwgw-Vbt8bJD2BW0PGy9WkbuIYugHIrmZ83vQXV2qJvRPHkcJMp1ma5DFNb60Da-E6_WcUB0wqWKFhjEMy3YlzX1HAo3SVC6f6SA/s1600/image022.png" /></a></div>
<br />
The simplified interface contains the job activity.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhf46fY4sz6FR9eCgohANSHZiXhfsEbHQYHWanKg4WmkNaQsLllhjakjGp60UvpSg7p7sacYDjBPrl2LvgHv9_13wk9ONawskWY8nIqMjg4Qhond1RrrPydpHgvuNanX1ocaDmuzvHiwo/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="100" data-original-width="242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhf46fY4sz6FR9eCgohANSHZiXhfsEbHQYHWanKg4WmkNaQsLllhjakjGp60UvpSg7p7sacYDjBPrl2LvgHv9_13wk9ONawskWY8nIqMjg4Qhond1RrrPydpHgvuNanX1ocaDmuzvHiwo/s1600/image023.png" /></a></div>
<br />
To automate the process the same script can be reused, it only requires a few modifications for the job information which is included in the body of the REST request.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7973Y0PGf8myvsx65kRTSDgQ3HtpiO1wUzHsiFLSuxwOZtrECkAux1omYMiH5Rcy3_MhTrt4ftOjD0q1FkXFUykqpzTX-WOzuzHNMfHwJ8BG2wFw1uGTqMU07mhf1tUtPgwMtWJslfiQ/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="582" data-original-width="677" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7973Y0PGf8myvsx65kRTSDgQ3HtpiO1wUzHsiFLSuxwOZtrECkAux1omYMiH5Rcy3_MhTrt4ftOjD0q1FkXFUykqpzTX-WOzuzHNMfHwJ8BG2wFw1uGTqMU07mhf1tUtPgwMtWJslfiQ/s1600/image024.png" /></a></div>
<br />
In previous blogs I have gone into more detail around repeatedly checking the status of the job, but in simple terms the job status URL which is returned in the REST response can be stored, with a GET request the job status can then be checked.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3kFj13rvpAf-sSHbLpIUST4Uvk1jyYljw-aScWOHEgmwas6erXy_itfKHX7Sfo7kQL-6_gUWS99N_rpdjY7UoGsuKly7Oh-CiFAdOyIDvnQDf6cA7NJS3k4bVcSKXujRB7vRMH596i78/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="255" data-original-width="538" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3kFj13rvpAf-sSHbLpIUST4Uvk1jyYljw-aScWOHEgmwas6erXy_itfKHX7Sfo7kQL-6_gUWS99N_rpdjY7UoGsuKly7Oh-CiFAdOyIDvnQDf6cA7NJS3k4bVcSKXujRB7vRMH596i78/s1600/image025.png" /></a></div>
<br />
To confirm a restructure had taken place, before running the script I created some empty blocks in the cube.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2Eam6b1qToFi7C85TbyhbRppsn3Cp1yx4SsIMFb47hLJnrBDaXcovMcNtMyJWhk-fdytPt9ZVXORsop2RiVuggEjGT11R4YKODt4wlJ69avyiFjev0-dak_tjyjt4brict-kGfyVXRxU/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="132" data-original-width="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2Eam6b1qToFi7C85TbyhbRppsn3Cp1yx4SsIMFb47hLJnrBDaXcovMcNtMyJWhk-fdytPt9ZVXORsop2RiVuggEjGT11R4YKODt4wlJ69avyiFjev0-dak_tjyjt4brict-kGfyVXRxU/s1600/image026.png" /></a></div>
<br />
After running the script, the empty blocks had been removed which confirms a restructure had taken place.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYQWgt4CdiqdKQYf0JHhOI-gVlCiIjO0XXnAcjgAnmSEDksjBjkUAX3Q-rCzBJa930M94zh8rv9wgrwJT7cELhUigKH_7CT2Hsj0tqWG6pFXIJhhhHmp9yIOMQBtSVFM5bIRDjDrRVMOc/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="132" data-original-width="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYQWgt4CdiqdKQYf0JHhOI-gVlCiIjO0XXnAcjgAnmSEDksjBjkUAX3Q-rCzBJa930M94zh8rv9wgrwJT7cELhUigKH_7CT2Hsj0tqWG6pFXIJhhhHmp9yIOMQBtSVFM5bIRDjDrRVMOc/s1600/image027.png" /></a></div>
<br />
Moving on to the three remaining optimisation features, all of which are ASO related.<br />
<br />
The first of these is the ability to compact the outline of an ASO cube. It is possible to compact the outline through database properties in Calculation Manager.<br />
<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh76grtYtjgBt1zSjTV1WNXS1WtclME8ufYH6zxM_fdHwqITCJ9v6ZzHiQqfPgMN4yf5qW3Uy_vVvhHkBq9RiyGKvih8ZNqs9hd4kA8i5vyGGUQvk-AnQ7Wx-Q2GZT4opvag2pd5ZRdB58/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="161" data-original-width="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh76grtYtjgBt1zSjTV1WNXS1WtclME8ufYH6zxM_fdHwqITCJ9v6ZzHiQqfPgMN4yf5qW3Uy_vVvhHkBq9RiyGKvih8ZNqs9hd4kA8i5vyGGUQvk-AnQ7Wx-Q2GZT4opvag2pd5ZRdB58/s1600/image028.png" /></a></div>
<br />
There is also a “Compact Outline” option in scheduled jobs in the simplified interface.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtjaFXDJZK2Vb3Q2Zi9axixQpa_bjwtOzDk2hiNalcjNBjFfr-oDvviqfoYL3zYdLB8aEh2HlUuOgTZNR52_nfC8Frs9oxdpjcLFxXxgNaI9ltiw-EgOgN4KUJxmHA4lANRi-FqZYPSYk/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="28" data-original-width="133" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtjaFXDJZK2Vb3Q2Zi9axixQpa_bjwtOzDk2hiNalcjNBjFfr-oDvviqfoYL3zYdLB8aEh2HlUuOgTZNR52_nfC8Frs9oxdpjcLFxXxgNaI9ltiw-EgOgN4KUJxmHA4lANRi-FqZYPSYk/s1600/image029.png" /></a></div>
<br />
This provides a brief description of the functionality and allows you to define which cube to compact the outline.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHeqoTqwyShWX76HogrP95pk3rl3MmTTzQOxncuLuvL-2R6Tq3p2g1yOw5poEKfvwte9ClC42L93BziYIbp6q3VhKCFS1Gs2ut8RVhgw8m7kJUQDr4KkVPwXYawfEpV48EPLpbcqIlz_Y/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="144" data-original-width="954" height="96" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHeqoTqwyShWX76HogrP95pk3rl3MmTTzQOxncuLuvL-2R6Tq3p2g1yOw5poEKfvwte9ClC42L93BziYIbp6q3VhKCFS1Gs2ut8RVhgw8m7kJUQDr4KkVPwXYawfEpV48EPLpbcqIlz_Y/s640/image030.png" width="640" /></a></div>
<br />
If you don’t want to use the scheduling functionality in the UI, it is now possible to use the REST API.<br />
<br />
As with all the new functionality, the same jobs URL is used and a similar body in the REST request.<br />
<br />
The “jobType” will be “Compact Cube”, not sure why it wasn’t named “Compact Outline”. The “cubeName” parameter defines which cube to compact the outline.<br />
<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyPJ3w0DtVWm9BFbvdkOkwiPDyo2Fa67LTH2lddX0mr_tcCzixtBwx9WDV4SnOu4uQ7T-SM2c0UGzKXca2PUIxfUAnCipI9CZ4bWlPF5y8WVIZX26TIwJlCNyIofpyAcZOzg8ZRBbiCAY/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="196" data-original-width="581" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyPJ3w0DtVWm9BFbvdkOkwiPDyo2Fa67LTH2lddX0mr_tcCzixtBwx9WDV4SnOu4uQ7T-SM2c0UGzKXca2PUIxfUAnCipI9CZ4bWlPF5y8WVIZX26TIwJlCNyIofpyAcZOzg8ZRBbiCAY/s1600/image031.png" /></a></div>
<br />
The response includes the same parameters as the previous examples.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib8OP9giim8v3TYK5Tg46I_2sv_Me-1EOnD0hTb8CmNvxdq846lszScbzuRvBUCh8ud7AdE4StXMK20r_mXsfpYWCw9C77dNqKPduX-KG1TfeBxxprbZwuHtQuzwJVfH8-ShLjg1DWtHI/s1600/image032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="126" data-original-width="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib8OP9giim8v3TYK5Tg46I_2sv_Me-1EOnD0hTb8CmNvxdq846lszScbzuRvBUCh8ud7AdE4StXMK20r_mXsfpYWCw9C77dNqKPduX-KG1TfeBxxprbZwuHtQuzwJVfH8-ShLjg1DWtHI/s1600/image032.png" /></a></div>
<br />
As compacting the outline is not instant, the job status will need to be repeatedly checked until it completes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM5_QBhSMe1tI7JNcW3hXUPzRZuctasC6B_GYqhz5fzJCHswTvPpwD3wLhUiK7yOMbnPXChb5Hl4LUyFAi_xAy_yVnkLFpc4E1ZD9JDhCUlpEiQzubJ6zwT9k3q1tK6tb-yEYL0ksc-ek/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="185" data-original-width="617" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM5_QBhSMe1tI7JNcW3hXUPzRZuctasC6B_GYqhz5fzJCHswTvPpwD3wLhUiK7yOMbnPXChb5Hl4LUyFAi_xAy_yVnkLFpc4E1ZD9JDhCUlpEiQzubJ6zwT9k3q1tK6tb-yEYL0ksc-ek/s1600/image033.png" /></a></div>
<br />
As you would expect the activity is available in the UI.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZbKhlFYbxwNBK_G6E7vtKkZzu1LNB0kkbj70vL08CF4fA5dBX2uAuGijEsn5VKwEZJz0N78avJdF4QjABy_e7XTl-fTu8-vsrzfKsDFHfj4v1o0aeeseBfE39U-OrMcpqLn5G19d1jH8/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="96" data-original-width="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZbKhlFYbxwNBK_G6E7vtKkZzu1LNB0kkbj70vL08CF4fA5dBX2uAuGijEsn5VKwEZJz0N78avJdF4QjABy_e7XTl-fTu8-vsrzfKsDFHfj4v1o0aeeseBfE39U-OrMcpqLn5G19d1jH8/s1600/image034.png" /></a></div>
<br />
Again, the same script can be reused with a few minor alterations for the body of the REST request.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioJVaJVniqGgL9g6vNTSdOlZLAE0veFo-FjNu51_p0K9BEWlw0faDqedRQM_ThQ0f1HFTtv9OhJA2drJiYEeZ8fLJs8FYDxqQqMLxJRzMBJcGvkixNYxktdQQRNsrdRpZpA9NXBwrktSA/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="579" data-original-width="678" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioJVaJVniqGgL9g6vNTSdOlZLAE0veFo-FjNu51_p0K9BEWlw0faDqedRQM_ThQ0f1HFTtv9OhJA2drJiYEeZ8fLJs8FYDxqQqMLxJRzMBJcGvkixNYxktdQQRNsrdRpZpA9NXBwrktSA/s1600/image035.png" /></a></div>
<br />
Next onto to merging data slices in an ASO cube. Data slices are automated created with actions like Smart View submits, data maps, smart pushes and data loads. Over time, the number of slices will increase, which can adversely affect performance. The slices can be either be merged into a single incremental slice or into the main cube, keeping in mind it does take longer to merge into the main cube and the time it takes relates to the size of the cube. When merging, zero values can be kept or removed.<br />
<br />
Merging slices can be manually carried out through database properties in Calculation Manager.<br />
<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTTKim4Fe1H6XQzmskKIRByi0zgb6MI9-Gez_nHEfzvtLHPy1kLQKnDS3y-76I6Y-2qtpxXpjbOi8HWKnElhGlACiqCzZddYQjrDTycfEIGvZnfVe05T8h9sGX068gPTqM5dOsgePXfzo/s1600/image036.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="229" data-original-width="515" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTTKim4Fe1H6XQzmskKIRByi0zgb6MI9-Gez_nHEfzvtLHPy1kLQKnDS3y-76I6Y-2qtpxXpjbOi8HWKnElhGlACiqCzZddYQjrDTycfEIGvZnfVe05T8h9sGX068gPTqM5dOsgePXfzo/s1600/image036.png" /></a></div>
<br />
To automate the process, there is a “Merge Data Slices” option when creating a new scheduled job in the simplified interface.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKtzKenbQrUxeB_mg0pfH2qVsKbuBYVdhy08r6GNTtJuomyle24AH_yVrp1cJa2hdkR7D2ImNGRjkuhtH4E8qFjNcgmssF64spYItYfetBAyyFDJRSY9wNsL9bRUXfSh0qJxxiqp9sTW0/s1600/image037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="25" data-original-width="147" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKtzKenbQrUxeB_mg0pfH2qVsKbuBYVdhy08r6GNTtJuomyle24AH_yVrp1cJa2hdkR7D2ImNGRjkuhtH4E8qFjNcgmssF64spYItYfetBAyyFDJRSY9wNsL9bRUXfSh0qJxxiqp9sTW0/s1600/image037.png" /></a></div>
<br />
The job allows you to define which ASO database you wish to merge slices and whether to merge into the main database or a single incremental slice, zero values can be kept or removed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJCDUTW8xLBEy3Vb8gRRQiN0hlkNmOg1EeZjfrFK7Vf74_fLGVCGcLD4dtmFBWaEJhl8Qe1FAmOKRSOhHjguMUyUbIvwPzigj_jvHBCbi-uqpfjSfcVqoXop01mM5JjrIWWRoUlXGl9tw/s1600/image038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="266" data-original-width="961" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJCDUTW8xLBEy3Vb8gRRQiN0hlkNmOg1EeZjfrFK7Vf74_fLGVCGcLD4dtmFBWaEJhl8Qe1FAmOKRSOhHjguMUyUbIvwPzigj_jvHBCbi-uqpfjSfcVqoXop01mM5JjrIWWRoUlXGl9tw/s640/image038.png" width="640" /></a></div>
<br />
If you don’t want to be constrained to scheduling a job, then this is where the REST API can help.<br />
<br />
The REST API resource is the same jobs URL.<br />
<br />
The “jobType” should be “Merge Data Slices”. The “cubeName” defines which cube to merge the slices.<br />
<br />
There is a parameter called “<b>mergeSliceType</b>” which defines whether to merge into the main cube or incremental slice. The values are either “<b>allIncrementalSlicesInMain</b>” or “<b>allIncrementalSlicesInOneIncremental</b>”.<br />
<br />
The parameter to define whether to keep zeros is “<b>keepZeroCells</b>” which can be “true” or “false”.<br />
<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5HsCo6Uh2YEf68CeNG3JAe88E84u9WoCpq8R6P1zR1MR7A3Xw6l1lEScj4EdTOFV_Io47FMEah7lYe1x17bWE70ylDToLfo6Ebm4M-N3p1r2uSSX04vaky9eI0D8wE0LBq9YB4oZ2dR0/s1600/image039.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="234" data-original-width="579" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5HsCo6Uh2YEf68CeNG3JAe88E84u9WoCpq8R6P1zR1MR7A3Xw6l1lEScj4EdTOFV_Io47FMEah7lYe1x17bWE70ylDToLfo6Ebm4M-N3p1r2uSSX04vaky9eI0D8wE0LBq9YB4oZ2dR0/s1600/image039.png" /></a></div>
<br />
I went for the option of merging all slices in the main cube and to remove zero values. Before running the REST request, I checked the number of incremental slices in Calculation Manager.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8oNsWE0NrVacoceXJefCllNXWBIQ-RZvZbmRTMwnSLQ1WZYNe32ZX9xY6WhMB0mZ91D2Xjcf_MCt2qWzseODDN6iR4npx-TdihnNfkS0mhJkyzNjE2PNrS1sv-dGJcPFOCpYWujozVfk/s1600/image040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="49" data-original-width="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8oNsWE0NrVacoceXJefCllNXWBIQ-RZvZbmRTMwnSLQ1WZYNe32ZX9xY6WhMB0mZ91D2Xjcf_MCt2qWzseODDN6iR4npx-TdihnNfkS0mhJkyzNjE2PNrS1sv-dGJcPFOCpYWujozVfk/s1600/image040.png" /></a></div>
<br />
<br />
After executing executing the REST call, all the incremental slices were merged into the main cube.<br />
<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQWVl8PFWlLDtpt7_N3E3J44PTMD_RbkSZAgd1jJC9oLLUBcJLV9uBmR-X1dFdGIHhW62nMn0oJl2tZTo66z-Kd33BSJdmeE9UCj-3WCygEdujHzKrtoViA08ab7QA1UiXIms96byugjE/s1600/image042.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="52" data-original-width="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQWVl8PFWlLDtpt7_N3E3J44PTMD_RbkSZAgd1jJC9oLLUBcJLV9uBmR-X1dFdGIHhW62nMn0oJl2tZTo66z-Kd33BSJdmeE9UCj-3WCygEdujHzKrtoViA08ab7QA1UiXIms96byugjE/s1600/image042.png" /></a></div>
<br />
On to the final REST resource and that is based around ASO aggregations to optimise performance.<br />
<br />
The documentation states:<br />
<br />
<i><b class="yellow">“Optimize Aggregation can significantly improve the performance of aggregate storage cubes. You must first enable query tracking to capture tracking statistics on the aggregate storage cube. Then, after you enable query tracking, you must allow sufficient time to collect user data-retrieval patterns before you execute the aggregation process based on query data. The execute aggregation process deletes existing aggregated views and generates optimized views based on the captured data.</b></i><br />
<i><b><br /></b></i>
<i><b class="yellow">This job has two actions: Enable query tracking and Execute aggregation process.”</b></i><br />
<br />
This can be manually achieved through Calculation Manager and in database properties there are the options to start query tracking and execute an aggregation.<br />
<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlEtS_oHoQwXkjLvWYFs4CG-Fjr-HFwZp7n6HTP-MCYDmdevCEZuXRIn4VvUM9gR1fewlscBFYPTHv2nDfLR_vLB1wfpVxHySCCnF3Qw0TYgG2OKIXGOPJg_tQy8JD-w6HNm6Vc7gtTNM/s1600/image043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="257" data-original-width="271" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlEtS_oHoQwXkjLvWYFs4CG-Fjr-HFwZp7n6HTP-MCYDmdevCEZuXRIn4VvUM9gR1fewlscBFYPTHv2nDfLR_vLB1wfpVxHySCCnF3Qw0TYgG2OKIXGOPJg_tQy8JD-w6HNm6Vc7gtTNM/s1600/image043.png" /></a></div>
<br />
No surprise that there is an option available in scheduled jobs in the simplified interface.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO9yp4bkNeBXhGVmcs98DLxfc5RfYx5z5pQvnVSsOGWsyOzJL8kZQ7TbQL7yWlGV1WjQVqS5l2CTRd4cvnlBbLyAd3hZ4EuNq8OWK46K2jtcfcStVHMCRznvpMHvxCfCpJe3_tPOoHxcc/s1600/image044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="24" data-original-width="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO9yp4bkNeBXhGVmcs98DLxfc5RfYx5z5pQvnVSsOGWsyOzJL8kZQ7TbQL7yWlGV1WjQVqS5l2CTRd4cvnlBbLyAd3hZ4EuNq8OWK46K2jtcfcStVHMCRznvpMHvxCfCpJe3_tPOoHxcc/s1600/image044.png" /></a></div>
<br />
The job allows you to select the ASO cube and whether to enable query tracking or execute an aggregation process.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUvv9Gl9LCKNee7-_IqE2jglecY4ppIl7WXHto4Aid3qjFPpdU9mJXxyZZ8ekObVLDRHlnUWLj2BVvuZKVR7ixcHVKlJEJpGmGuDUE6I9SZNWpEiDx9HxxEUqfVEW-lKWT2DKPkD4Y-O0/s1600/image045.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="270" data-original-width="953" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUvv9Gl9LCKNee7-_IqE2jglecY4ppIl7WXHto4Aid3qjFPpdU9mJXxyZZ8ekObVLDRHlnUWLj2BVvuZKVR7ixcHVKlJEJpGmGuDUE6I9SZNWpEiDx9HxxEUqfVEW-lKWT2DKPkD4Y-O0/s640/image045.png" width="640" /></a></div>
<br />
If the option to execute an aggregation process is selected, there are additional parameters to base the aggregation on.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTZtW8koVAyo6RAe1xnvqsflyzi0eVdZNkC7-oOLzkupO7lFces24PZZzJrA7eEtFzciLUvyHPSPbM-moh4Pd3SjbdGutU2WqYjZnS15cBvQSRi3-nq9iYdvh6c1HkhPkYfK0apbVoj80/s1600/image046.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="136" data-original-width="408" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTZtW8koVAyo6RAe1xnvqsflyzi0eVdZNkC7-oOLzkupO7lFces24PZZzJrA7eEtFzciLUvyHPSPbM-moh4Pd3SjbdGutU2WqYjZnS15cBvQSRi3-nq9iYdvh6c1HkhPkYfK0apbVoj80/s1600/image046.png" /></a></div>
<br />
The option to base the aggregation on query data should only be selected if query tracking is enabled.<br />
<br />
The same functionality is now available through the REST API.<br />
<br />
This is possible through the jobs resource URL with a POST method.<br />
<br />
The “jobType” is “Optimize Aggregation”.<br />
<br />
The parameters include the cube name, "<b>type</b>" with possible values of “<b>enableQueryTracking</b>” or “<b>executeAggregationProcess</b>”.<br />
<br />
If type has been defined as “executeAggregationProcess” the following parameters can be included:<br />
<br />
“<b>useQueryData</b>” which can be set as “true” or “false”, it can only be true if query tracking has been enabled.<br />
<br />
“<b>includeAlternateRollups</b>” which can be defined as “enable” or “disable”<br />
<br />
“<b>growthSizeRatio</b>” which is optional and specifies the maximum size the aggregated database can grow, which is based on the ratio and the input level data size.<br />
<br />
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbRo7Uil6qY_67Sf3Oa9V39r7itt3WvNMzQMcE95FxG7Huo6gIhKxQyQHcaCg9sW-vmhYbhW9hTF2JDpht12ZUQzxPT7xwf4lu6uiETR2XWQ7yQAH6ux7SOUqdtDrVp-dflk5Jrc_Cbuk/s1600/image047.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="215" data-original-width="579" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbRo7Uil6qY_67Sf3Oa9V39r7itt3WvNMzQMcE95FxG7Huo6gIhKxQyQHcaCg9sW-vmhYbhW9hTF2JDpht12ZUQzxPT7xwf4lu6uiETR2XWQ7yQAH6ux7SOUqdtDrVp-dflk5Jrc_Cbuk/s1600/image047.png" /></a></div>
<br />
The above REST request enables query tracking and the response includes the job information.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioas99JJyfMtBWzGhammQaXdHrzTSHcUHOgLT1Oq7UOf-8tbeUubDpm7uh-H4LEYj4C3HcWwAUKaYDqnTyMWvE812FnfNnm2IcM0hPedlfKikiWRoRoaJw4Yw90U2f33lOn3xkO6rVkNA/s1600/image048.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="104" data-original-width="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioas99JJyfMtBWzGhammQaXdHrzTSHcUHOgLT1Oq7UOf-8tbeUubDpm7uh-H4LEYj4C3HcWwAUKaYDqnTyMWvE812FnfNnm2IcM0hPedlfKikiWRoRoaJw4Yw90U2f33lOn3xkO6rVkNA/s1600/image048.png" /></a></div>
<br />
The job status URL can then be accessed to keep checking whether the process has completed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXsEiv3QOC8mXwfWpP5dgknBsnlLr0ewM-h6bfUpBfmi-nH05-fqOgjF1Mg5xP_ijD8Hn59FZwRTY98KKGu_fEDxR1vJHpdqwMo1CxBJkvORzdAf5CP37NxFxdkSn53Ji8xKsCgmQFv6Y/s1600/image049.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="181" data-original-width="603" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXsEiv3QOC8mXwfWpP5dgknBsnlLr0ewM-h6bfUpBfmi-nH05-fqOgjF1Mg5xP_ijD8Hn59FZwRTY98KKGu_fEDxR1vJHpdqwMo1CxBJkvORzdAf5CP37NxFxdkSn53Ji8xKsCgmQFv6Y/s1600/image049.png" /></a></div>
<br />
This information will also be available in jobs in the simplified interface.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwkuD06PpXlTb1qTotFae6v82VbBCX1IkID2N8xfq-yCE3FbtdbaMp115qrTAfS9Ki_zoc4pGPrzHb6aVtoR8iTEg8DWgulMDC5uRmbghuGxWNpgr1Xd0iO_tJRP1FzBBQUkRMVZAJoBs/s1600/image050.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="97" data-original-width="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwkuD06PpXlTb1qTotFae6v82VbBCX1IkID2N8xfq-yCE3FbtdbaMp115qrTAfS9Ki_zoc4pGPrzHb6aVtoR8iTEg8DWgulMDC5uRmbghuGxWNpgr1Xd0iO_tJRP1FzBBQUkRMVZAJoBs/s1600/image050.png" /></a></div>
<br />
After query tracking has been enabled and sufficient retrievals on the data has taken placed, the cube can be aggregated based on the query tracking using the following REST request.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZbvUaFjxIgUwFnCOJUh528ODaiw4udW3IfgjgQ0fe1xEmSEnr6pH4TJEbZD_1M1rN3979Cs8tJYNTakfQcO6QWC3fzoPIUd6lBa6n9sZ9-lH8B7m1tbPr3HwiSs4DN1t7PM7IFaVh1k8/s1600/image051.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="235" data-original-width="578" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZbvUaFjxIgUwFnCOJUh528ODaiw4udW3IfgjgQ0fe1xEmSEnr6pH4TJEbZD_1M1rN3979Cs8tJYNTakfQcO6QWC3fzoPIUd6lBa6n9sZ9-lH8B7m1tbPr3HwiSs4DN1t7PM7IFaVh1k8/s1600/image051.png" /></a></div>
<br />
Once completed, the response from the job status URL will be something along the lines of:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoLwTLthpRJkvj2wjrm3T8oWoIRUjhNhekJWczBJRmErTu63QOdV1dvpU7BPeX-XgmRE4A73RXPFWiM27wom8f3CepmA9lblDVrxQne_8GLBPK2BdF9QDZOvAjN8KnhO_MbRhOlZVezVk/s1600/image052.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="88" data-original-width="533" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoLwTLthpRJkvj2wjrm3T8oWoIRUjhNhekJWczBJRmErTu63QOdV1dvpU7BPeX-XgmRE4A73RXPFWiM27wom8f3CepmA9lblDVrxQne_8GLBPK2BdF9QDZOvAjN8KnhO_MbRhOlZVezVk/s1600/image052.png" /></a></div>
<br />
In the following example, query tracking has not been enabled, an aggregation is to be executed and the maximum size will be 10% greater than the input level data.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiH6MtFXTURSrlkEfmn46PRk0gof_gY4DWb8xFiOoQVaZAOFT8SLhhUEuZ6NBFxR5NMUFtGkK82tF5DOZ7IYyoDOMNtKJIj1Zmi99D2huKMHplp54xDe5Onrm8x8RpbvRax4Oc2HFHyYE/s1600/image053.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="251" data-original-width="576" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiH6MtFXTURSrlkEfmn46PRk0gof_gY4DWb8xFiOoQVaZAOFT8SLhhUEuZ6NBFxR5NMUFtGkK82tF5DOZ7IYyoDOMNtKJIj1Zmi99D2huKMHplp54xDe5Onrm8x8RpbvRax4Oc2HFHyYE/s1600/image053.png" /></a></div>
<br />
The job status URL based on the job ID can then be requested until the job completes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxLW403Cbei8TluJwOd1Q_4e_-2N8924mZW0SsqHMyKS0xu2cyM7FafZITlKA4Ec55XpxV2m4aEiX0_QaBq63kJhrFOYHY4DAvmcp_Jl1DTRG6f80e6wvsjj39PO6OMhrsvsernPD84aY/s1600/image054.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="123" data-original-width="765" height="102" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxLW403Cbei8TluJwOd1Q_4e_-2N8924mZW0SsqHMyKS0xu2cyM7FafZITlKA4Ec55XpxV2m4aEiX0_QaBq63kJhrFOYHY4DAvmcp_Jl1DTRG6f80e6wvsjj39PO6OMhrsvsernPD84aY/s640/image054.png" width="640" /></a></div>
<br />
Automating this process would only require a slight modification to the example scripts I provided earlier in this blog.<br />
<br />
I am going to leave it there for this post as I think that covers all the new REST API functionality.<br />
<div>
<br /></div>
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com2tag:blogger.com,1999:blog-6575283218005807475.post-27654675263784004972019-01-14T00:55:00.000-08:002019-01-14T00:58:08.412-08:00EPM Cloud - Journals and Data Management - Part 4<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
On to the final instalment of the series looking at Journals and Data Management. In summary, the previous posts covered:<br />
<ol style="text-align: left;">
<li><b class="yellow"><a href="http://john-goodwin.blogspot.com/2018/12/epm-cloud-journals-and-data-management.html">Overview of Journals in FCCS and the workflow process.</a></b></li>
<li><b class="yellow"><a href="http://john-goodwin.blogspot.com/2018/12/epm-cloud-journals-and-data-management_28.html">Loading Journals through the simplified interface and rules enforcing the process.</a></b></li>
<li><b class="yellow"><a href="http://john-goodwin.blogspot.com/2019/01/epm-cloud-journals-and-data-management.html">Loading Journals through Data Management using an Excel template.</a></b></li>
</ol>
In this final post I am going to go through the other method available in Data Management for loading journals, which is with a standard text file. As most of the groundwork has been covered in the previous posts and the concept is just like loading other files through Data Management, this post should be relatively quick and straightforward.<br />
<br />
I am going to start out with a simple CSV file which is based on the journal I loaded previously. I have included a header in the file, so it is clear what is going to be loaded, the header will be automatically rejected during the import.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1eyT10kgjqlIEb9ZJOzuPQA1LjghafiWSjgpvsM8YLBgLPY6wpzHlYAulBAi1H7yDVr_oNEEmvoD19wLAHp8G8pONhh4ooR8Kea3jlekQNdS3i7nXp9wlTFhkwrs3AU2QF147bMNA1uo/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="82" data-original-width="501" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1eyT10kgjqlIEb9ZJOzuPQA1LjghafiWSjgpvsM8YLBgLPY6wpzHlYAulBAi1H7yDVr_oNEEmvoD19wLAHp8G8pONhh4ooR8Kea3jlekQNdS3i7nXp9wlTFhkwrs3AU2QF147bMNA1uo/s1600/image001.png" /></a></div>
<br />
The file could include as many lines as required, I have only included a few lines for easy demo purposes.<br />
<br />
Not all dimensions are contained within the file as these will be handled with data load mappings. Not all source members in the file are the same as the target, so these will also be dealt with using standard mappings.<br />
<br />
It is worth pointing out again an important note from the documentation which needs to be considered when loading journals through Data Management:<br />
<br />
<i><b class="yellow">“When loading journals to an Oracle Financial Consolidation and Close Cloud target, consider that Data Management does not determine the account types or select the credits/debits. All positive numbers are loaded as credits and all negative numbers are loaded as debits. If you need to designate other credit or debit signs for your account type, use the change sign feature in Data Load Mappings or another customized method to handle credits/debits changes for your journal loads.”</b></i><br />
<br />
I am going to start out with the same import format that I created for loading the Excel journal file, it is possible to use a single import format for both.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9_77cpZMLnBLLKNyCMvEkXdJ-CQ6FJu3zkElhOvFlXbupuqpaYqMbr4BckXUUaHCwTJuIeGk7z2qSdDC3VClZKywbo_wQo3UdYi0PshNq_xTVoenTCRSDhULYu0qrDMBr1hfhzvXQrGw/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="409" data-original-width="682" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9_77cpZMLnBLLKNyCMvEkXdJ-CQ6FJu3zkElhOvFlXbupuqpaYqMbr4BckXUUaHCwTJuIeGk7z2qSdDC3VClZKywbo_wQo3UdYi0PshNq_xTVoenTCRSDhULYu0qrDMBr1hfhzvXQrGw/s1600/image002.png" /></a></div>
<br />
When loading the Excel file there was no need to populate the import format mappings because they are driven from within the Excel file. This time I am going to be loading a CSV file, so the mappings need to be defined to map the source columns in the file map to the target dimensions.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnXHBJiVIb8kXpzc_cGhZMEh_EbgbCh44gumygP1nasPhMYn9ibwOlXwpzyT-Iv_As2YTnh_PJvjym6eZPVeQopvX7LGmS2jUq4Y6Nkc-xDDFbViQnn8CFc4tTDprO6YKqACnLaSfCddI/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="247" data-original-width="475" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnXHBJiVIb8kXpzc_cGhZMEh_EbgbCh44gumygP1nasPhMYn9ibwOlXwpzyT-Iv_As2YTnh_PJvjym6eZPVeQopvX7LGmS2jUq4Y6Nkc-xDDFbViQnn8CFc4tTDprO6YKqACnLaSfCddI/s1600/image003.png" /></a></div>
<br />
Where there is a match between the source file and target the source column names were defined with their corresponding field numbers, the remaining mappings were left blank as these will be handled with data load mappings.<br />
<br />
I am going to use the same location that was created for loading the Excel file, most of the values in the location are the ones created by default.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtUGjjv5qJV9_ER-2R64spc8yxa5LeO_nJ1CX2-WKYS5ISsCC8_8TbCEVMO8nlo7r35g6bhcxrGXJ7BlUHycpLxbTbBqr27OpbaVZqo-aVBYMpr6BQM2s9ZccP5apzEgIVecaQYxXx-bw/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="202" data-original-width="637" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtUGjjv5qJV9_ER-2R64spc8yxa5LeO_nJ1CX2-WKYS5ISsCC8_8TbCEVMO8nlo7r35g6bhcxrGXJ7BlUHycpLxbTbBqr27OpbaVZqo-aVBYMpr6BQM2s9ZccP5apzEgIVecaQYxXx-bw/s1600/image004.png" /></a></div>
<br />
On to the load rule, the target cube was set, the source file uploaded and selected as the file name.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje_HX_Z5egs6Ee3uxl3fBO2H2efrsZsYRWYSim9LbpMyv3bKIZr90r_KMPmQIUGnUFykP-CFxk7HipTu0ugY2b078akQPW6noLhuleqgrGApHIW_sm70XyibRv7cWKCnu9wjMJa7SUFQ0/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="350" data-original-width="687" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje_HX_Z5egs6Ee3uxl3fBO2H2efrsZsYRWYSim9LbpMyv3bKIZr90r_KMPmQIUGnUFykP-CFxk7HipTu0ugY2b078akQPW6noLhuleqgrGApHIW_sm70XyibRv7cWKCnu9wjMJa7SUFQ0/s1600/image005.png" /></a></div>
<br />
The important part is to set the load type to “Journal” in the target options, this is to distinguish between a standard data load and a journal load.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXPuURUqDfQBsmQCYNySHBza7egNhdblC1fFw7f3Pey1Cd-UnjUHELzVtdoaNAO9EX2vc3T3Y_N1KyAz2No0qSEHd7yKkfjzLCk-fKhK-jsNi4oBU8RKFnQ6W4n-PPPL8A_dRUqeWoDZY/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="105" data-original-width="369" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXPuURUqDfQBsmQCYNySHBza7egNhdblC1fFw7f3Pey1Cd-UnjUHELzVtdoaNAO9EX2vc3T3Y_N1KyAz2No0qSEHd7yKkfjzLCk-fKhK-jsNi4oBU8RKFnQ6W4n-PPPL8A_dRUqeWoDZY/s1600/image006.png" /></a></div>
<br />
The journal status follows the same rules that I have previously been through, remember that:<br />
<br />
<i><b class="yellow">“If the Journal Workflow is enabled, you can only import Working journals. If the Journal Workflow is disabled, you can import Working and Posted journals.”</b></i><br />
<br />
For data load mappings, where members existed in the source file these were explicitly mapped, for the remaining one these were defined with like mappings, for example the data source dimension:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFaMJ8-yY_CHdp_Jxjn4hX5WOtwsMZMz2ljlC_vyvZUeGlLAvvh8uwOxrsiqLXtc2k5DjbrlVzeGD8WdAdRc9PBC9No5Fn14MuqgnoiE96Hrq-JVEVC9QnPRWE15I-W5hQA05HO-kKdfw/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="213" data-original-width="382" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFaMJ8-yY_CHdp_Jxjn4hX5WOtwsMZMz2ljlC_vyvZUeGlLAvvh8uwOxrsiqLXtc2k5DjbrlVzeGD8WdAdRc9PBC9No5Fn14MuqgnoiE96Hrq-JVEVC9QnPRWE15I-W5hQA05HO-kKdfw/s1600/image007.png" /></a></div>
<br />
Just as when loading Journals through the simplified interface or the Excel template, it is possible to use the target member name or alias in the mapping.<br />
<br />
It doesn’t actually matter what data source is mapped to, the following would still be valid.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGxsJnYfMya-7_1Ucwpwp5X_3-hwqtcl__wgwVTzz86kbn82jexl2Ow9lAF6UrQSmkcmgNB_z8mCVtkKsIj9I6Af6QqIATeHRq4WtLo1IX_29uzG1MHlafYrzxAKT1QsW5ahZZ6bJGdEg/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="164" data-original-width="379" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGxsJnYfMya-7_1Ucwpwp5X_3-hwqtcl__wgwVTzz86kbn82jexl2Ow9lAF6UrQSmkcmgNB_z8mCVtkKsIj9I6Af6QqIATeHRq4WtLo1IX_29uzG1MHlafYrzxAKT1QsW5ahZZ6bJGdEg/s1600/image008.png" /></a></div>
<br />
This is because by default journals are always created against the seeded “FCCS_Journal Input” member. Though it is probably best to define the mapping to the correct member as at least it is clear what member it is being created against.<br />
<br />
Let us run an import through the workbench.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh06BzfLZat2frwMzrpSiEkrbndN4__MfpT3US3NMh_HEnMhfbosHQGRFSCeDkU7MEZFBUe4NgL_7zbb3R1Uq7Eah0OldNyVM1Mnp3ARPSVZ81_ZjTiDEBPALUKIlsTRcujYSOsWG9olQM/s1600/image010.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="176" data-original-width="1085" height="102" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh06BzfLZat2frwMzrpSiEkrbndN4__MfpT3US3NMh_HEnMhfbosHQGRFSCeDkU7MEZFBUe4NgL_7zbb3R1Uq7Eah0OldNyVM1Mnp3ARPSVZ81_ZjTiDEBPALUKIlsTRcujYSOsWG9olQM/s640/image010.jpg" width="640" /></a></div>
<br />
The file was successfully imported and all dimensions correctly mapped.<br />
<br />
This means an export can be run to export the data from Data Management and create a new journal in the target application.<br />
<br />
<div bp.blogspot.com="" class="separator" https:="" image011.png="" imageanchor="1" myranfbuink="" re="" s1600="" style="margin-left: 1em; margin-right: 1em;" tipwskhui="" v_jd953lmeclp5m13ivdydwnzexblc7kgclcbgas="">
<img border="0" data-original-height="48" data-original-width="46" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmj9SU2EvpBM_2iq3kGSqX3ZiRJG_6L9fpV9uFBkbuXcG_LcHZRb-5Fo8J5JFWpTanDftnGY6VTyvkl3qt2Jci4EIjolGxwnm5VcKBZXvlmBJdXF4JumGJpp11yKDXlcUFiIzQmeMHV-M/s1600/image011.png" /></div>
</div>
<br />
In the process log there is an entry to confirm that the file is being generated in the same way as with the Excel template method.<br />
<br />
<b class="yellow">DEBUG [AIF]: Created journal load data file: /u03/inbox/outbox/FCCS_212.jlf</b><br />
<br />
If the journal file is downloaded from Data Management and opened, you can see it is based on the same format to that when loading journals through the simplified interface or the Excel template.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI3zqe4thxTtt9vpmVvZzKM9QOvJ6UBqjW0hTlz9jhyphenhyphenrAwsEUMI9D56wUEV53ZzFUeH0_NZtB9uSjJTjaFluyL333C9JRw5nJQRQ8EXX7bmZGwsrAGA6DJJ2J-GaxwsFg6WiCPt2U2fLc/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="169" data-original-width="943" height="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI3zqe4thxTtt9vpmVvZzKM9QOvJ6UBqjW0hTlz9jhyphenhyphenrAwsEUMI9D56wUEV53ZzFUeH0_NZtB9uSjJTjaFluyL333C9JRw5nJQRQ8EXX7bmZGwsrAGA6DJJ2J-GaxwsFg6WiCPt2U2fLc/s640/image012.png" width="640" /></a></div>
<br />
Now, as no label has been defined for the journal, it is automatically generated. This is based on the process ID.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW0rJH9J63hjHRcY_i6RbN59DKTi4S_QlNmf3tGpSOhv-gNDmUoKjraW4Xmi7ZIiWdYLUTw728XF0XyhexfM6fb8l4FQVXCtfR0ktXEemHWitznzvvKTJ9cLKBN3ZRYIdE16Sk1Z54Mow/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="110" data-original-width="158" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW0rJH9J63hjHRcY_i6RbN59DKTi4S_QlNmf3tGpSOhv-gNDmUoKjraW4Xmi7ZIiWdYLUTw728XF0XyhexfM6fb8l4FQVXCtfR0ktXEemHWitznzvvKTJ9cLKBN3ZRYIdE16Sk1Z54Mow/s1600/image013.png" /></a></div>
<br />
The journal label format will be “JL” + Process ID.<br />
<br />
In the target application, the journal has been created with a label following the above logic.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2JGbN9HnR3DHqAwtOiSJ7LuzT7vCexHPzVk54BrXoSc5me4zj_9Zq_QLzcCNlyaauKafiRVA1qp7VFh9B5TpdA7bT2fCcSa4baAuwtuu7Lh_OQWDwE6QpULxDgDzjwbO1v8_44ZtXXSE/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="244" data-original-width="653" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2JGbN9HnR3DHqAwtOiSJ7LuzT7vCexHPzVk54BrXoSc5me4zj_9Zq_QLzcCNlyaauKafiRVA1qp7VFh9B5TpdA7bT2fCcSa4baAuwtuu7Lh_OQWDwE6QpULxDgDzjwbO1v8_44ZtXXSE/s1600/image014.png" /></a></div>
<br />
Opening the journals confirms the journal lines have been generated to match the source file after mappings have been applied.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ554mJdgrZzwlQ1kyCmIrlzr4pSQcwW2LJCdIvUyUU0Vk_Z2woLiKc0b3_spheNKpQ1LGQqk_VGIGUefffBsP6VZQtL2tzUuZ0N_qbo3bAyBk2XlYesDDif7E9jF9P2AmN2We3itn0EQ/s1600/image016.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="312" data-original-width="1084" height="184" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ554mJdgrZzwlQ1kyCmIrlzr4pSQcwW2LJCdIvUyUU0Vk_Z2woLiKc0b3_spheNKpQ1LGQqk_VGIGUefffBsP6VZQtL2tzUuZ0N_qbo3bAyBk2XlYesDDif7E9jF9P2AmN2We3itn0EQ/s640/image016.jpg" width="640" /></a></div>
<br />
What if you wanted to create your own label for the journal? Well this can be achieved by adding a “Journal Label Row” in the import format.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioWSx6CLChtnFbrRT0_x9drFRr9Zs49hHllsKsCCSyuPvNxRT6wf4ZzxJ9q4lyH9CciKTEG0BqgsOMbUKU42hWnAeB9NADBVV1wXjtWY1zoXGizeSXeze7ECidn8SK7BXbSAvFUBAGevk/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="155" data-original-width="387" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioWSx6CLChtnFbrRT0_x9drFRr9Zs49hHllsKsCCSyuPvNxRT6wf4ZzxJ9q4lyH9CciKTEG0BqgsOMbUKU42hWnAeB9NADBVV1wXjtWY1zoXGizeSXeze7ECidn8SK7BXbSAvFUBAGevk/s1600/image017.png" /></a></div>
<br />
An expression can be defined which will be the name of the journal label.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVp8snUhZPud93ud-igJlYRg0IG05AFeD8pK7jdmkqJ65F7KXY5q71Hf73-_SuqiGquE1D72tCcUrlokPEBAiH5eQZGme2i6nmdiTcjavHmPfIFZUo6OQld9oo0FPJ1KBBkPmw2qWMaEg/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="83" data-original-width="549" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVp8snUhZPud93ud-igJlYRg0IG05AFeD8pK7jdmkqJ65F7KXY5q71Hf73-_SuqiGquE1D72tCcUrlokPEBAiH5eQZGme2i6nmdiTcjavHmPfIFZUo6OQld9oo0FPJ1KBBkPmw2qWMaEg/s1600/image018.png" /></a></div>
<br />
In the workbench you can show the “Journal ID” column which is the journal label.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjRzZ1B3Ry0eUuTfPBoOMEe3BdyCZ1QXfl6NLMlkvvv-Hrr1YwAOD9k-Z0Em3I0kih5DzjKbaSztFMY1eUR1-BxMRLLygJfXMCkpIWWOPZ233zmpNJhNKIzW_7kH19tTC-8rDPRf_Vumg/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="181" data-original-width="123" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjRzZ1B3Ry0eUuTfPBoOMEe3BdyCZ1QXfl6NLMlkvvv-Hrr1YwAOD9k-Z0Em3I0kih5DzjKbaSztFMY1eUR1-BxMRLLygJfXMCkpIWWOPZ233zmpNJhNKIzW_7kH19tTC-8rDPRf_Vumg/s1600/image019.png" /></a></div>
<br />
After mappings have been applied, each row of data will include the label. This is important as I will demonstrate shortly what happens if it is not included in each row.<br />
<br />
After an export, the journal has been created with the same label that was defined in the import format.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheaVHIzt17ERw4bUc1Du0cW0ci5keozivZJTpqR9YnubwuwjY9GtfZfYcwong1pHiLB1oED6WF1x2R46QBEAkimaxsWVO8urylECiRTLpyNvn3irCTUBmDnNxksgKfW5phWZr6mmxigf8/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="234" data-original-width="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheaVHIzt17ERw4bUc1Du0cW0ci5keozivZJTpqR9YnubwuwjY9GtfZfYcwong1pHiLB1oED6WF1x2R46QBEAkimaxsWVO8urylECiRTLpyNvn3irCTUBmDnNxksgKfW5phWZr6mmxigf8/s1600/image020.png" /></a></div>
<br />
At the moment, the journal has not been assigned to a group which is perfectly fine. If you want to assign a journal to a group, the journal label needs to follow the same format that I described in the previous post.<br />
<br />
The format to include a label and a group is:<br />
<br />
<b class="yellow">LABEL=<Label name>#GROUP=<Group name></b><br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc4MZqAnVe1Xd0u7-kRgFip0Z0xgTSTWfmT-PuRN2VqR7cAReaeO2FVxudeD_9HV0ztye-JWjyBZOO46K0JOv24Rvs451TpRaSPLzzfvtcdqv219ejor3wh9g2yA0fH6FkZzEnITXVauw/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="84" data-original-width="545" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc4MZqAnVe1Xd0u7-kRgFip0Z0xgTSTWfmT-PuRN2VqR7cAReaeO2FVxudeD_9HV0ztye-JWjyBZOO46K0JOv24Rvs451TpRaSPLzzfvtcdqv219ejor3wh9g2yA0fH6FkZzEnITXVauw/s1600/image021.png" /></a></div>
<br />
Please note that you must specify a label if you are going to include a group otherwise an error will be generated when creating the output journal file.<br />
<br />
In the workbench, you can view the label and group by showing the “Journal ID” column.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihwZRGwf2kNqzdXb6rJ14z5ZzNZiwPKvBnQBR1Oj2XNDjwF1_Ver959e13KLJq0ypMut9aZeCfKYixko-nr-Y4o4eo1ctB9btuwaR7iZD6clZhwiTaAhm1Nb4wRAhZs3GblrQKTBomiP0/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="187" data-original-width="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihwZRGwf2kNqzdXb6rJ14z5ZzNZiwPKvBnQBR1Oj2XNDjwF1_Ver959e13KLJq0ypMut9aZeCfKYixko-nr-Y4o4eo1ctB9btuwaR7iZD6clZhwiTaAhm1Nb4wRAhZs3GblrQKTBomiP0/s1600/image022.png" /></a></div>
<br />
Once exported, the journal includes the label and has been assigned to a group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpttnjKYGlfmAvP4P1ecpBFPnPxhO0U6LysPvQuVuh9dewr0aZVkvXrvHJWevQsKBh7pQ2mm-x3gbPTlamHFNzTFRYWn8_gsDq4fya9MJvrRVra1MuyWeUXTt2T0ftwWFIR1PDOkp0clU/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="238" data-original-width="660" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpttnjKYGlfmAvP4P1ecpBFPnPxhO0U6LysPvQuVuh9dewr0aZVkvXrvHJWevQsKBh7pQ2mm-x3gbPTlamHFNzTFRYWn8_gsDq4fya9MJvrRVra1MuyWeUXTt2T0ftwWFIR1PDOkp0clU/s1600/image023.png" /></a></div>
<br />
This method might be acceptable, but it is not very dynamic as it requires updating the import format every time you want to change the label or group.<br />
<br />
To offer more flexibility it is possible to include the label and group in the source file.<br />
<br />
I updated the file to include two columns for label and group. I have not defined them in the correct format as it is not the most user friendly. I want Data Management to produce the label and group output in the right format.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbkrIkYPPEiDbOX1pxi043D_Xd75Z2xD3VDsO66idgsjR_qjixKIaIewl5UGry9Azx6xSIkWtrmQ0PPppn-fVYkYpHSFzKx1KwZaaO6bkss5cIKHR8Bs5qKqBflMC56tptkabB1TWcTAQ/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="80" data-original-width="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbkrIkYPPEiDbOX1pxi043D_Xd75Z2xD3VDsO66idgsjR_qjixKIaIewl5UGry9Azx6xSIkWtrmQ0PPppn-fVYkYpHSFzKx1KwZaaO6bkss5cIKHR8Bs5qKqBflMC56tptkabB1TWcTAQ/s1600/image024.png" /></a></div>
<br />
I have only assigned the label and group to one row in the file as I don’t want to have to keep duplicating the same values.<br />
<br />
As I have kept the label and group separate and there is no group in the target I added a lookup dimension in the target application dimension details.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2tNrg26mujmDIqH_QvBcrB7J3ajGFBlCElvaafe1fa37ji9C0TSm2lxcxppiTGz_b3Shxx6kljvZtHLrZJkqbxX1FrZwTXPd00YDa37Cr11DzH6l2yeFXpBFFFMowALvBkaxqVWRk9is/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="143" data-original-width="536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2tNrg26mujmDIqH_QvBcrB7J3ajGFBlCElvaafe1fa37ji9C0TSm2lxcxppiTGz_b3Shxx6kljvZtHLrZJkqbxX1FrZwTXPd00YDa37Cr11DzH6l2yeFXpBFFFMowALvBkaxqVWRk9is/s1600/image025.png" /></a></div>
<br />
By doing this I will be able to load the source file to that dimension, apply a data load mapping to then take the group value and apply it to the label in the correct format. Lookup dimensions are not loaded to the target, so once the mappings logic has been applied it can be forgotten about.<br />
<br />
The source file label and group columns can now be mapped in the import format.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIh2GoPwlggT-BujG_H3l_I7-dfxK64Kbrb405k0C7g1xo7EHBOebbArdohYC3J0Bu_KmX43VjKAuM5Q6ljFanbIO9rAtc5Zo4uPVWe-nqGN9OJHJas-SZYXhto2cF8lCGkuU5-u6juxA/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="108" data-original-width="455" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIh2GoPwlggT-BujG_H3l_I7-dfxK64Kbrb405k0C7g1xo7EHBOebbArdohYC3J0Bu_KmX43VjKAuM5Q6ljFanbIO9rAtc5Zo4uPVWe-nqGN9OJHJas-SZYXhto2cF8lCGkuU5-u6juxA/s1600/image026.png" /></a></div>
<br />
If the source file is imported again you can view the label which is assigned to the “Journal ID” column and the group is separate.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw7jtykXf_1xNe7PSd5BFn_u93KJIVXT6HJoFVYe8KR8LJ-PjtxA8BCg2t16wEp_PEEllyEaG8z784-xRyBKnJ1CAZU9lYoV37t3uRk3ZlADhZQRUhiAswW3LpB_-p2lZvPM4RtsFHhrE/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="176" data-original-width="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw7jtykXf_1xNe7PSd5BFn_u93KJIVXT6HJoFVYe8KR8LJ-PjtxA8BCg2t16wEp_PEEllyEaG8z784-xRyBKnJ1CAZU9lYoV37t3uRk3ZlADhZQRUhiAswW3LpB_-p2lZvPM4RtsFHhrE/s1600/image027.png" /></a></div>
<br />
Only one record currently contains the label and group. To be able to create a journal, we now need to join the label and group in the correct format, this also needs to be applied to each row of data.<br />
<br />
To achieve this logic, I am going to add a SQL mapping to the group dimension as there is no mapping dimension available for journal ID.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-ZcIDLWJnT3SXcKOLpXHOlBp4QcHeNtM8_XtMwBTqy6Cg653so6lAglhYIIWHW1IngwSUV_NgiOFWLDdgADITaWB63M_1YK6ZznBVhrK2txRmm2m-KhK3af_SaYuj4SgNIZVhjwGYHlI/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="214" data-original-width="428" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-ZcIDLWJnT3SXcKOLpXHOlBp4QcHeNtM8_XtMwBTqy6Cg653so6lAglhYIIWHW1IngwSUV_NgiOFWLDdgADITaWB63M_1YK6ZznBVhrK2txRmm2m-KhK3af_SaYuj4SgNIZVhjwGYHlI/s1600/image028.png" /></a></div>
<br />
First, I am going to demonstrate what happens if I only apply the label and group logic to a single row of data.<br />
<br />
A SQL script is created, this script will map the target group (data column UD10) value to the same as the source group value. This is because the mapping is against the group dimension so requires a mapping even though the target group value is not important.<br />
<br />
The script also updates the journal ID column based on the current value in the journal ID column and concatenates it with the group source value, the value that is generated is based on the required format of:<br />
<br />
<b class="yellow">LABEL=<Label name>#GROUP=<Group name></b><br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih1TAOAYreAsl04kJHIkS8kS3rlcEe5cAz0wCl1u8wDXGb96OGRWh9LQ4EN9TT1A9mi_5wYXRvq6j2d9U7IWfk6L96SB8w0sWu_nGmahnKVEB1N4RV3URobj6wO1NwYlOzujp_dRUJIfA/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="69" data-original-width="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih1TAOAYreAsl04kJHIkS8kS3rlcEe5cAz0wCl1u8wDXGb96OGRWh9LQ4EN9TT1A9mi_5wYXRvq6j2d9U7IWfk6L96SB8w0sWu_nGmahnKVEB1N4RV3URobj6wO1NwYlOzujp_dRUJIfA/s1600/image029.png" /></a></div>
<br />
If I import and map the data again you can see there is an issue with this mapping.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEKAyMvA8klJGWAVOtOe52QTKMht1sM2L3TY_gAvp3SEERWm3dPTSP7h2FVYjMMfEfZuXoGofwdBwj_LMmV-WQNuSMrL1TStz3__s-Zo0bk3pb4xhQXRXZP8LApxPA3BdGF5QDpZIjrno/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="183" data-original-width="466" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEKAyMvA8klJGWAVOtOe52QTKMht1sM2L3TY_gAvp3SEERWm3dPTSP7h2FVYjMMfEfZuXoGofwdBwj_LMmV-WQNuSMrL1TStz3__s-Zo0bk3pb4xhQXRXZP8LApxPA3BdGF5QDpZIjrno/s1600/image030.png" /></a></div>
<br />
As only one record of data contains the label and group, the blank record is still being generated in the label and group format. This will cause an error when generating the journal file.<br />
<br />
This would not have been a problem if the source had both records populated but I wanted to avoid having to do that.<br />
<br />
If I update the SQL mapping to only update the journal ID is there is a source value with the following:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJAiDxJ8c36Ikwabl4dnG6lQu0L5FrB6tM4pHh17-_quGcvyfIX9EQpHRlooGRmh1V9ITpsGjTZXWT6lig5VSgOUVRQWpedtrkSM6OJL8QsAEaSCZW_7pgyGNiHmTOzc3yda66eUgBFJc/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="104" data-original-width="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJAiDxJ8c36Ikwabl4dnG6lQu0L5FrB6tM4pHh17-_quGcvyfIX9EQpHRlooGRmh1V9ITpsGjTZXWT6lig5VSgOUVRQWpedtrkSM6OJL8QsAEaSCZW_7pgyGNiHmTOzc3yda66eUgBFJc/s1600/image031.png" /></a></div>
<br />
This now creates the journal ID column in the correct format but for only one record.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKJJmkIRZDOJcVB9U22ilrIcEEtwW5twqA-49haXGh4WA1j01F24j_QS8GeIhVMAHbkEtkoYd7_xR8RnriR7inb7a4NTH5F5wr7JoZS1jWgBJogEa7KbTl4E5h1zsE3nxlj7jFo9YZK8o/s1600/image032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="178" data-original-width="449" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKJJmkIRZDOJcVB9U22ilrIcEEtwW5twqA-49haXGh4WA1j01F24j_QS8GeIhVMAHbkEtkoYd7_xR8RnriR7inb7a4NTH5F5wr7JoZS1jWgBJogEa7KbTl4E5h1zsE3nxlj7jFo9YZK8o/s1600/image032.png" /></a></div>
<br />
An export will be successful.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUfaSNvLvdsGj6MM2PdzcJg_sdLj4nbGCiHvM_OzOCQc3Hd5BBUfa3Q7BQ5NYMapXgtVvkPnX-OqA0NMjZrSF_rkZnvtAWTK5M_-aaYFSaq7jSWVvZzKl4j_iZRPFSrlJ1z7-ZVcAfoeQ/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="47" data-original-width="46" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUfaSNvLvdsGj6MM2PdzcJg_sdLj4nbGCiHvM_OzOCQc3Hd5BBUfa3Q7BQ5NYMapXgtVvkPnX-OqA0NMjZrSF_rkZnvtAWTK5M_-aaYFSaq7jSWVvZzKl4j_iZRPFSrlJ1z7-ZVcAfoeQ/s1600/image033.png" /></a></div>
<br />
Though the journal file that is generated is not what I am after.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHSlP-Y1lJY__ci5LTKlgiZEmAE16CVpUyOvn4w60VD3OCwlPKnKcNwP7c5JccOFpOErNZwedfZZpZwayvnam47Tl9VlUwIC9U3D3OaCOOAVyMZVycad1oaSE6MpcPVgJxCdkqBdLfel8/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="316" data-original-width="944" height="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHSlP-Y1lJY__ci5LTKlgiZEmAE16CVpUyOvn4w60VD3OCwlPKnKcNwP7c5JccOFpOErNZwedfZZpZwayvnam47Tl9VlUwIC9U3D3OaCOOAVyMZVycad1oaSE6MpcPVgJxCdkqBdLfel8/s640/image034.png" width="640" /></a></div>
<br />
Multiple journals have been defined within the file. A journal has been generated against the row of data which has no label and group. As there is no label it has been generated in the process ID format.<br />
<br />
A second journal has also been generated in the file with the correct label, group and lines.<br />
<br />
Within the application two journals have been created.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDIkKyYWx9gNmMRf2XTrcI6lCNZVhllFoA6mSoJ10cczl2sHvQQJn4OE8bUjH1ER0KunVXccb0uOwbCkYv4woDqD4YhSTDIDEYg-INmWpQewxWZIt6tyh1Y-eQZ5iQxG-qcA3to_-3ElU/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="282" data-original-width="651" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDIkKyYWx9gNmMRf2XTrcI6lCNZVhllFoA6mSoJ10cczl2sHvQQJn4OE8bUjH1ER0KunVXccb0uOwbCkYv4woDqD4YhSTDIDEYg-INmWpQewxWZIt6tyh1Y-eQZ5iQxG-qcA3to_-3ElU/s1600/image035.png" /></a></div>
<br />
This is definitely incorrect as the intention was to create a single journal, but I wanted to demonstrate the reason why each record should include the label.<br />
<br />
I updated the SQL mapping script so that it will select the record of data where the label exists and apply that to each journal ID row.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9sy9GTGTK_wnAlMzihhY9WQ2qV7x0ctDctE7IVVbYhOXi-hqACGKPWcdlswjSV0ei7jMwAhwjbJq4EWWxNJUJw2KOE_TwV0tZlglGtp8t7rhy0OWRm9LivgBXs8ebqb_uFH8uj0nJrCE/s1600/image036.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="122" data-original-width="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9sy9GTGTK_wnAlMzihhY9WQ2qV7x0ctDctE7IVVbYhOXi-hqACGKPWcdlswjSV0ei7jMwAhwjbJq4EWWxNJUJw2KOE_TwV0tZlglGtp8t7rhy0OWRm9LivgBXs8ebqb_uFH8uj0nJrCE/s1600/image036.png" /></a></div>
<br />
In the workbench, the label and group has been applied to each record in the correct format.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVfajzXq2xeRxoKgF6IvKIPUyMeMHMzLnBpWtv0YWWSLO7k1Wgz2cLxWOAoL2-9kfDyWkGI4-KKQ47YIDkP7OVyJIurFYoF1XEvXEX2ABHXMOkRUZt13T4mZeEQpCw0OLi-URHTQsft-8/s1600/image037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="188" data-original-width="417" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVfajzXq2xeRxoKgF6IvKIPUyMeMHMzLnBpWtv0YWWSLO7k1Wgz2cLxWOAoL2-9kfDyWkGI4-KKQ47YIDkP7OVyJIurFYoF1XEvXEX2ABHXMOkRUZt13T4mZeEQpCw0OLi-URHTQsft-8/s1600/image037.png" /></a></div>
<br />
An export now creates a single journal with the desired label and assigns it to the required group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6haMZcaaoKIavHt2I0aEtmWgNYdC2A7-86HVzYdDoRLpr71mvz_VI6NJ6sD2JPISGJDtupGgS2rChf3ZqPc17QLuVuAMoWQ49usRUGLyWB7av7FvrvhgzmzlGb44PTLpnj3XM5jKbTZI/s1600/image038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="245" data-original-width="651" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6haMZcaaoKIavHt2I0aEtmWgNYdC2A7-86HVzYdDoRLpr71mvz_VI6NJ6sD2JPISGJDtupGgS2rChf3ZqPc17QLuVuAMoWQ49usRUGLyWB7av7FvrvhgzmzlGb44PTLpnj3XM5jKbTZI/s1600/image038.png" /></a></div>
<br />
If you do want to create multiple journals, then just make sure that the journal ID is assigned to the correct rows of data.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim4S-ZVCaHnoDBKNL_W2TCEGbSGZejQKviwFY0mCxJFboraQHCF5oiKemsPXLACs7J9mE5xXJAoExuFlE8j7ODHtyowhnctLASAqKWIY_FXOm_TrE3F-EZDPvqsxvcSNi8A6ly-A7VjNg/s1600/image039.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="205" data-original-width="438" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim4S-ZVCaHnoDBKNL_W2TCEGbSGZejQKviwFY0mCxJFboraQHCF5oiKemsPXLACs7J9mE5xXJAoExuFlE8j7ODHtyowhnctLASAqKWIY_FXOm_TrE3F-EZDPvqsxvcSNi8A6ly-A7VjNg/s1600/image039.png" /></a></div>
<br />
The above example creates two journals each with two item lines.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvIZf1kkFYJrFbKFeohg3wmzrCwlsA-HcH1RbQOVWP9nFIUc9VoCn5hfF9Snj0Me7QTELbFHpY6MQIcO2Wqo5vigmDtLXPhIle0X3woLED73NFJQ2thTD8q1nCrmB_H86oJYw8D1HF5Qg/s1600/image040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="282" data-original-width="655" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvIZf1kkFYJrFbKFeohg3wmzrCwlsA-HcH1RbQOVWP9nFIUc9VoCn5hfF9Snj0Me7QTELbFHpY6MQIcO2Wqo5vigmDtLXPhIle0X3woLED73NFJQ2thTD8q1nCrmB_H86oJYw8D1HF5Qg/s1600/image040.png" /></a></div>
<br />
Up to now the examples have not included descriptions. Descriptions can be applied to the individual lines in a journal or at the journal level.<br />
<br />
Let us go through an example of including descriptions on each line of a journal. I updated the source file to include a column for descriptions.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE1kEQPrA7IU76Ocg0HnBqjXOFGZpDbj0ah5k2ShuJ1zMf2JWmeFAFQiYXOCfN6MQUNx6vwhgo_cS20KbiIKGSTF2Axuk-bvOoMMvX_ObUI7pxvCU3T7lOU2xF4ds4pWAvBumaFtZgyKA/s1600/image041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="80" data-original-width="725" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE1kEQPrA7IU76Ocg0HnBqjXOFGZpDbj0ah5k2ShuJ1zMf2JWmeFAFQiYXOCfN6MQUNx6vwhgo_cS20KbiIKGSTF2Axuk-bvOoMMvX_ObUI7pxvCU3T7lOU2xF4ds4pWAvBumaFtZgyKA/s1600/image041.png" /></a></div>
<br />
A description row is then added to the input format.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAADR8DM9nrscpxKnCF3_GMKtzbYre3_pHY52HkIBTHHFL5ZRKUtN0Ko4-95cwFDQBFqAo42pRM97eHqpa2wAyeVzwlMRZ-ULNV8c63ra6iesHzl6u9X88VmmWzJDOIM9GmF7rr3yvDbA/s1600/image042.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="110" data-original-width="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAADR8DM9nrscpxKnCF3_GMKtzbYre3_pHY52HkIBTHHFL5ZRKUtN0Ko4-95cwFDQBFqAo42pRM97eHqpa2wAyeVzwlMRZ-ULNV8c63ra6iesHzl6u9X88VmmWzJDOIM9GmF7rr3yvDbA/s1600/image042.png" /></a></div>
<br />
The target is created as “Description 1”, this will be used for individual journal line items.<br />
<br />
The source column is mapped to the field number.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqFtHrcmxyzhzu-ODh1uyQ2vw2UskN_xknfs-PhmOu_MYWQV4zECZ7C8R-yXcEZqDWvnhS5SQ4FYcjpCbexPOZq6D4LHR4TLHODyNf003YaoWZpwB9jaiPd3JQlaCbthUtNw_Q58d1kB8/s1600/image043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="85" data-original-width="477" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqFtHrcmxyzhzu-ODh1uyQ2vw2UskN_xknfs-PhmOu_MYWQV4zECZ7C8R-yXcEZqDWvnhS5SQ4FYcjpCbexPOZq6D4LHR4TLHODyNf003YaoWZpwB9jaiPd3JQlaCbthUtNw_Q58d1kB8/s1600/image043.png" /></a></div>
<br />
In the workbench it is possible to show the description column.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-yLdXOj5gxyz-kAf6jKYSETYcWt8WLJV6en8iw_s-prAU1PbeMqPTsdQygARtJO1V_YXxzb-bj1NgUwqqWkQA6Euv7RG0zogOF0lz8xbNB-jmxk8ntgGO6770s2thhV0Ig1HxmnCggjg/s1600/image044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="185" data-original-width="396" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-yLdXOj5gxyz-kAf6jKYSETYcWt8WLJV6en8iw_s-prAU1PbeMqPTsdQygARtJO1V_YXxzb-bj1NgUwqqWkQA6Euv7RG0zogOF0lz8xbNB-jmxk8ntgGO6770s2thhV0Ig1HxmnCggjg/s1600/image044.png" /></a></div>
<br />
After a successful export from Data Management, the journal lines will be created with the description from the source file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYqNGKF00tiDFFJolNKeHeQ1IozehY0M7azSPObdgKh6KUu_g1ROSMxxx3-CIvzwIhZOB27eewsWt7VqvprsxiWBwGzQHJsszZrh1UWGfqHCnY59gw3dO-9yZ_9aq_V6yWKdpyD4YRI-M/s1600/image045.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="427" data-original-width="1173" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYqNGKF00tiDFFJolNKeHeQ1IozehY0M7azSPObdgKh6KUu_g1ROSMxxx3-CIvzwIhZOB27eewsWt7VqvprsxiWBwGzQHJsszZrh1UWGfqHCnY59gw3dO-9yZ_9aq_V6yWKdpyD4YRI-M/s640/image045.png" width="640" /></a></div>
<br />
If you want to include a description at the journal level, add another description row in the import format.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAADR8DM9nrscpxKnCF3_GMKtzbYre3_pHY52HkIBTHHFL5ZRKUtN0Ko4-95cwFDQBFqAo42pRM97eHqpa2wAyeVzwlMRZ-ULNV8c63ra6iesHzl6u9X88VmmWzJDOIM9GmF7rr3yvDbA/s1600/image042.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="110" data-original-width="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAADR8DM9nrscpxKnCF3_GMKtzbYre3_pHY52HkIBTHHFL5ZRKUtN0Ko4-95cwFDQBFqAo42pRM97eHqpa2wAyeVzwlMRZ-ULNV8c63ra6iesHzl6u9X88VmmWzJDOIM9GmF7rr3yvDbA/s1600/image042.png" /></a></div>
<br />
<br />
This time the target will be created with “Description 2”, if you want to create a description at journal level then it will always need to be against “Description 2”.<br />
<br />
If you don’t want to include descriptions for each line of the journal you can delete “Description 1” but still include “Description 2” for journal level descriptions.<br />
<br />
For simplicity I have created the journal description in the import format expression. It can be generated from the source file by the same methods I have already gone through.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUVsuNYz2rBsImV-kGF3W9XvBb3WWwKXr82t2fsyIyQ_AMSn-AfFcuEnnmQ0-Hh8mv3TXjWnhbJbiTVwNsIL4RR1Uku_qK03E89B1ErqSepKSnmoHFIr9xC0nbQRtWg55GkYM_wPwS56Q/s1600/image047.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="84" data-original-width="560" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUVsuNYz2rBsImV-kGF3W9XvBb3WWwKXr82t2fsyIyQ_AMSn-AfFcuEnnmQ0-Hh8mv3TXjWnhbJbiTVwNsIL4RR1Uku_qK03E89B1ErqSepKSnmoHFIr9xC0nbQRtWg55GkYM_wPwS56Q/s1600/image047.png" /></a></div>
<br />
In the workbench the “Description-2” column can be displayed. The description will be applied to each data record.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqQES8Ihf_DNJlgKPt-qgDaHeXekr05_-uzzORJaxP5GPywfplmYTL9TJAGPUcksiIQ-jBQf5I2BGsRvHKcCqACQYA1g2k2CmSP0zCU4vyhWllWY0M5IhGfr3s7h6ymKFdwUtK415A9Yo/s1600/image048.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="187" data-original-width="499" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqQES8Ihf_DNJlgKPt-qgDaHeXekr05_-uzzORJaxP5GPywfplmYTL9TJAGPUcksiIQ-jBQf5I2BGsRvHKcCqACQYA1g2k2CmSP0zCU4vyhWllWY0M5IhGfr3s7h6ymKFdwUtK415A9Yo/s1600/image048.png" /></a></div>
<br />
The output journal file created during an export now has the description populated in the “!DESC” section.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxj5bVxv6r7LabACPZQU0rG4cf0ubfkBS0f6YhQZf1aoDccQuEHCHmqRwQzMbmcVIL-jjgUUOOFk5zq49gm6lrP5J_9vKdHlNa65LcvYgu0fp7mc16IfbAF7mXf6g-svkdTfFL5cIheKU/s1600/a1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="155" data-original-width="601" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxj5bVxv6r7LabACPZQU0rG4cf0ubfkBS0f6YhQZf1aoDccQuEHCHmqRwQzMbmcVIL-jjgUUOOFk5zq49gm6lrP5J_9vKdHlNa65LcvYgu0fp7mc16IfbAF7mXf6g-svkdTfFL5cIheKU/s1600/a1.PNG" /></a></div>
<br />
The journal created in the target application includes the description.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0rgyKgaGOvdcPWlGOPWmS339JBSnoNQNn-sddyt-HckclXraWL7Nth6CO32HRqDf1ZQwkmxueH7GQTCVAqRFiezxbf2olFuhV0X6UxCo_HqAPCiEHUDyAE2awEyYyhGDLFHqDt47lvyg/s1600/a2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="239" data-original-width="703" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0rgyKgaGOvdcPWlGOPWmS339JBSnoNQNn-sddyt-HckclXraWL7Nth6CO32HRqDf1ZQwkmxueH7GQTCVAqRFiezxbf2olFuhV0X6UxCo_HqAPCiEHUDyAE2awEyYyhGDLFHqDt47lvyg/s1600/a2.PNG" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
So that covers as much as I feel I need to in this post and concludes the four-part look at journals and Data Management. I hope you have found it useful.
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-11185610237078416472019-01-07T00:47:00.003-08:002019-01-07T00:47:54.889-08:00EPM Cloud - Journals and Data Management - Part 3<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
Moving on to part 3 in this series looking at Journals and Data Management. In the first part I provided an overview of Journals and went through in detail the workflow process. In the previous post I covered loading Journals through the simplified interface. In this post I am moving on to the options available for loading journals to FCCS through Data Management, the same can be achieved with on-premise FDMEE using hybrid functionality.<br />
<br />
Data Management supports two methods for loading journals, this can be either through a standard text file or using an Excel template.<br />
<br />
I am going to start with the Excel template and I am hoping the background provided in the previous posts will make it easier to understand. If you have ever loaded journals from on-premise FDMEE to HFM the concept is very similar.<br />
<br />
The advantage of loading journals through the Excel template is that the template already exists and can be downloaded, there is no need to build a new template and generate the output in exactly the correct format that is required when importing through the simplified interface. There is also the benefit of being able to apply mappings as the source journal members may not be exactly matched to the ones in FCCS.<br />
<br />
It is possible to use an existing location to import a journal Excel template, but I am going to begin with a new import format.<br />
<br />
There is no need to fill out the mappings in the import format as they will be handled through the template.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieeE8_rM3Q17IOYr0okqE6MKocMjo-RWVqaBAmNaEo4yz6KHKvTEkRU5KJ-6vh4Ihv0YK52LHq5zhq1eZYtXMJgtEeS8DQvJs1MsbSGcQrU3qLDhhK0Jf5SHFblIaG1WdK-9ogZ4zQ-Ik/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="409" data-original-width="682" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieeE8_rM3Q17IOYr0okqE6MKocMjo-RWVqaBAmNaEo4yz6KHKvTEkRU5KJ-6vh4Ihv0YK52LHq5zhq1eZYtXMJgtEeS8DQvJs1MsbSGcQrU3qLDhhK0Jf5SHFblIaG1WdK-9ogZ4zQ-Ik/s1600/image001.png" /></a></div>
<br />
I created the import format using a numeric data type, so the amount column will be available which is also in the Excel template.<br />
<br />
A new location can then be created, which is assigned to the import format.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxGEQLczpbf2SSaYnzbJjq0fwHNyTk_j0_3tmoUYlZ-IMC9c3CTPhdZ-ukkn_CGR63Ain1k3OCbG1hj9yGDZAXA70y2IdqLc954GhZXpgBfU6gyD7RDiOBxr9ifmmjhhPyJbgJ6__04BY/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="202" data-original-width="637" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxGEQLczpbf2SSaYnzbJjq0fwHNyTk_j0_3tmoUYlZ-IMC9c3CTPhdZ-ukkn_CGR63Ain1k3OCbG1hj9yGDZAXA70y2IdqLc954GhZXpgBfU6gyD7RDiOBxr9ifmmjhhPyJbgJ6__04BY/s1600/image002.png" /></a></div>
<br />
You will need a data load rule for the new location. There is no requirement to fill in the file name as it can be provided when importing the journal.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF1fAGFAvfLfb63VQsqakiFqEONuOassIsjfjiT1xJOSS9T1wU_9lhMS5U8zJ-2wrpk_5V4Kf3PGzjoJunC0B9NkDOzL2CLRKF0zxAGNJEaNmn9RErbfkZzzeeztQRUX6H6xumgC93t2Y/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="377" data-original-width="406" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF1fAGFAvfLfb63VQsqakiFqEONuOassIsjfjiT1xJOSS9T1wU_9lhMS5U8zJ-2wrpk_5V4Kf3PGzjoJunC0B9NkDOzL2CLRKF0zxAGNJEaNmn9RErbfkZzzeeztQRUX6H6xumgC93t2Y/s1600/image003.png" /></a></div>
<br />
The important part is that the “Load Type” in the rules target options is set to “Journal”. Once this has been set, the workbench will have an option to load the journal.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBrKsTQvps-5kAqR0Ztk1blsoDBmKy4_cDCUDcHNotwsGTS5zZ8YU6ksxx5d0BHWnUAllETXD4M0M4WC6Iq8rhCdYD4h_Q0y4aF8OFb2nOMtMswo3XC40svXndgq42Pt4f0BaZpAeVv-c/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="105" data-original-width="369" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBrKsTQvps-5kAqR0Ztk1blsoDBmKy4_cDCUDcHNotwsGTS5zZ8YU6ksxx5d0BHWnUAllETXD4M0M4WC6Iq8rhCdYD4h_Q0y4aF8OFb2nOMtMswo3XC40svXndgq42Pt4f0BaZpAeVv-c/s1600/image004.png" /></a></div>
<br />
<br />
There is an option to specify the journal status, this is where I disagree with the documentation.<br />
<br />
The documentation states there are four options available for the journal status: <b>Working, Submitted, Approved, Rejected</b><br />
<br />
In the previous post I covered the options available and the rules are:<br />
<br />
<b class="yellow"><i>“If the Journal Workflow is enabled, you can only import Working journals. If the Journal Workflow is disabled, you can import Working and Posted journals.”</i></b><br />
<br />
I will show that the rules still apply in Data Management when I get on to importing a journal.<br />
<br />
To be able to import journals we will need the Excel template, this can be downloaded from the workbench by selecting “Download Template” and then “Journal”<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_8Bb2l-riLq_fekf3YKX89vWcoNgqU1eERR_LRYJEkh1KHqcQTg6mQU98zNlm6fPMS27Mn3QokF5LucZImmpzw3DszqjM5IR8DfG0U5tJyOyg94N93NT6b-SI61Bv5D8YxnET9qYGryM/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="152" data-original-width="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_8Bb2l-riLq_fekf3YKX89vWcoNgqU1eERR_LRYJEkh1KHqcQTg6mQU98zNlm6fPMS27Mn3QokF5LucZImmpzw3DszqjM5IR8DfG0U5tJyOyg94N93NT6b-SI61Bv5D8YxnET9qYGryM/s1600/image005.png" /></a></div>
<br />
The download will be named “Journal.xls” and is in the old Excel 97-2003 “xls” format, there is no problem opening the Excel template and saving it is a newer “xlsx” format.<br />
<br />
The Excel template will be populated with a matching location, category and period to the one that was selected when downloaded from the workbench.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjazldbluLMrM4ird7cnGeA9fl3yt2J2nOQzbl0DpXyF_0BxR9culyOULfE87F78aohwYxfMdVaRdOuJ1Li9IkrnfPoxYcCEchA0vtU39fnEJnJMpAP5MDopp1kCzzC1_jbde5idM6QL98/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="1275" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjazldbluLMrM4ird7cnGeA9fl3yt2J2nOQzbl0DpXyF_0BxR9culyOULfE87F78aohwYxfMdVaRdOuJ1Li9IkrnfPoxYcCEchA0vtU39fnEJnJMpAP5MDopp1kCzzC1_jbde5idM6QL98/s640/image006.png" width="640" /></a></div>
<br />
When importing the Journal Excel template, the location, category and period must match to the one selected in Data Management. I will demonstrate shortly what happens if this is not done.<br />
<br />
The template contains all the necessary dimensions and by default includes two custom dimensions.<br />
<br />
The template can be changed and not all columns need to be populated, though there are some additional rules that need to be followed.<br />
<br />
The template contains hidden rows between 16 and 20. These are read and validated when the journal is imported.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwSukLDBZS8zVg4K1AdFqRaCi6wv5ENudT2C5ZlwFNcJnwv_3_qC08Lpxf4SM4K60n-4uVqPdfdKGAA0XNdxKFo5xScsXpHxMWGukI0GntBrVaBt6NuCyhFV8CjfDxpQG0dMX1JuLJpVI/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="124" data-original-width="1179" height="66" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwSukLDBZS8zVg4K1AdFqRaCi6wv5ENudT2C5ZlwFNcJnwv_3_qC08Lpxf4SM4K60n-4uVqPdfdKGAA0XNdxKFo5xScsXpHxMWGukI0GntBrVaBt6NuCyhFV8CjfDxpQG0dMX1JuLJpVI/s640/image007.png" width="640" /></a></div>
<br />
In column I and rows 16-19 there is a formula that just points to the location, category, period and load method in column A.<br />
<br />
You might think that row 15 is the one defining the dimensions, this is not the case and it is row 20 where that is done.<br />
<br />
The following table describes the values that can be used for defining dimensions.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho-oMJCdbinWz8rMYWboYR6cExjus-y3Vzin7lgfKFvd-xxZoDNb-pOVvjzsJFEZtx5ZeCKczh7IhLYZGdKEAXYsJZsJLF-BHzUaAEm2XnU5m6p2rkFW1p4nUzSD-1nGMfKX2MK5MEYtI/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="312" data-original-width="545" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho-oMJCdbinWz8rMYWboYR6cExjus-y3Vzin7lgfKFvd-xxZoDNb-pOVvjzsJFEZtx5ZeCKczh7IhLYZGdKEAXYsJZsJLF-BHzUaAEm2XnU5m6p2rkFW1p4nUzSD-1nGMfKX2MK5MEYtI/s1600/image008.png" /></a></div>
<br />
If you are unclear on what the custom dimension values should be then you can have a look at the target application and the data table column names.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjObOE4tjI2FOAt1EiGP2XWJcUvKxLz9QilMutLOHAnJLxig2Y4kbTMZdFAa-09tTbwSkC3eQq1ovOW9XSthnTuc3cbop0mf82DQd0B9xN6onBz3i99QYPbiph5236P4czzDxZ2FzbsO4s/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="296" data-original-width="519" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjObOE4tjI2FOAt1EiGP2XWJcUvKxLz9QilMutLOHAnJLxig2Y4kbTMZdFAa-09tTbwSkC3eQq1ovOW9XSthnTuc3cbop0mf82DQd0B9xN6onBz3i99QYPbiph5236P4czzDxZ2FzbsO4s/s1600/image009.png" /></a></div>
<br />
For example, if you take the “Product” dimension, the column is “UD5” which maps to “5” in the Excel template, it would also be valid to assign it to “UD5” in the Excel template.<br />
<br />
The template can be changed to fit your requirements or a new one created, but the above logic should be applied. The main driver to where metadata definitions and data exists in the template is controlled by a named range called “upsJournal”.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh6y7ib8WtW-fHRKkeEy_kp6K3RKhbH88uoj86G6Z5qZeDOt7CNxUVYxL4q6qqRW33v-MHFMdR38QeLbVlDSFHFh8xESOcGMOR1GeZLwdsVElDhDj1B_Eak4hX9ljuX8BJ789aw00lQxU/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="119" data-original-width="440" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh6y7ib8WtW-fHRKkeEy_kp6K3RKhbH88uoj86G6Z5qZeDOt7CNxUVYxL4q6qqRW33v-MHFMdR38QeLbVlDSFHFh8xESOcGMOR1GeZLwdsVElDhDj1B_Eak4hX9ljuX8BJ789aw00lQxU/s1600/image010.png" /></a></div>
<br />
If you are creating your own template, then as long as the named range starts with “ups” you can name it what you like.<br />
<br />
The named range should cover the metadata definition and the data rows.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipelEjzA2DJdJZYHLnK9vG-xZHcqNHIZFLja9v0EPu5mbjBJmIR8cILqX1xSAJzmKpKzK1SjsH_qUf4B8TFathIHFSZHY9xuTUoAi9An-tpZq-nOY-mJ2qU8TR5CDQXVTni4q2ZIvjJJw/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="325" data-original-width="1279" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipelEjzA2DJdJZYHLnK9vG-xZHcqNHIZFLja9v0EPu5mbjBJmIR8cILqX1xSAJzmKpKzK1SjsH_qUf4B8TFathIHFSZHY9xuTUoAi9An-tpZq-nOY-mJ2qU8TR5CDQXVTni4q2ZIvjJJw/s640/image011.png" width="640" /></a></div>
<br />
By default, the Excel template is defined to show dollars in the amount column, you may be shocked to realise but not everybody operates in dollar amounts :)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyqqH0dgm9xv2Ay6VDlHMIedsu2KAaHnX5_xE1t7brrA0v7OLQPpxHQ-RdVajNAVvWAelLDxRy58n0xUH2IT-mb1u9-YeMAV_w2EwAm85kmGvCgqB4NFWHUWaU-h5w5pnhRjkEAJMcwJ0/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="42" data-original-width="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyqqH0dgm9xv2Ay6VDlHMIedsu2KAaHnX5_xE1t7brrA0v7OLQPpxHQ-RdVajNAVvWAelLDxRy58n0xUH2IT-mb1u9-YeMAV_w2EwAm85kmGvCgqB4NFWHUWaU-h5w5pnhRjkEAJMcwJ0/s1600/image012.png" /></a></div>
<br />
The formatting of the amount column can be updated in the template and it should not affect the import.<br />
<br />
So, let’s update the template with a simple journal example based on what I have used in previous posts.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAmq4W1-jUIVGvS4lwVaChexnE2QyOFq-I4cBlqeTGZBpvuXR7K8hyz6oV18TKD_l9f0jREPIn6O3ZiOAHdWxGLkUBuVrf7vgHOjC9lqygiW1DoTA7g3BR4lxCbAd7oJVxc5AfBF0nVRc/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="353" data-original-width="1149" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAmq4W1-jUIVGvS4lwVaChexnE2QyOFq-I4cBlqeTGZBpvuXR7K8hyz6oV18TKD_l9f0jREPIn6O3ZiOAHdWxGLkUBuVrf7vgHOjC9lqygiW1DoTA7g3BR4lxCbAd7oJVxc5AfBF0nVRc/s640/image013.png" width="640" /></a></div>
<br />
Members for entity, intercompany and movement do not match the target application, these will be updated by using mappings in Data Management.<br />
<br />
Multi-GAAP has been left empty as this will also be handled by mappings.<br />
<br />
I updated “Custom2” to “Product”, remember it is the hidden row value in the named range that defines the dimension. I have hidden the “Custom1” column or alternatively it could be deleted as it is only optional.<br />
<br />
It doesn’t look like you can assign a description for the journal in the template unless there is an undocumented feature. It is possible to provide description for the individual journal lines though.<br />
<br />
There is an important note that needs to be understood when loading journal data, this is taken from the documentation:<br />
<br />
<b><i>“When loading journals to an Oracle Financial Consolidation and Close Cloud target, consider that Data Management does not determine the account types or select the credits/debits. </i></b><b class="yellow">All positive numbers are loaded as credits and all negative numbers are loaded as debits.</b><b> If you need to designate other credit or debit signs for your account type, use the change sign feature in Data Load Mappings or another customized method to handle credits/debits changes for your journal loads.”</b></div>
<br />
On to importing the journal. As the data load rule was defined as a journal in the target options there will be a “Load Journal” button available in the workbench.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzPZCc7DKI8P3TJnoHDEgTQI9sVyR-pprl9YM21wp1ddEqONDS2Yf81VSHZlC5UOwzBQ-W6NrpwEaftcqyKXKifYfRl9tX5ypZrPVvdNkQIREtfxjmhvf2TKw7rWcdqFeOIUvb7ttfBG8/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="161" data-original-width="615" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzPZCc7DKI8P3TJnoHDEgTQI9sVyR-pprl9YM21wp1ddEqONDS2Yf81VSHZlC5UOwzBQ-W6NrpwEaftcqyKXKifYfRl9tX5ypZrPVvdNkQIREtfxjmhvf2TKw7rWcdqFeOIUvb7ttfBG8/s1600/image014.png" /></a></div>
<br />
Selecting “Load Journal” will open a new window where the journal file can be uploaded and then selected.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisy15L5l65y-20HIbud1T43Zq6nXYs1GTMkGu2tzv1Ho61i1iAxkGf025VEZR1qQl6lNy5p4KI6KL3CiV9JjpWcJFt3NO9FssDnKNW1H7Busl0HZybLww2IuYHdRU-0IczsY9B_9q9JAo/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="169" data-original-width="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisy15L5l65y-20HIbud1T43Zq6nXYs1GTMkGu2tzv1Ho61i1iAxkGf025VEZR1qQl6lNy5p4KI6KL3CiV9JjpWcJFt3NO9FssDnKNW1H7Busl0HZybLww2IuYHdRU-0IczsY9B_9q9JAo/s1600/image015.png" /></a></div>
<br />
Before you can import the journal to Data Management it must be checked. A verification process is executed where the file is checked to make sure the POV matches to that currently selected in the workbench, the named range in the file is also validated.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuTPli3Km2cs7lauVRjwNQ4qCZIpcO5FipNFHkNps243d_zEXtCPG1XlAxnvOqKDMNDsBpxdLa2H0WndAHzqKmZRsT9DR1Lhl1D5u8iRsD7FvlNl9s3MiE3nl4OcdBO0QV3PaQ6q3uD3s/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="171" data-original-width="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuTPli3Km2cs7lauVRjwNQ4qCZIpcO5FipNFHkNps243d_zEXtCPG1XlAxnvOqKDMNDsBpxdLa2H0WndAHzqKmZRsT9DR1Lhl1D5u8iRsD7FvlNl9s3MiE3nl4OcdBO0QV3PaQ6q3uD3s/s1600/image016.png" /></a></div>
<br />
If the file checks out a successful message will be displayed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXJ7nz6YLZRSxB1dTpwA0uJ4WLjlYOtxqWr7QQ-Zw1et54NZ-cadFbus9tw3i6aPt-1lqar9uaGDft24I3MpDfW64LwxbaVPFOGKybyTB1jWugQnery3Iee4zskMgZBrE5CE3xOQkK1tM/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="94" data-original-width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXJ7nz6YLZRSxB1dTpwA0uJ4WLjlYOtxqWr7QQ-Zw1et54NZ-cadFbus9tw3i6aPt-1lqar9uaGDft24I3MpDfW64LwxbaVPFOGKybyTB1jWugQnery3Iee4zskMgZBrE5CE3xOQkK1tM/s1600/image017.png" /></a></div>
<br />
The “Post” button will then be enabled.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifjyNSbFKf0AEQn9EdDHY3rR53fwp3fLeNAkJ9O2waJm0Hxs-UXtU4nqmoGjjKpacYKZ5GASTKmotxkVuF5KihffHhFVPL_BIfM12_csZooGw0zWXgHTQITW5Ondods_P5iezBOScawso/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="169" data-original-width="295" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifjyNSbFKf0AEQn9EdDHY3rR53fwp3fLeNAkJ9O2waJm0Hxs-UXtU4nqmoGjjKpacYKZ5GASTKmotxkVuF5KihffHhFVPL_BIfM12_csZooGw0zWXgHTQITW5Ondods_P5iezBOScawso/s1600/image018.png" /></a></div>
<br />
Clicking “Post” does not post the journal to FCCS, it only means it will be imported into Data Management.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLWWPTbdNx3N4EkfMx7vMuA7nlGsly1QG7Krm-OhEgjBePVr1np2CiDevwgn_MApbtZSSMaBw1hP4HZfVRI7dAXK_fZq83Ycnd_WadCuekw9FFtbGYSNLHM4jWROdbSIkLy-BmQJtkDas/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="90" data-original-width="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLWWPTbdNx3N4EkfMx7vMuA7nlGsly1QG7Krm-OhEgjBePVr1np2CiDevwgn_MApbtZSSMaBw1hP4HZfVRI7dAXK_fZq83Ycnd_WadCuekw9FFtbGYSNLHM4jWROdbSIkLy-BmQJtkDas/s1600/image019.png" /></a></div>
<br />
If the file is loaded successfully it will be mapped as with standard Data Management functionality.<br />
<br />
In the process logs you can see how the Excel file was processed.<br />
<br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Adding Named Range: upsJournal</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Start Cell:B16</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - End Cell:G33</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Period :2018-12-31</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Category :Actual</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Location :Journal_Example</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - JournalId :Sales Adjustment</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Using LoadMethod :REPLACE</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Extracting metadata: End</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Cell: B22 ColumnName: ACCOUNT Value:Operating Sales</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Cell: C22 ColumnName: ENTITY Value:13</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Cell: D22 ColumnName: ICP Value:No</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Cell: E22 ColumnName: UD3 Value:Net Income</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Cell: H22 ColumnName: UD5 Value:Smart Televisions</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Cell: I22 ColumnName: AMOUNT Value:2000</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Cell: B23 ColumnName: ACCOUNT Value:Returns and Allowances</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Cell: C23 ColumnName: ENTITY Value:13</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Cell: D23 ColumnName: ICP Value:No</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Cell: E23 ColumnName: UD3 Value:Net Income</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Cell: H23 ColumnName: UD5 Value:Smart Televisions</b><br />
<b class="yellow">INFO [AIF]: EPMFDM-140274:Message - Cell: I23 ColumnName: AMOUNT Value:-2000</b><br />
<br />
Before moving on I think it is worth trying to break some of the validation rules when importing the journal.<br />
<br />
The Excel file was updated to a different location than the one currently selected.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPMlaDuqp0Qa3unyDfqEUSlLJIY3tOFtmYhaHUmX9RHxIxwif5ZtIApUWGOTWOiPzwQB2ZEqvo0s7BfronzrOjtVh5CgPkFbLWoZv6Va1MxEPhcGIY-qDGFYiMj0s8la66Ndo8boDQlU/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="92" data-original-width="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPMlaDuqp0Qa3unyDfqEUSlLJIY3tOFtmYhaHUmX9RHxIxwif5ZtIApUWGOTWOiPzwQB2ZEqvo0s7BfronzrOjtVh5CgPkFbLWoZv6Va1MxEPhcGIY-qDGFYiMj0s8la66Ndo8boDQlU/s1600/image020.png" /></a></div>
<br />
An error message is displayed information the location does not match.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWktVHBj2tvBRe0dxmdIFbcFMjz3d0ScECueFUqrKQTYkCCkwBPOC-t4GgeSfs-NvmEjQJzLRVa6pGHReSj2IITOKwpkllgGCwiLrvL0zIuyZPlmjd-vk8Relckvrra0MU7I-EWM5BIPE/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="96" data-original-width="309" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWktVHBj2tvBRe0dxmdIFbcFMjz3d0ScECueFUqrKQTYkCCkwBPOC-t4GgeSfs-NvmEjQJzLRVa6pGHReSj2IITOKwpkllgGCwiLrvL0zIuyZPlmjd-vk8Relckvrra0MU7I-EWM5BIPE/s1600/image021.png" /></a></div>
<br />
Now for an unmatched period.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisYsP3su3vYL_KSFv8XRgktPVcNNNOHYZncvG8o9QuRm53DnCZhgwB9-n8wM1UC0AwkwVDujT5Ah4QdmFYqe0jFwOM-miWOcfT2hEaVlEY4P8coE5wEgSQC0oXGqDXhYmeis7deQihzjI/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="24" data-original-width="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisYsP3su3vYL_KSFv8XRgktPVcNNNOHYZncvG8o9QuRm53DnCZhgwB9-n8wM1UC0AwkwVDujT5Ah4QdmFYqe0jFwOM-miWOcfT2hEaVlEY4P8coE5wEgSQC0oXGqDXhYmeis7deQihzjI/s1600/image022.png" /></a></div>
<br />
As expected an error message is displayed to inform the period does not match the one currently selected.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnG9P4LvazgiLFZ0oHj8LmXnvarNicPwq_Bg5HpqpMRyXCpBKPJ2a6WBcFqJjLwlS0FuTKSFILgpK_Tx5b8-oJukyC95RwirmvoEs9JLljlF8tARb71nlhZn5sXA4uHYbwfIFADhbgjIA/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="98" data-original-width="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnG9P4LvazgiLFZ0oHj8LmXnvarNicPwq_Bg5HpqpMRyXCpBKPJ2a6WBcFqJjLwlS0FuTKSFILgpK_Tx5b8-oJukyC95RwirmvoEs9JLljlF8tARb71nlhZn5sXA4uHYbwfIFADhbgjIA/s1600/image023.png" /></a></div>
<br />
It is shame that even though the template states to enter period name this does not seem to be correct.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsYqSdvyKsxuJ6FGQ_hd05ZmNZ4rXhG6NWbyHFdXSwJtlsHQepaB7gzoP6WP3m8-Zzdsmkv7Q9AjHBmwne30zF4JkRqKyUMUwcAjHvekcxHM-s6_bPqBmE1p8NVIPcXOIcJN3YNY8oJ3o/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="27" data-original-width="769" height="22" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsYqSdvyKsxuJ6FGQ_hd05ZmNZ4rXhG6NWbyHFdXSwJtlsHQepaB7gzoP6WP3m8-Zzdsmkv7Q9AjHBmwne30zF4JkRqKyUMUwcAjHvekcxHM-s6_bPqBmE1p8NVIPcXOIcJN3YNY8oJ3o/s640/image024.png" width="640" /></a></div>
<br />
The Excel file matches to the period name in the POV bar.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwcnB4H7s_aXoy_tL7O3a8md2TbcdCLEwcTzsnfTZGq28tbcSncbJclHJ0pyFlzzjPKEhnam-bd4CseAHWkSITFnnrf6zLdkv_lfMJSPTlixj3i6nvT-z8p9FdA-rDpO75oyPtb9c8I_E/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="25" data-original-width="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwcnB4H7s_aXoy_tL7O3a8md2TbcdCLEwcTzsnfTZGq28tbcSncbJclHJ0pyFlzzjPKEhnam-bd4CseAHWkSITFnnrf6zLdkv_lfMJSPTlixj3i6nvT-z8p9FdA-rDpO75oyPtb9c8I_E/s1600/image025.png" /></a></div>
<br />
The same error is generated.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnG9P4LvazgiLFZ0oHj8LmXnvarNicPwq_Bg5HpqpMRyXCpBKPJ2a6WBcFqJjLwlS0FuTKSFILgpK_Tx5b8-oJukyC95RwirmvoEs9JLljlF8tARb71nlhZn5sXA4uHYbwfIFADhbgjIA/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="98" data-original-width="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnG9P4LvazgiLFZ0oHj8LmXnvarNicPwq_Bg5HpqpMRyXCpBKPJ2a6WBcFqJjLwlS0FuTKSFILgpK_Tx5b8-oJukyC95RwirmvoEs9JLljlF8tARb71nlhZn5sXA4uHYbwfIFADhbgjIA/s1600/image023.png" /></a></div>
<br />
<br />
It looks like it must always match the period key and not the period name.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0yX9g3PlcF-6TI7blLR9oVx57Be066C_nnIxggNmXYZkV5DmR_ffSzzo6ikFlLp6INkPV2MQPcFkYaAV6_B9FsJu5IvnmeyOQZsghzJFxj4ZM84-qNptefZm0U8zX9xTNFahBmSTeTok/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="154" data-original-width="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0yX9g3PlcF-6TI7blLR9oVx57Be066C_nnIxggNmXYZkV5DmR_ffSzzo6ikFlLp6INkPV2MQPcFkYaAV6_B9FsJu5IvnmeyOQZsghzJFxj4ZM84-qNptefZm0U8zX9xTNFahBmSTeTok/s1600/image026.png" /></a></div>
<br />
Anyway, back to the import that was successful.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji2-ScaTxoAc2xXMYCcBVI3JQJtxoiVCBqNttoJj9fu3ZP5qRLBkpx789wHvFJlIAX9eXJZgBwG3yuFX6ICVqJy0wqMAYo_ZHPVdGbZHpi7eVFafoy9R9KXwxJ7DcsJphJeOAH9piPgTo/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="213" data-original-width="790" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji2-ScaTxoAc2xXMYCcBVI3JQJtxoiVCBqNttoJj9fu3ZP5qRLBkpx789wHvFJlIAX9eXJZgBwG3yuFX6ICVqJy0wqMAYo_ZHPVdGbZHpi7eVFafoy9R9KXwxJ7DcsJphJeOAH9piPgTo/s640/image027.png" width="640" /></a></div>
<br />
Mappings have been applied and the validation step is shown as successful.<br />
<br />
It is important that the “Data Source” dimension is mapped to the journal input member.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUIGpmyvAup9IVJeXbdzN9JjLDqkN3mK4SSdbdg2UCImvb2zvBvAJYLfVUHPio5GyZToLXOLY6gmM-lbuniGcSiLTFihikL80iXdT1gUcS9ws3iGCZIoljzzPu42N9hI7VpwfeH2-_h6M/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="213" data-original-width="382" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUIGpmyvAup9IVJeXbdzN9JjLDqkN3mK4SSdbdg2UCImvb2zvBvAJYLfVUHPio5GyZToLXOLY6gmM-lbuniGcSiLTFihikL80iXdT1gUcS9ws3iGCZIoljzzPu42N9hI7VpwfeH2-_h6M/s1600/image028.png" /></a></div>
<br />
Just as when importing Journals through the simplified interface, it is possible to map to a target member name or alias.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0AABn8YLXUqpfk3X-vQHnhs1I0XJoasvgM47NM6qC_zy84zRxN48IKfCO2cWTBOl5kEaq2ORgds2Z7gpIpAusW6N7p_SRefQmi2DN6Ug8lCXeF5tvFOqzwWU-aFy4fIZf4jqfoh_yBdE/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="161" data-original-width="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0AABn8YLXUqpfk3X-vQHnhs1I0XJoasvgM47NM6qC_zy84zRxN48IKfCO2cWTBOl5kEaq2ORgds2Z7gpIpAusW6N7p_SRefQmi2DN6Ug8lCXeF5tvFOqzwWU-aFy4fIZf4jqfoh_yBdE/s1600/image029.png" /></a></div>
<br />
At this point in the process the journal has not been created in the FCCS application.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp8wG2ay14c5bXrGCVVu4BN5_r0_kms7rqKciIW_40hcJ82L3VFpLE_XxH3b2trDyCqLYZin4JYrilvYaNqEoB5X-l1GMo6bCiacjfNl6LFxcEO3KqwlwyCMz6QMjJ_GF0IRGDlrFMKfU/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="194" data-original-width="727" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp8wG2ay14c5bXrGCVVu4BN5_r0_kms7rqKciIW_40hcJ82L3VFpLE_XxH3b2trDyCqLYZin4JYrilvYaNqEoB5X-l1GMo6bCiacjfNl6LFxcEO3KqwlwyCMz6QMjJ_GF0IRGDlrFMKfU/s1600/image030.png" /></a></div>
<br />
An export can be run which will push the journal to the target application.<br />
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQOEL3LJ5dgrMfIqNpfLGi2Px59zN1D_scBFbjx8m7ko4vNp52PEMJr9-zdMUuW3EA_4cFZv-RlpskJVXj7Zu7B1HTMQybqAzax3yJtjuA2-PcDDCpW4hQsx6p6bhfD9e6oHtvHqFygb8/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="50" data-original-width="50" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQOEL3LJ5dgrMfIqNpfLGi2Px59zN1D_scBFbjx8m7ko4vNp52PEMJr9-zdMUuW3EA_4cFZv-RlpskJVXj7Zu7B1HTMQybqAzax3yJtjuA2-PcDDCpW4hQsx6p6bhfD9e6oHtvHqFygb8/s1600/image031.png" /></a></div>
<br />
As the export was successful, the journal has been created.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHkV_HWIt8sCOPqYfaxhj7U5EtE0seHj4xXAljyGqRTo6IC8IV-W6HAqX3gfK4MV63KTKyZSZa6HT0Zq7SRYqxZjqdv0zWvI3UuFgRcIc0bHDD9rZCXWnkIgMHE-J9dLJHx-rPl58pjws/s1600/image032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="235" data-original-width="657" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHkV_HWIt8sCOPqYfaxhj7U5EtE0seHj4xXAljyGqRTo6IC8IV-W6HAqX3gfK4MV63KTKyZSZa6HT0Zq7SRYqxZjqdv0zWvI3UuFgRcIc0bHDD9rZCXWnkIgMHE-J9dLJHx-rPl58pjws/s1600/image032.png" /></a></div>
<br />
Opening the journal confirms all the lines have been correctly loaded.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDhyphenhyphene9ZNLu9Ho4xTD87HL6Jb4e8RlrG5AQ_4jflIMItSU2g_ZQZUjRAD-pKc6QWke8ZBP96WBcdvOgk5Di3GYVYEAwIxnghe3peiF5lqqw4TZNPT3u-MC_qLKmFDfHdaEo6BUVUcIFcpk/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="430" data-original-width="1249" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDhyphenhyphene9ZNLu9Ho4xTD87HL6Jb4e8RlrG5AQ_4jflIMItSU2g_ZQZUjRAD-pKc6QWke8ZBP96WBcdvOgk5Di3GYVYEAwIxnghe3peiF5lqqw4TZNPT3u-MC_qLKmFDfHdaEo6BUVUcIFcpk/s640/image033.png" width="640" /></a></div>
<br />
If you look at the process log generated in Data Management, it provides an indication to how the journal is created.<br />
<br />
<b class="yellow">DEBUG [AIF]: Created journal load data file: /u03/inbox/outbox/FCCS_152.jlf</b><br />
<br />
A journal “jlf” file is generated in the outbox before it is loaded to the target application.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8Bw_cQ430mBDBOq3eK5_zd70hJdwdnRsl8CoTTrBIyoLjt5uZ-RwOTjXI4jAFzOECCVdT0e_UBU3Xs9_lmYuUomnYeqZrIbZ_u_Cut8pq9hd-vRVUkME3VDWbBQBBtkOFJBk_DxFx7vk/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="126" data-original-width="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8Bw_cQ430mBDBOq3eK5_zd70hJdwdnRsl8CoTTrBIyoLjt5uZ-RwOTjXI4jAFzOECCVdT0e_UBU3Xs9_lmYuUomnYeqZrIbZ_u_Cut8pq9hd-vRVUkME3VDWbBQBBtkOFJBk_DxFx7vk/s1600/image034.png" /></a></div>
<br />
If the file is downloaded and opened, you will notice the file is the same format as when importing journals through the simplified interface which I covered in the previous post.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9HWY1rd_fkppPgRFJocI61oJiGWIxWd_y3H7jgBBxHurZO3H3FvdxSR_JCnhmyFvE3I8YklbdWzmzzMTFu5eSa7802uxYsEzMBzzhdos1H9EuUsi4ThjdXGGTq4D6Q6sWL_Nbze4NpEw/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="172" data-original-width="943" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9HWY1rd_fkppPgRFJocI61oJiGWIxWd_y3H7jgBBxHurZO3H3FvdxSR_JCnhmyFvE3I8YklbdWzmzzMTFu5eSa7802uxYsEzMBzzhdos1H9EuUsi4ThjdXGGTq4D6Q6sWL_Nbze4NpEw/s640/image035.png" width="640" /></a></div>
<br />
So basically, all that Data Management is doing behind the scenes is producing the same formatted journal file and then importing it into the application.<br />
<br />
If you want to assign the journal to a group, the Excel template will need to include a label and group definition like the following:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOeIONVNYWeqFL3_kOVrj0e1i-9VhtrUyNY95N32Ckx77PU2Oyeucw_4n3tp6hkN0z7f4flCmxKeqSQXOedhKGwJhblVkEvQG1M7a_UnfjjQc88ZXuIPdxAFwkB3MdDZ63p8Fsc-6oO9A/s1600/image036.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="121" data-original-width="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOeIONVNYWeqFL3_kOVrj0e1i-9VhtrUyNY95N32Ckx77PU2Oyeucw_4n3tp6hkN0z7f4flCmxKeqSQXOedhKGwJhblVkEvQG1M7a_UnfjjQc88ZXuIPdxAFwkB3MdDZ63p8Fsc-6oO9A/s1600/image036.png" /></a></div>
<br />
In the workbench it is possible to show the “Journal ID” column which is where the information from the Excel template is loaded to.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgplKfICFJEIUYXbVh56Q5VOgltKcLIiJBB2Bn6F5b4DW8zCEmB-TzGzb1ABRAMn6SI1UDvUYUlLtyo9nNOgN-uuYVLeutZSfkWRA6O1GDAi9nk1jb_06IEwepHiHx41jAB0Ha4y7gny-k/s1600/image037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="168" data-original-width="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgplKfICFJEIUYXbVh56Q5VOgltKcLIiJBB2Bn6F5b4DW8zCEmB-TzGzb1ABRAMn6SI1UDvUYUlLtyo9nNOgN-uuYVLeutZSfkWRA6O1GDAi9nk1jb_06IEwepHiHx41jAB0Ha4y7gny-k/s1600/image037.png" /></a></div>
<br />
In the journal file created by Data Management you can see the journal section now includes the group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfmqfCuu4go-6tf4uvWnyyM6dvPl0gTuaq3HJh4eB-o-ULmsz0j0WsmtQZuwqFxLD6mW_T8vHK5X-RskItyjH_d-9mNroKmp6-Vct2Bp3xfhK1ibGPsRlLyj-3tjMyhvquNjBs8qtbNwA/s1600/image038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="25" data-original-width="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfmqfCuu4go-6tf4uvWnyyM6dvPl0gTuaq3HJh4eB-o-ULmsz0j0WsmtQZuwqFxLD6mW_T8vHK5X-RskItyjH_d-9mNroKmp6-Vct2Bp3xfhK1ibGPsRlLyj-3tjMyhvquNjBs8qtbNwA/s1600/image038.png" /></a></div>
<br />
When pushed to the target application the journal is assigned to the group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixkl3oCgb2LV9vIj4mPDz90onhmYNTRKfUxze07ztz1ISwZKHHKWG1KJUP337GTgzGcAbNjLMX6AKO701seyn6qpMlMDQhOhN9EAGonDhkKrRdSsfgucVTnRBlgxicdL5I9i0rc1b1W_o/s1600/image039.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="71" data-original-width="525" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixkl3oCgb2LV9vIj4mPDz90onhmYNTRKfUxze07ztz1ISwZKHHKWG1KJUP337GTgzGcAbNjLMX6AKO701seyn6qpMlMDQhOhN9EAGonDhkKrRdSsfgucVTnRBlgxicdL5I9i0rc1b1W_o/s1600/image039.png" /></a></div>
<br />
Now it is time to break some of the rules for creating journals to see how they are handled in Data Management.<br />
<br />
As I mentioned earlier, the documentation states the journal status can be working, submitted, approved or rejected, which I don’t agree with.<br />
<br />
If I update the journal status to “Submitted” and run an export...<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCxCQfY390ZCOdB2pLDLL4reGMEvZhUaDtw1joH-47TeoZKUl7dweVdDPCTsx4K_DPhCe03oNFKFoL4yj0AiBbvOtp2-9MpH3RnaJ3i45geMBblGhymb35hGRshFlMj6NNOx3ze-gckjI/s1600/image040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="112" data-original-width="375" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCxCQfY390ZCOdB2pLDLL4reGMEvZhUaDtw1joH-47TeoZKUl7dweVdDPCTsx4K_DPhCe03oNFKFoL4yj0AiBbvOtp2-9MpH3RnaJ3i45geMBblGhymb35hGRshFlMj6NNOx3ze-gckjI/s1600/image040.png" /></a></div>
<br />
the export fails.<br />
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxAmTGkqoUeaNHRb9gggt1c_MUynud6PxnqOzDP5k09Kht57eCrvZB97OLc36v86B6jklDHrIznd9vckUkmmhT8P9Bx799pEnrx7ieqoXXMzHdmFR4dyo0QGkfLsVCDhBz9C2faZFJKPc/s1600/image041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="47" data-original-width="45" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxAmTGkqoUeaNHRb9gggt1c_MUynud6PxnqOzDP5k09Kht57eCrvZB97OLc36v86B6jklDHrIznd9vckUkmmhT8P9Bx799pEnrx7ieqoXXMzHdmFR4dyo0QGkfLsVCDhBz9C2faZFJKPc/s1600/image041.png" /></a></div>
<br />
The process log highlights what the issue is.<br />
<br />
<b>INFO [AIF]: Executing journal data load to FCCS</b><br />
<b>DEBUG [AIF]: Executing request...</b><br />
<b>Parsing Journal file...</b><br />
<b class="yellow">Error at line 5 : Only working(W) and posted(P) journals are allowed.</b><b> "!JOURNAL=Sales Adjustment,,Submitted"</b><br />
<b>Parsing completed with errors...</b><br />
<b>ERROR [AIF]: Error loading journal data file: Error</b><br />
<br />
As you would expect the rules follow the same logic as when importing through the simplified interface. When workflow is enabled, only working journals can be created. If workflow is not enabled, they can be working or posted.<br />
<br />
How about running an export with a user that does not have access to members in journal?<br />
<div>
<br /></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxAmTGkqoUeaNHRb9gggt1c_MUynud6PxnqOzDP5k09Kht57eCrvZB97OLc36v86B6jklDHrIznd9vckUkmmhT8P9Bx799pEnrx7ieqoXXMzHdmFR4dyo0QGkfLsVCDhBz9C2faZFJKPc/s1600/image041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="47" data-original-width="45" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxAmTGkqoUeaNHRb9gggt1c_MUynud6PxnqOzDP5k09Kht57eCrvZB97OLc36v86B6jklDHrIznd9vckUkmmhT8P9Bx799pEnrx7ieqoXXMzHdmFR4dyo0QGkfLsVCDhBz9C2faZFJKPc/s1600/image041.png" /></a></div>
<div>
</div>
<div>
<br /></div>
<div>
<div>
The export fails, and the process log provides the error was due to invalid access levels.</div>
<div>
<br /></div>
<div>
<b>INFO [AIF]: Executing journal data load to FCCS</b></div>
<div>
<b>DEBUG [AIF]: Executing request...</b></div>
<div>
<b>Parsing Journal file...</b></div>
<div>
<b>Parsing completed successfully...</b></div>
<div>
<b>Importing Journals...</b></div>
<div>
<b>Saving Journals for POV [Scenario=Actual,Year=FY18,Period=Dec] starts</b></div>
<div>
<b>Sales Adjustment</b></div>
<div>
<b class="yellow">Error: You do not have edit access to the journal.</b></div>
<div>
<b>Saving Journals for POV [Scenario=Actual,Year=FY18,Period=Dec] ends</b></div>
<div>
<b>Journal import completed with error(s).</b></div>
<div>
<br /></div>
<div>
Next for an application that does not have workflow enabled, the status was updated to posted.</div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_yHIAsClwMsirIBx037E2syLB5KD0cgnI0a68AlMfMNTebHWc9-UaSQQO9oyHxaVdxMaagIgxhngiFaC9bu_uAR4aH3JKL9lyZrroqjUiT9_G17Z4b57fN70IeECCKXlg0yE4O-gFqDA/s1600/image042.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="106" data-original-width="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_yHIAsClwMsirIBx037E2syLB5KD0cgnI0a68AlMfMNTebHWc9-UaSQQO9oyHxaVdxMaagIgxhngiFaC9bu_uAR4aH3JKL9lyZrroqjUiT9_G17Z4b57fN70IeECCKXlg0yE4O-gFqDA/s1600/image042.png" /></a></div>
<br />
The POV was set to a period which is not open, the export fails.<br />
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxAmTGkqoUeaNHRb9gggt1c_MUynud6PxnqOzDP5k09Kht57eCrvZB97OLc36v86B6jklDHrIznd9vckUkmmhT8P9Bx799pEnrx7ieqoXXMzHdmFR4dyo0QGkfLsVCDhBz9C2faZFJKPc/s1600/image041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="47" data-original-width="45" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxAmTGkqoUeaNHRb9gggt1c_MUynud6PxnqOzDP5k09Kht57eCrvZB97OLc36v86B6jklDHrIznd9vckUkmmhT8P9Bx799pEnrx7ieqoXXMzHdmFR4dyo0QGkfLsVCDhBz9C2faZFJKPc/s1600/image041.png" /></a></div>
<br />
No surprise that the process log now contains the error about an unopened period.<br />
<br />
<b>INFO [AIF]: Executing journal data load to FCCS</b><br />
<b>DEBUG [AIF]: Executing request...</b><br />
<b>Parsing Journal file...</b><br />
<b>Parsing completed successfully...</b><br />
<b>Importing Journals...</b><br />
<b>Saving Journals for POV [Scenario=Actual,Year=FY18,Period=Dec] starts</b><br />
<b>Sales Adjustment</b><br />
<b class="yellow">Error: Action Post cannot be performed on the journal with label Sales Adjustment as the Period is not open.</b><br />
<b>Saving Journals for POV [Scenario=Actual,Year=FY18,Period=Dec] ends</b><br />
<b>Journal import completed with error(s).</b><br />
<br />
Even though the process fails it follows the same logic as importing through the simplified interface, the journal will be created but with a status of working.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh9ujvsPCHs8LoU4Vkg0vGOkaq5cb_tCQvvN1nofUnVPjpr2BRuAZF0lrXwVI2J4pi79yntsI0lX4B4uKdyLE9-sRl10fCafFoMsi-oE2L8qgtAJtHzhAXVwt3ZsT6XyFeYTZDXuK4vX8/s1600/image043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="242" data-original-width="664" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh9ujvsPCHs8LoU4Vkg0vGOkaq5cb_tCQvvN1nofUnVPjpr2BRuAZF0lrXwVI2J4pi79yntsI0lX4B4uKdyLE9-sRl10fCafFoMsi-oE2L8qgtAJtHzhAXVwt3ZsT6XyFeYTZDXuK4vX8/s1600/image043.png" /></a></div>
<br />
This time I opened the period and successfully ran the export again in Data Management.<br />
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQOEL3LJ5dgrMfIqNpfLGi2Px59zN1D_scBFbjx8m7ko4vNp52PEMJr9-zdMUuW3EA_4cFZv-RlpskJVXj7Zu7B1HTMQybqAzax3yJtjuA2-PcDDCpW4hQsx6p6bhfD9e6oHtvHqFygb8/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="50" data-original-width="50" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQOEL3LJ5dgrMfIqNpfLGi2Px59zN1D_scBFbjx8m7ko4vNp52PEMJr9-zdMUuW3EA_4cFZv-RlpskJVXj7Zu7B1HTMQybqAzax3yJtjuA2-PcDDCpW4hQsx6p6bhfD9e6oHtvHqFygb8/s1600/image031.png" /></a></div>
<br />
The journal has been created and posted within the application.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCXkkeYW2SIJhPXhxGhj-ChHaWKE4lFbDDVNHTUvozQTnLhFqq0Smig3jjXtyvoIcq36H9vZLbBizlUTNc4noXU9tkFDly8xHrLX9-zZz1V7LmSvepTy_XzdIxgMW7yolDk_jqJN6tymw/s1600/image044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="232" data-original-width="653" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCXkkeYW2SIJhPXhxGhj-ChHaWKE4lFbDDVNHTUvozQTnLhFqq0Smig3jjXtyvoIcq36H9vZLbBizlUTNc4noXU9tkFDly8xHrLX9-zZz1V7LmSvepTy_XzdIxgMW7yolDk_jqJN6tymw/s1600/image044.png" /></a></div>
<br />
There is not mention of “Posted” journal status in the Data Management documentation but you can see the output file is created with “P” for posted.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY2ecfCyqKNpTGIFPRybCcAFdTzwG00FRq5eqvSEAotlRD_D9-95BgbUFuhYAm3YoaX6fk72UTr_pqH71Pd_Qrwa5GiiFZFpPr5yJWxc8Z7yOjA_XoGCnwk1C6kjjof5zjgy17BE5DRjM/s1600/image045.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="19" data-original-width="251" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY2ecfCyqKNpTGIFPRybCcAFdTzwG00FRq5eqvSEAotlRD_D9-95BgbUFuhYAm3YoaX6fk72UTr_pqH71Pd_Qrwa5GiiFZFpPr5yJWxc8Z7yOjA_XoGCnwk1C6kjjof5zjgy17BE5DRjM/s1600/image045.png" /></a></div>
<br />
How about trying to post an unbalanced journal?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6oXRVkNTRXoUPrVO5yK-HdOs1Z9i7XoeuqyBY6wsSUfO4EgRkzfpANk5Lh8d-3seBe1WMTjjXRzFTYByBTfm7ye92LA-JahdWQdLA_gtd6moje5rFdoBZH1uV-YSoIX1KIYt27lpjOss/s1600/image046.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="81" data-original-width="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6oXRVkNTRXoUPrVO5yK-HdOs1Z9i7XoeuqyBY6wsSUfO4EgRkzfpANk5Lh8d-3seBe1WMTjjXRzFTYByBTfm7ye92LA-JahdWQdLA_gtd6moje5rFdoBZH1uV-YSoIX1KIYt27lpjOss/s1600/image046.png" /></a></div>
<br />
Once again, the export fails.<br />
<br />
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxAmTGkqoUeaNHRb9gggt1c_MUynud6PxnqOzDP5k09Kht57eCrvZB97OLc36v86B6jklDHrIznd9vckUkmmhT8P9Bx799pEnrx7ieqoXXMzHdmFR4dyo0QGkfLsVCDhBz9C2faZFJKPc/s1600/image041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="47" data-original-width="45" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxAmTGkqoUeaNHRb9gggt1c_MUynud6PxnqOzDP5k09Kht57eCrvZB97OLc36v86B6jklDHrIznd9vckUkmmhT8P9Bx799pEnrx7ieqoXXMzHdmFR4dyo0QGkfLsVCDhBz9C2faZFJKPc/s1600/image041.png" /></a></div>
<br />
The log informs that the journal cannot be posted as it failed the scan.<br />
<br />
<b>INFO [AIF]: Executing journal data load to FCCS</b><br />
<b>DEBUG [AIF]: Executing request...</b><br />
<b>Parsing Journal file...</b><br />
<b>Parsing completed successfully...</b><br />
<b>Importing Journals...</b><br />
<b>Saving Journals for POV [Scenario=Actual,Year=FY18,Period=Dec] starts</b><br />
<b>Sales Adjustment</b><br />
<b class="yellow">Error: Action Post cannot be performed on the journal due to scan error(s).</b><br />
<b>Saving Journals for POV [Scenario=Actual,Year=FY18,Period=Dec] ends</b><br />
<b>Journal import completed with error(s).</b><br />
<br />
The journal will still be created with a working status.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3dyr6SsFi9RM0pOa8VHf2kG3YRKAcEs-boWQmKgibDBvSr2TMBgg2YGBwqULaMHq3Hdb6R7aET47QmmTiC9NX52ErseyWcc7dYUs1pNEIzKfa4EJpA5qDl6CGKCFnPwozIb3oIR3EW1o/s1600/image047.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="244" data-original-width="460" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3dyr6SsFi9RM0pOa8VHf2kG3YRKAcEs-boWQmKgibDBvSr2TMBgg2YGBwqULaMHq3Hdb6R7aET47QmmTiC9NX52ErseyWcc7dYUs1pNEIzKfa4EJpA5qDl6CGKCFnPwozIb3oIR3EW1o/s1600/image047.png" /></a></div>
<br />
If a scan is run on the journal in the application, it will fail as it is unbalanced.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCb091VguNg3ahDEsGSQiuDNIoVx8Q73D0aW7pGW2JIfgS19hwWAUg5KsoAlUSKJ5ifotuvuHBGRnxFRNyYV2ThXdkd8NmqzbHvKVviLnCkxvmCQ7PuNxYJpMX_uz1zLdTgPEfqQ9XjfQ/s1600/image048.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="102" data-original-width="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCb091VguNg3ahDEsGSQiuDNIoVx8Q73D0aW7pGW2JIfgS19hwWAUg5KsoAlUSKJ5ifotuvuHBGRnxFRNyYV2ThXdkd8NmqzbHvKVviLnCkxvmCQ7PuNxYJpMX_uz1zLdTgPEfqQ9XjfQ/s1600/image048.png" /></a></div>
<br />
I think that covers enough detail about loading Excel-based journals through Data Management. At the beginning of this blog post I said that there are two methods available for loading journals through Data Management. In the next and final part, I will go through loading journals using a standard text file.
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-37235085563922750822018-12-28T03:07:00.003-08:002018-12-28T03:07:57.806-08:00EPM Cloud - Journals and Data Management - Part 2<div dir="ltr" style="text-align: left;" trbidi="on">
In the previous part I provided an overview of Journals in FCCS and went through in detail the workflow process. In this post I am going to start to look at the options for loading journals and begin with the import functionality in the simplified interface, this should provide a good insight before moving on to the different load methods available in Data Management.<br />
<br />
To load a journal through the simplified interface only requires the scenario, year and period to be set; then import can be selected from the action menu.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji9xrYQthoL5ruvu8yk3wS-geiFj20w3uY8lc-UqtPaLNe-svebBuRdN70NC_RyzaR3fesaf7gdSgPoXObTf-XN6Xzs9jyKCELZ5JCnmjfTbTjdX4Q7i7FJmo4wLrF0v2pIRr8vXAK3R8/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="249" data-original-width="975" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji9xrYQthoL5ruvu8yk3wS-geiFj20w3uY8lc-UqtPaLNe-svebBuRdN70NC_RyzaR3fesaf7gdSgPoXObTf-XN6Xzs9jyKCELZ5JCnmjfTbTjdX4Q7i7FJmo4wLrF0v2pIRr8vXAK3R8/s640/image001.png" width="640" /></a></div>
<br />
In order to import a journal, you will first need to create a journal file which needs to follow a specified format. I found the documentation around the format for the journal file to be slightly confusing and to get a better understanding it helps by exporting an existing journal.<br />
<br />
I am going to use the same journal I provided as an example in the previous post.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYUfacc7c_orMKId-qj5RjzIFabPSxjRLemtabuywSc-3AR71hP8IaJu0VMWCExynlC0Gv6J78qfTvbVOyzjJjBOgFnlHtDxo3ve2gVScl_nOnR3_99jl1Gfo799JRVO-m_Iy0fz4z4lM/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="428" data-original-width="1248" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYUfacc7c_orMKId-qj5RjzIFabPSxjRLemtabuywSc-3AR71hP8IaJu0VMWCExynlC0Gv6J78qfTvbVOyzjJjBOgFnlHtDxo3ve2gVScl_nOnR3_99jl1Gfo799JRVO-m_Iy0fz4z4lM/s640/image002.png" width="640" /></a></div>
<br />
An export can be initiated from the action menu, the journals you want to export can be filtered from the job details page.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRBLQLwhNjDe0kkoxssfSCBI2tMY9UK5Rs3haPbD4DpCdhyZBhALApJr8hBcQ1cBOCllH8Jf2rYjQsH5G1pHF68nP-sCwkXeOgeJT97mQkEGDZNisMddtiDcHRkroMsRiIkdeCYy4YnZ8/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="355" data-original-width="825" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRBLQLwhNjDe0kkoxssfSCBI2tMY9UK5Rs3haPbD4DpCdhyZBhALApJr8hBcQ1cBOCllH8Jf2rYjQsH5G1pHF68nP-sCwkXeOgeJT97mQkEGDZNisMddtiDcHRkroMsRiIkdeCYy4YnZ8/s640/image003.png" width="640" /></a></div>
<br />
The journal file is generated by default with a “<b>jlf</b>” extension.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnz_xFpcYlcXWtMD0QtQhQ_53W4zJ5L7zJUs9coDd-Y33IfQIv6dAS0VofCRe7hiH-x4cuMHariOAVsxikzS85zbHj2_d1U0cVmuOxru5Lxdxsc2lg2uaIDAFdPb6Eph8Kb6wX7IhOxtQ/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="321" data-original-width="436" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnz_xFpcYlcXWtMD0QtQhQ_53W4zJ5L7zJUs9coDd-Y33IfQIv6dAS0VofCRe7hiH-x4cuMHariOAVsxikzS85zbHj2_d1U0cVmuOxru5Lxdxsc2lg2uaIDAFdPb6Eph8Kb6wX7IhOxtQ/s1600/image004.png" /></a></div>
<br />
Opening the file provides a clearer picture to the required format.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnd05HGBuxHG88bB5NwPrCUs2oHnE8zQU07MuhACXaGprG8ywnRQ84mBLB-PnGIf5IMl4LyX8zjcTfD0jlIZrJgrOMlhHAkggAoJ_IrmQPaoHanu04MMr4GGcJyZkhSb0QqiqZr4bY9P8/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="243" data-original-width="928" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnd05HGBuxHG88bB5NwPrCUs2oHnE8zQU07MuhACXaGprG8ywnRQ84mBLB-PnGIf5IMl4LyX8zjcTfD0jlIZrJgrOMlhHAkggAoJ_IrmQPaoHanu04MMr4GGcJyZkhSb0QqiqZr4bY9P8/s640/image005.png" width="640" /></a></div>
<br />
The file is split into sections and a line starting with an exclamation point (!) indicates the beginning of a new section in the journal file.<br />
<br />
The “<b>VERSION</b>” section is optional so can be ignored, I found that it only ever exported a version of 1 when apparently it should be the version of FCCS, for example 18.12<br />
<br />
“<b>GROUP</b>” defines a group. It is possible to create new groups and have multiple groups in a journal file which I will cover shortly. Including this section is optional.<br />
<br />
“<b>DIMENSION_ORDER</b>” is the dimension order of the line items in the journal.<br />
<br />
“<b>POV</b>” is the combination of scenario, year and period.<br />
<br />
“<b>JOURNAL</b>” defines the label of the journal, the group, the status and the type.<br />
<br />
The status can be (W)orking, (S)ubmitted, (A)pproved, (P)osted<br />
<br />
The status can be any of the above when exporting but for importing journals there are strict rules.<br />
<br />
<b class="yellow"><i> “If the Journal Workflow is enabled, you can only import Working journals. If the Journal Workflow is disabled, you can import Working and Posted journals.”</i></b><br />
<br />
The type can be (R)egular or (A)uto-reversing. If this is not included in the file the default will be regular.<br />
<br />
“<b>DESC</b>” assigns a description and the remaining rows in the file are the line items of the journal in the specified dimension order, these include (C)redit and (D)ebit.<br />
<br />
It is possible to use either member names or aliases in the file.<br />
<br />
The file does not need to include the blank lines to successfully import.<br />
<br />
The following table highlights the different actions that occur when importing a journal:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLW-tetnOjzbT4HoSnAmwcJKBe5fraPmdc-VT26cODGxtfTdO0xTparOxZpJ9mII9hNyldQUPYm7kkgUqOixB2zRRqSwFAFgakjMXiJCCZhm5jNDCBFmFNFBQfO4SZSzjZ-StkbMnCNrw/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="274" data-original-width="745" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLW-tetnOjzbT4HoSnAmwcJKBe5fraPmdc-VT26cODGxtfTdO0xTparOxZpJ9mII9hNyldQUPYm7kkgUqOixB2zRRqSwFAFgakjMXiJCCZhm5jNDCBFmFNFBQfO4SZSzjZ-StkbMnCNrw/s640/image006.png" width="640" /></a></div>
<br />
As I mentioned it is possible to create new groups when importing a journal file though only an administrator can do this.<br />
<br />
To create new groups, include the “GROUP” section name in the file.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEQAvifMEuYtMMfu9K4-OID_tp3796lnqjdMyjeF2vGLCs_rhKostPdlsHtkre0zVbk7Vvo7O9QJJTrfJE2azzIA5pZxIHA57eiMF1AHnjst59uLeWFYwnIvUHDGb8-C6c0Y-ggGW_Cb8/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="61" data-original-width="335" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEQAvifMEuYtMMfu9K4-OID_tp3796lnqjdMyjeF2vGLCs_rhKostPdlsHtkre0zVbk7Vvo7O9QJJTrfJE2azzIA5pZxIHA57eiMF1AHnjst59uLeWFYwnIvUHDGb8-C6c0Y-ggGW_Cb8/s1600/image007.png" /></a></div>
<br />
If I import the file as an administrator, the groups are created.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoQmHfIE28YT-mRO8XzE0E29rjyvVgoNcFPwMi35OY2GrPqyVxpudVEh47dHfLnKAfPshRcP7CD3SCHboZCgBuoEK1gUKiAxEE3nuXNu7vRf2b-4Up5QEm5rtU7xrQm48qKmvANoTCnpI/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="170" data-original-width="325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoQmHfIE28YT-mRO8XzE0E29rjyvVgoNcFPwMi35OY2GrPqyVxpudVEh47dHfLnKAfPshRcP7CD3SCHboZCgBuoEK1gUKiAxEE3nuXNu7vRf2b-4Up5QEm5rtU7xrQm48qKmvANoTCnpI/s1600/image008.png" /></a></div>
<br />
If I try the same process with a non-administrator, the import job is submitted.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicw4wKFKgBpu3IzIjSFL_fZ6cW03W4pIxJzwzcDbnm_xtNwF4lxa9knA1Z9DFj6BaUUmFKKQSom6eCX24bi_9QsznAaShfpgE34_at8hXNqzKULlPkDRenWI2q4tjqskFuM2CNRqa-ez4/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="115" data-original-width="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicw4wKFKgBpu3IzIjSFL_fZ6cW03W4pIxJzwzcDbnm_xtNwF4lxa9knA1Z9DFj6BaUUmFKKQSom6eCX24bi_9QsznAaShfpgE34_at8hXNqzKULlPkDRenWI2q4tjqskFuM2CNRqa-ez4/s1600/image009.png" /></a></div>
<br />
Personally, I find this an annoyance when importing journals, if there are any problems with importing the journal you will not know until you go to the jobs section.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjhDt6fLzeSXqQrXOnP__-7x_rElBDOH5ywPakDIyrhNkYxaJ70e5RWepkvtnvTyJS9VZb3o904TYn1K5M64PDV6i3yWddzzywSUEy7wIY6-Z2BOkC9AktAH_wSDfCEdyUXKgF2oVgNrQ/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="202" data-original-width="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjhDt6fLzeSXqQrXOnP__-7x_rElBDOH5ywPakDIyrhNkYxaJ70e5RWepkvtnvTyJS9VZb3o904TYn1K5M64PDV6i3yWddzzywSUEy7wIY6-Z2BOkC9AktAH_wSDfCEdyUXKgF2oVgNrQ/s1600/image010.png" /></a></div>
<br />
Selecting the “Import Journal” job will display the error which confirms a non-administrator cannot create groups.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYNZvSoK4UtX-iLgMVS1K-5lpGgm2UxrLwa4MXuJz9SLXY2brSlt7CbAIzmLVNpzLbTvD7D9I1iiR358sd_l4bGt_aPErmCA0nJ8PG_V7YNIZZ5dlWK9I3ya01jVkhbezLgUSg06ImvFs/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="215" data-original-width="604" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYNZvSoK4UtX-iLgMVS1K-5lpGgm2UxrLwa4MXuJz9SLXY2brSlt7CbAIzmLVNpzLbTvD7D9I1iiR358sd_l4bGt_aPErmCA0nJ8PG_V7YNIZZ5dlWK9I3ya01jVkhbezLgUSg06ImvFs/s1600/image011.png" /></a></div>
<br />
If you want to create multiple journals and assign them to different journal groups, then this can easily be done in the file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha53fJhYXzRMFgwgapPBwO3PlWKfNIiqeOOrAlBoDm7uYNOYXAH0aIZRU9w1U9JAXkKKWpK4Gft7p_wRsZxruUnB_75wGkq7b6S3C3zoa2T9RMPbdQcTsBodVCo8Pjeg6BBdpfo71KA-g/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="265" data-original-width="939" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha53fJhYXzRMFgwgapPBwO3PlWKfNIiqeOOrAlBoDm7uYNOYXAH0aIZRU9w1U9JAXkKKWpK4Gft7p_wRsZxruUnB_75wGkq7b6S3C3zoa2T9RMPbdQcTsBodVCo8Pjeg6BBdpfo71KA-g/s640/image012.png" width="640" /></a></div>
<br />
Each journal is split by the “JOURNAL” section. Once this file has been imported it will create two new journals assigned to different groups and are against the POV specified in the file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLncoitEZpSuXUmF_A3qTOyZ75dxp7LMObcFEEzvNuittrAHQVe0SshysogeildFXNHABURss3GepKafT6O9ZImU5kH16WIbovkusnOi-8Yo7Ens38WaRNbGQPn9CUvsIVA7VSz9Ocnt4/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="275" data-original-width="832" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLncoitEZpSuXUmF_A3qTOyZ75dxp7LMObcFEEzvNuittrAHQVe0SshysogeildFXNHABURss3GepKafT6O9ZImU5kH16WIbovkusnOi-8Yo7Ens38WaRNbGQPn9CUvsIVA7VSz9Ocnt4/s640/image013.png" width="640" /></a></div>
<br />
Now let’s try and break some of the rules for journals to see what happens. You can only import journals with a working or posted (workflow not enabled) status.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGFK1ycQIxpoSdy1rWycE5IP5l3vBv3UacVqgUoTrQWiwf4pKoBqbkRr9AhqMAY7eWhKpwm1n8bm65dJo0GqJBnEchQ40FW-7d_rD9PnDEWUH2tS4Ui6CI2m9YiD9rngvf4yRfAxhDLlM/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="118" data-original-width="599" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGFK1ycQIxpoSdy1rWycE5IP5l3vBv3UacVqgUoTrQWiwf4pKoBqbkRr9AhqMAY7eWhKpwm1n8bm65dJo0GqJBnEchQ40FW-7d_rD9PnDEWUH2tS4Ui6CI2m9YiD9rngvf4yRfAxhDLlM/s1600/image014.png" /></a></div>
<br />
The above journal file has a status of submitted, if this file is imported and the job status checked, it shows as an error.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG2kNZOgsghroBSjsfa8hTowXYRaYXbnl4oqXZVY1ZHV04C-WFa8eBS1D7bIg0PI0koO1K9PGa99tGp1Rm26NsMwL9yWOzeLDb_TYIyCUfcnN9-BXJvDoVsZMVH1-9RvTCJHULt8lYm-Q/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="259" data-original-width="484" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG2kNZOgsghroBSjsfa8hTowXYRaYXbnl4oqXZVY1ZHV04C-WFa8eBS1D7bIg0PI0koO1K9PGa99tGp1Rm26NsMwL9yWOzeLDb_TYIyCUfcnN9-BXJvDoVsZMVH1-9RvTCJHULt8lYm-Q/s1600/image015.png" /></a></div>
<br />
The import failed as expected because only working and posted journals are allowed. This is a standard error message, if workflow is enabled it will still show the same error even though posted status is not allowed.<br />
<br />
Now to try and import a file that contains a member that the user importing the journal does not have write access to.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj85pmTa25zrRaOTx8txCGzVLwLXsry6Hn6g-9Jn-5WoSBx8nrTN56osLjKx9yDc8Vx75cZbisw4RhZ1alKeQQwb_mxNRbrIBFVfNj9e7eG-sbX3SB3gxgb5ioHaWk02WhG85Dj_BFl5AM/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="249" data-original-width="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj85pmTa25zrRaOTx8txCGzVLwLXsry6Hn6g-9Jn-5WoSBx8nrTN56osLjKx9yDc8Vx75cZbisw4RhZ1alKeQQwb_mxNRbrIBFVfNj9e7eG-sbX3SB3gxgb5ioHaWk02WhG85Dj_BFl5AM/s1600/image016.png" /></a></div>
<br />
That validates the rule “Any user with the User role and above can import journals, but only if they have write access to all the dimension members in the journal.”<br />
<br />
How about posting a journal to an unopened period?<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzN4mDwvG1jV6AGnIj0tweFcR01rCWY7pHgHu-cjaCkVbrP0aeY50uT0SXzVnt5IDwP1f3rVJAV03X-DhRgJV2yRzLv4VtdeZ_dkCJ97Kl1KkDZUB3FSKeQlXwt2S0da39W9P-mKKhTs8/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="84" data-original-width="375" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzN4mDwvG1jV6AGnIj0tweFcR01rCWY7pHgHu-cjaCkVbrP0aeY50uT0SXzVnt5IDwP1f3rVJAV03X-DhRgJV2yRzLv4VtdeZ_dkCJ97Kl1KkDZUB3FSKeQlXwt2S0da39W9P-mKKhTs8/s1600/image017.png" /></a></div>
<br />
The status is set to “P” for Post and no journal workflow is enabled.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNAQqDWNLnl9ym8-7JnDWm0sQ68YwSoogSLhb5neqQFUT6eX_GXZmsMGeEJdwW69PiRPoVkBRki9iurJ0YxgumWSb1Sb4_wjkho0VKhHnUn0yTghBKZWBx03N6NLZJoFRfNkVDG-Yg4_U/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="261" data-original-width="702" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNAQqDWNLnl9ym8-7JnDWm0sQ68YwSoogSLhb5neqQFUT6eX_GXZmsMGeEJdwW69PiRPoVkBRki9iurJ0YxgumWSb1Sb4_wjkho0VKhHnUn0yTghBKZWBx03N6NLZJoFRfNkVDG-Yg4_U/s1600/image018.png" /></a></div>
<br />
An error is generated stating the journal cannot be posted because the period is not open. The journal is still created but with a working status.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVpcvz14EGkBBNxGn2tbwbvOauh5Z3kR8_02bVioiFiR5B4z8D9MmvSufGcdlGpX2IibqRT_ey3ukFVcnzOxLuqZvRkurSHUuGk55AaJqglDGk3KWk8WTEssN9qfgKdXAMrJxctWtZiGY/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="239" data-original-width="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVpcvz14EGkBBNxGn2tbwbvOauh5Z3kR8_02bVioiFiR5B4z8D9MmvSufGcdlGpX2IibqRT_ey3ukFVcnzOxLuqZvRkurSHUuGk55AaJqglDGk3KWk8WTEssN9qfgKdXAMrJxctWtZiGY/s1600/image019.png" /></a></div>
<br />
Now it is highly unlikely users would want to create journals in a text editor, Excel is probably going to be the preferred choice.<br />
<br />
You could create an Excel-based journal template which includes drop-down lists, validations and provides a much more user-friendly experience.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh7cjFuAK38UfmleYHys5v9H5rxliUURBdXeYGt_jWobe9GMPxlekMVxkct92J179OkE4_9aTkyFVKK1m0mZ8CffV5BWEwTaNBDlcfpPlLSj9CZtWFTqeKZ9uImXGqhcfdbCRQdOLRA2U/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="388" data-original-width="1005" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh7cjFuAK38UfmleYHys5v9H5rxliUURBdXeYGt_jWobe9GMPxlekMVxkct92J179OkE4_9aTkyFVKK1m0mZ8CffV5BWEwTaNBDlcfpPlLSj9CZtWFTqeKZ9uImXGqhcfdbCRQdOLRA2U/s640/image020.png" width="640" /></a></div>
<br />
You can then use formulas to create correctly formatted lines for the journal file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitGXZm9dMmV-0wwXaSqH3DnzxksHmTauQpvn0LUET612-iKKT05CYiBWk9dAG6LvQ352jZyqS3msPf_qchzHPUXmZ1ESKn9T5YIuEHUyX38u8bCgooXJXm-0lyOy3X9S2WFYm7K7dHjoQ/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="186" data-original-width="812" height="145" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitGXZm9dMmV-0wwXaSqH3DnzxksHmTauQpvn0LUET612-iKKT05CYiBWk9dAG6LvQ352jZyqS3msPf_qchzHPUXmZ1ESKn9T5YIuEHUyX38u8bCgooXJXm-0lyOy3X9S2WFYm7K7dHjoQ/s640/image021.png" width="640" /></a></div>
<br />
These rows can then be copied to a file ready to be imported.<br />
<br />
You could get a little more sophisticated by adding some VBA code to generate the file automatically.<br />
<div>
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgec0EpBuPG4uljU2DMzw2glX5WEDOrqKzBgyuoM3MuX4CYlT7RnXrAjDwIMw0Qnm_9iTuEaFpAMLQ3oCR2yLPfv1q69tuqOvk2Ld3bqpbtvGWvyxyXmH4rtKRwNehzsAjNGqZe8RifpOY/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="276" data-original-width="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgec0EpBuPG4uljU2DMzw2glX5WEDOrqKzBgyuoM3MuX4CYlT7RnXrAjDwIMw0Qnm_9iTuEaFpAMLQ3oCR2yLPfv1q69tuqOvk2Ld3bqpbtvGWvyxyXmH4rtKRwNehzsAjNGqZe8RifpOY/s1600/image022.png" /></a></div>
<br />
Once the file has been created, it can be imported in FCCS.<br />
<br />
So what are the other options for importing journals? Well this leads me on to Data Management, and in the next part I will go through the available methods in detail.</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-79406283686616794932018-12-17T00:32:00.000-08:002018-12-17T00:32:12.446-08:00EPM Cloud - Journals and Data Management - Part 1<div dir="ltr" style="text-align: left;" trbidi="on">
I wanted to put together a post covering the different methods available in Data Management for loading journals to FCCS, but before diving in at the deep end I thought it would be worthwhile having a quick look at the functionality in FCCS. In the end I want to compare that the rules surrounding journals are the same in FCCS as they are in Data Management and hybrid FDMEE.<br />
<br />
Please note the intention of this post is not to provide a detailed analysis of a journal process or be a step by step guide, it is really to clear up some of the questions I had when I first looked at the journal functionality.<br />
<br />
The documentation covers a basic introduction to journals in FCCS:<br />
<br />
<i><b class="yellow">“During a financial period, you may need to adjust data after it is entered or loaded into base-level entities. Journals provide an audit trail of changes made in the application and indicate which users made adjustments and which accounts, entities, and time periods are affected.</b></i><br />
<i><b><br /></b></i>
<i><b class="yellow">The journal tasks that you can perform depend on the role assigned to you by the administrator. If a journal task is not available due to security, or the state of the data or journal status, it is either disabled or displayed with a message that you do not have the rights to perform the action.”</b></i><br />
<br />
If you are looking for an overview of journals in FCCS then there is a “Getting Started with Journals” video link available in the documentation.<br />
<br />
The journal functionality is only available if it has been enabled by an administrator, this can be during application creation or through the enable features option in application configuration.<br />
<br />
During application create there is an option to enable journal adjustments, this can be with or without the workflow process.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd98Pj6zdPW2np6zl5cYHHP_hofUgLvpTEuRgAjs6hWn3pPYcZ_GwmTX380ABsnBWY10-ALWQ1IOVOPEoAHbdEw9KFnEL2-jyk8wAD_2ZqL4nhKyUDlssxemfeS8JomISKNzCdHGNVggE/s1600/a.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="289" data-original-width="1032" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd98Pj6zdPW2np6zl5cYHHP_hofUgLvpTEuRgAjs6hWn3pPYcZ_GwmTX380ABsnBWY10-ALWQ1IOVOPEoAHbdEw9KFnEL2-jyk8wAD_2ZqL4nhKyUDlssxemfeS8JomISKNzCdHGNVggE/s640/a.PNG" width="640" /></a></div>
<br />
<div>
If you are not sure whether you want to include the journal functionality then the application can be created without it enabled, this can be then changed through configuration and the “Enable Features” option.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsOuazFuP5axcVGnGw_X7Iq0TdnyLVEuhIxqffxiN__j6Y853ohoY0GZJZAy3ICPVpJ73fhZVZ42mTNW9IP47mJX6ltxt6TFM6WyhtM0uQiyZw5tFZ9VwVaxqoRyX3-_XDQIhYwgASGm4/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="106" data-original-width="606" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsOuazFuP5axcVGnGw_X7Iq0TdnyLVEuhIxqffxiN__j6Y853ohoY0GZJZAy3ICPVpJ73fhZVZ42mTNW9IP47mJX6ltxt6TFM6WyhtM0uQiyZw5tFZ9VwVaxqoRyX3-_XDQIhYwgASGm4/s1600/image002.png" /></a></div>
<br />
If journal adjustments have not been enabled there will be the option to enable them and whether to include workflow.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNuzcdtEBXmO9ZEaS30O0ow-BAa0MkI045UZxkr3Ym7XWzZa-k5jMkjjnEhk4ak_rJYYt6OVMr6wDBGOXMq5_zObRnyWDUraLC2Ex-L-vTcff9WczNRrkQ5OOTmxwZi5kJGgBczc0T91M/s1600/a1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="363" data-original-width="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNuzcdtEBXmO9ZEaS30O0ow-BAa0MkI045UZxkr3Ym7XWzZa-k5jMkjjnEhk4ak_rJYYt6OVMr6wDBGOXMq5_zObRnyWDUraLC2Ex-L-vTcff9WczNRrkQ5OOTmxwZi5kJGgBczc0T91M/s1600/a1.PNG" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
After journal adjustments have been enabled they cannot be disabled, the workflow can be enabled at a later stage.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2w3zaKxHTBGF3h94or9TOKlvTSY_VolGhB6f9RUyJwogaYHF8J2aBWuMVC5x8F9N2tLW5ubxyEn8NT6AoHHlIpdb73HG_0qcVnBCiR_LCC9mK4ghVU_EIgIullf8pzp89dOE1VOrdw4Y/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="61" data-original-width="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2w3zaKxHTBGF3h94or9TOKlvTSY_VolGhB6f9RUyJwogaYHF8J2aBWuMVC5x8F9N2tLW5ubxyEn8NT6AoHHlIpdb73HG_0qcVnBCiR_LCC9mK4ghVU_EIgIullf8pzp89dOE1VOrdw4Y/s1600/image004.png" /></a></div>
<br />
Once workflow has been enabled it doesn’t look like it can be disabled so be sure on your requirements before enabling.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNG6IVJIlzTgOsLrr9lCKGAqymnmSpvktMUkGvnwsF31BB9qDLiHXQKk20huc-eNDDiVvCd8QcvZ6sVM72IMcmU8CFi4XckbkrdQv50LcuZilEgvpnKJwxkyYekdYBxgIy80JX2zOrkU8/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="64" data-original-width="174" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNG6IVJIlzTgOsLrr9lCKGAqymnmSpvktMUkGvnwsF31BB9qDLiHXQKk20huc-eNDDiVvCd8QcvZ6sVM72IMcmU8CFi4XckbkrdQv50LcuZilEgvpnKJwxkyYekdYBxgIy80JX2zOrkU8/s1600/image005.png" /></a></div>
<br />
I am going to go down the route of having workflow enabled, this is because I found the documentation slightly misleading and I am going to provide my experience on how the functionality operates. As this is EPM Cloud everything is subject to change, so the way it functions today may not be the same in the future.<br />
<br />
The basis of the workflow process is to create a journal, submit, approve and then post.<br />
<br />
There are several rules that apply to journals and to the workflow process, these are a selection of the main points:<br />
<ul style="text-align: left;">
<li><b class="yellow">They must be balanced, it is possible to create unbalanced journals but not post them.</b></li>
<li><b class="yellow">If workflow is enabled, unbalanced journals cannot be submitted for approval.</b></li>
<li><b class="yellow">They are not written to the database (Essbase) until they are posted.</b></li>
<li><b class="yellow">A period must be open before you can post a journal. </b></li>
<li><b class="yellow">If there are approved journals you cannot close the period. If there are journals that have been created or submitted a warning will be displayed, but the period can still be closed.</b></li>
<li><b class="yellow">Users with the “Viewer” role can only view posted journals which will also depend on access permissions.</b></li>
<li><b class="yellow">Users with the “User” role or higher can view all journals depending on access permissions.</b></li>
<li><b class="yellow">Users who have write access to the POV can create a journal. They can also edit and delete journals and perform various actions depending on the stage in the workflow.</b></li>
</ul>
I will shortly try and address some of the above points and cover off other rules around the workflow process.<br />
<br />
Journals are created against the consolidation dimension member “Entity Input”, “View” member “Periodic” and currency member “Entity Currency”, they are managed by a combination of scenario, year and period.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP8m7CR2FssXheVuRSuHZKS-C6pX75Oc0ZIfGalufgoyQZKTKZp2KBmLlry-2isBwsZ4hjEv1lRSsy52s7lYsDUEAI71CzwA0r8kd6B4aQu3fSoZKILBm_H67aWKcj3416yrWFS8CZlEY/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="107" data-original-width="685" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP8m7CR2FssXheVuRSuHZKS-C6pX75Oc0ZIfGalufgoyQZKTKZp2KBmLlry-2isBwsZ4hjEv1lRSsy52s7lYsDUEAI71CzwA0r8kd6B4aQu3fSoZKILBm_H67aWKcj3416yrWFS8CZlEY/s1600/image006.png" /></a></div>
<br />
Journals are also created against the seeded “Data Source” dimension member “FCCS_Journal Input”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV3ZacI-WE9sh3chE2U01hq1WPBVMs-QYzWHbTt15_0iTXWrJ1EImz5ZNCcchQ2aX33JMPSvRx9w8dRyn3nRaizqaY2se4m473_5IDhXzmlm1D0O70oPI35GwvewPTjYbAWkgrgWDTqBo/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="183" data-original-width="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiV3ZacI-WE9sh3chE2U01hq1WPBVMs-QYzWHbTt15_0iTXWrJ1EImz5ZNCcchQ2aX33JMPSvRx9w8dRyn3nRaizqaY2se4m473_5IDhXzmlm1D0O70oPI35GwvewPTjYbAWkgrgWDTqBo/s1600/image007.png" /></a></div>
<br />
Let us start out with a journal that has already been created, once a journal has been created it has the status of “Working”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC4Wh3bvrpTC9n-mVuTOu4EXSA-iw1IIG1q_LNogOJonobvexZjn_Iw05yWP0dMiF7mcG4iQ-Q83JOi1tETZppS0x8TNhy5h7jlQdpm2TTVk0oPCet2SrH95p_jc4N05VpQpifL5PmmOo/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="240" data-original-width="729" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC4Wh3bvrpTC9n-mVuTOu4EXSA-iw1IIG1q_LNogOJonobvexZjn_Iw05yWP0dMiF7mcG4iQ-Q83JOi1tETZppS0x8TNhy5h7jlQdpm2TTVk0oPCet2SrH95p_jc4N05VpQpifL5PmmOo/s640/image008.png" width="640" /></a></div>
<br />
If journals are enabled without workflow then after creating a journal you can either “Post” or “Unpost”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5nd11G4tbTpG30KR-SX6gfEN41UgQVuMgdWGf7GlVyArc_Nx18KwBsJUA1P9huZVXeax4xuArn2Qhb4WlK3ivgThYDgCQi0o9Y3q-OZXippIzBG5dv2RmzAolcxQPvE4r1zD_FkUQTes/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="173" data-original-width="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5nd11G4tbTpG30KR-SX6gfEN41UgQVuMgdWGf7GlVyArc_Nx18KwBsJUA1P9huZVXeax4xuArn2Qhb4WlK3ivgThYDgCQi0o9Y3q-OZXippIzBG5dv2RmzAolcxQPvE4r1zD_FkUQTes/s1600/image009.png" /></a></div>
<br />
After creating a journal, the following options are available as part of the workflow process.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6hddbylK1yg83Is7NYKZpQDRZz5v2wT_f6HQ1o5fWA1fwoVzW1I4XvM-0LTzjatuvCRN7t4WLHVz-u8rmn7PYgb5iJrqrsTMGOHUBK2Di5cJgrMevn5EjPd62frJLnj67M8ih7dc1dM4/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="278" data-original-width="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6hddbylK1yg83Is7NYKZpQDRZz5v2wT_f6HQ1o5fWA1fwoVzW1I4XvM-0LTzjatuvCRN7t4WLHVz-u8rmn7PYgb5iJrqrsTMGOHUBK2Di5cJgrMevn5EjPd62frJLnj67M8ih7dc1dM4/s1600/image010.png" /></a></div>
<br />
If we access the manage journals page with a “View” user against the same POV and the user has read access permissions to the “Actual” member.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAkROLS-ODENHJE6f5pg5AZUzW1URHhhLgryVshCqzXTQIGDqQlH6M0xeKUivAgqvssA0pPLD3cOI1HknaPDOUBBxxq1HFOAF1X9eJl_w4prQK8wfny0c-Y1cwSgHtyo0MTS2AgsjnUgs/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="424" data-original-width="730" height="371" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAkROLS-ODENHJE6f5pg5AZUzW1URHhhLgryVshCqzXTQIGDqQlH6M0xeKUivAgqvssA0pPLD3cOI1HknaPDOUBBxxq1HFOAF1X9eJl_w4prQK8wfny0c-Y1cwSgHtyo0MTS2AgsjnUgs/s640/image011.png" width="640" /></a></div>
<br />
No journals are displayed, this is because “View” users can only view posted journals.<br />
<br />
If the journal had a status of “Posted” then it would be displayed.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSGmTXkFVKMlZ-8Oda8F1-wYjfgFsH_Qj23-c0Lwaj_g2jNUhEVPXx6rq3l9-yLS7ZQt5DvoewAnYNdSTli_goaGoqXHW5JBS6NfsyTwQg_y7kDtBtYmDw0Pa6qawZTELiXqoNGhgV2b8/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="250" data-original-width="739" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSGmTXkFVKMlZ-8Oda8F1-wYjfgFsH_Qj23-c0Lwaj_g2jNUhEVPXx6rq3l9-yLS7ZQt5DvoewAnYNdSTli_goaGoqXHW5JBS6NfsyTwQg_y7kDtBtYmDw0Pa6qawZTELiXqoNGhgV2b8/s640/image012.png" width="640" /></a></div>
<br />
If the user does not have read access to any of the members that have security enabled, they will not be able to open the journal.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj_l3uwY1DxmwFf-pLiVsixubAdtsspzb5KN3rtsoEPJrMUBHza7-FKfPPmBb6OLcVzDeeHVwuBQO7kXE5_e2Az8UpbDL_bX9w-a3z0HIMW_c4Tr_7ygZfMMJVO7yN9H7bFFtdpacql74/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="96" data-original-width="549" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj_l3uwY1DxmwFf-pLiVsixubAdtsspzb5KN3rtsoEPJrMUBHza7-FKfPPmBb6OLcVzDeeHVwuBQO7kXE5_e2Az8UpbDL_bX9w-a3z0HIMW_c4Tr_7ygZfMMJVO7yN9H7bFFtdpacql74/s1600/image013.png" /></a></div>
<br />
Now let us go through the journal workflow process with a user that has the “User” role assigned. The user has write access to the security enabled dimensions except for read on an entity member.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVqqvlzxJS1v014Ji5qbHZqdbzCdggsepBdhloNz_f3tE5aMpe1BbvnU2tVG3tmA15CL8VKEfQc_RipFHH6qQfSp0jE49TiNHEw9vDDS9UdHmN-SLfU93qHpdm7EnOAEF8qfU79tENjZE/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="113" data-original-width="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVqqvlzxJS1v014Ji5qbHZqdbzCdggsepBdhloNz_f3tE5aMpe1BbvnU2tVG3tmA15CL8VKEfQc_RipFHH6qQfSp0jE49TiNHEw9vDDS9UdHmN-SLfU93qHpdm7EnOAEF8qfU79tENjZE/s1600/image014.png" /></a></div>
<br />
Please note that you would usually apply access permissions at group level rather than user, this is just for demo purposes.<br />
<br />
If the user tries to create a new journal:<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidFQTgk44zcLehyphenhyphentnwOKoXfSqOeM-Qmsizlp4XIYDKx5Fy6iRRLHJdaRG3mBWSoem0wRkxaBGfLy2PHOBnoHnjfODZyGXj6yN3XsFvr3zADaRn89fiRjI2JDPbEmssWB2D0El1u4YHjVI/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="347" data-original-width="1027" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidFQTgk44zcLehyphenhyphentnwOKoXfSqOeM-Qmsizlp4XIYDKx5Fy6iRRLHJdaRG3mBWSoem0wRkxaBGfLy2PHOBnoHnjfODZyGXj6yN3XsFvr3zADaRn89fiRjI2JDPbEmssWB2D0El1u4YHjVI/s640/image015.png" width="640" /></a></div>
<br />
Then selects the entity member they have read access to they will receive an error message.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit6Oscx81bgYxeW3yfLt8_XWKoQnq2nTCWIy6YMiAHV5Vna0LMC3GgkB5y6Bmy33RNTuS_plX5_CJ512UHsZuTE7lyYdNAmoQLffSq8a94_lHUlK0ircYpdEhAq1RutjTDPn2EYyCWY7w/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="109" data-original-width="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit6Oscx81bgYxeW3yfLt8_XWKoQnq2nTCWIy6YMiAHV5Vna0LMC3GgkB5y6Bmy33RNTuS_plX5_CJ512UHsZuTE7lyYdNAmoQLffSq8a94_lHUlK0ircYpdEhAq1RutjTDPn2EYyCWY7w/s1600/image016.png" /></a></div>
<br />
The security was then updated so the user has write access to the member and the journal created.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja2UlL76G_3pmXYCcDCfVwtZeEXpDbmP_8n_yX5ZcXgnhc2P5X25Mgb8bZ9LUWT6ehvwJI7IDwYXZ1R4nqR-39xVcg58c1Ct3eOq0HyZRI6Q1zcg4yWHZwxQGkRc4ZVGEYgLDk_zSWlQQ/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="479" data-original-width="1044" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja2UlL76G_3pmXYCcDCfVwtZeEXpDbmP_8n_yX5ZcXgnhc2P5X25Mgb8bZ9LUWT6ehvwJI7IDwYXZ1R4nqR-39xVcg58c1Ct3eOq0HyZRI6Q1zcg4yWHZwxQGkRc4ZVGEYgLDk_zSWlQQ/s640/image017.png" width="640" /></a></div>
<br />
The journal has been created unbalanced to show what happens when it is submitted for approval. It is possible to scan the journal from the actions menu to verify it is valid.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIu20T1d4FoOgLPnYz4QRx7tmVUIY1B4sMIYLmtgwOnL4tce7EQGo4Zw9YkCaM5Y919QVgLdRChskfPdDwqrGntd04BbBOEJnuJZR-Ngt3aOTx4DIG_vMxLHz4zR35QSXntwCxDl54ETo/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="101" data-original-width="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIu20T1d4FoOgLPnYz4QRx7tmVUIY1B4sMIYLmtgwOnL4tce7EQGo4Zw9YkCaM5Y919QVgLdRChskfPdDwqrGntd04BbBOEJnuJZR-Ngt3aOTx4DIG_vMxLHz4zR35QSXntwCxDl54ETo/s1600/image018.png" /></a></div>
<br />
Once created, the status of the journal will be “Working”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqo3MfhssClEr-vo6YMf8c_s8AClC08t8w2yMn6LFUY1xaHcM2bIS2mPIGkmtlT1o_0nFA9IweQPcVAN4zCIcapWXSE7FJKUM6S56V3htKkWJ-KpTskjPvw_KIIhIsPWbnCZxF7FAux2U/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="241" data-original-width="473" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqo3MfhssClEr-vo6YMf8c_s8AClC08t8w2yMn6LFUY1xaHcM2bIS2mPIGkmtlT1o_0nFA9IweQPcVAN4zCIcapWXSE7FJKUM6S56V3htKkWJ-KpTskjPvw_KIIhIsPWbnCZxF7FAux2U/s1600/image019.png" /></a></div>
<br />
This is really where the workflow process kicks in. The documentation seems to indicate that email notification can be enabled as part of the approvals process. I think it is a bit misleading because from my testing I found that the approvals process is entirely separate, and the journal email notifications are enabled by default and cannot be disabled. This is just my experience, and this is something that may change in future releases.<br />
<br />
The user then submits the journal for approval.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmnWAmDeyQwzzN3PFqjGKqptKOxnglLw0U7p_qFxq2N96lN9luF2EcyOi37eKer1vfiQDlYpiMVtjj3i1Pq8XDoFuoZdwEJIztisMCxTMR-53o4MDIFYVavz-jp2btKL8Jkrl3oYSba0Y/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="140" data-original-width="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmnWAmDeyQwzzN3PFqjGKqptKOxnglLw0U7p_qFxq2N96lN9luF2EcyOi37eKer1vfiQDlYpiMVtjj3i1Pq8XDoFuoZdwEJIztisMCxTMR-53o4MDIFYVavz-jp2btKL8Jkrl3oYSba0Y/s1600/image020.png" /></a></div>
<br />
As the journal is not balanced an error is generated and cannot be submitted.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVzu78AZHLmAGJuCEUk1wOeAzrOY36imsEJhTYvMXcppt5MpF8igNmojA0uPHLSpc0HsE4sxIgJn47L2HKjw3jhL2HvyySf44axbdNFBDuROugkowvrscd93-ZfMnzUFTUGKwgOJ_3W50/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="96" data-original-width="314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVzu78AZHLmAGJuCEUk1wOeAzrOY36imsEJhTYvMXcppt5MpF8igNmojA0uPHLSpc0HsE4sxIgJn47L2HKjw3jhL2HvyySf44axbdNFBDuROugkowvrscd93-ZfMnzUFTUGKwgOJ_3W50/s1600/image021.png" /></a></div>
<br />
The journal was updated to be balanced and submitted.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTocTxE6grpJL1F5fX3TuAwihXECM3S0H90POC_zmDQsQhnFhcrDOjexSM7bp2KNA2oYVAQn_nnHxgA8xJGK8LpccunhfuXG9kEFfU3EdWFdN5HwlQI8m_4pTHCNnA6TnvLcpKvJarupQ/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="108" data-original-width="422" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTocTxE6grpJL1F5fX3TuAwihXECM3S0H90POC_zmDQsQhnFhcrDOjexSM7bp2KNA2oYVAQn_nnHxgA8xJGK8LpccunhfuXG9kEFfU3EdWFdN5HwlQI8m_4pTHCNnA6TnvLcpKvJarupQ/s1600/image022.png" /></a></div>
<br />
The status of the journal is now “Submitted” and can be viewed but not edited.<br />
<br />
An email notification will be sent to any users that have write access to the parent entities in the journal, by default this includes administrators.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTDi6HAnKtAQP9lOgIQtBnscg1c_Xxv3X2zpIKGVUsoJxtgYPS7pvzL0iu1Wdnm4VAscU9H7rkUtpIv23o2117IwZdYN6uaYvHhazJjzsdfO3EoayInzK4WfE-NkJnhOL3Ez0AjelBwrM/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="275" data-original-width="695" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTDi6HAnKtAQP9lOgIQtBnscg1c_Xxv3X2zpIKGVUsoJxtgYPS7pvzL0iu1Wdnm4VAscU9H7rkUtpIv23o2117IwZdYN6uaYvHhazJjzsdfO3EoayInzK4WfE-NkJnhOL3Ez0AjelBwrM/s1600/image023.png" /></a></div>
<br />
To verify that the approver must have write access to the parent entity, I set the approver with read access.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpGiUxMnLoVNQFMDt32QEG7niyrldIRNGQQuFBj5W8MKyNphdoPwL_vdFfVfC7LoL6FtTzjdZbu4Hy83Ep6ZnBwOUEd0BNDU_IAH3vXPWOtGQMlzaa_KN_ofZkdwJZAF-qLKzJxZSw_pI/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="150" data-original-width="473" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpGiUxMnLoVNQFMDt32QEG7niyrldIRNGQQuFBj5W8MKyNphdoPwL_vdFfVfC7LoL6FtTzjdZbu4Hy83Ep6ZnBwOUEd0BNDU_IAH3vXPWOtGQMlzaa_KN_ofZkdwJZAF-qLKzJxZSw_pI/s1600/image024.png" /></a></div>
<br />
Before trying to approve the journal, I set the period to be closed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKNoIg1QeAjWDlslhqepeU7BtSkr2ixMm5sLyG6o-m9CDdfDlnMU9tYJn2lbrPoXPVjQmxVqiBPD7uXU-eBZ0pfzG50thIEefvJgjzrcDXW47ia8saRquUt6AAXyizlv3Rp-jMayWmeQY/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="205" data-original-width="495" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKNoIg1QeAjWDlslhqepeU7BtSkr2ixMm5sLyG6o-m9CDdfDlnMU9tYJn2lbrPoXPVjQmxVqiBPD7uXU-eBZ0pfzG50thIEefvJgjzrcDXW47ia8saRquUt6AAXyizlv3Rp-jMayWmeQY/s1600/image025.png" /></a></div>
<br />
The approver then tried to approve the journal.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0EpV5KJOJT_e6fD8cxNnymcERyqVoEYeRGCEx5ldW5uW3YLjwgSMlNwByR0M1sZNOUuXEBpwPgHYLKR9ZiGNpgjvM_QgKIivqlzUTSJZlhwEgJJX_SabvHVLZLBfRV9CWsM-wEXy0NJ8/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="143" data-original-width="126" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0EpV5KJOJT_e6fD8cxNnymcERyqVoEYeRGCEx5ldW5uW3YLjwgSMlNwByR0M1sZNOUuXEBpwPgHYLKR9ZiGNpgjvM_QgKIivqlzUTSJZlhwEgJJX_SabvHVLZLBfRV9CWsM-wEXy0NJ8/s1600/image026.png" /></a></div>
<br />
As expected an error message is displayed informing the period is not open and the journal could not be approved.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi48rQ6QesWehSQQf3QZgV0A-0jVAVAParCTRaw8gNKLsa3H7-LUO8m1TLPiTnYIiA0NZkk5df5uVs5LpZSbY7NHOv9PN1ja0R1PN8zyLEvSOcYQcyloll1B-FeJ_1wF5LP0z-S49adch0/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="106" data-original-width="627" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi48rQ6QesWehSQQf3QZgV0A-0jVAVAParCTRaw8gNKLsa3H7-LUO8m1TLPiTnYIiA0NZkk5df5uVs5LpZSbY7NHOv9PN1ja0R1PN8zyLEvSOcYQcyloll1B-FeJ_1wF5LP0z-S49adch0/s1600/image027.png" /></a></div>
<br />
At this point the journal could also be rejected which would set it back to “Working” status.<br />
<br />
The period was then opened.<br />
<br />
There is another journal option which is controlled by administrators and can restrict who can approve journals.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8r90GqjlvGyie1cbfGqTvKbpeVmKD8i7bJlAx34MDzPa-LjRRcsOiw9flXSmd8fTyZUONcsuIOk0sF-w8liz20kpxk_fpN9kptJKorkedOWYGB67OhZRlVq4JTRUyWFLS6ANDHx0tI2g/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="128" data-original-width="597" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8r90GqjlvGyie1cbfGqTvKbpeVmKD8i7bJlAx34MDzPa-LjRRcsOiw9flXSmd8fTyZUONcsuIOk0sF-w8liz20kpxk_fpN9kptJKorkedOWYGB67OhZRlVq4JTRUyWFLS6ANDHx0tI2g/s1600/image028.png" /></a></div>
<br />
The option was disabled and the approver who has the “User” role tried to approve the journal. The following error message was displayed, and the journal could not be approved.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBxKcWW8BVLDM0W0L0dygz3JP0j0xF-OhcP_bhtYWjWw3biaGgLYex2-CorPsBUd80ed-we_oSR-cF-Cuc8Jh_md5f13s-3plZ2HgKNPPo5yxS9DVDDqhFwoU3mjpxj5PAn4zR1mLO-Y4/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="94" data-original-width="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBxKcWW8BVLDM0W0L0dygz3JP0j0xF-OhcP_bhtYWjWw3biaGgLYex2-CorPsBUd80ed-we_oSR-cF-Cuc8Jh_md5f13s-3plZ2HgKNPPo5yxS9DVDDqhFwoU3mjpxj5PAn4zR1mLO-Y4/s1600/image029.png" /></a></div>
<br />
The option was enabled again, the user tried to approve the journal, but the same error was displayed.<br />
<br />
This goes back to the approver only having read access to the parent entity member.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2LbV-3jKFyZld4FICoMe0QBegjun7OjljX-UPg68NKgNtCaZ9kzw7FZ0x0kSht9QrWQvAj2FbHm5Kki1kShxmqunG2qyqD3YdHjvSkAEzJ1uZdk0SVPL4P3lVI9ZaGKtKjyUPFrkvP6Y/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="110" data-original-width="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2LbV-3jKFyZld4FICoMe0QBegjun7OjljX-UPg68NKgNtCaZ9kzw7FZ0x0kSht9QrWQvAj2FbHm5Kki1kShxmqunG2qyqD3YdHjvSkAEzJ1uZdk0SVPL4P3lVI9ZaGKtKjyUPFrkvP6Y/s1600/image030.png" /></a></div>
<br />
Write access was granted and this time the journal was accepted for approval.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8gabFsIMTsg2vejiZLuBNZ96wcpG2N5Ktz_5KhHwKbJYk7qN4QGohsO4DovcdRdLqs4jX0CbpcXOqKcR1NX94mmQsY1sZQB6k-bwqeBhDJqUcvft2jAVeG_8qmTvzSxc0HcWw4KjaWjk/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="107" data-original-width="406" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8gabFsIMTsg2vejiZLuBNZ96wcpG2N5Ktz_5KhHwKbJYk7qN4QGohsO4DovcdRdLqs4jX0CbpcXOqKcR1NX94mmQsY1sZQB6k-bwqeBhDJqUcvft2jAVeG_8qmTvzSxc0HcWw4KjaWjk/s1600/image031.png" /></a></div>
<br />
Email notification is sent to the user that submitted the journal.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLybSSp4FdTERHpKs5ZkA0UVNwfcYlLiCmXTp4UYeX9DT2KoZ4RO4X3vPVGqW-pLAKDUVXiLscjSmz3VE1sdUuMzDD5oWZaGXmNsJdTXo2xDo8Qcz4k7IVgGpsyL1lip-iAc7OiuhWPgY/s1600/image032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="273" data-original-width="698" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLybSSp4FdTERHpKs5ZkA0UVNwfcYlLiCmXTp4UYeX9DT2KoZ4RO4X3vPVGqW-pLAKDUVXiLscjSmz3VE1sdUuMzDD5oWZaGXmNsJdTXo2xDo8Qcz4k7IVgGpsyL1lip-iAc7OiuhWPgY/s1600/image032.png" /></a></div>
<br />
At this point, only an administrator or the user that submitted the journal can post it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg83QZEHfI802XG_HGSjF3Twa_vudRckwmuQlcQnd7WL4awGkFNrMToUOLix8i3zCV970HTfohWYP3hII76dxaFxd5bofPGsHkef9HmAaPeCNL6PTKv2RC8op-8RN7ZBg843cDyEXC7sbw/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="176" data-original-width="134" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg83QZEHfI802XG_HGSjF3Twa_vudRckwmuQlcQnd7WL4awGkFNrMToUOLix8i3zCV970HTfohWYP3hII76dxaFxd5bofPGsHkef9HmAaPeCNL6PTKv2RC8op-8RN7ZBg843cDyEXC7sbw/s1600/image033.png" /></a></div>
<br />
If any other user with the correct access permissions tries to post the journal they will receive an error message.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqDGFOBqqnrCPWbYFGDx2rTkMWvbIyjj674-mMlKc2c6sx4qXuW-UeF6MDtYzvFMIfzQy5J4hQKvsClXC7V3xxgFSBlA1rpDcuKw_kMitCreZsjMXfzDQN9b4RD_CWEepTYBleDQQxuGw/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="95" data-original-width="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqDGFOBqqnrCPWbYFGDx2rTkMWvbIyjj674-mMlKc2c6sx4qXuW-UeF6MDtYzvFMIfzQy5J4hQKvsClXC7V3xxgFSBlA1rpDcuKw_kMitCreZsjMXfzDQN9b4RD_CWEepTYBleDQQxuGw/s1600/image034.png" /></a></div>
<br />
The user who submitted the journal then posts the journal and the status is updated. The data is pushed to the Essbase database.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_iUB2Y2h66DmjBzvsSplOHt8taZ6SZYdHjHhp57HVMvVLMkavwZyqPQwE2ltJKVuHreBv1ycqvX4024OnnVRCjxOxR5KadDzi42SnSTOG0TrCsH7me2YsqdxUZxSePxFRB5aCMYQmX8w/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="109" data-original-width="402" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_iUB2Y2h66DmjBzvsSplOHt8taZ6SZYdHjHhp57HVMvVLMkavwZyqPQwE2ltJKVuHreBv1ycqvX4024OnnVRCjxOxR5KadDzi42SnSTOG0TrCsH7me2YsqdxUZxSePxFRB5aCMYQmX8w/s1600/image035.png" /></a></div>
<br />
Once a journal has been posted, it can only be unposted by either an administrator or the user that posted it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoSQ81NJhY-UxxfA7GM-Mm0qPPxMtEjm105zzTBueua3fGxNTqKb_9wT-WAE8gG84w6lZEcUQCmNs53klAYNMbuqwqKx7wmWRqzu3pOrjfHn8nVE0NGvlovBOFd7D_yeWG1P5XN5DBPCw/s1600/image036.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="220" data-original-width="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoSQ81NJhY-UxxfA7GM-Mm0qPPxMtEjm105zzTBueua3fGxNTqKb_9wT-WAE8gG84w6lZEcUQCmNs53klAYNMbuqwqKx7wmWRqzu3pOrjfHn8nVE0NGvlovBOFd7D_yeWG1P5XN5DBPCw/s1600/image036.png" /></a></div>
<br />
If any other user tries to “Unpost” they will receive the following error message.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4XNHMbwB_BgN42aZ_9sMZkU74yvd5IzbtDlSRHSogul-iVr6e7D-nrhYdUI8H-_eo9QhnxLqG-urdnRDFX8MLFBGA4c3uFT2xPFxjnzwzszUqOqEfqOdsFSEhWAH91qJR2gECr7NZZSE/s1600/image037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="95" data-original-width="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4XNHMbwB_BgN42aZ_9sMZkU74yvd5IzbtDlSRHSogul-iVr6e7D-nrhYdUI8H-_eo9QhnxLqG-urdnRDFX8MLFBGA4c3uFT2xPFxjnzwzszUqOqEfqOdsFSEhWAH91qJR2gECr7NZZSE/s1600/image037.png" /></a></div>
<br />
If a journal is unposted it returns to “Approved” status.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9HAH8YdF1dC6QK0jU_VH395dMIU9imZ4outEVzbiG9XjHM5mDSKEF-gBXgcEOTR3h830fUziukbdD57tfLqm8hIqw7y1CBCsHhkTq185h4_UcW5O4bIhEOZDNeeeSfCtL0zKfvdJkB34/s1600/image038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="75" data-original-width="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9HAH8YdF1dC6QK0jU_VH395dMIU9imZ4outEVzbiG9XjHM5mDSKEF-gBXgcEOTR3h830fUziukbdD57tfLqm8hIqw7y1CBCsHhkTq185h4_UcW5O4bIhEOZDNeeeSfCtL0zKfvdJkB34/s1600/image038.png" /></a></div>
<br />
In terms of email notifications this is where I found it to be confusing, hopefully I have understood correctly because it is not currently documented. If a journal is unposted, the user who unposted the journal and any users who have write access to the parent entities in the journal including administrators will receive an email. Though the same rule applies that only the administrator or the user that submitted the journal can post it again.<br />
<br />
Anyway, another thing to note is that if workflow is enabled you must go through each stage in the process. For example, if a journal has a submitted status, the next step would be for it to be approved. If you try and miss the approval step and go straight to post, you will receive an error message.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOtm-pMMJWYT8VEDetEZ6c26lqj8MEZMG6SFeqAGJCjBrZjuBK-5_47Hgpbh94s3IGsWEnJfxe610XWEGCKZtA_aCW4vwgAr1PK0LjfOnzqycwt2wNJDirI6QF9NAkOrfn4Zx3xw_Mfic/s1600/image039.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="109" data-original-width="628" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOtm-pMMJWYT8VEDetEZ6c26lqj8MEZMG6SFeqAGJCjBrZjuBK-5_47Hgpbh94s3IGsWEnJfxe610XWEGCKZtA_aCW4vwgAr1PK0LjfOnzqycwt2wNJDirI6QF9NAkOrfn4Zx3xw_Mfic/s1600/image039.png" /></a></div>
<br />
If you try and delete members where they are referenced in a journal you will receive a deletion error message.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCcc-LIw-2f-ru9VKox0OzzV258k3YZrUszhRRS7DaU7wcEJ8-5u4RcQ7MwsHbGKwGjjso1uMLdMzv5jfpXoXALiEKRXL1pQu4fXdfgSbVlTMIRKXSilSDDQGCLX0AHzD92WJNIN4hjK4/s1600/image040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="85" data-original-width="511" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCcc-LIw-2f-ru9VKox0OzzV258k3YZrUszhRRS7DaU7wcEJ8-5u4RcQ7MwsHbGKwGjjso1uMLdMzv5jfpXoXALiEKRXL1pQu4fXdfgSbVlTMIRKXSilSDDQGCLX0AHzD92WJNIN4hjK4/s1600/image040.png" /></a></div>
<br />
Going back to the earlier statement that it is not until the journal is posted that it is written to the Essbase database.<br />
<br />
If I perform a retrieve against the journal POV before it is posted then you will see that no data exists in Essbase.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizGxg90BNvPgoAud-FomYxSZ0GejsZoZPrNPxxIsVaTlUQJu01Rx42AKbfglhSU_6XikyHEVDF-gC0Rcid2YpMotO8DDolKSTemmvSoiP1bxFX__8qWXzlP7DkYO93Y8YH_e80HwvjOMA/s1600/image041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="296" data-original-width="351" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizGxg90BNvPgoAud-FomYxSZ0GejsZoZPrNPxxIsVaTlUQJu01Rx42AKbfglhSU_6XikyHEVDF-gC0Rcid2YpMotO8DDolKSTemmvSoiP1bxFX__8qWXzlP7DkYO93Y8YH_e80HwvjOMA/s1600/image041.png" /></a></div>
<br />
This does not change through the workflow process until the journal is posted.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXxq6rDKkNuiLmsQ_M05n8pwGKASr6w3XkTsmmasY7fQAZKT2I3bjHrnX27hnfQlvsDvzbw-tGbfoEui67YNZIjRzZ4l3-DBLNzWlQ6D9Ol0TPA4vwXRd4_KH8fZ7CdwXOehMqYc2PQaU/s1600/image042.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="350" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXxq6rDKkNuiLmsQ_M05n8pwGKASr6w3XkTsmmasY7fQAZKT2I3bjHrnX27hnfQlvsDvzbw-tGbfoEui67YNZIjRzZ4l3-DBLNzWlQ6D9Ol0TPA4vwXRd4_KH8fZ7CdwXOehMqYc2PQaU/s1600/image042.png" /></a></div>
<br />
If the journal is unposted then the data Is set to zero.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNCHoBxLGfWZWgW5ZpesC03nqG3vzeMw2V6KNbY5K_GFg7_znIQEQQpzx1sHRP9Ljs-NAEMD-_rfP4tIcPdd_pKulESaZLhhEIQqa6AWPAu9q_NoKyJ9AWWMRNdFcB5Fg1FsG7Qd6lV2k/s1600/image043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="299" data-original-width="350" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNCHoBxLGfWZWgW5ZpesC03nqG3vzeMw2V6KNbY5K_GFg7_znIQEQQpzx1sHRP9Ljs-NAEMD-_rfP4tIcPdd_pKulESaZLhhEIQqa6AWPAu9q_NoKyJ9AWWMRNdFcB5Fg1FsG7Qd6lV2k/s1600/image043.png" /></a></div>
<br />
I can only assume that the data is set to zero and not to missing to stop any issues with calculations being incorrect.<br />
<br />
So that completes this first part and in the next part I will look at the different options for loading journals which includes Data Management.<br />
<div>
<br /></div>
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-29752264019464035612018-11-26T00:23:00.000-08:002018-12-14T10:58:27.302-08:00EPM Cloud – Data Integration expressions<div dir="ltr" style="text-align: left;" trbidi="on">
New functionality was added in the EPM Cloud 18.11 release to Data Integration which is available in the simplified interface. I did put together a detailed post which covered the first release of Data Integration back in the 18.07 release, which you can read all about <b><a href="http://john-goodwin.blogspot.com/2018/07/epm-cloud-data-integration-comes-to.html">here</a></b>.<br />
<br />
Back in the original blog post I hit some problems with the functionality and once again I encountered the same type of issues with the new features in 18.11. These issues have now all been resolved in 18.12.<br />
<br />
Before I go through the new expressions functionality it is worth pointing out there are quite a few restrictions with Data Integration in the simplified interface and in my opinion, it is still quite a long way off from parity with Data Management.<br />
<br />
The areas that still need to be set up in Data Management are:<br />
<ul style="text-align: left;">
<li><b class="yellow">Register Source System</b></li>
<li><b class="yellow">Register Target Application</b></li>
<li><b class="yellow">Period Mapping</b></li>
<li><b class="yellow">Category Mapping</b></li>
<li><b class="yellow">Logic Groups</b></li>
<li><b class="yellow">Check Entity/Rule Groups</b></li>
<li><b class="yellow">Report Definition</b></li>
<li><b class="yellow">Batch Definition</b></li>
</ul>
The following features are not currently supported or available in this release, this list will reduce over time.<br />
<ul style="text-align: left;">
<li><b class="yellow">Only supported in standard and enterprise PBCS</b></li>
<li><b class="yellow">Only available for Service Administrators</b></li>
<li><b class="yellow">Fixed length files are not supported</b></li>
<li><b class="yellow">In the workbench the following is unavailable:</b></li>
<ul>
<li><b class="yellow">Validation errors</b></li>
<li><b class="yellow">Displays only dimensions in the target application and columns cannot be added</b></li>
<li><b class="yellow">Drill to source</b></li>
<li><b class="yellow">View mappings</b></li>
<li><b class="yellow">Source and Target view is only available.</b></li>
<li><b class="yellow">Import/Export to Excel</b></li>
</ul>
<li><b class="yellow">Map members (data load mappings):</b></li>
<ul>
<li><b class="yellow">Rule Name is replaced with Processing order</b></li>
<li><b class="yellow">Mappings cannot be assigned to a specific integration (data load rule)</b></li>
<li><b class="yellow">Exporting is not available</b></li>
<li><b class="yellow">Mapping scripts are unavailable</b></li>
<li><b class="yellow">Multi-dimensional mappings are available but cannot be defined.</b></li>
</ul>
<li><b class="yellow">Column headers for multi-period loads are unavailable</b></li>
<li><b class="yellow">Batch execution is unavailable</b></li>
<li><b class="yellow">Report execution is unavailable</b></li>
<li><b class="yellow">Scheduling is unavailable.</b></li>
</ul>
With all the above restrictions, Data Integration is still considered a preview version but there is nothing stopping you from using some of the functionality in Data Integration and the rest in Data Management until parity is reached.<br />
<br />
Anyway, on to the new functionality which is for file-based sources and allows source and target expressions to be applied to an import format, this is part of the “Map Dimensions” step in Data Integration.<br />
<br />
Source expressions were previously available but had to be manually entered, there are also a few slight terminology differences between Data Integration and Data Management.<br />
<br />
The main functionality update is the ability to apply target dimension expressions. This is an excerpt from the 18.11 release documentation which clearly explains the new target expressions:<br />
<br />
<i><b class="yellow">“New target dimension expression types include Copy Source value, Prefix, Suffix, Substring, Replace, Default, Rtrim, Ltrim, Rpad, Lpad, Constant, Conditional, Split, and SQL.</b></i><br />
<i><b class="yellow"><br />When importing data, you can apply target expressions to the mapped dimensions. Target expressions enable you to transform the source value read from file to the target dimension values to be loaded to target application. These expressions can be used instead of member mappings for performing simple data transformations. For large data sets using import expressions, the transformation improves data load performance.</b></i><br />
<i><b class="yellow"><br />The new expressions can be defined only using Simplified user interface. They will not be made available automatically in Data Management.”</b></i><br />
<br />
The above is good news if you are going to be using Data Integration, not so good news for Data Management or FDMEE users.<br />
<br />
Please be aware this is my first look at the new functionality so there may be a few slight inaccuracies, if this is the case I will update this post once I am aware of them.<br />
<br />
I think the best way to understand these new features is to go through a few examples, if you have not already read my previous <b><a href="http://john-goodwin.blogspot.com/2018/07/epm-cloud-data-integration-comes-to.html">post</a></b> on Data Integration then it is worth doing so as I will be assuming you understand the basics.<br />
<br />
Let us start by creating a new integration.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg29hDda2Sz3VGUGsXlLEvOhDrht_fUayTUkhlLTzkTDMyrlrwtFiF9iEqVEPsx8ao1oluV5uo1JjdHyDUJgDwpWajbSfHtAT7Z5MV2LbQE9P02h4iXJpvqhYdKzsRMI_O0wbpRqCWN4cY/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="143" data-original-width="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg29hDda2Sz3VGUGsXlLEvOhDrht_fUayTUkhlLTzkTDMyrlrwtFiF9iEqVEPsx8ao1oluV5uo1JjdHyDUJgDwpWajbSfHtAT7Z5MV2LbQE9P02h4iXJpvqhYdKzsRMI_O0wbpRqCWN4cY/s1600/image001.png" /></a></div>
<br />
A name for the integration and new location were defined. The source was set as a file and the target as the planning application where the plan type and category were applied.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiqrFce06pcayFr_ToBdsDG9q8GtzAaEqwGMKAavla6hOSN0iTp1iTsgu6eWnUw-cEYhV-j6ekHlSSd_I4xVvNaxvuC5pc5kkFYVmYgPzjupfGtYa-l8sRUW4vVu4kG2nwnjIq6_bMlWw/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="672" data-original-width="1458" height="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiqrFce06pcayFr_ToBdsDG9q8GtzAaEqwGMKAavla6hOSN0iTp1iTsgu6eWnUw-cEYhV-j6ekHlSSd_I4xVvNaxvuC5pc5kkFYVmYgPzjupfGtYa-l8sRUW4vVu4kG2nwnjIq6_bMlWw/s640/image002.png" width="640" /></a></div>
<br />
An example of the source comma delimited file is:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs16AsbRRScoa-4HXJof32BdIP3HqQqkI2grPxsf9GtHEw7pY2thbKHb2qIWL6ceeYmfhbQfcnzpB08Dopb4PhpkAH3PtadQm1ps0U4RZxNV3qfe7xluQj6RX0KeFB2kAs6w0MASf1zdA/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="370" data-original-width="1352" height="174" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs16AsbRRScoa-4HXJof32BdIP3HqQqkI2grPxsf9GtHEw7pY2thbKHb2qIWL6ceeYmfhbQfcnzpB08Dopb4PhpkAH3PtadQm1ps0U4RZxNV3qfe7xluQj6RX0KeFB2kAs6w0MASf1zdA/s640/image003.png" width="640" /></a></div>
<br />
On to “Map Dimensions” where the import format can be created, and source file columns mapped to target dimensions.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguIr85DoaHbWE4GPGLokhtYRThF-u_n6yRfM0sSJdY81Cn-D2vxH9tdWjHv4TfqElHgFrd1QSmIYt2a_y0Qrc6HWpan94I9M1_2Z0aPdYuVrdP-ul3It9NPwi6ngo56UcpqonrhycbtWo/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="394" data-original-width="1456" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguIr85DoaHbWE4GPGLokhtYRThF-u_n6yRfM0sSJdY81Cn-D2vxH9tdWjHv4TfqElHgFrd1QSmIYt2a_y0Qrc6HWpan94I9M1_2Z0aPdYuVrdP-ul3It9NPwi6ngo56UcpqonrhycbtWo/s640/image004.png" width="640" /></a></div>
<br />
This is where the new functionality comes into play, the following options will be available by clicking the gear icon next to the target dimension:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjMBsDTQBHbhG3sEUNkWimCaxoCIm848_evQhQZeZ3QyJni6IoTmTOP15UcEaTmS87oAq1MDgoYqappSEpC-Jbem3-esy_zhC_hpe2yk3P80xAn1fGa3m9fa_3kMzJZuo_S4E-IWg_Htw/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="402" data-original-width="544" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjMBsDTQBHbhG3sEUNkWimCaxoCIm848_evQhQZeZ3QyJni6IoTmTOP15UcEaTmS87oAq1MDgoYqappSEpC-Jbem3-esy_zhC_hpe2yk3P80xAn1fGa3m9fa_3kMzJZuo_S4E-IWg_Htw/s1600/image005.png" /></a></div>
<br />
There are two new options available which are “Edit Source Expression” and “Edit Target Expression”.<br />
<br />
If you select “Edit Source Expression” on a target dimension there will be three expressions to choose from.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMeA-XT_L7r2PRahSJaLYtCkCsmH4am4R-wVUCsjOjWnZL7tEi2PAlTgxJNlSBWe27WKDsRAyvzVoAhV2Wm0mN9zfME3OpAm7QQ48AtYEHU5EX-jtZVVfeSHIfQugGnZb-DeA9fCRDYZ4/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="256" data-original-width="747" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMeA-XT_L7r2PRahSJaLYtCkCsmH4am4R-wVUCsjOjWnZL7tEi2PAlTgxJNlSBWe27WKDsRAyvzVoAhV2Wm0mN9zfME3OpAm7QQ48AtYEHU5EX-jtZVVfeSHIfQugGnZb-DeA9fCRDYZ4/s640/image006.png" width="640" /></a></div>
<br />
The equivalent selection in Data Management has two options.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLwYFdmg5QfrO5bx1WQqeh23aE_Ed_pXH9oUIa23Jt7bqge9JRqupFcy_vaUtsZTFMpoSvDK2Gcd8uXxnSG5LeFuMaWLfMWlfiukXVZSg408HhrN7RyAmqQIYnH9iz3DNkqpbUP-v7tyk/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="134" data-original-width="238" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLwYFdmg5QfrO5bx1WQqeh23aE_Ed_pXH9oUIa23Jt7bqge9JRqupFcy_vaUtsZTFMpoSvDK2Gcd8uXxnSG5LeFuMaWLfMWlfiukXVZSg408HhrN7RyAmqQIYnH9iz3DNkqpbUP-v7tyk/s1600/image007.png" /></a></div>
<br />
“Lpad” and “Rpad” are similar to using “FillL” and “Fill”.<br />
<br />
The “Constant” source expression allows you to define a source value for each row.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyGzzyz9vKTvoZ8guk1k7syXtB0Rday-GzA7TYRM1erc2UMdzEotLMeDs7KPfGDjkb5FCCAdJy4gSi1063CplRcGZV6JCKSnUwfnl1jyZLIJkrThCeuMZN4jtPtx4Ey2GZ0d-8d8kvQRU/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="302" data-original-width="747" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyGzzyz9vKTvoZ8guk1k7syXtB0Rday-GzA7TYRM1erc2UMdzEotLMeDs7KPfGDjkb5FCCAdJy4gSi1063CplRcGZV6JCKSnUwfnl1jyZLIJkrThCeuMZN4jtPtx4Ey2GZ0d-8d8kvQRU/s640/image008.png" width="640" /></a></div>
<br />
In the import format I defined a constant of “BaseData” for the “HSP_View” dimension and “Working” for the “Version” dimension.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr9DnEJVFE1jCB0Y9RDo87OwSH5srB4J4Slom-M1v9FmjNPaeYaeKPr1ZsJGKsBlI3WXV1R0pu9fSSJsr6yWx-fc9KAkx2zEWO8w8JyQ-j4KulpkC1zpa0-Qd3Ghwpb0Ac5SxZ4oj_xlg/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="685" data-original-width="1445" height="303" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgr9DnEJVFE1jCB0Y9RDo87OwSH5srB4J4Slom-M1v9FmjNPaeYaeKPr1ZsJGKsBlI3WXV1R0pu9fSSJsr6yWx-fc9KAkx2zEWO8w8JyQ-j4KulpkC1zpa0-Qd3Ghwpb0Ac5SxZ4oj_xlg/s640/image009.png" width="640" /></a></div>
<br />
Once they have been defined they appear in the source of the import format.<br />
<br />
If you look in Data Management, you will see how the expressions have been added.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1kVOCKs0x5eXUf_-vcwGBhzgyjxYMC2uDzteiG1m7L4uu-RMFUiGLJV5ZZU0LqXXhdDbdhEVg3-brhEUPyvmCQeLcblbqjSoinxDORzabR-7QqiW0n1wGWvFNn2Hl4NI95yLAZaWtj9I/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="191" data-original-width="489" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1kVOCKs0x5eXUf_-vcwGBhzgyjxYMC2uDzteiG1m7L4uu-RMFUiGLJV5ZZU0LqXXhdDbdhEVg3-brhEUPyvmCQeLcblbqjSoinxDORzabR-7QqiW0n1wGWvFNn2Hl4NI95yLAZaWtj9I/s1600/image010.png" /></a></div>
<br />
It is the equivalent of just defining the value directly like:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWTqGMiI8O8vsssEX8FHePJm6oU8Jas0n5NCDp0zUO7MTnwqHaYibeCdpCYuPlYWDw_2MA78UAQ-sUPNztG9pK5UGnRkchEpLOS-MV0XdYufSbm47N0IQ6Z2j0jsQG7KmdWTjSm415hAU/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="197" data-original-width="510" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWTqGMiI8O8vsssEX8FHePJm6oU8Jas0n5NCDp0zUO7MTnwqHaYibeCdpCYuPlYWDw_2MA78UAQ-sUPNztG9pK5UGnRkchEpLOS-MV0XdYufSbm47N0IQ6Z2j0jsQG7KmdWTjSm415hAU/s1600/image011.png" /></a></div>
<br />
At this point if I run an import and the workbench, the constant values have been applied to the source columns.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ0k9z_utbacvRkHsU8tNpSPJGGcuuenFf7BDDjAr8-xU_m2o59ugfekYWZjl_qd0sv6di-3iN6St5DYvf3q0nUrna3ulT57onhuPn1BHUndnp6xNcIqVwb5cUWhy-IDmQEQMGplMENmI/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="330" data-original-width="1014" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ0k9z_utbacvRkHsU8tNpSPJGGcuuenFf7BDDjAr8-xU_m2o59ugfekYWZjl_qd0sv6di-3iN6St5DYvf3q0nUrna3ulT57onhuPn1BHUndnp6xNcIqVwb5cUWhy-IDmQEQMGplMENmI/s640/image012.png" width="640" /></a></div>
<br />
The “Lpad” source expression allows you to pad the left side of the source value which is the equivalent of using Fill in Data Management.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVVvS_4Q0D5_byayKIW2zyvfn49hORJbCL3EXzIohcxy7QtNmTm8F4H-tJuvK9hXaWWhLSIZfsaTZkCuX-nfDdl6dTPjPfuwcylB_5kcoYkm5mEvqAYVdz1NOjfBxvpr-nCepX7PgYaII/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="382" data-original-width="792" height="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVVvS_4Q0D5_byayKIW2zyvfn49hORJbCL3EXzIohcxy7QtNmTm8F4H-tJuvK9hXaWWhLSIZfsaTZkCuX-nfDdl6dTPjPfuwcylB_5kcoYkm5mEvqAYVdz1NOjfBxvpr-nCepX7PgYaII/s640/image013.png" width="640" /></a></div>
<br />
In the above example, source account values will be left padded with “9” up to six characters in length. An account 4120 would be become 994120<br />
<br />
Once the expression has been defined it will be displayed in the source of the import format.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiiLWBibEsVYXScPo_Zn_Llzlu56AU_aC3IqZgZibzj0ZoF5S12KJDT2qT-biZk872KzyEhaVs91VQ0SMd2V1MuW3EjBYhhRKgPnO3p1GKNgoKxh5SgIjduulcL1l3qGIQF6QHlDfWbrg/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="291" data-original-width="503" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiiLWBibEsVYXScPo_Zn_Llzlu56AU_aC3IqZgZibzj0ZoF5S12KJDT2qT-biZk872KzyEhaVs91VQ0SMd2V1MuW3EjBYhhRKgPnO3p1GKNgoKxh5SgIjduulcL1l3qGIQF6QHlDfWbrg/s1600/image014.png" /></a></div>
<br />
If I run an import and view the workbench, the source account members have been left padded. “4120” has become “994120” and “4130” is updated to “994130”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw4WHtNQPePsG1PPxUgUmRWHXgo3Ck1OTCfW-yblXGcnGvdrA2dubmWRMhsjxDya65ikLJ6IUU9eGpMk1cT7k-nPnnHQDZ3LrCeSNTkKtaacKNDvfDwVXiSWB6XS7HMaukXueaUqL4Lvw/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="111" data-original-width="137" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw4WHtNQPePsG1PPxUgUmRWHXgo3Ck1OTCfW-yblXGcnGvdrA2dubmWRMhsjxDya65ikLJ6IUU9eGpMk1cT7k-nPnnHQDZ3LrCeSNTkKtaacKNDvfDwVXiSWB6XS7HMaukXueaUqL4Lvw/s1600/image015.png" /></a></div>
<br />
In Data Management you can see the expression from Data Integration has been applied.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgER16TOF-E9pGOkBKjKVECh93_Z_v7hSydOibIpSIYUieCkvx4lUfv19hnwZumVbS-vOgC53L4bq9ZbtiZclzNb1HMQEDVUzoksDcJ206NbePVoTuanuL9AOi6vQLHOdJvhBnwTtjjQ4w/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="86" data-original-width="364" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgER16TOF-E9pGOkBKjKVECh93_Z_v7hSydOibIpSIYUieCkvx4lUfv19hnwZumVbS-vOgC53L4bq9ZbtiZclzNb1HMQEDVUzoksDcJ206NbePVoTuanuL9AOi6vQLHOdJvhBnwTtjjQ4w/s1600/image016.png" /></a></div>
<br />
This is the same as using “FillL” expression.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgknyTIbLT6t5QhiSQXtfx1aoL1XeKVFFQstsLhGD4dGU61M5l5nZ2K6rcCL7_ahh1hBILG2vCITdMZT5TdfBx3wSeEZT4p6fjIsVwBAcVI6vvBg3H9qS-4GoBHiX0RGl3-l_96vqmGRBo/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="112" data-original-width="382" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgknyTIbLT6t5QhiSQXtfx1aoL1XeKVFFQstsLhGD4dGU61M5l5nZ2K6rcCL7_ahh1hBILG2vCITdMZT5TdfBx3wSeEZT4p6fjIsVwBAcVI6vvBg3H9qS-4GoBHiX0RGl3-l_96vqmGRBo/s1600/image017.png" /></a></div>
<br />
which produces the same result.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn4oTbb-ee6PQjitJg_eiQQ3kvO7qem68Uu5AChlbhR_uEdRWLKWFTvk1NSDju5-rlcb_U5iYaYvF6xwIczpHrAVeSinti0pzOMHT90mq3ELNiIMExx8O8Uro9x_34ij9a9uSO-X0sKpY/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="198" data-original-width="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn4oTbb-ee6PQjitJg_eiQQ3kvO7qem68Uu5AChlbhR_uEdRWLKWFTvk1NSDju5-rlcb_U5iYaYvF6xwIczpHrAVeSinti0pzOMHT90mq3ELNiIMExx8O8Uro9x_34ij9a9uSO-X0sKpY/s1600/image018.png" /></a></div>
<br />
If you apply source expressions like “FillL” in Data Management, you will see the same expression in Data Integration.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPB-Qzh0LYV7Gx25iLna1fAMKMPzJ8DTlFhOZLnpsrLrFpjEWF_ptCD6p8EBLFdrQ9L2X9YXxtv7dqUYf0IuCngcdSkIPGTXl4xblnisS1OD3hD3jL9BjHh90KreeVB5KynY36_PJzB_g/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="289" data-original-width="395" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPB-Qzh0LYV7Gx25iLna1fAMKMPzJ8DTlFhOZLnpsrLrFpjEWF_ptCD6p8EBLFdrQ9L2X9YXxtv7dqUYf0IuCngcdSkIPGTXl4xblnisS1OD3hD3jL9BjHh90KreeVB5KynY36_PJzB_g/s1600/image019.png" /></a></div>
<br />
The “Rpad” source expression is the same concept except it pads to the right, I will provide an example when we get on to target expressions.<br />
<br />
There are different source expressions available if you select the amount row in the import format.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_J30HHdmlBhkNeK4U2XIy0yCsJL2ItxE4ev6RSNbB2DSOK60Ya08qjazfy564JdfHqpWpDYzR2C7Y_-eBTKM_1olTaXIugNeHs4Oov5fuhNac90XcVzKtgtbxt42mlsV7Bh_JFf4jJLM/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="314" data-original-width="751" height="267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_J30HHdmlBhkNeK4U2XIy0yCsJL2ItxE4ev6RSNbB2DSOK60Ya08qjazfy564JdfHqpWpDYzR2C7Y_-eBTKM_1olTaXIugNeHs4Oov5fuhNac90XcVzKtgtbxt42mlsV7Bh_JFf4jJLM/s640/image020.png" width="640" /></a></div>
<br />
These are the same as the ones available in Data Management, so I don’t feel I need to cover them in this post.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0Cd35PfRcvIsP1TVJnlt0fINC-xkBZyD_ir4nPUuj3f3XERJs9T-k8SH6vZXc6WDNDw4wdlhGc5B4H3sNG_f0nZwo4eV-M1891kABO9HM4C2PJAM50q5RwsegEhSELCsi2Gb1UMIsVzY/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="231" data-original-width="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0Cd35PfRcvIsP1TVJnlt0fINC-xkBZyD_ir4nPUuj3f3XERJs9T-k8SH6vZXc6WDNDw4wdlhGc5B4H3sNG_f0nZwo4eV-M1891kABO9HM4C2PJAM50q5RwsegEhSELCsi2Gb1UMIsVzY/s1600/image021.png" /></a></div>
<br />
Now on to the main feature and that is the new target expressions which can be accessed from the import format in the same way.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjns-b3mhnFnWZu4pz5cYQB5qFL4FdhVund1h-z9LIuTxP-866dS1QyL6p1Dfci0MA7GTQjCXIe8Tj65SgxhtG6ZiWPsci5AoYsBPZiryqTeNcunUVfnFUeHWYEI0Vsp_KxhutaFNp6GeI/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="394" data-original-width="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjns-b3mhnFnWZu4pz5cYQB5qFL4FdhVund1h-z9LIuTxP-866dS1QyL6p1Dfci0MA7GTQjCXIe8Tj65SgxhtG6ZiWPsci5AoYsBPZiryqTeNcunUVfnFUeHWYEI0Vsp_KxhutaFNp6GeI/s1600/image022.png" /></a></div>
<br />
The following expressions are available:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgx2DdcamL3O15_DtN_63mWKLXHLAhKOuh-5-SWD6e2zk2eY7KHnbrNWD-nC5d_oWAcUYfB2g-2XL7TR17SXe4EdksI_DDLc7I18YptPSJK0_1PH2kl_zjYpsGqxl8E67qDkab9KxTAtDo/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="620" data-original-width="745" height="532" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgx2DdcamL3O15_DtN_63mWKLXHLAhKOuh-5-SWD6e2zk2eY7KHnbrNWD-nC5d_oWAcUYfB2g-2XL7TR17SXe4EdksI_DDLc7I18YptPSJK0_1PH2kl_zjYpsGqxl8E67qDkab9KxTAtDo/s640/image023.png" width="640" /></a></div>
<br />
Please be aware these target expressions can only be defined in Data Integration, there is no way to define or view them in Data Management.<br />
<br />
I will now go through a simple example of each of the available target options starting with “Copy Source”.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrdevr4PGkxr8gyJN9gM6lhWaTcqn0TyjJhjVBKoyha6rJtX9LsCIwNY16rsc54ac1ZrhlNqO3nxN6r8SUNrXJGvQSeppLXsmlIR1vLR1bvyFt68JQDG3AnoFJliQYrDfEFHXJCEm9yz4/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="198" data-original-width="273" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrdevr4PGkxr8gyJN9gM6lhWaTcqn0TyjJhjVBKoyha6rJtX9LsCIwNY16rsc54ac1ZrhlNqO3nxN6r8SUNrXJGvQSeppLXsmlIR1vLR1bvyFt68JQDG3AnoFJliQYrDfEFHXJCEm9yz4/s1600/image024.png" /></a></div>
<br />
It is pretty much self-explanatory; this expression will copy source values to the target.<br />
<br />
It will be shown in the import format as <b>copysource()</b><br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzLetyeE9lGyTcPiCasPqa0F9l5-HzpF7PsfyES2-xaQBphqRtVZXM0aSBxZPX3Pu3GcVkZqM77Vr2P5p5AkKg1FSgjBWncz7dBlZras_nQ0pGzn7Zzh4leb0yPIIPC4Dwst72l3vsT_w/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="284" data-original-width="1186" height="153" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzLetyeE9lGyTcPiCasPqa0F9l5-HzpF7PsfyES2-xaQBphqRtVZXM0aSBxZPX3Pu3GcVkZqM77Vr2P5p5AkKg1FSgjBWncz7dBlZras_nQ0pGzn7Zzh4leb0yPIIPC4Dwst72l3vsT_w/s640/image025.png" width="640" /></a></div>
<br />
If I import the source file and then check the workbench you will see the expression has been applied.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUCjz-v0ajUh3ltuXIZee4BhgG18RIZgzlBpz73y3lXEXeLgbNrs4rLG6vGuZv_sExh_TUHbAZJ1gHPXoOoIkqc8BGgVHzqknd3SiJJwK9bbA70g455bw2K8T901bgyvh29uNDmoRP8AQ/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="360" data-original-width="269" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUCjz-v0ajUh3ltuXIZee4BhgG18RIZgzlBpz73y3lXEXeLgbNrs4rLG6vGuZv_sExh_TUHbAZJ1gHPXoOoIkqc8BGgVHzqknd3SiJJwK9bbA70g455bw2K8T901bgyvh29uNDmoRP8AQ/s1600/image026.png" /></a></div>
<br />
Source account values have been copied directly to the target account dimension.<br />
<br />
Next on to “Constant” which is exactly the same as the source expression I went through earlier.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv-1YMxxu3OB8fF_tPtLeHDw8lJBOT89D0G4fnJDAv3CCwK1iKwqAKBO2qQwoCOnlmBG0oz2pSOJM99rpN0YK5cpXmipJuxVrq4_rtWWeYoD32rGHzCIciQTCEmg5nvSuBWi_FAo2i9lo/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="250" data-original-width="1163" height="136" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv-1YMxxu3OB8fF_tPtLeHDw8lJBOT89D0G4fnJDAv3CCwK1iKwqAKBO2qQwoCOnlmBG0oz2pSOJM99rpN0YK5cpXmipJuxVrq4_rtWWeYoD32rGHzCIciQTCEmg5nvSuBWi_FAo2i9lo/s640/image027.png" width="640" /></a></div>
<br />
This has been applied to the entity dimension so will set all the target entities to “No Entity”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbL8ZJe2upP_YpGxEE6b-Eu81CieBi-VDYlj0tLrB83jPf7Dwcobytq414kdGgjdJrXxkPKE81yZBDErCtL_vr1u5qbpQ31QERXjWJOM_Vkh0_gF1lRKRwE_h7NxB85cLV8bFWa5BseDQ/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="397" data-original-width="531" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbL8ZJe2upP_YpGxEE6b-Eu81CieBi-VDYlj0tLrB83jPf7Dwcobytq414kdGgjdJrXxkPKE81yZBDErCtL_vr1u5qbpQ31QERXjWJOM_Vkh0_gF1lRKRwE_h7NxB85cLV8bFWa5BseDQ/s1600/image028.png" /></a></div>
<br />
Now on to “Default” which is pretty useful, this expression will apply a default value when the source is blank, if not it will use the source value.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj974SpaTM0HjZoC8DvL3rM5Q2o8ie1RqDk-TfkZ991iHoLR-2SFTnag1PfFcdylh8M1KZmhDk6KQObd9jHImR04G1n4H3xniSD4mRF5o6zGS80OiD1X9MUfje5lXiVDf9RBeiXZSOWf-4/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="331" data-original-width="1162" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj974SpaTM0HjZoC8DvL3rM5Q2o8ie1RqDk-TfkZ991iHoLR-2SFTnag1PfFcdylh8M1KZmhDk6KQObd9jHImR04G1n4H3xniSD4mRF5o6zGS80OiD1X9MUfje5lXiVDf9RBeiXZSOWf-4/s640/image029.png" width="640" /></a></div>
<br />
For this example, I updated my source file to include a version column where some values are populated, and some are blank.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha4Tj4aqCn74vfSTpGGy1VIodjIpfPmd2JzAKJ2muPdGPlJtTjJTH2QyywgX7WBEyhTvyCiao0UVaMWHtgDP-4jBT3iw9-hMzCCQTvYzlZqcuZ-wwOQgjMWWpkZEeID5DpBcZcEGBUWw0/s1600/image030.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="408" data-original-width="862" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha4Tj4aqCn74vfSTpGGy1VIodjIpfPmd2JzAKJ2muPdGPlJtTjJTH2QyywgX7WBEyhTvyCiao0UVaMWHtgDP-4jBT3iw9-hMzCCQTvYzlZqcuZ-wwOQgjMWWpkZEeID5DpBcZcEGBUWw0/s640/image030.png" width="640" /></a></div>
<br />
In the workbench, where the source version is blank it has been mapped with a target of “Working”, where the source version exists it has been mapped explicitly to the target.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQgvOIz9bP4HXn1DZL2tdUmd6cpHBX8uaob9FEVwClBZ3TYvAQRpyHpFzZH4e3B07zn6fq8PKYW6In260ozP8AqGF8hk6jQa0y2ClgN7ESStH4KbTl7ZOo44a-vG1MG8P0uM3C_YsUHtQ/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="223" data-original-width="743" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQgvOIz9bP4HXn1DZL2tdUmd6cpHBX8uaob9FEVwClBZ3TYvAQRpyHpFzZH4e3B07zn6fq8PKYW6In260ozP8AqGF8hk6jQa0y2ClgN7ESStH4KbTl7ZOo44a-vG1MG8P0uM3C_YsUHtQ/s640/image031.png" width="640" /></a></div>
<br />
The “Prefix” target expression doesn’t need much explanation, it will just add a prefix to the source value.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxWtRaKoe-gLGkLYzWSrkuqzMYih1cXnmG11lEWSO8tDdHmzg_KYsg8BlI279JRvb9JSAkKGigDBsy2l5-IxLdgP79BQf1mWSSPWKewFjo2HpP8JTWhYm3vtvkYAy-zL2ReHBHx1GBiKE/s1600/image032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="240" data-original-width="315" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxWtRaKoe-gLGkLYzWSrkuqzMYih1cXnmG11lEWSO8tDdHmzg_KYsg8BlI279JRvb9JSAkKGigDBsy2l5-IxLdgP79BQf1mWSSPWKewFjo2HpP8JTWhYm3vtvkYAy-zL2ReHBHx1GBiKE/s1600/image032.png" /></a></div>
<br />
I added the above target expression to the entity dimension and reran the import.<br />
<br />
As expected the source entity values have been prefixed with “ENT_”<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLWOSBHSlSNTUWygOHLi7mo1hNbwI84xNuNJXdc2V1H9MbJhFFiCx0reoEAOAerUVw6RVwHq7PtcQt_zkUg9ml5_QIYET3N8AqSGubtHB-0IdrX7mR6tO75VtZeO-4HSfRTFGQ3IzZ4Dk/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="137" data-original-width="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLWOSBHSlSNTUWygOHLi7mo1hNbwI84xNuNJXdc2V1H9MbJhFFiCx0reoEAOAerUVw6RVwHq7PtcQt_zkUg9ml5_QIYET3N8AqSGubtHB-0IdrX7mR6tO75VtZeO-4HSfRTFGQ3IzZ4Dk/s1600/image033.png" /></a></div>
<br />
The “Replace” expression searches for a string value in the source and applies a replacement value.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4uBCSjnVTEIfeSr3txyMqOESFwff7zWHqmTTdYpj6wSkBehYJDuPa_D-rBEi1zaUmMPOYjzn3VpG7gFCoS77XqobdEcvkN3s3RqYRtctVYFx_fg2dPh1RWjHZJe8xIkqtPeAtT6ZA9_I/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="384" data-original-width="749" height="328" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4uBCSjnVTEIfeSr3txyMqOESFwff7zWHqmTTdYpj6wSkBehYJDuPa_D-rBEi1zaUmMPOYjzn3VpG7gFCoS77XqobdEcvkN3s3RqYRtctVYFx_fg2dPh1RWjHZJe8xIkqtPeAtT6ZA9_I/s640/image034.png" width="640" /></a></div>
<br />
I applied the expression to the account dimension, where the source contains “50” it will be replaced with “00”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1mskYiixXAqmGg4vw2WKFOnj912VI3dRmqQ_5Rwccsj8H3gPy0KDb8FduBwF_SpVAXBB5BBtUXdbhzef08E0r6I0lcOSaVvw08pmUjHP039Zsd41HqFnlOaUW1L1-LnpzDSsMg-BcJ-8/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="255" data-original-width="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1mskYiixXAqmGg4vw2WKFOnj912VI3dRmqQ_5Rwccsj8H3gPy0KDb8FduBwF_SpVAXBB5BBtUXdbhzef08E0r6I0lcOSaVvw08pmUjHP039Zsd41HqFnlOaUW1L1-LnpzDSsMg-BcJ-8/s1600/image035.png" /></a></div>
<br />
The “Split” expression will split the source based on a delimiter, it will then return the nth value after the split.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrY1rJ9jD_aQ-83L7xW1va1GAaRacXXbj1ZrTMm6pG6s6fmARAF2-wCSdpT3NGtWoQ7lCiQwFvWyvu6PPXnC9ERNruvTLlysXRGtF0XU5M9AWHAftuTMszsyKbBNcmgcRtMPdZVFZA9p4/s1600/image036.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="390" data-original-width="750" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrY1rJ9jD_aQ-83L7xW1va1GAaRacXXbj1ZrTMm6pG6s6fmARAF2-wCSdpT3NGtWoQ7lCiQwFvWyvu6PPXnC9ERNruvTLlysXRGtF0XU5M9AWHAftuTMszsyKbBNcmgcRtMPdZVFZA9p4/s640/image036.png" width="640" /></a></div>
<br />
I applied the expression to the product dimension where the source starts with “P_”, setting the delimiter to underscore and component number to 2 it will set the target to the value after “P_”<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcO1LUNby9sZzSYZgQveOuLpStOV9nkTr57LB6KtSbVjymUraKo96LXZNyDe9fMTjiLdaFo0VntRzQD9fZtpQWrPqseh0Zr8ImC-AuAkVDh2n-GQz6P5OOQZJqWcZicyEJAfC5BKlwtHM/s1600/image037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="153" data-original-width="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcO1LUNby9sZzSYZgQveOuLpStOV9nkTr57LB6KtSbVjymUraKo96LXZNyDe9fMTjiLdaFo0VntRzQD9fZtpQWrPqseh0Zr8ImC-AuAkVDh2n-GQz6P5OOQZJqWcZicyEJAfC5BKlwtHM/s1600/image037.png" /></a></div>
<br />
We have been through the “Prefix” expression so now it is time for “Suffix” and you guessed it, it suffixes specified text to the source value.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmVvU7_g2v25kdZpKBi6iIRBaQ1Mp66sv04QlxASEuFtXSd-1EiVvTwWUkS2EB6F9HOZnB3zCePDlP12OxnlICIe1IkIUFiyfAiC17JUGjducD-u7nTyrJgf785HfzNhma7fxkKh6Ztuo/s1600/image038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="234" data-original-width="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmVvU7_g2v25kdZpKBi6iIRBaQ1Mp66sv04QlxASEuFtXSd-1EiVvTwWUkS2EB6F9HOZnB3zCePDlP12OxnlICIe1IkIUFiyfAiC17JUGjducD-u7nTyrJgf785HfzNhma7fxkKh6Ztuo/s1600/image038.png" /></a></div>
<br />
The expression was applied to the account dimension so all source values were suffixed with “_ACC”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSRPtaxNVyt5JEOOos_syrPBzi5le6g0WacAu4RELpwnxHerCjQ3PHU9miM-nnHefeMPuIew3lLcSEBRrIRT-pQ7SCQK6RWa1EkMxG5i36xPPzaSENmOXASuhL2GYi78EkA7VstD9VDPc/s1600/image039.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="221" data-original-width="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSRPtaxNVyt5JEOOos_syrPBzi5le6g0WacAu4RELpwnxHerCjQ3PHU9miM-nnHefeMPuIew3lLcSEBRrIRT-pQ7SCQK6RWa1EkMxG5i36xPPzaSENmOXASuhL2GYi78EkA7VstD9VDPc/s1600/image039.png" /></a></div>
<br />
The “Substring” expression will extract a string from the source based on a start position and the number of characters to extract.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqwTJBOmdUsB22MNVn2wXZ5bTvwtYfRHfjQ7VnO0X53TmeY1MAEKU14yNNFsjkkY4Hr0G5tpIFGZoqKHoMLf8DfTDepme1wp8CMTH0LyTF9Urx-TYTr3U6IfUIb9YcXbgWk7HJkLqaYxA/s1600/image040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="404" data-original-width="750" height="344" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqwTJBOmdUsB22MNVn2wXZ5bTvwtYfRHfjQ7VnO0X53TmeY1MAEKU14yNNFsjkkY4Hr0G5tpIFGZoqKHoMLf8DfTDepme1wp8CMTH0LyTF9Urx-TYTr3U6IfUIb9YcXbgWk7HJkLqaYxA/s640/image040.png" width="640" /></a></div>
<br />
I applied the expression to the account dimension so it will extract the first two characters from the source value.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy5fA6g_aswF7Us0paFEqfSYL5oaCSKaUz3e0i6wRkC7Nte2FJ93axbzLXHOAyJJXsNbL7q7mCEGr0ZjZJpAfbvUaoCvUZBoGHrzCz7vbS1EaCjirwG4LSsAdnz9EK-9Sy36jBnU4Ns9c/s1600/image041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="187" data-original-width="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy5fA6g_aswF7Us0paFEqfSYL5oaCSKaUz3e0i6wRkC7Nte2FJ93axbzLXHOAyJJXsNbL7q7mCEGr0ZjZJpAfbvUaoCvUZBoGHrzCz7vbS1EaCjirwG4LSsAdnz9EK-9Sy36jBnU4Ns9c/s1600/image041.png" /></a></div>
<br />
The “Lpad” expression I covered earlier with the source expressions.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUAdcx7GRhjNVKuGfbfkvSFqHHH0A9JUcRE6hQ0ZCI-XZgrH1qEQhRBcSCyPROCvHuIEub07Mg7vagy332Shm1IE6kXT3b_cv1UcSBbT2g2kN6PAY2Uw2BnEa92kIP1E_iq1vv6EX1xF8/s1600/image042.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="388" data-original-width="749" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUAdcx7GRhjNVKuGfbfkvSFqHHH0A9JUcRE6hQ0ZCI-XZgrH1qEQhRBcSCyPROCvHuIEub07Mg7vagy332Shm1IE6kXT3b_cv1UcSBbT2g2kN6PAY2Uw2BnEa92kIP1E_iq1vv6EX1xF8/s640/image042.png" width="640" /></a></div>
<br />
Once again the left side of the source has been padded with the defined characters and length.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie7Jt_cZ2mMGvXCVECVqtly9NIXzDurZQSYOWgCfMpPs_UyC_xvUJ-L4rRj4Pr0MjYyauqKe-Wo5YJyAWQOc6l_kSzXqB44BGybeqp5k5z7ECY6yzUkjjMtO2cf5eCBFWCPIjItjIUA6Y/s1600/image043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="224" data-original-width="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie7Jt_cZ2mMGvXCVECVqtly9NIXzDurZQSYOWgCfMpPs_UyC_xvUJ-L4rRj4Pr0MjYyauqKe-Wo5YJyAWQOc6l_kSzXqB44BGybeqp5k5z7ECY6yzUkjjMtO2cf5eCBFWCPIjItjIUA6Y/s1600/image043.png" /></a></div>
<br />
The “Rpad” expression is just the reverse logic, so it will pad to the right of the source value.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8LD-2cDQkNPBS_7VoWGREKNhyEPmHBog9FRgIG9gs2G5YxMF__on5TeXZTdiSBflnI5c-qluwtY6FavWRo1yZX606oiUjXlT5TyPQqn0dewSY8RtwRY-MpCemGNRrlZ56Fgi-FX4sOtU/s1600/image044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="393" data-original-width="751" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8LD-2cDQkNPBS_7VoWGREKNhyEPmHBog9FRgIG9gs2G5YxMF__on5TeXZTdiSBflnI5c-qluwtY6FavWRo1yZX606oiUjXlT5TyPQqn0dewSY8RtwRY-MpCemGNRrlZ56Fgi-FX4sOtU/s640/image044.png" width="640" /></a></div>
<br />
This produces the following:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhelgBhq2pbI3dfaCupc9X47YTiFtSxY9dZ0y-F_JUIfNSGztuh19i8anH9alqHDFrfM2oB1fRbHYMDIJpo_Cx5122uYwlyHGlPoCSY7FtHunwkWSayzRrPPKqpZBnr3oyCUDtLZKx1BXc/s1600/image045.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="219" data-original-width="205" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhelgBhq2pbI3dfaCupc9X47YTiFtSxY9dZ0y-F_JUIfNSGztuh19i8anH9alqHDFrfM2oB1fRbHYMDIJpo_Cx5122uYwlyHGlPoCSY7FtHunwkWSayzRrPPKqpZBnr3oyCUDtLZKx1BXc/s1600/image045.png" /></a></div>
<br />
The “Ltrim” expression will trim a leading specified character from the source.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGpUBVKc1ksfXpEnVoXSpwZb2evwI3GVqor8lP03C75i2VKURbaUu89xhIP_DoapVWZ-FWX5GqXWFN4Pil3rgdOnIW_8CldRAjBhMb1NnoT-FhNWR2kfWU3LXYbR-Cu78aksj59yMGoZs/s1600/image046.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="324" data-original-width="752" height="274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGpUBVKc1ksfXpEnVoXSpwZb2evwI3GVqor8lP03C75i2VKURbaUu89xhIP_DoapVWZ-FWX5GqXWFN4Pil3rgdOnIW_8CldRAjBhMb1NnoT-FhNWR2kfWU3LXYbR-Cu78aksj59yMGoZs/s640/image046.png" width="640" /></a></div>
<br />
This logic has removed the leading “4” from the source value.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhweYpWMcAmVtPeO6o6ep7zTCx-j_ih2x-xcr1kzB6xs2Jg-TfBaP8VFXyYfihuZCb_Ykioh2OYTDGuBd0hfcAJNxSxrK8WO5bTRqSDXukqI2kcacfY6n3kmYE3YyxBIeZWA564uUAZYfA/s1600/image047.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="222" data-original-width="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhweYpWMcAmVtPeO6o6ep7zTCx-j_ih2x-xcr1kzB6xs2Jg-TfBaP8VFXyYfihuZCb_Ykioh2OYTDGuBd0hfcAJNxSxrK8WO5bTRqSDXukqI2kcacfY6n3kmYE3YyxBIeZWA564uUAZYfA/s1600/image047.png" /></a></div>
<br />
The “Rtrim” expression is the reverse of “Ltrim” so it will trim specified trailing characters from the source.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKWHEefM3Gnr7jtglqVb7uXMcF8-B28Wcteeei9ZxFvKlPgrO_ODb9QWYkk9ks4wz9dDqQH2Me1WT1s_RCK9wtAqEfA0Eb1paN8ZkMBi1nutyHZ_6jVe4iXYgdKbBWLB_7QnwYN59ump0/s1600/image048.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="332" data-original-width="748" height="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKWHEefM3Gnr7jtglqVb7uXMcF8-B28Wcteeei9ZxFvKlPgrO_ODb9QWYkk9ks4wz9dDqQH2Me1WT1s_RCK9wtAqEfA0Eb1paN8ZkMBi1nutyHZ_6jVe4iXYgdKbBWLB_7QnwYN59ump0/s640/image048.png" width="640" /></a></div>
<br />
In this example the trailing “0” in the source has been trimmed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMhX1dsDCtfoMNRduIVCF2qf7HlZiVG21XhrCbC-ZtmIVC2pDAQsdZnEQh2GYt8exUIAO7xjRjd_crTNYQyPk0k8oj0-_2rw4qPhumllx9yBS6fyWpmmR0bNP5aCCeJCK9ghYddxqe6dw/s1600/image049.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="225" data-original-width="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMhX1dsDCtfoMNRduIVCF2qf7HlZiVG21XhrCbC-ZtmIVC2pDAQsdZnEQh2GYt8exUIAO7xjRjd_crTNYQyPk0k8oj0-_2rw4qPhumllx9yBS6fyWpmmR0bNP5aCCeJCK9ghYddxqe6dw/s1600/image049.png" /></a></div>
<br />
Now on to one of the more interesting target expressions, “Conditional” will allow you to use if-else statements on the source to return the target.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSS_oYPimYDoDG1TGofpvfcFdOO-SZODxsKUU7OcyAnRNB9QsIuRN0MVrdbu64s8x1jyifVgRRi8YsFtdrCE3idOeivG8VGQsWgk3YQYwEmKWdUyw7M7KVMjjME93KGZQLYewnxwsAkBo/s1600/image050.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="540" data-original-width="751" height="460" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSS_oYPimYDoDG1TGofpvfcFdOO-SZODxsKUU7OcyAnRNB9QsIuRN0MVrdbu64s8x1jyifVgRRi8YsFtdrCE3idOeivG8VGQsWgk3YQYwEmKWdUyw7M7KVMjjME93KGZQLYewnxwsAkBo/s640/image050.png" width="640" /></a></div>
<br />
In the above example I have applied a conditional expression to the account dimension. If the source account value equals “4150” then “Other Revenue” is returned as the target, else return the source account value. Make sure you put a space after the first “if” otherwise the expression doesn’t seem to work.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgItfuw8JFc0WziRa_JkOr0U5rhoqe1wN53hjJeeJcE4HHtfEu-OR6NojAcUVUicDuOU1_wqb73jAa4WTxAwVdkkvv7b1aAVE8cRLxKJQLwHIu-FE9ZRq79si1N4ksgDRGBoatvLeu1aN8/s1600/image051.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="226" data-original-width="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgItfuw8JFc0WziRa_JkOr0U5rhoqe1wN53hjJeeJcE4HHtfEu-OR6NojAcUVUicDuOU1_wqb73jAa4WTxAwVdkkvv7b1aAVE8cRLxKJQLwHIu-FE9ZRq79si1N4ksgDRGBoatvLeu1aN8/s1600/image051.png" /></a></div>
<br />
It possible to use multiple “if-else” statements and logic operators such as “and”, “or”. You can also bring in additional source columns.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsE12S8yLkE-QJJYXNckF7dp2JG8zE6xYXiYOxVyh_v4-kPOiBDddJBD-iXlfy5u8aSWJM42uaGOiVCiZqP9N7WOLrERpIoin0hi7B-ZTCl1eSwSxZk8mQpBI_77sTQXptq2TpjXVjRm4/s1600/image052.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="244" data-original-width="599" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsE12S8yLkE-QJJYXNckF7dp2JG8zE6xYXiYOxVyh_v4-kPOiBDddJBD-iXlfy5u8aSWJM42uaGOiVCiZqP9N7WOLrERpIoin0hi7B-ZTCl1eSwSxZk8mQpBI_77sTQXptq2TpjXVjRm4/s1600/image052.png" /></a></div>
<br />
If you are not sure of source column names, then look at the “Data Table Column Name” in the target application details.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVg_RcIWXUn0Alw11NOoHFQdjVLXaqgt9HYGGdekxD4eZbRd9YzIi8-W8ynGWyLJVel5WIich0v5ro-GsH2Shzv1f03CDpjE4KBlY9ZFtOKKOuW-fmI0BKyAhb28UGKI5TtsW3rAffopQ/s1600/image053.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="221" data-original-width="709" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVg_RcIWXUn0Alw11NOoHFQdjVLXaqgt9HYGGdekxD4eZbRd9YzIi8-W8ynGWyLJVel5WIich0v5ro-GsH2Shzv1f03CDpjE4KBlY9ZFtOKKOuW-fmI0BKyAhb28UGKI5TtsW3rAffopQ/s1600/image053.png" /></a></div>
<br />
The logic for the above expression is: where the source account is equal to “4150” then set the target to “Other Revenue, else if the source account value is equal to “4130” and the version (UD1) is equal to “Final” then set the target to “Cash”, for everything else set the target to be the same as the source value.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim3PLbUvnhcJIL3EynKP0dslW4Ysc4UU_yLKsSl9DM1wSqBbfMCzZ5qW_JMUFUNbPwvXb7yX9bbrou1b-eNv19sI5JYNM_sMX7UXxdzCV_-05r5HP5WBkv_-qyvfaLlOgAsE2TMIFufVg/s1600/image054.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="405" data-original-width="634" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim3PLbUvnhcJIL3EynKP0dslW4Ysc4UU_yLKsSl9DM1wSqBbfMCzZ5qW_JMUFUNbPwvXb7yX9bbrou1b-eNv19sI5JYNM_sMX7UXxdzCV_-05r5HP5WBkv_-qyvfaLlOgAsE2TMIFufVg/s1600/image054.png" /></a></div>
<br />
You also handle blank source values with the conditional expression.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNeHVdoTKLVJr_MXHvGUwh4VqB4c5nzEkJvlq7VuYqicH3PcT2nQ1K5SMrJiooEMilzfQ-aWCE_6sQW5tB_dDYdHYgoxLFv_1AeRKyHH967CjmFwQLDN3wq39yjFljeICeNYbB0BubGmc/s1600/image055.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="197" data-original-width="603" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNeHVdoTKLVJr_MXHvGUwh4VqB4c5nzEkJvlq7VuYqicH3PcT2nQ1K5SMrJiooEMilzfQ-aWCE_6sQW5tB_dDYdHYgoxLFv_1AeRKyHH967CjmFwQLDN3wq39yjFljeICeNYbB0BubGmc/s1600/image055.png" /></a></div>
<br />
The above expression sets the target version to “Working” where the source is blank, otherwise return the source value.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFV-0z4vli-ab3nNWWebH5A7-_OHC1lmjFvAMfwgGqAj7Qc1HwB4txaT-yb9eiXFFkiHeDBuh3MZakbDLTAYXpbg8mk_iE1xF5aDnbMnb8xZ5vntjfVy5giitlTaCp29VyfzKV3z_E4JU/s1600/image056.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="185" data-original-width="636" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFV-0z4vli-ab3nNWWebH5A7-_OHC1lmjFvAMfwgGqAj7Qc1HwB4txaT-yb9eiXFFkiHeDBuh3MZakbDLTAYXpbg8mk_iE1xF5aDnbMnb8xZ5vntjfVy5giitlTaCp29VyfzKV3z_E4JU/s1600/image056.png" /></a></div>
<br />
On to the last target expression which is “SQL”. This expression will allow you to put together a SQL statement as a mapping.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1AQN3E21kN2id7L_jWrkqsxFr-WonO0sYlYwugQhCLlMOFn2bs9KnH-4s20wozGP16NF3PgBXWvqjm2fimt-jlNGl0-52KREiAbI-Dhyn6VZRZI-ke-O9_qWUPbD9-iEc_aUSaYv9cME/s1600/image057.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="476" data-original-width="746" height="408" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1AQN3E21kN2id7L_jWrkqsxFr-WonO0sYlYwugQhCLlMOFn2bs9KnH-4s20wozGP16NF3PgBXWvqjm2fimt-jlNGl0-52KREiAbI-Dhyn6VZRZI-ke-O9_qWUPbD9-iEc_aUSaYv9cME/s640/image057.png" width="640" /></a></div>
<br />
In the above example which was applied to the entity dimension, a CASE statement is used, the source column is ENTITY which must be enclosed inside $.<br />
<br />
When the source entity is either “120” or “130” then set the target to “500”, else the target will be “110”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0_g7hf0tZSav7zA71wXjyfnl65lBJlO07l7pwPUbizCwc_rpIlibAkeLPNVzMyJfWG8sQYaAnZ7aAuvi_PLu4nAxKkLkwN6nplTlZQ8CFPLJt8V6SQZpJspbnGj4oWI2lXeNGxwJxndA/s1600/image058.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="291" data-original-width="189" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0_g7hf0tZSav7zA71wXjyfnl65lBJlO07l7pwPUbizCwc_rpIlibAkeLPNVzMyJfWG8sQYaAnZ7aAuvi_PLu4nAxKkLkwN6nplTlZQ8CFPLJt8V6SQZpJspbnGj4oWI2lXeNGxwJxndA/s1600/image058.png" /></a></div>
<br />
If you want to use multiple "WHEN" conditions in the "CASE" statement you could use something like:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8HLJ10K3Jqvj28LR1OctaOrWmKf_5qjLl0Nj4WW92GdOje6GmOGl2g-S0_NkFmIPEF8BEfLDXREJOwBaq_DH__AwRVGOBuv7WFXFwJOEHZvNFJiykSAM7RWhwal4f0PUhlzI2ChOlb9o/s1600/a2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="253" data-original-width="694" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8HLJ10K3Jqvj28LR1OctaOrWmKf_5qjLl0Nj4WW92GdOje6GmOGl2g-S0_NkFmIPEF8BEfLDXREJOwBaq_DH__AwRVGOBuv7WFXFwJOEHZvNFJiykSAM7RWhwal4f0PUhlzI2ChOlb9o/s1600/a2.png" /></a></div>
<br />
As it is only possible to<i>“Use only one source value in the source expression”</i> then the following "CASE" statement causes a failure when importing data.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixn3gxrg4JmZc2uDkrsjwkazaEU1i8ddwGMwD3pA9HkfPyVs7jGmn6xCoZPZR4r5AO3qaSxpRzQnvkU7OP6TEx0XlX1FMIDBC3XuSB0y6nsp9PqP-O0Po2HYSJfbaYum7QNc47ikwP-Pw/s1600/a3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="270" data-original-width="697" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixn3gxrg4JmZc2uDkrsjwkazaEU1i8ddwGMwD3pA9HkfPyVs7jGmn6xCoZPZR4r5AO3qaSxpRzQnvkU7OP6TEx0XlX1FMIDBC3XuSB0y6nsp9PqP-O0Po2HYSJfbaYum7QNc47ikwP-Pw/s1600/a3.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
So now I have a completed import format where a target expression is applied to all dimensions.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSZSuMWlosPhD8vOeMdZ3_SthovEnOVkm1jbA1DGQZYneFXOI8UchSCiRA37cLdBTTgUlM7GuObAtY4H6sivVkKUisLHhRI2m8pzV8aTfABIr_QNoVP0vncOvAM2JsGiu2H0ixZ1MVCIM/s1600/image061.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="632" data-original-width="1478" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSZSuMWlosPhD8vOeMdZ3_SthovEnOVkm1jbA1DGQZYneFXOI8UchSCiRA37cLdBTTgUlM7GuObAtY4H6sivVkKUisLHhRI2m8pzV8aTfABIr_QNoVP0vncOvAM2JsGiu2H0ixZ1MVCIM/s640/image061.png" width="640" /></a></div>
<br />
If an import is run, in the workbench all source columns are mapped to target dimensions and the validation step is successful. There is no need to apply any member mappings in the integration for it to succeed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDpQy_Ro20uOdZ9YB9xQ8O4fDtf64cB-dUHNxxGW3z5uKd0P9zO7sdG2uK3jrFA4eEasnTHtCtHzvBe2iunXHEUmu87emvsRmwtCn1ShLIrqCJAz-qiabtBxAePYKFPLmNFvMQuvUN1qU/s1600/image062.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="556" data-original-width="1281" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDpQy_Ro20uOdZ9YB9xQ8O4fDtf64cB-dUHNxxGW3z5uKd0P9zO7sdG2uK3jrFA4eEasnTHtCtHzvBe2iunXHEUmu87emvsRmwtCn1ShLIrqCJAz-qiabtBxAePYKFPLmNFvMQuvUN1qU/s640/image062.png" width="640" /></a></div>
<br />
You may be wondering whether it is possible to apply target expressions in the import format and then apply member mappings.<br />
<br />
The logic is that member mappings will be applied where the target column is a "NULL". So if no target expressions are applied the target will always be "NULL" which means member mappings will be applied.<br />
<br />
If target expressions are applied but the result is "NULL" then member mappings will be applied.<br />
<br />
For example if the following target expression was applied:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8f9NBbXvIt3Al6SuU8usVXP9MwLW6QihP8T7oqEJ0zncvca_3oVS_61Sp3dRYS1FngMUjGf9c0Akoq0OIWJlc8CD_wVzn3I7m8dtsvQBu2XJucMWWXCNvEtMvEH-DJ-2n2Ld4HYc_G8Q/s1600/a4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="254" data-original-width="696" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8f9NBbXvIt3Al6SuU8usVXP9MwLW6QihP8T7oqEJ0zncvca_3oVS_61Sp3dRYS1FngMUjGf9c0Akoq0OIWJlc8CD_wVzn3I7m8dtsvQBu2XJucMWWXCNvEtMvEH-DJ-2n2Ld4HYc_G8Q/s1600/a4.png" /></a></div>
<br />
After passing the map dimensions stage of the import the data resembles:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIWU30thZlQXBJBThOxRTPXnDtmT_SJRJUjaB-EdEwkbGbeT_ghXXhn7ba_atdbGcR81She4dSxnLAK6sLOjo1tQgjGHk-VsFz2UNKYw0Vih0oj9FBoIAlLisLV-BeN09PymEFYk0XNzs/s1600/a5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="356" data-original-width="245" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIWU30thZlQXBJBThOxRTPXnDtmT_SJRJUjaB-EdEwkbGbeT_ghXXhn7ba_atdbGcR81She4dSxnLAK6sLOjo1tQgjGHk-VsFz2UNKYw0Vih0oj9FBoIAlLisLV-BeN09PymEFYk0XNzs/s320/a5.png" width="220" /></a></div>
<br />
In the target entity column there are rows that are "NULL", this means they will be processed by member mappings.<br />
<br />
If I add a "like" mapping to process all source values and map them to "900"<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqS6UUQcby71Heg-YR_DKtcnkHJGkpyp0uRhaIK13-QICWyjzAe1JN7InJ7yMiED9SgSFkO2RiHoSZDBSna1l21CpHtqlO-096GQXm-wAnv1ERJ21IIZTXELpa7IlhWOnHN4gmGpW-74c/s1600/a6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="269" data-original-width="498" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqS6UUQcby71Heg-YR_DKtcnkHJGkpyp0uRhaIK13-QICWyjzAe1JN7InJ7yMiED9SgSFkO2RiHoSZDBSna1l21CpHtqlO-096GQXm-wAnv1ERJ21IIZTXELpa7IlhWOnHN4gmGpW-74c/s320/a6.png" width="320" /></a></div>
<br />
All the rows where the target was "NULL" are mapped. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBsH1JyqqFyODzYTBU2WQfGqGf6cnbQmxOIFo4fX0mTsVs6E-ThhniTMqrr8R6YUEfPelsKLzv2SMszPRAiazz42ghseWePbpMBsUGkLFIu3n4IwOKA2NZKaeb1Mu8a6aDAo2bPuTmqso/s1600/a7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="360" data-original-width="239" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBsH1JyqqFyODzYTBU2WQfGqGf6cnbQmxOIFo4fX0mTsVs6E-ThhniTMqrr8R6YUEfPelsKLzv2SMszPRAiazz42ghseWePbpMBsUGkLFIu3n4IwOKA2NZKaeb1Mu8a6aDAo2bPuTmqso/s320/a7.png" width="212" /></a></div>
<br />
So that concludes my initial first look at the new expression functionality. I hope you have found it useful, until next time…<br />
<div>
<br /></div>
</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-41649418747892660822018-11-04T07:01:00.000-08:002019-02-22T00:00:28.172-08:00EPM Cloud – Managing users with EPM Automate and REST API update<div dir="ltr" style="text-align: left;" trbidi="on">
In the <b>18.09</b> release of EPM Cloud new functionality was added to provide the ability to manage users and roles at an identity domain level with EPM Automate or REST API. I covered this functionality in detail in a previous post which you can read all about <a href="http://john-goodwin.blogspot.com/2018/09/epm-cloud-managing-users-with-epm.html"><b>here</b></a>.<br />
<br />
The EPM Automate commands added in that release were:<br />
<ul style="text-align: left;">
<li><b class="yellow">addusers – Creates new users in the identity domain based on the contents of a comma separated file.</b></li>
<li><b class="yellow">removeusers – Deletes identity domain accounts based on the contents of a comma separated file.</b></li>
<li><b class="yellow">assignroles – Assigns an identity domain role to all users that are contained in a comma separated file.</b></li>
<li><b class="yellow">unassignroles – Unassigns an identity domain role to all users that are contained in a comma separated file.</b></li>
</ul>
Since writing the post, I have been asked a few times if it is possible to add users to a group. Well, from the <b>18.11</b> release this has been made possible and there are two new commands available for EPM Automate.<br />
<ul style="text-align: left;">
<li><b class="yellow">adduserstogroup -- Adds a batch of users contained in a file to an existing group in Access Control. </b></li>
<li><b class="yellow">removeusersfromgroup - Removes a batch of users contained in a file from an available group in Access Control.</b></li>
</ul>
In order to use the commands, a file containing a list of users has to be uploaded to EPM Cloud. As you would expect, the functionality is also available through the REST API.<br />
<br />
In this post I will quickly go through the commands, first with EPM Automate and then with the REST API.<br />
<br />
Let us start with the “adduserstogroup” command.<br />
<br />
The syntax for the EPM Automate command is:<br />
<br />
<b class="yellow">epmautomate addUsersToGroup FILENAME GROUPNAME</b><br />
<br />
Where <b>FILENAME </b>is a file containing a list of users that has already been uploaded to EPM cloud. <b>GROUPNAME </b>is the group you want to assign the users in the file to.<br />
<br />
The users will need to exist in the identity domain, if they don’t you can add them with the “addusers” command. The users will also need to have an identity domain role applied, this can be achieved with the “assignroles” command.<br />
<br />
I would have preferred it if you could specify the user and the group they should be assigned to in the file instead of only being able to assign a single group at a time.<br />
<br />
I will go through an example to add the following user to a group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNWNb4JvglChCoDbNgxDl5JVC5ybvh6KEfxdHJzGBdnAwLxt8ybXe0hcGK0l5H-Uh1S0uN21KLNCy8V9qp-Xp5c1sxJyFn_GON6F6R_9oL1Nwixv4n_eOk_1d5kzxZGSEOwI1ootJpe_g/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="123" data-original-width="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNWNb4JvglChCoDbNgxDl5JVC5ybvh6KEfxdHJzGBdnAwLxt8ybXe0hcGK0l5H-Uh1S0uN21KLNCy8V9qp-Xp5c1sxJyFn_GON6F6R_9oL1Nwixv4n_eOk_1d5kzxZGSEOwI1ootJpe_g/s1600/image001.png" /></a></div>
<br />
The user has already been assigned an identity domain role. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidgzfhQSHly20CIxoj0HNrFN7JOz7ZwFOr3TY4FYTl1AWepO7BqL_mCsA2RGcTMft5oVW87X4FXnlqp7fxTBxOLG8ED7_rIU8RvCdqBvfki1Rfmd03sZh30S0a3HYXeMNAUdvyxbb-NjY/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="148" data-original-width="554" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidgzfhQSHly20CIxoj0HNrFN7JOz7ZwFOr3TY4FYTl1AWepO7BqL_mCsA2RGcTMft5oVW87X4FXnlqp7fxTBxOLG8ED7_rIU8RvCdqBvfki1Rfmd03sZh30S0a3HYXeMNAUdvyxbb-NjY/s1600/image002.png" /></a></div>
<br />
The group to assign the user to already exists in “Access Control”. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKpRdcoVDGRD4-YwGrUMmQ73gxLY1WnWA3kRPuJZrN26hybTrqh7ZJKGlbAhcEl_YowTnze_sWM-2UCDdEo9GchU5_Mz0bxmwvYwCKU6KgF_NFj1qODwf7BG1c0_-00KX3x4C0JSX9HPY/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="319" data-original-width="882" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKpRdcoVDGRD4-YwGrUMmQ73gxLY1WnWA3kRPuJZrN26hybTrqh7ZJKGlbAhcEl_YowTnze_sWM-2UCDdEo9GchU5_Mz0bxmwvYwCKU6KgF_NFj1qODwf7BG1c0_-00KX3x4C0JSX9HPY/s640/image003.png" width="640" /></a></div>
<br />
The group does not currently have any users assigned to it. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgopQNqeBk74QOrIs60Hy3TD5fo4ttTO4C9uTVDuFXQwTVJgXONx8kNcmhxYfrrziuUOA4RB_1_SynGvGDtT9JzhbmkoQGNHOw38UV15FbYSBzGKyK9mT0Nr6PS19bwCbOgGXVm7aMbMC8/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="243" data-original-width="768" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgopQNqeBk74QOrIs60Hy3TD5fo4ttTO4C9uTVDuFXQwTVJgXONx8kNcmhxYfrrziuUOA4RB_1_SynGvGDtT9JzhbmkoQGNHOw38UV15FbYSBzGKyK9mT0Nr6PS19bwCbOgGXVm7aMbMC8/s640/image004.png" width="640" /></a></div>
<br />
To be able to use the EPM Automate command, you need a file containing the list of users to assign to a group. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgcfeSGFEQP0EcopKwU6CLc-sjJtFr-3ouqYralJE-ksRl-uXC0sAt4olOTmfzhZxlDjWw3bQAU2YoJb5j-KEPY1g0vP-vZOIBMdFsFqNaMmYmyGyUyzrytxt6OGHy0med4gjbH4FfaQs/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="64" data-original-width="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgcfeSGFEQP0EcopKwU6CLc-sjJtFr-3ouqYralJE-ksRl-uXC0sAt4olOTmfzhZxlDjWw3bQAU2YoJb5j-KEPY1g0vP-vZOIBMdFsFqNaMmYmyGyUyzrytxt6OGHy0med4gjbH4FfaQs/s1600/image005.png" /></a></div>
<br />
Obviously you can include as many users as you like in the file.<br />
<br />
The file must have the header “User Login” otherwise you will generate an error when trying to use the command.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUOJS_jyBwg2ijofp50VBYbnY7mgI99t49eVvKTg3313V76MQUgCaFgFA335GQzwssab4hqb8OSOY65p2DUlEwAQj9aDRSlNybNttx9KYIxuVEyKCXSdAS8HDWiOoFq6DWX4ZnJGh_dX8/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="50" data-original-width="805" height="39" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUOJS_jyBwg2ijofp50VBYbnY7mgI99t49eVvKTg3313V76MQUgCaFgFA335GQzwssab4hqb8OSOY65p2DUlEwAQj9aDRSlNybNttx9KYIxuVEyKCXSdAS8HDWiOoFq6DWX4ZnJGh_dX8/s640/image006.png" width="640" /></a></div>
<br />
Once the file has been produced it has to be uploaded to EPM Cloud, this can be achieved with the EPM Automate “uploadfile” command. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFZn037GvC9F6U5YVf2YKIir7a1sIU0Dx4Ewi2wgJhhJBaBKroWCYHJh_XvVTuYYQr8M5mL-f-RKf7kHLrv7MTk_hV1h1iYWVXz6nRJqkS0G0crZlsEaz8FRcCPK8s7NKUyunGyoQ-bb8/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="195" data-original-width="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFZn037GvC9F6U5YVf2YKIir7a1sIU0Dx4Ewi2wgJhhJBaBKroWCYHJh_XvVTuYYQr8M5mL-f-RKf7kHLrv7MTk_hV1h1iYWVXz6nRJqkS0G0crZlsEaz8FRcCPK8s7NKUyunGyoQ-bb8/s1600/image007.png" /></a></div>
<br />
The file will then be available from the application “Inbox/Outbox Explorer”. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLwKJNAYkoj851t6T8Z2bk284RYWI4p-fpnf9ap23UT4UYheR3k913wFt1SqwB6b7MLkG0SoLK07W4lOG94sh5BIsNYo37nUZ3tYup1xShA0wMfTzS9ulgbSjpkoh5cUBpjOAp-RfrAgk/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="174" data-original-width="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLwKJNAYkoj851t6T8Z2bk284RYWI4p-fpnf9ap23UT4UYheR3k913wFt1SqwB6b7MLkG0SoLK07W4lOG94sh5BIsNYo37nUZ3tYup1xShA0wMfTzS9ulgbSjpkoh5cUBpjOAp-RfrAgk/s1600/image008.png" /></a></div>
<br />
Now the file exists, the “addusertogroup” command can be executed to assign the users in the file to the group specified in the command. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLXaoWUtZ-9oBAQmIp56aUQUoIg5XlqQG5n5_m4ADkK_lNY-Cdrd2MGR__iWAHNtyg2qeMCVWifx3-u1-zzE-6WTY__AHO9tu1Z-VhVRNx6vA0JPYCN7jJ6rJ10z-UyIlikAALoqWM_hU/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="203" data-original-width="394" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLXaoWUtZ-9oBAQmIp56aUQUoIg5XlqQG5n5_m4ADkK_lNY-Cdrd2MGR__iWAHNtyg2qeMCVWifx3-u1-zzE-6WTY__AHO9tu1Z-VhVRNx6vA0JPYCN7jJ6rJ10z-UyIlikAALoqWM_hU/s1600/image009.png" /></a></div>
<br />
The response from issuing the command will include how many users were processed, including the number of successful and failed group assignments.<br />
<br />
Checking the group in "Access Control" confirms the user has been successfully assigned.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1En9OvVSsGZv-ujhgoJT2zv4MUBX7DGe0oLdTJrX2NTr51sHvLM8jl_aluILkjTtDKlCUjGipDZNDiGywEm6ozRURWgzvA-e1WJm_uNitOYjKrcz0TskDnZ-YtooWhQC-k9hzENYmlVk/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="234" data-original-width="512" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1En9OvVSsGZv-ujhgoJT2zv4MUBX7DGe0oLdTJrX2NTr51sHvLM8jl_aluILkjTtDKlCUjGipDZNDiGywEm6ozRURWgzvA-e1WJm_uNitOYjKrcz0TskDnZ-YtooWhQC-k9hzENYmlVk/s1600/image010.png" /></a></div>
<br />
To remove users from a group is pretty much the same concept, only difference is this time it will be the command “removeusersfromgroup”. I am going to use the same user file and remove them from the same group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigRcfBkPUfJhfQSmTXQBBn7m-4sKCZAVCnTv6FHUUf6FeDo8sDPcUSOaBKLB_t5QHiYUo6WVwVvqcjsHiL3IiFUJBxU9CNGCKnmebsLX44cLV8vUrEh-FSYp_UmovIuEiFtydvMuc83js/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="210" data-original-width="433" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigRcfBkPUfJhfQSmTXQBBn7m-4sKCZAVCnTv6FHUUf6FeDo8sDPcUSOaBKLB_t5QHiYUo6WVwVvqcjsHiL3IiFUJBxU9CNGCKnmebsLX44cLV8vUrEh-FSYp_UmovIuEiFtydvMuc83js/s1600/image011.png" /></a></div>
<br />
The output will once again highlight how many users in the file were successfully or unsuccessfully removed from a group.<br />
<br />
As the command successfully removed the user they have been unassigned in "Access Control".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBj0Nvk_dXKoIrzu-VVIEk0HBgCVWxwQq02rhss6-2jhyphenhyphenjsOthFWMtWT9FoLbzwGrJrwoFgKxQfrvkvPl3fNweSejif-kLKbY1t9kNN1hHVCZMvIFBTFUaHqSCEVXTaMTBhPJJoNafwRE/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="237" data-original-width="497" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBj0Nvk_dXKoIrzu-VVIEk0HBgCVWxwQq02rhss6-2jhyphenhyphenjsOthFWMtWT9FoLbzwGrJrwoFgKxQfrvkvPl3fNweSejif-kLKbY1t9kNN1hHVCZMvIFBTFUaHqSCEVXTaMTBhPJJoNafwRE/s1600/image012.png" /></a></div>
<br />
If you try to run the command against a group that does not exist, then you will receive an error. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQZFhK-GvLBnu8yhlz_FY7j544HoS-nHG-y9y9mBjZWk1EibKyIBTcQW9uol2fNBB5TTAVYpVxV_IPKh5EETTO3xFAp_5zgl1jjPgSj-DboEgiUJ-n0JlGKlSA3S3EBEaWOb6XGJ1NKCE/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="140" data-original-width="871" height="102" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQZFhK-GvLBnu8yhlz_FY7j544HoS-nHG-y9y9mBjZWk1EibKyIBTcQW9uol2fNBB5TTAVYpVxV_IPKh5EETTO3xFAp_5zgl1jjPgSj-DboEgiUJ-n0JlGKlSA3S3EBEaWOb6XGJ1NKCE/s640/image013.png" width="640" /></a></div>
<br />
I did wonder whether the command would allow you to add a group to a group and not just users to a group. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKwPhUv3zeFQq0VDbQInI7s6JO0qv_O0Dv9zQGqAzz5cSPEXBc-oc4TvW71OCRdCdP7KgouJwzHIquBJikRl2lBF5h8Uj9yvfq1ZkVlDc6O9uftaCuEARyDCbxMhwGrhak5aEjy8-9INo/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="230" data-original-width="519" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKwPhUv3zeFQq0VDbQInI7s6JO0qv_O0Dv9zQGqAzz5cSPEXBc-oc4TvW71OCRdCdP7KgouJwzHIquBJikRl2lBF5h8Uj9yvfq1ZkVlDc6O9uftaCuEARyDCbxMhwGrhak5aEjy8-9INo/s1600/image014.png" /></a></div>
<br />
Considering the header in the file has to specify “User Login” I wasn’t holding out much hope, anyway I added a group to the file and uploaded. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipADbXz5ndlbxQO3MILt5CZPvOAL2IpKmPfxHaXtEH4FmiMifjBhjqWEpTsj15fGZ9WMghmRvBo2O5luSxuGHKDoxqrD0d3NWkunj4JL_9MiSiE2-Ehe1aMUQLlAoHGZd5mMGt8b2zMt4/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="66" data-original-width="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipADbXz5ndlbxQO3MILt5CZPvOAL2IpKmPfxHaXtEH4FmiMifjBhjqWEpTsj15fGZ9WMghmRvBo2O5luSxuGHKDoxqrD0d3NWkunj4JL_9MiSiE2-Ehe1aMUQLlAoHGZd5mMGt8b2zMt4/s1600/image015.png" /></a></div>
<br />
Running the command generated a failure. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAh2m4q15tXvEO1qKd814_H1bK7tvwpLxINYMLNgipJB6eurCaxM-I_D02FGgNTKw6qID3A0T0ukIVzHKoMt8rTMELnmWXF-BFrxXcHIwqSzuR3__ih-pMe5CoaLinabiUIc_novmTnmE/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="204" data-original-width="393" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAh2m4q15tXvEO1qKd814_H1bK7tvwpLxINYMLNgipJB6eurCaxM-I_D02FGgNTKw6qID3A0T0ukIVzHKoMt8rTMELnmWXF-BFrxXcHIwqSzuR3__ih-pMe5CoaLinabiUIc_novmTnmE/s1600/image016.png" /></a></div>
<br />
It would be good if the command included a parameter to define where to assign users or groups to a group. This would be preferable over another new command.<br />
<br />
Now on to achieving the same functionality with the REST API.<br />
<br />
I am not going to go through uploading a file using the REST API again as I covered that in my previous <a href="http://john-goodwin.blogspot.com/2018/09/epm-cloud-managing-users-with-epm.html"><b>post</b></a>.<br />
<br />
The REST API URL format for adding/removing users to/from groups is:<br />
<br />
<b class="yellow">https://<cloud_instance>/interop/rest/security/v1/groups</b> <br />
<br />
To assign a group to the users contained in a file a PUT method is required, the body of the request should include the filename, the group name and a job type of “ADD_USERS_TO_GROUP”.<br />
<br />
I said this in my previous post, but it is a shame that the user/group information could not have been included the body of the request instead of having to upload a file.<br />
<br />
Using a rest client an example to assign users to a group is:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAXKJy0_O_cxL0F5LqCeIIn-GoVoHsW37-luIH2dkRd96G37V9Ky5pezTroZrGjiE7HGJHGccyYTxMGUX1Zb0AjNYy-OU6d2QMkiYyp0kzEyEd8_3U5a_QsdMCvy-jN1C7sjAnqqfaOEA/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="96" data-original-width="663" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAXKJy0_O_cxL0F5LqCeIIn-GoVoHsW37-luIH2dkRd96G37V9Ky5pezTroZrGjiE7HGJHGccyYTxMGUX1Zb0AjNYy-OU6d2QMkiYyp0kzEyEd8_3U5a_QsdMCvy-jN1C7sjAnqqfaOEA/s1600/image017.png" /></a></div>
<br />
The response will contain job information for adding users to groups. A status of -1 means the job is in progress, a URL is included which then can be accessed to check the job status. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH6yWoIz5OnO8SLCTRMSCAa9F4TGfvCQ6l4_N02s1K4EoaDcJcw6QE_fO3nFGRBnO07a53vx2nh1sb4MtdfEknU9HjCWc1dP_3YdeYAdNGAGWfVI0DTKWAC6uPE4u24Uaf8Hs9J3vbjfA/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="451" data-original-width="712" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH6yWoIz5OnO8SLCTRMSCAa9F4TGfvCQ6l4_N02s1K4EoaDcJcw6QE_fO3nFGRBnO07a53vx2nh1sb4MtdfEknU9HjCWc1dP_3YdeYAdNGAGWfVI0DTKWAC6uPE4u24Uaf8Hs9J3vbjfA/s1600/image018.png" /></a></div>
<br />
Using the URL from the response, a GET request can be made to keep checking the job status until it completes. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEwo7RKSkyXxo5f1wD6B95IaSGah6RHQrFT08edKRQQwHQQOqs5D79zIDUSMY8MraM3Ec1-snU0aSsmXzjU63h16g_O0TFHjat0FR0zHcrk-w2ArZBJVw4psbrVpyJYjFTMU2-ZGe56hA/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="131" data-original-width="569" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEwo7RKSkyXxo5f1wD6B95IaSGah6RHQrFT08edKRQQwHQQOqs5D79zIDUSMY8MraM3Ec1-snU0aSsmXzjU63h16g_O0TFHjat0FR0zHcrk-w2ArZBJVw4psbrVpyJYjFTMU2-ZGe56hA/s1600/image019.png" /></a></div>
<br />
A status of 0 means the operation was successful, just as with EPM Automate details are included to inform how many assignments were processed and how many succeeded or failed.<br />
<br />
As the details show the process was successful, the user in the file has been assigned to the group.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzPZGCZNl5WnvkjmAw5U6ELKJpMO3hTcDGBeRohn8Zh6dnBeJcgiYqNonswdzQrdCApH5AyWMK4JM-QUigzbtsjsFbmf1il6CT2gapGT1UZtzQyqeaKmfSRmf014CNlFrCfk49QWeL6lA/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="228" data-original-width="511" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzPZGCZNl5WnvkjmAw5U6ELKJpMO3hTcDGBeRohn8Zh6dnBeJcgiYqNonswdzQrdCApH5AyWMK4JM-QUigzbtsjsFbmf1il6CT2gapGT1UZtzQyqeaKmfSRmf014CNlFrCfk49QWeL6lA/s1600/image020.png" /></a></div>
<br />
To remove users from a group is very similar, the only difference is the “jobtype” parameter which should be “REMOVE_USERS_FROM_GROUP”. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDSw2W25M0aUZ_VHerXDH9YxOLu0xYLja82DN4o7V9t7pLQ4zITmM_LKWksW6OfiW_RtKhuF6COo2XvesgwgGcuDEY0QLGFgfe2bY3dbdgqSKDQNmAUiQb5rCB8kXNrTen0NVUCIJxuLM/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="100" data-original-width="703" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDSw2W25M0aUZ_VHerXDH9YxOLu0xYLja82DN4o7V9t7pLQ4zITmM_LKWksW6OfiW_RtKhuF6COo2XvesgwgGcuDEY0QLGFgfe2bY3dbdgqSKDQNmAUiQb5rCB8kXNrTen0NVUCIJxuLM/s1600/image021.png" /></a></div>
<br />
The response contains the same information as when using the resource to add users to a group. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL0bndyiwS028sc0_jqA6HbE_PBxDrE-mV34qTYc4qvfPgr9Ex93Bx0XuJoenatfrOnPB8xKlxW0xqMFGnqSxs97xz2W-xTV-IeJYU_psrdenTAti06tGx93RQ_dfyXs1_OGaRCvV0SVA/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="451" data-original-width="705" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL0bndyiwS028sc0_jqA6HbE_PBxDrE-mV34qTYc4qvfPgr9Ex93Bx0XuJoenatfrOnPB8xKlxW0xqMFGnqSxs97xz2W-xTV-IeJYU_psrdenTAti06tGx93RQ_dfyXs1_OGaRCvV0SVA/s1600/image022.png" /></a></div>
<br />
The status can be checked until the job completes. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5UdQA_42R_c98Z8Ko-dIB_PYPGrl8jJOIaiqDByQmtgL9JkvGhq4OffnYBw_cLKUtFXwf-RvMou8SQmf_9BeQd-DzzOp790aGHu3X7zPum7gLRIydx6QDm_ZsUycGVjedkqRMJAMHFm0/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="131" data-original-width="569" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5UdQA_42R_c98Z8Ko-dIB_PYPGrl8jJOIaiqDByQmtgL9JkvGhq4OffnYBw_cLKUtFXwf-RvMou8SQmf_9BeQd-DzzOp790aGHu3X7zPum7gLRIydx6QDm_ZsUycGVjedkqRMJAMHFm0/s1600/image023.png" /></a></div>
<br />
The user has now been removed the group. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqK5Jm7f-pq5EaPXk23VNg3-e17ks_vi42_5_QLM4UKILHUqFtScc2Ld4nhyxSRGiYyYI0PmWCDnJJ2qJkTZVydpIajLB0yJF6W75Y8uAYvV9BcAu2Xdxke766XR_VKqOHyn_VS6oIYXM/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="247" data-original-width="506" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqK5Jm7f-pq5EaPXk23VNg3-e17ks_vi42_5_QLM4UKILHUqFtScc2Ld4nhyxSRGiYyYI0PmWCDnJJ2qJkTZVydpIajLB0yJF6W75Y8uAYvV9BcAu2Xdxke766XR_VKqOHyn_VS6oIYXM/s1600/image024.png" /></a></div>
<br />
To automate the process with the REST API and scripting you could put together something like: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCBSCKHF2HWBzdEIEz5YBYGqkNbXe1hWswy-F0kJoG3W-E-nHdBoxUSPZ91MsOBGzdhgU1QDWZz4NkhKDAupnNqkf0a0ysUUejc7r60RHkazfAOCM_zjCgDsRxw9bV2nSNVizvR9aJrTM/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="510" data-original-width="869" height="375" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCBSCKHF2HWBzdEIEz5YBYGqkNbXe1hWswy-F0kJoG3W-E-nHdBoxUSPZ91MsOBGzdhgU1QDWZz4NkhKDAupnNqkf0a0ysUUejc7r60RHkazfAOCM_zjCgDsRxw9bV2nSNVizvR9aJrTM/s640/image025.png" width="640" /></a></div>
<br />
The above script first tries to delete any existing file in EPM Cloud with the same name as the one that will be uploaded, once this is done, a file containing the list of users to assign a group to is uploaded.<br />
<br />
The file will then be available from the applications “Inbox/Outbox Explorer”.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEice9q5U2Ewcc6jEwtg1Yxzed1lGizAOlZdno6CfUv0cx2dHfsg4bbcDUtJ2re1egqkYlNYOd10aLef3ZXpNMCwCAHpJ_aBsZF6P6_hcYtMHurTXhgUurVMZs4Cf2X2i4qzSEVY1RLCd9o/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="180" data-original-width="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEice9q5U2Ewcc6jEwtg1Yxzed1lGizAOlZdno6CfUv0cx2dHfsg4bbcDUtJ2re1egqkYlNYOd10aLef3ZXpNMCwCAHpJ_aBsZF6P6_hcYtMHurTXhgUurVMZs4Cf2X2i4qzSEVY1RLCd9o/s1600/image026.png" /></a></div>
<br />
Next, the REST resource to add users to a group is called. The URL to check the job status is then extracted from the response. The job status is checked until it completes. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlannn-D4M7WyUe1pxMLpbaCSJ3uia9sphNAbRRK-CC_oZUvNCd8CRAb9-QBOg6kuhWlYmfmtR2k_M2qKyRa6-QCh5YtyI8jnDvtWmMif7AOlke6rj2Wg4qBs963VscXDDyNVCAT6IUXw/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="744" data-original-width="667" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlannn-D4M7WyUe1pxMLpbaCSJ3uia9sphNAbRRK-CC_oZUvNCd8CRAb9-QBOg6kuhWlYmfmtR2k_M2qKyRa6-QCh5YtyI8jnDvtWmMif7AOlke6rj2Wg4qBs963VscXDDyNVCAT6IUXw/s1600/image027.png" /></a></div>
<br />
The user contained in the uploaded file has been successfully assigned to the specified group. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD2aulM3upg9cJqyVhUqyj3tV_C6BCgyHAZZVUl8rY_NyPmTLvGvf-BOVHVeUbS4f4a6jMMQoP5Y3h7_aZZ0GlP9W3ugLnBqZCfnUMsKVMVj7FoEkSkLeT4h1K499lgk42u-YspC92FGY/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="230" data-original-width="505" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD2aulM3upg9cJqyVhUqyj3tV_C6BCgyHAZZVUl8rY_NyPmTLvGvf-BOVHVeUbS4f4a6jMMQoP5Y3h7_aZZ0GlP9W3ugLnBqZCfnUMsKVMVj7FoEkSkLeT4h1K499lgk42u-YspC92FGY/s1600/image028.png" /></a></div>
<br />
To remove users from a group the same script can be reused with the job type changed to “REMOVE_USERS_FROM_GROUP”.<br />
<br />
I am sure I am going to get asked if it is possible to create a group with EPM Automate or the REST API, unfortunately there is no direct command to do this yet.</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0tag:blogger.com,1999:blog-6575283218005807475.post-46066016391932533192018-10-21T11:12:00.000-07:002018-10-21T11:16:18.051-07:00Automating data flows between EPM Cloud and OAC – Part 2<div dir="ltr" style="text-align: left;" trbidi="on">
In the first <a href="http://john-goodwin.blogspot.com/2018/09/automating-data-flows-between-epm-cloud.html"><b>part</b></a>, I went through an example of extracting forecast data from PBCS using Data Management, downloading the data file and then loading this to an OAC Essbase database. All the steps in the example were manual, so in this post I am going to add some automation using REST APIs and scripting.<br />
<br />
I would recommend reading through the first post if you have not already, as I will be referring to it and this post will probably not make much sense unless you have read it.<br />
<br />
As always, I am going to stress this is not the only way to go about automating the process and is only to provide an idea as to what can be achieved. <br />
<br />
I will provide examples of the REST API using a free REST client and the scripting will be mainly with PowerShell, though you can achieve the same results with pretty much any scripting language. There will also be a little bit of Groovy thrown into the mix for those that are running a user managed version of OAC vs autonomous.<br />
<br />
A summary of the process that will be automated is:
<br />
<ul style="text-align: left;">
<li><b class="yellow">Extract Forecast year substitution variable from OAC Essbase.</b></li>
<li><b class="yellow">Transform variable into the start/end period for an EPM Cloud Data Management data load rule.</b></li>
<li><b class="yellow">Run a Data Management data load rule to extract planning forecast data, map and then generate a file.</b></li>
<li><b class="yellow">Download data file from Data Management (Groovy example, downloads directly from DM to OAC).</b></li>
<li><b class="yellow">Run an Essbase Load rule to load data from file.</b></li>
</ul>
It is possible to run the whole process directly from OAC using Groovy, but I am trying to provide options for autonomous OAC as well. Also, I didn’t really want to show one big Groovy script because that is not very interesting for a blog post.<br />
<br />
Before I start out, it is worth pointing out that I going to be using the same forecast year sub var, Data Management and Essbase data load rule that I covered in the last post.<br />
<br />
For the first part of the process, I want to extract the Essbase forecast sub var. This has been created at application level.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ1ue5Gx8WreDkBrVk-AvbHMOXVmirVvHMBZFJU59ZT6JogboRPWB4l9XqULsfB_xvzynV_BLBv8ZNEwzagBBsxQFtFPFcqoXKwLGg45WOMwjWNTJ0A0HVhiQeCWSwpYULqWF-YtYz-_g/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="218" data-original-width="506" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJ1ue5Gx8WreDkBrVk-AvbHMOXVmirVvHMBZFJU59ZT6JogboRPWB4l9XqULsfB_xvzynV_BLBv8ZNEwzagBBsxQFtFPFcqoXKwLGg45WOMwjWNTJ0A0HVhiQeCWSwpYULqWF-YtYz-_g/s1600/image001.png" /></a></div>
<br />
To extract using the REST API, a GET request is made to the following URL format:<br />
<br />
<b class="yellow">https://<oac_instance>/essbase/rest/v1/applications/<app_name>/variables/<sub_var_name></b><br />
<br />
In my case this would equate to:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUy8qtESjp9FxMt0VEmmqVEur-_hLMXrbaXYD4MKArnhVh_n5PVskcS3Z9jwjmwfaYcztcC10kgaaj4zPwM0LGErH5no3ENQjAJ_WY5IlTQYRv6iflSGtSnFUUvuIanrcLzzaRZH4MQgU/s1600/image002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="35" data-original-width="588" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUy8qtESjp9FxMt0VEmmqVEur-_hLMXrbaXYD4MKArnhVh_n5PVskcS3Z9jwjmwfaYcztcC10kgaaj4zPwM0LGErH5no3ENQjAJ_WY5IlTQYRv6iflSGtSnFUUvuIanrcLzzaRZH4MQgU/s1600/image002.png" /></a></div>
<br />
The JSON response includes the name and value of the sub var.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinsNJQVeW9zsSwNLXwH5g01aWY2XS47Fm7iZGCeB5LcLuAlslqhtHg5PgSkBZpHPWebH6GJTYvtDzSC7S3qC1Le_Oe-ce7fO6d0j-FOgGP77fw0zsGg42I8_8pJl87QimY141owhMKpEM/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="94" data-original-width="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinsNJQVeW9zsSwNLXwH5g01aWY2XS47Fm7iZGCeB5LcLuAlslqhtHg5PgSkBZpHPWebH6GJTYvtDzSC7S3qC1Le_Oe-ce7fO6d0j-FOgGP77fw0zsGg42I8_8pJl87QimY141owhMKpEM/s1600/image003.png" /></a></div>
<br />
For Data Management I need to convert this to the start and end period.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE2agPTxFcD95YULjLHI1UjtLe-06-T_Vj9qURGrTXs7g_BdY8Pl0VlMIn2tO6gMzu4COltcoGSIRBRDfs5DKpZitdje-zAi1NA84WoLRg8vJQ9sRDbKgsah77p5hYMn9IfuWfH9pYzZQ/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="60" data-original-width="144" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE2agPTxFcD95YULjLHI1UjtLe-06-T_Vj9qURGrTXs7g_BdY8Pl0VlMIn2tO6gMzu4COltcoGSIRBRDfs5DKpZitdje-zAi1NA84WoLRg8vJQ9sRDbKgsah77p5hYMn9IfuWfH9pYzZQ/s1600/image004.png" /></a></div>
<br />
This is where a script comes into play and can automate the process:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzy-5KAtxWLbUPhIbtgwGSqpwZYh0EZiBVOfZn_H6mjntSzxoduCW-pSBz3cl9o74DMcw8BjEES46IDk8zb4cSTKjQrb4rp_IzV5XDrU64dLaL95BMzRMPH6uNJlF96uL89c702Vu0k30/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="567" data-original-width="659" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzy-5KAtxWLbUPhIbtgwGSqpwZYh0EZiBVOfZn_H6mjntSzxoduCW-pSBz3cl9o74DMcw8BjEES46IDk8zb4cSTKjQrb4rp_IzV5XDrU64dLaL95BMzRMPH6uNJlF96uL89c702Vu0k30/s1600/image005.png" /></a></div>
<br />
Now that the variable has been extracted and transformed, the Data Management load rule can be executed.<br />
<br />
The idea is to execute the rule with the following values:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkz17hfq_gQCkLYxOH_teskp01DaTPizXBZ53aSDqu6ny-tppKBaT7nazm7zTKl2ts-MKiKr-ypoR9krpvTJl5lyOnzUem6UiEcvPkNh58UgqZwRI6pSGUhEK0_G3Gw7FYO5wph8FcuBM/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="318" data-original-width="194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkz17hfq_gQCkLYxOH_teskp01DaTPizXBZ53aSDqu6ny-tppKBaT7nazm7zTKl2ts-MKiKr-ypoR9krpvTJl5lyOnzUem6UiEcvPkNh58UgqZwRI6pSGUhEK0_G3Gw7FYO5wph8FcuBM/s1600/image006.png" /></a></div>
<br />
I have covered this in the past but to run a rule using the REST API, a POST method is required, and the body of the request should include the above values in JSON format.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYJg2KJwObYkIs_A2bB_MeCtJcBN1n2LGyFSIi_0feyFeaMDU1bxe9Qu-HrFg5-w59MKI6O9s9wZJZAWN3FWz2SITuU8HAFUZBkQ2JM8hTiCS-CDXdj3Dp4JxzW5g3yvZO7nMnub0FKdU/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="217" data-original-width="377" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYJg2KJwObYkIs_A2bB_MeCtJcBN1n2LGyFSIi_0feyFeaMDU1bxe9Qu-HrFg5-w59MKI6O9s9wZJZAWN3FWz2SITuU8HAFUZBkQ2JM8hTiCS-CDXdj3Dp4JxzW5g3yvZO7nMnub0FKdU/s1600/image007.png" /></a></div>
<br />
The response includes the job ID (process ID), current job status and a URL to keep checking the status.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIdMGvKQjRSGaikO3_0W8aBKoTsTNlNYOo5lBfbCWLMuntCggsfMdLmhWKk9mksMTouZE6YlVDN8RtLfNdzYWuEeV-q0LwGG5cF1ufqCdcGBsUXNG4mk0OvByG97BytblT48HBIqhIFTM/s1600/image008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="292" data-original-width="533" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIdMGvKQjRSGaikO3_0W8aBKoTsTNlNYOo5lBfbCWLMuntCggsfMdLmhWKk9mksMTouZE6YlVDN8RtLfNdzYWuEeV-q0LwGG5cF1ufqCdcGBsUXNG4mk0OvByG97BytblT48HBIqhIFTM/s1600/image008.png" /></a></div>
<br />
The job status can then be checked until it completes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG01ki8-DjSLhxs1Hun8V4SDXr8KxqPP_kDdP7nlvMnekFGU4ueyWokon1JiqgqYAxL0U1J_f7kk0-VwgqFJ4FPwTDafm77a6-VK9vFz56DbfTFsqC0CWuU1mJGi2_B1WrFP6miQlkZ5E/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="230" data-original-width="473" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG01ki8-DjSLhxs1Hun8V4SDXr8KxqPP_kDdP7nlvMnekFGU4ueyWokon1JiqgqYAxL0U1J_f7kk0-VwgqFJ4FPwTDafm77a6-VK9vFz56DbfTFsqC0CWuU1mJGi2_B1WrFP6miQlkZ5E/s1600/image009.png" /></a></div>
<br />
Time to convert this into a script which will execute the rule and store the response.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS03Kz0fGawRFTdtRv81QB8zEvtkPoHr6O8c6Dkcu5LKaxNPBM-9TfEqkUQKU-dJRksPd4gEAM2DxDfoQQWicue8jx90ctJ778MDjU77X8TBINQBkX_a49veFuUmV3URt8Ws-G7D9n1yU/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="648" data-original-width="679" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS03Kz0fGawRFTdtRv81QB8zEvtkPoHr6O8c6Dkcu5LKaxNPBM-9TfEqkUQKU-dJRksPd4gEAM2DxDfoQQWicue8jx90ctJ778MDjU77X8TBINQBkX_a49veFuUmV3URt8Ws-G7D9n1yU/s1600/image010.png" /></a></div>
<br />
The rule has been executed and the response stored, now it is time to keep checking the status until it completes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGFEGHWVNOu4A0qeq0s6Hsm8YKHUreOA69pDzjS0C_2F1kGXgSwZ6cLjYdpnLvVO_RyBT2bk0yXILN_-JIb42JxsbFmplY-sHXlUKt6vSK1ccwFk2H9P2VBXfRaRphl5TEYZpE2iO1ohM/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="775" data-original-width="621" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGFEGHWVNOu4A0qeq0s6Hsm8YKHUreOA69pDzjS0C_2F1kGXgSwZ6cLjYdpnLvVO_RyBT2bk0yXILN_-JIb42JxsbFmplY-sHXlUKt6vSK1ccwFk2H9P2VBXfRaRphl5TEYZpE2iO1ohM/s1600/image011.png" /></a></div>
<br />
In the Data Management target options of the rule, a static filename has been set.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1C73EbwwUfq3v9ZpDBsuDD_LTMoS5uO8Fjau0jQvSR51_baOU_l76ab-SnNLvL8AKls51Jj_GetWDhApQRtEdnboWih44p2w0UVfzZB3R4VpY3NlAEL5LXGQQswOm9fYVBMDsFKDZ93g/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="156" data-original-width="417" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1C73EbwwUfq3v9ZpDBsuDD_LTMoS5uO8Fjau0jQvSR51_baOU_l76ab-SnNLvL8AKls51Jj_GetWDhApQRtEdnboWih44p2w0UVfzZB3R4VpY3NlAEL5LXGQQswOm9fYVBMDsFKDZ93g/s1600/image012.png" /></a></div>
<br />
This means the file is available for download using the defined filename and from a location accessible using the REST API.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJU21v3dgHEneWMpfjh00EJAkB__ToYpd3Ti-yqkUyQSs0XRiYPqzsjwi0WfofDCZnCbItlVBJkxwsR1G5hc9IcNLSx4RUUKF1zi2tcI6bGodKl3I_EfWwJmXoNaaUrYTuCfoGn1niOPo/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="174" data-original-width="253" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJU21v3dgHEneWMpfjh00EJAkB__ToYpd3Ti-yqkUyQSs0XRiYPqzsjwi0WfofDCZnCbItlVBJkxwsR1G5hc9IcNLSx4RUUKF1zi2tcI6bGodKl3I_EfWwJmXoNaaUrYTuCfoGn1niOPo/s1600/image013.png" /></a></div>
<br />
A GET request can be made to the following URL format which includes the filename.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVch5Ad0hhfGcleAVnpS5Mvdv4_gd-vfoTnh6w5TPGGu993oDs0kHvnEXXksv-cORWiGnmtOPWZloha5ubp0nvIksXFRm4KwWc_OldTMoF-6JT4CK_lCEqRZHuNJFpH1SzszMWGP7a7Kw/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="185" data-original-width="731" height="161" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVch5Ad0hhfGcleAVnpS5Mvdv4_gd-vfoTnh6w5TPGGu993oDs0kHvnEXXksv-cORWiGnmtOPWZloha5ubp0nvIksXFRm4KwWc_OldTMoF-6JT4CK_lCEqRZHuNJFpH1SzszMWGP7a7Kw/s640/image014.png" width="640" /></a></div>
<br />
This is where my example splits: if you want to use a Groovy script and download directly to the OAC instance, this could be an option available to user managed OAC instances.<br />
<br />
Alternatively, for an autonomous instance which I will cover first, you can download the file to a staging location, an example to do this could be:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTFjLHXRN30uKGW5R_rOCL3YB3P1EWaybaY0y9msqFbyYAULn_ydvGOBJC16bSb48S2yIQ1WSSofiexswuGHYt295yIz22Wjlcv1gqQOk4qxyI8pl9nh2J4iY_ewJlgjxhJi2r6ERnpG0/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="277" data-original-width="761" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTFjLHXRN30uKGW5R_rOCL3YB3P1EWaybaY0y9msqFbyYAULn_ydvGOBJC16bSb48S2yIQ1WSSofiexswuGHYt295yIz22Wjlcv1gqQOk4qxyI8pl9nh2J4iY_ewJlgjxhJi2r6ERnpG0/s640/image015.png" width="640" /></a></div>
<br />
The file will be available to load to OAC.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBojIQsPJ0rU1u4SvGHhTe25kcF3dXQeuzIrQKlsLVXBe3cOUkRE1v0mciogExcwlJ2T39XqwJY7q0gua1Qv5QwGFkmTRl-uBCV8iGHGDmluKI0gFidiVYqq92kFNYyJ9CdT8OkpwddCQ/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="84" data-original-width="155" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBojIQsPJ0rU1u4SvGHhTe25kcF3dXQeuzIrQKlsLVXBe3cOUkRE1v0mciogExcwlJ2T39XqwJY7q0gua1Qv5QwGFkmTRl-uBCV8iGHGDmluKI0gFidiVYqq92kFNYyJ9CdT8OkpwddCQ/s1600/image016.png" /></a></div>
<br />
There are a couple of options available, you could upload the file to the OAC instance and then run a data load rule or use the data load stream option.<br />
<br />
The streaming option allows you to run an Essbase data load rule but stream in the data, removing the requirement to upload the file first.<br />
<br />
To stream data using the REST API you must use to a POST method to indicate you want to start a stream data load. The body of the post should include the Essbase load rule name.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7au871M0MDWllEl3_B-GVyJwkAEsQoSQdK1MOgH5FRjQYH3GrprE5krkCPTjC3mEecjTJ7zZVfT26Aysvlf970QekT6luPSVH6GO5gj2rBblmHmOAUyln7tI-P2WwFOFT5AWcDuKMDqE/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="137" data-original-width="572" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7au871M0MDWllEl3_B-GVyJwkAEsQoSQdK1MOgH5FRjQYH3GrprE5krkCPTjC3mEecjTJ7zZVfT26Aysvlf970QekT6luPSVH6GO5gj2rBblmHmOAUyln7tI-P2WwFOFT5AWcDuKMDqE/s1600/image017.png" /></a></div>
<br />
The response will include a URL to post the data to.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqTMenTd2Vjv_uCk4acHh69iRwq4n0QUT3qY085A5TtYPEyl_eiHZYNIu04JLbr02SC4ybFNc0jPAMAQGz39wG8Win6ElHyJJHTbS6_ltBlZZ0TZsdIfgzmBGdZCkAgbcOejz4uwZdk3o/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="197" data-original-width="594" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqTMenTd2Vjv_uCk4acHh69iRwq4n0QUT3qY085A5TtYPEyl_eiHZYNIu04JLbr02SC4ybFNc0jPAMAQGz39wG8Win6ElHyJJHTbS6_ltBlZZ0TZsdIfgzmBGdZCkAgbcOejz4uwZdk3o/s1600/image018.png" /></a></div>
<br />
The data can then be streamed using the returned URL.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim8v7nv4HtVzIplBxIGexx2P91kbQs2KW9-4BUScErPn38UnTecvvLluxZNkwkGruAWBrna-PZDUao_k8os-JDcutas01KNoBQNUdl37C37R466SyT3gKBvKvexZP0dX7UPcfypgRpCaw/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="198" data-original-width="652" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEim8v7nv4HtVzIplBxIGexx2P91kbQs2KW9-4BUScErPn38UnTecvvLluxZNkwkGruAWBrna-PZDUao_k8os-JDcutas01KNoBQNUdl37C37R466SyT3gKBvKvexZP0dX7UPcfypgRpCaw/s1600/image019.png" /></a></div>
<br />
The response will include URLs to either stream more data or end the data load rule.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbOILl9jx8TAO6eOItMWvBxYXmIQUxoJ3dIsLB6E4qS4eBvQJf_32Efe87_CuiBt4H0hyWBYYnjtmXgHdDeKrIweTSYtLhtaGUfmZAWb4lJlOfo93Ka2bpKQXDYwEDU4i6VZNJbRrSzEg/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="276" data-original-width="594" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbOILl9jx8TAO6eOItMWvBxYXmIQUxoJ3dIsLB6E4qS4eBvQJf_32Efe87_CuiBt4H0hyWBYYnjtmXgHdDeKrIweTSYtLhtaGUfmZAWb4lJlOfo93Ka2bpKQXDYwEDU4i6VZNJbRrSzEg/s1600/image020.png" /></a></div>
<br />
To end the data load, a DELETE method is required to the same URL.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY7lmx_pBihyphenhyphenjrDfzTEj54UVWY3kjrkcXMCLhPj-td38M69GbHty9RccZGSKYbaEurvyOUlR1S-bLR0Xm-KrK3uSyjNxb0YFZ_XB8gBwrOa613e6FuIVEz8CnCkXLI-qsfbu5FiVvLQkA/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="130" data-original-width="658" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY7lmx_pBihyphenhyphenjrDfzTEj54UVWY3kjrkcXMCLhPj-td38M69GbHty9RccZGSKYbaEurvyOUlR1S-bLR0Xm-KrK3uSyjNxb0YFZ_XB8gBwrOa613e6FuIVEz8CnCkXLI-qsfbu5FiVvLQkA/s1600/image021.png" /></a></div>
<br />
If there were no errors, a successful message should be returned.<br />
<br />
If I update the data to include an invalid member and run the data load again.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTMZTeKpbjah0N4xzS7Co-FGQSyNh8MJaA3sBNWhfTHz-XR41Dj-A2cmxPAnDVRPVwrLjvcnxhrEqBCaTRn2PI3yPs5PG_BK29jIhN_DbIbS2wnGef_F15Y83iPIRTCPAqKmgeW2fTS7U/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="35" data-original-width="313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTMZTeKpbjah0N4xzS7Co-FGQSyNh8MJaA3sBNWhfTHz-XR41Dj-A2cmxPAnDVRPVwrLjvcnxhrEqBCaTRn2PI3yPs5PG_BK29jIhN_DbIbS2wnGef_F15Y83iPIRTCPAqKmgeW2fTS7U/s1600/image022.png" /></a></div>
<br />
The response will indicate there were records rejected and the filename containing the errors.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpIV9S-9HSgJXFq70nGWoIHiB64N0qzMbyWxNL3k1_RRNjNzellLqLRxqLKeFNfUw1u6mkAqwTY25Fb16UnO0VjTyO1t0nBINnQHChmqo49laze8hiYFJDcXc3W7jnmdTxUUz6C3pWeCQ/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="54" data-original-width="723" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpIV9S-9HSgJXFq70nGWoIHiB64N0qzMbyWxNL3k1_RRNjNzellLqLRxqLKeFNfUw1u6mkAqwTY25Fb16UnO0VjTyO1t0nBINnQHChmqo49laze8hiYFJDcXc3W7jnmdTxUUz6C3pWeCQ/s1600/image023.png" /></a></div>
<br />
This file will be available in the Essbase database directory.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSreaZCepcU3ma-LuaP-550fpPQDPn8SF4SA2KHCu_slfzPVzr-lWGwYqKfTtf6bUKUTO8nz72p5w45n6YM8HqjTSqtDOw_xfXyBoURGLJhGXfPdDohf3HR4DshuHrXxVZxzOZA7eadtY/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="341" data-original-width="410" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSreaZCepcU3ma-LuaP-550fpPQDPn8SF4SA2KHCu_slfzPVzr-lWGwYqKfTtf6bUKUTO8nz72p5w45n6YM8HqjTSqtDOw_xfXyBoURGLJhGXfPdDohf3HR4DshuHrXxVZxzOZA7eadtY/s1600/image024.png" /></a></div>
<br />
An example of the error file is:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB9i9T2vpnVKFrcoDgC8Bo7LkNN9vGyNGygJb2tyj1Q5iimfYfbzJ4EeC6c5wsXtvU9Nipq0fu2CJyRqLDywuFdyqA5pZ1KmksK0am8hxPB9E1PdJbGCn3otbPOop2CHmVf-qW_ckJevY/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="66" data-original-width="608" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB9i9T2vpnVKFrcoDgC8Bo7LkNN9vGyNGygJb2tyj1Q5iimfYfbzJ4EeC6c5wsXtvU9Nipq0fu2CJyRqLDywuFdyqA5pZ1KmksK0am8hxPB9E1PdJbGCn3otbPOop2CHmVf-qW_ckJevY/s1600/image025.png" /></a></div>
<br />
This file could be downloaded using the REST API if required.<br />
<br />
An example of automating the stream data load method using a script could be:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9Je0MHYzVoLHIgtVeafVBo9vKgNl7wL2mFkJ5RnGeL7e3KuWU-WGFmqO88X1kTmcI_Ci2ELU-8-wVMcnfZ6MU1zkDkLSlOuLnRrMZRfX8PL2R2-RT6hu93ut2DapFEypZfzahuKyNtyo/s1600/image026.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="496" data-original-width="658" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9Je0MHYzVoLHIgtVeafVBo9vKgNl7wL2mFkJ5RnGeL7e3KuWU-WGFmqO88X1kTmcI_Ci2ELU-8-wVMcnfZ6MU1zkDkLSlOuLnRrMZRfX8PL2R2-RT6hu93ut2DapFEypZfzahuKyNtyo/s1600/image026.png" /></a></div>
<br />
I did have some fun trying to get the script to work as it needs to keep a web session active between the start and end of the streaming. I had to use “Invoke-WebRequest” where I generated a session variable and then used this in subsequent REST calls.<br />
<br />
If you are interested in what is happening behind the scenes with the data load streaming method, here is an excerpt from the Essbase application log.<br />
<b class="yellow"><br />[DBNAME: GL] Received Command [StreamDataload] from user [john.goodwin]<br />[DBNAME: GL] Reading Rules From Rule Object For Database [GL]<br />[DBNAME: GL] Parallel dataload enabled: [2] block prepare threads, [1] block write threads.<br />[DBNAME: GL] Data Load Updated [21739] cells<br />[DBNAME: GL] [EXEC_TIME: 0.82] Data load completed successfully<br />Clear Active on User [john.goodwin] Instance [1]</b><br />
<br />
If you don’t want to go down the streaming route, you could upload the file to the Essbase database directory using the REST API.<br />
<br />
A PUT method is required to the following URL format which includes the name of the file and if you want to overwrite if it already exists:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl5Xj0-AvPN4E_XUJVw-tDBWGWNc36_PG85Wwy9WdOE8YcYi6ut4QOJfCSId6MTSUQLiCVWsA9uLzr56KFhsTm5UKJzQ-98IUn5wiBQg_DR_YqOOfpXKYY6SuYbzKzc8YTCZ2Y27YW9Cs/s1600/image027.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="199" data-original-width="683" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl5Xj0-AvPN4E_XUJVw-tDBWGWNc36_PG85Wwy9WdOE8YcYi6ut4QOJfCSId6MTSUQLiCVWsA9uLzr56KFhsTm5UKJzQ-98IUn5wiBQg_DR_YqOOfpXKYY6SuYbzKzc8YTCZ2Y27YW9Cs/s1600/image027.png" /></a></div>
<br />
This can simply be converted into a script.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhugd1sGNzDFrZn4pUVD8RBikRarIIefPWsTR-z01fSsqPyggfexGVxkQxxONoh9_2zR5c11T0z8E-01we9yW_26IKDlRlT5y-tY2SMwrG-yKOH46y7J8Do_hl07fcxsWw19KhhBQGof0Y/s1600/image028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="112" data-original-width="782" height="91" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhugd1sGNzDFrZn4pUVD8RBikRarIIefPWsTR-z01fSsqPyggfexGVxkQxxONoh9_2zR5c11T0z8E-01we9yW_26IKDlRlT5y-tY2SMwrG-yKOH46y7J8Do_hl07fcxsWw19KhhBQGof0Y/s640/image028.png" width="640" /></a></div>
<br />
After uploading you can then run a load job which I will cover shortly.<br />
<br />
Going back to the Groovy option, which if available could be used to carry out all steps of the process to move data between EPM Cloud and OAC. As an example, I am going to use it for downloading the data file from EPM Cloud directly to the Essbase database directory in OAC.<br />
<br />
In the Groovy script, variables are defined such as the EPM Cloud URL for downloading files, the data filename, location in OAC to download the file to. The user credentials are encrypted to create the basic authentication header for the REST call.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvSI4fVE8vSOaxlff68uzQ793rwpPOvI0s-Y75PYZgawDnFD1Iai9cC9C4XGKRBeCze_qrMIlzkEGfQZiWA37u9pKmq8BMsTn32I_VWNBVs3zwllhOL35o2ASjgK-74W20ylD_p-8O5eY/s1600/image029.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="257" data-original-width="946" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvSI4fVE8vSOaxlff68uzQ793rwpPOvI0s-Y75PYZgawDnFD1Iai9cC9C4XGKRBeCze_qrMIlzkEGfQZiWA37u9pKmq8BMsTn32I_VWNBVs3zwllhOL35o2ASjgK-74W20ylD_p-8O5eY/s640/image029.png" width="640" /></a></div>
<br />
A method is then called to make the REST request and download the file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjK2pYfiqywykvbnZWP5QszXOKTa0HlDVcHhk54AQhwURQ0H6O8fLOnwbTf5JThrXxdc4pI2xGh4BjqgH9Qrzh6xVIQ4vCkMGvcug5EMGwYQ9mahLnB58pO_uyNNaM9HeXEpno8hY2urs/s1600/agroovy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="839" data-original-width="1169" height="459" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjK2pYfiqywykvbnZWP5QszXOKTa0HlDVcHhk54AQhwURQ0H6O8fLOnwbTf5JThrXxdc4pI2xGh4BjqgH9Qrzh6xVIQ4vCkMGvcug5EMGwYQ9mahLnB58pO_uyNNaM9HeXEpno8hY2urs/s640/agroovy.png" width="640" /></a></div>
<br />
The script should be saved with an extension of “gsh” and then uploaded to OAC.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdyO7fLdHRRu718kXNeYHwfZ3g2t3xpQZ-ZqOIcJheehrnuKTiiz7bU9R2njVJHgTcHpccdzWMK8FOLJumt7iR0D92PPLVqi_nQRHzsePgFn-EOUhqinl3NnStvZejMvmpss8uvxpea8M/s1600/image031.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="220" data-original-width="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdyO7fLdHRRu718kXNeYHwfZ3g2t3xpQZ-ZqOIcJheehrnuKTiiz7bU9R2njVJHgTcHpccdzWMK8FOLJumt7iR0D92PPLVqi_nQRHzsePgFn-EOUhqinl3NnStvZejMvmpss8uvxpea8M/s1600/image031.png" /></a></div>
<br />
The script can be run from the jobs in the UI.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtSyvX9Gn-eWC5DkfIVtf-YOoRv0HoU-dFQtaqi50093Qfdp5xNGC7fFItIxsor8tpQzInL2AKDGrMdpTW1olA95q-cgrdnSIJvsC_IO68xftXdcPjWXWdF9QQSRVgaaOURwedotVnUYI/s1600/image032.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="421" data-original-width="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtSyvX9Gn-eWC5DkfIVtf-YOoRv0HoU-dFQtaqi50093Qfdp5xNGC7fFItIxsor8tpQzInL2AKDGrMdpTW1olA95q-cgrdnSIJvsC_IO68xftXdcPjWXWdF9QQSRVgaaOURwedotVnUYI/s1600/image032.png" /></a></div>
<br />
The application/database and script can then be selected and the Groovy will then be run.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmPibvTpVBxAHEeUVyPHYk1U4TNhDenhE8oPnA3tFW8pLdqx2h4DcIU0hH-HQEuWUu_YZcsD3vZ-p7i0kVfnpiIi6jqR1SI6LtYJSyK9CIKeUZYorRVPhPvyURtsOupZ1G8hRmpLNzVjg/s1600/image033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="278" data-original-width="451" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmPibvTpVBxAHEeUVyPHYk1U4TNhDenhE8oPnA3tFW8pLdqx2h4DcIU0hH-HQEuWUu_YZcsD3vZ-p7i0kVfnpiIi6jqR1SI6LtYJSyK9CIKeUZYorRVPhPvyURtsOupZ1G8hRmpLNzVjg/s1600/image033.png" /></a></div>
<br />
One of the disadvantages at the moment with Groovy in OAC is that parameters can not yet be passed into the script when running as a job.<br />
<br />
After running the job, an output file will be available that contains the output of the “println” method in the script.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZW6JzJx_P4uuskOTaSyfS2uLugml2E0yFUv_M00G3QKOx1AxF1KoLS6dtL3QNabGr-VleGakLt6Qm1e7bxUVvRlnm5jTy9dMN-xe3gUftB5qNzmfbl8Ph7ZMhIiHZ0Ib2Q0VPIY05Hns/s1600/image034.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="296" data-original-width="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZW6JzJx_P4uuskOTaSyfS2uLugml2E0yFUv_M00G3QKOx1AxF1KoLS6dtL3QNabGr-VleGakLt6Qm1e7bxUVvRlnm5jTy9dMN-xe3gUftB5qNzmfbl8Ph7ZMhIiHZ0Ib2Q0VPIY05Hns/s1600/image034.png" /></a></div>
<br />
As the script was successful, the output file contains the following:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQoozTG7aWlcztEpwE-CGPcUGkP1MFXlUTINRVe_TwD6NWKFSLn4Y3_RHgAjcy-QXNJhboWkh6Yi3itsitJ9IiblfvWj9RCuSaQxVnz0g_z661J9T6pnv84mjrQmeALolCyKn54_BvTI/s1600/image035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="23" data-original-width="331" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQoozTG7aWlcztEpwE-CGPcUGkP1MFXlUTINRVe_TwD6NWKFSLn4Y3_RHgAjcy-QXNJhboWkh6Yi3itsitJ9IiblfvWj9RCuSaQxVnz0g_z661J9T6pnv84mjrQmeALolCyKn54_BvTI/s1600/image035.png" /></a></div>
<br />
As this blog is all about automation we can run the Groovy script with the REST API.<br />
<br />
A POST method is required to the jobs URL, the Groovy job type and script to run is included in JSON format in the body of the post.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmTW1tkVLCfwxlFe0zu1uQYBBrZmOwErX7AqrfZx7_KD1EhkVWe3whSoEbcVKHnChk4NOznMG8NPJRBKSTIgUe2mDN8qT9-SlV6p2bp6GwzsOCCvOahMhVncDxwynJqID6D2PC1Uor16k/s1600/image036.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="222" data-original-width="367" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmTW1tkVLCfwxlFe0zu1uQYBBrZmOwErX7AqrfZx7_KD1EhkVWe3whSoEbcVKHnChk4NOznMG8NPJRBKSTIgUe2mDN8qT9-SlV6p2bp6GwzsOCCvOahMhVncDxwynJqID6D2PC1Uor16k/s1600/image036.png" /></a></div>
<br />
The response includes detailed information about the job and a URL to keep checking the job status.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicE6Op0MA5xiCtzX3qXh7Fy-12ErYLDkb8NdwNrBgDJCCXcjyeWrDJLH1es4fYjMfA7VljAj7tc7gPs3SxBkH9Pk6yfWhEjy0kwviuZy7cojMF9IUqe2K-7R3mG1056Gie74gwnkvfy8k/s1600/image037.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="633" data-original-width="544" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicE6Op0MA5xiCtzX3qXh7Fy-12ErYLDkb8NdwNrBgDJCCXcjyeWrDJLH1es4fYjMfA7VljAj7tc7gPs3SxBkH9Pk6yfWhEjy0kwviuZy7cojMF9IUqe2K-7R3mG1056Gie74gwnkvfy8k/s1600/image037.png" /></a></div>
<br />
Once again this can be simply converted into a script to automate the process.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSUszHkPrf52hwHZq9Z-t1fFJ8TXvixp8yosAGdU9I1CcKn9q6uEfFRxLkLetIPcb8hYfSEUadnXUCg4rGZw9-KUErhEQTOzPcxJ23UDo483P8zjKUC72ERWSoy3eOpmWJh7BmCMtEPcg/s1600/image038.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="367" data-original-width="634" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSUszHkPrf52hwHZq9Z-t1fFJ8TXvixp8yosAGdU9I1CcKn9q6uEfFRxLkLetIPcb8hYfSEUadnXUCg4rGZw9-KUErhEQTOzPcxJ23UDo483P8zjKUC72ERWSoy3eOpmWJh7BmCMtEPcg/s1600/image038.png" /></a></div>
<br />
With a GET method, the status of the job can be checked with the jobs URL that contains the job ID.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_lFHvhswrGH73QBqmT2cKN8Gmfp2qxgaf7W2OHWBKiGFz0_2Z3NBvTCegsEhXSGBOPTSBavLKHpaWCI9OpfAWQlQFnevqcYtaGCNYF68zXCwKQMXcloKtolM3t1-3IFzFc4RknxK_Bio/s1600/image039.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="385" data-original-width="703" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_lFHvhswrGH73QBqmT2cKN8Gmfp2qxgaf7W2OHWBKiGFz0_2Z3NBvTCegsEhXSGBOPTSBavLKHpaWCI9OpfAWQlQFnevqcYtaGCNYF68zXCwKQMXcloKtolM3t1-3IFzFc4RknxK_Bio/s1600/image039.png" /></a></div>
<br />
A script can automatically keep checking the job status, this is a similar concept to the earlier example when checking the status of a Data Management job.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb_F3AazfsnEZJ6fcFxwRGH57lJJ6S3GpyI4t2CUvTt_pAT6ifHQiORIn3ZPEYnXx2qohSwDNWzFeZj4X0lv-Bhb82jw9UahIdc8VVB7cRP5UqBpxgHmtCzqo0MNfsLe-Co9QndYvsybs/s1600/image040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="529" data-original-width="788" height="429" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb_F3AazfsnEZJ6fcFxwRGH57lJJ6S3GpyI4t2CUvTt_pAT6ifHQiORIn3ZPEYnXx2qohSwDNWzFeZj4X0lv-Bhb82jw9UahIdc8VVB7cRP5UqBpxgHmtCzqo0MNfsLe-Co9QndYvsybs/s640/image040.png" width="640" /></a></div>
<br />
The file will have been downloaded directly from EPM Cloud to the Essbase database directory in OAC.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkKvY-Psf0Mzh6hZQV0DIYMnbPA2d8t28A5T2NgpQc1pSAEykLcX5XF8bmnB7UhjpknUNABAQYcWjMm2kJSPG0vL_LaRyW61W3eI6XYPVAzk2CcoKaS5itAw-sjMKZ3RXY_MMUocOlVDI/s1600/image041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="219" data-original-width="376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkKvY-Psf0Mzh6hZQV0DIYMnbPA2d8t28A5T2NgpQc1pSAEykLcX5XF8bmnB7UhjpknUNABAQYcWjMm2kJSPG0vL_LaRyW61W3eI6XYPVAzk2CcoKaS5itAw-sjMKZ3RXY_MMUocOlVDI/s1600/image041.png" /></a></div>
<br />
Finally, on to running the Essbase load rule to load the data contained in the file.<br />
<br />
Using the REST API, it is the same call to the jobs URL. The only difference is the job type is “dataload” and parameters define the load rule and the data file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF3TBqRT7vRU98ML8EPzb1CckSuoIs-Fd6iH98Xj63WbmYpjPRSVVwfQflF-Ail20F9B4I8pJeu2vXN_23me9AZRn9W_NXpsC9J2U2EseF1HuHHpboUtaNBPJN324weW4G701WQGn01Uw/s1600/image042.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="238" data-original-width="361" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF3TBqRT7vRU98ML8EPzb1CckSuoIs-Fd6iH98Xj63WbmYpjPRSVVwfQflF-Ail20F9B4I8pJeu2vXN_23me9AZRn9W_NXpsC9J2U2EseF1HuHHpboUtaNBPJN324weW4G701WQGn01Uw/s1600/image042.png" /></a></div>
<br />
The information returned in the response is similar to running any type of job.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzRO05L79LQFxVItUUNhw6zTx5LKmnccLFT4GG6x119HfBdNxx1QIvy3MSSfgnAR28Me8wKxVZL-7cFq2CZFLsBYKdUrs24vs1g_ebEwgQ4dKG2ZGTRIRoS_i_DOA_ekLED_ISp9HNgX8/s1600/image043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="633" data-original-width="543" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzRO05L79LQFxVItUUNhw6zTx5LKmnccLFT4GG6x119HfBdNxx1QIvy3MSSfgnAR28Me8wKxVZL-7cFq2CZFLsBYKdUrs24vs1g_ebEwgQ4dKG2ZGTRIRoS_i_DOA_ekLED_ISp9HNgX8/s1600/image043.png" /></a></div>
<br />
The status of the job can be checked until it completes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRnNi8CRjLMvxZpaFHvAtgQ7jB8Er-V9Wu6l8mpsvqLY5XmtHL7sKpQjluhJ9w2kOM3UPoNw2qcIm0pGjpv_-HNFX_XeNWZqDCd_evq1UxdFm6GyXHiVoVUbOTpYF_8SB0A4hoDnR4ho0/s1600/image044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="487" data-original-width="394" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRnNi8CRjLMvxZpaFHvAtgQ7jB8Er-V9Wu6l8mpsvqLY5XmtHL7sKpQjluhJ9w2kOM3UPoNw2qcIm0pGjpv_-HNFX_XeNWZqDCd_evq1UxdFm6GyXHiVoVUbOTpYF_8SB0A4hoDnR4ho0/s1600/image044.png" /></a></div>
<br />
The beauty of running a data load job compared to streaming data is that the response includes the number of records that were processed and rejected.<br />
<br />
This part of the process does not take much effort to convert into a script.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVVuqL05WGYgfkmNJkabDgXIXO4ZIPsAdnfdcGwV63uz0rli2_lWG0z35Jczei2F4NFsXIIysQXgcWdrDAppPEuD4hnL37EmEUUVK44gzXNCMIoLZJ4HymISQa31PA99sqL_21gZ5qzuM/s1600/image045.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="641" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVVuqL05WGYgfkmNJkabDgXIXO4ZIPsAdnfdcGwV63uz0rli2_lWG0z35Jczei2F4NFsXIIysQXgcWdrDAppPEuD4hnL37EmEUUVK44gzXNCMIoLZJ4HymISQa31PA99sqL_21gZ5qzuM/s1600/image045.png" /></a></div>
<br />
Now that the full process has been automated and run, the data from EPM cloud is available in OAC Essbase.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3iwYoDvTioIsbEwEQWE7rPT8PElVjFNRuB7aJlTIe4LzOcvZgJyCAsilUBMs078R4ECG5V2sO6lyBiKgHmLhmHvqgTcJXTholKez0vXRlWdV8bqtRBqk-veWb1n-7WFiyQhC1xaPmW7U/s1600/image046.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="479" data-original-width="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3iwYoDvTioIsbEwEQWE7rPT8PElVjFNRuB7aJlTIe4LzOcvZgJyCAsilUBMs078R4ECG5V2sO6lyBiKgHmLhmHvqgTcJXTholKez0vXRlWdV8bqtRBqk-veWb1n-7WFiyQhC1xaPmW7U/s1600/image046.png" /></a></div>
<br />
With scripting you can also automate the opposite process of extracting data from Essbase and then loading to EPM Cloud.<br />
<br />
Once a script is in place it can be reused across different data flows by just changing variables.<br />
<br />
If you are interested in understanding in more detail about how automation can help, please feel free to get in touch.</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com2tag:blogger.com,1999:blog-6575283218005807475.post-56513415808248368032018-10-07T11:23:00.000-07:002018-10-07T11:24:31.211-07:00EPM Cloud - Recent additions to EPM Automate and REST API<div dir="ltr" style="text-align: left;" trbidi="on">
In the EPM Cloud 18.10 release there were a few additional commands added to the EPM Automate utility, these are also available through the REST API as the utility is built on top of the API.<br />
<br />
An annoyance for me with EPM Automate and the REST API has been not being able to rename a snapshot, even though it has always been possible through the web UI.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwRCbeG3H47CmYVKrcdknqNPQR1zPXZ4DCFDMt3QebHS-6V-MuB8KSUwMRUK5b17QaXUWBRTiKZaEAVw3IFOengthpSRxU0Wojdy_In8UMXb36QTNem_QHOL8HF7AYrCAmru4gm4_akIQ/s1600/image001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="305" data-original-width="524" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwRCbeG3H47CmYVKrcdknqNPQR1zPXZ4DCFDMt3QebHS-6V-MuB8KSUwMRUK5b17QaXUWBRTiKZaEAVw3IFOengthpSRxU0Wojdy_In8UMXb36QTNem_QHOL8HF7AYrCAmru4gm4_akIQ/s1600/image001.png" /></a></div>
<br />
Not being able to rename out of the UI made it difficult to automate archiving the daily snapshot in the cloud instance before the next snapshot overwrote the previous one. You could download, rename and upload but this over complicates what should have been a simple rename.<br />
<br />
With the 18.10 release it is now possible to rename a snapshot with a new EPM Automate command.<br />
<br />
To rename a snapshot, the syntax for the utility is:<br />
<br />
<b class="yellow">epmautomate renamesnapshot <existing snapshot name> <new snapshot name> </b><br />
<br />
Using EPM Automate and a script, it is simple to rename the snapshot, in the following example the daily snapshot is renamed to include the current date.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBs-pYmS2hp0KbOaIAL1yb_g-YyDA5oiJNcPEkklHFfu882yJNNl6xcS8r8liT5puBPAdsBzjpdB3XVBt3Oe-RLVmrrqdhfiNONwhVPlAXCKBVNZMmm7CO4yOpcoR9EFK0Zq4AnAg00EU/s1600/image003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="272" data-original-width="467" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBs-pYmS2hp0KbOaIAL1yb_g-YyDA5oiJNcPEkklHFfu882yJNNl6xcS8r8liT5puBPAdsBzjpdB3XVBt3Oe-RLVmrrqdhfiNONwhVPlAXCKBVNZMmm7CO4yOpcoR9EFK0Zq4AnAg00EU/s1600/image003.png" /></a></div>
<br />
This means the snapshot is now archived and the next daily maintenance will not overwrite it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ6iI0QrcnlV7BAS30iMR7TDG__v55g-suTEsAZbdlQyxoVgRwlvO_T15Nkc4QveVjCINiBB-XWZtdFSXmSNS6huvWo7J8MLwm4vHTP0UKPrbp0NHniLZmJJxINsTalQcTdT05yBkvSCE/s1600/image004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="186" data-original-width="261" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ6iI0QrcnlV7BAS30iMR7TDG__v55g-suTEsAZbdlQyxoVgRwlvO_T15Nkc4QveVjCINiBB-XWZtdFSXmSNS6huvWo7J8MLwm4vHTP0UKPrbp0NHniLZmJJxINsTalQcTdT05yBkvSCE/s1600/image004.png" /></a></div>
<br />
Please note though, there is a retention period for snapshots which currently stands at 60 days and a default maximum storage size of 150GB. If this is exceeded then snapshots are removed, oldest first to bring the size back to 150GB.<br />
<br />
The documentation does not yet provide details on how to rename a snapshot using the REST API, but I am sure it will be updated in the near future.<br />
<br />
Not to worry, I have worked it out and the format to rename a snapshot using the REST API is:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9wpXGuhrIeeEDG9MitsbDGkcQzPXXSnEEYy0S3myd0Kn7Vrde2SLXtTyVrieDvZ76_lR6cOZ_L-iPMGG9Wp5DQJ6heYXcTfORBtrO2x4Zx79e7DOs3Cte4bhdr20dV98Imu4SzT3BHFE/s1600/image005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="99" data-original-width="589" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9wpXGuhrIeeEDG9MitsbDGkcQzPXXSnEEYy0S3myd0Kn7Vrde2SLXtTyVrieDvZ76_lR6cOZ_L-iPMGG9Wp5DQJ6heYXcTfORBtrO2x4Zx79e7DOs3Cte4bhdr20dV98Imu4SzT3BHFE/s1600/image005.png" /></a></div>
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
If the rename is successful, a status of 0 will be returned.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKsEPS2r8yL5wFEurtMFVaNsEBwydriH4Zu6F8RtUAhstZ6UdTMDAeeypbW71vV2ZdjLqtk3kYxTCRZsYTfohzP5rjUAQvNB-fACUfsGIrgHU-fsw28wivF2yC0YYgrauaLzaacJrHjw0/s1600/image006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="245" data-original-width="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKsEPS2r8yL5wFEurtMFVaNsEBwydriH4Zu6F8RtUAhstZ6UdTMDAeeypbW71vV2ZdjLqtk3kYxTCRZsYTfohzP5rjUAQvNB-fACUfsGIrgHU-fsw28wivF2yC0YYgrauaLzaacJrHjw0/s1600/image006.png" /></a></div>
<br />
In the UI you will see the snapshot has been renamed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvy1vGSR2WCBN6mWlv3zGnnTVIta9ZTxp4K1-KzOfYnIJq5ZC4Ttjcc8v9A6t2xisTM3WXOtpyCA2Br0fpb-0JegCQF1rFS95K-mhjCiQFgCbmFswpA6WWW7CA_KM5xaclUWTjtusqTlQ/s1600/image007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="184" data-original-width="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvy1vGSR2WCBN6mWlv3zGnnTVIta9ZTxp4K1-KzOfYnIJq5ZC4Ttjcc8v9A6t2xisTM3WXOtpyCA2Br0fpb-0JegCQF1rFS95K-mhjCiQFgCbmFswpA6WWW7CA_KM5xaclUWTjtusqTlQ/s1600/image007.png" /></a></div>
<br />
If the rename was not successful, a status that is not equal to 0 will be returned and an error message will be available in the details parameter.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtLoRc06m69FThqoXEU5Np3B1aZkNVT5qh3Gsyxf4lc8Cj8rI5Cgfo5gSv8cbCEfOU4GmB3AOFiobdEGsS4onMXF5witW1KYwvEF3pctmyDppi70PNDFI-x9BgP0mxWhWWpYH5kzVAAu8/s1600/image008.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="251" data-original-width="695" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtLoRc06m69FThqoXEU5Np3B1aZkNVT5qh3Gsyxf4lc8Cj8rI5Cgfo5gSv8cbCEfOU4GmB3AOFiobdEGsS4onMXF5witW1KYwvEF3pctmyDppi70PNDFI-x9BgP0mxWhWWpYH5kzVAAu8/s1600/image008.png" /></a><br />
The functionality will only rename snapshots and does not work on other file types.<br />
<br />
It
is an easy task to script the renaming of a snapshot using the REST
API. In the following example I am going to log into a test instance and
rename the daily snapshot, then copy the daily snapshot from the
production instance to the test instance. This means the production
application is ready to be restored to the test environment if needed,
also the test daily snapshot has been archived.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisRgqMpT5E-ZqMYTpK5j79bBtQo5MLn8K5ARTphR0Gm0ogUpQAAciZ3IXnYT3iptaA7t4veBRbY09clXUlrAYYhlpJQgtGMBLW-SGpDb7Qk0L9zT1ef63T0jdQ9YWzk4XTaEItRLBndxc/s1600/image009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="454" data-original-width="661" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisRgqMpT5E-ZqMYTpK5j79bBtQo5MLn8K5ARTphR0Gm0ogUpQAAciZ3IXnYT3iptaA7t4veBRbY09clXUlrAYYhlpJQgtGMBLW-SGpDb7Qk0L9zT1ef63T0jdQ9YWzk4XTaEItRLBndxc/s1600/image009.png" /></a></div>
<br />
The above section of the script renames the test snapshot, the next section copies the production snapshot to the test instance.<br />
<br />
When calling the REST API to copy a snapshot, a URL is returned which allows you keep checking the status of the copy until it completes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0puBPPA_IKjMpU3K1pWiokQ3rt-oRHXdgykyZmrezps58A5AI-0NToVyBzla3vWP9eWR6xMMYIsKzmhEJqcuRfTCzYomg333MJxikVyAmDIkwv_Hd43YCcSYZqn4GZPheRXKIqtt9e4A/s1600/image010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="709" data-original-width="644" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0puBPPA_IKjMpU3K1pWiokQ3rt-oRHXdgykyZmrezps58A5AI-0NToVyBzla3vWP9eWR6xMMYIsKzmhEJqcuRfTCzYomg333MJxikVyAmDIkwv_Hd43YCcSYZqn4GZPheRXKIqtt9e4A/s1600/image010.png" /> </a></div><br>
Now in the test instance, the daily snapshot has been archived and contains a copy of the production snapshot.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitvvxiI90pgwc3pCC6XuU_nNnYvonWa_kugdRj5OgOCWfZUlLaepzLGE4VNiGIi1l8MC0SfZxH64I0_0fXk0JU2rYX5zGc7HnkX6BJEX9MboedEfNGfRfEQnWO1TBVsAHrtW-bH0AS_8Q/s1600/image011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="225" data-original-width="293" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitvvxiI90pgwc3pCC6XuU_nNnYvonWa_kugdRj5OgOCWfZUlLaepzLGE4VNiGIi1l8MC0SfZxH64I0_0fXk0JU2rYX5zGc7HnkX6BJEX9MboedEfNGfRfEQnWO1TBVsAHrtW-bH0AS_8Q/s1600/image011.png" /></a></div>
<br />
It is also possible to copy files across an EPM Cloud instance using the EPM Automate command “copyfilefrominstance”. This command was introduced in the 18.07 release and the format for the command is:<br />
<br />
<b class="yellow">epmautomate copyfilefrominstance <source_filename> <username> <password_file> <source_url> <source_domain> <target_filename></b><br />
<br />
To achieve this using the REST API is very similar to my previous copy snapshot example.<br />
<br />
Say I wanted to copy a file from the test instance to the production one and rename the file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFEJmgZjDVvEtoQthN0Kz0y38LkWh3CxYLSHqmOmW-LQ9FI9BFm04svi-LUg5PBRmNwGa1DPMexA9AgY7e4ySvUQE8TCE1XS984tg4WLYMaeAQdYGmINmXGNio1gido2UVszbI9d9XcqM/s1600/image011-next2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="179" data-original-width="263" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFEJmgZjDVvEtoQthN0Kz0y38LkWh3CxYLSHqmOmW-LQ9FI9BFm04svi-LUg5PBRmNwGa1DPMexA9AgY7e4ySvUQE8TCE1XS984tg4WLYMaeAQdYGmINmXGNio1gido2UVszbI9d9XcqM/s1600/image011-next2.png" /> </a></div>
<br />
An example script to do this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn2PqqwNJp1KqBmv5wCQZ9EQdy1Jf8IS8z0MU5nM6UnW6VZ82GrmjgyUIBq_1g-_qDG5_w1UuYDxSzDuA1YYRvme4lWdCTqoDjVJfKVAz_CG51A3wUmSKK3L71VZa3JjwSNgZBHiD1Xdo/s1600/image011-next.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="469" data-original-width="803" height="373" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn2PqqwNJp1KqBmv5wCQZ9EQdy1Jf8IS8z0MU5nM6UnW6VZ82GrmjgyUIBq_1g-_qDG5_w1UuYDxSzDuA1YYRvme4lWdCTqoDjVJfKVAz_CG51A3wUmSKK3L71VZa3JjwSNgZBHiD1Xdo/s640/image011-next.png" width="640" /></a></div>
<br />
The file has been copied to the production instance and renamed.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVn0rzJFB238qWwyMazs_Q5yRdO7aRv9K4Y2_e-6lSRtKJRgn9b0EHGT243FipoAXjbQkTucjBrt2PQr4z3GamnRi-HiQB9-8574y-JQCwJP_OHYORWdmpXunMhyphenhyphensVZ-IohFh3ozczFf0/s1600/image011-next3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="181" data-original-width="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVn0rzJFB238qWwyMazs_Q5yRdO7aRv9K4Y2_e-6lSRtKJRgn9b0EHGT243FipoAXjbQkTucjBrt2PQr4z3GamnRi-HiQB9-8574y-JQCwJP_OHYORWdmpXunMhyphenhyphensVZ-IohFh3ozczFf0/s1600/image011-next3.png" /></a></div>
<br />
When the 18.10 monthly readiness document was first published it included details about another EPM Automate command called “executejob”<br />
<br />
<i><b class="yellow">“executejob, which enables you to run any job type defined in planning, consolidation and close, or tax reporting applications”</b></i><br />
<br />
This was subsequently removed from the document, but the command does exist in the utility.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWee1r89HphV-N_nIZTlTpN5vanEQkN8jECOtJe-SdjzCLEnbxlWowRvA2hxhbyTeDMcSPnuJBFudt3W1c807TC_z9uCbYl2pq_6hKgUcyU_7LrQgPuewnFGGOJ4A4U7LBRVIujZuVyVM/s1600/image012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="147" data-original-width="559" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWee1r89HphV-N_nIZTlTpN5vanEQkN8jECOtJe-SdjzCLEnbxlWowRvA2hxhbyTeDMcSPnuJBFudt3W1c807TC_z9uCbYl2pq_6hKgUcyU_7LrQgPuewnFGGOJ4A4U7LBRVIujZuVyVM/s1600/image012.png" /></a></div>
<br />
The command just looks to bypass having to use different commands to run jobs, so instead of having to use commands such as “refreshcube”,”runbusinessrule” or “runplantypemap” you can just run “executejob” with the correct job type and name.<br />
<br />
For example, if I create a new refresh database job and name it “Refresh”<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHix9gP8EcfAUdDj0LdTSGyAdg48Z6UKi4T2eZ_FwTVZ4jxcl1ZAg8R1VJQQI4e9-RM2zDgnXlEk0d9b3YEnkMK_LC7Hj1ryG2WUDeatSFP9I6ChKRnuPXKlMax03HLhLjYSzKMJWrRB4/s1600/image013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="237" data-original-width="911" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHix9gP8EcfAUdDj0LdTSGyAdg48Z6UKi4T2eZ_FwTVZ4jxcl1ZAg8R1VJQQI4e9-RM2zDgnXlEk0d9b3YEnkMK_LC7Hj1ryG2WUDeatSFP9I6ChKRnuPXKlMax03HLhLjYSzKMJWrRB4/s640/image013.png" width="640" /></a></div>
<br />
The job type name for database refresh is “CUBE_REFRESH” so to run the refresh job with EPM Automate you could use the following:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2A532-Ncsx_5-em18bwl305yE2bYatvm8RVPlZ2D4miJ7GC85P_D8vEmdALzOX4eM6wezjKIVtzYXDFoFc6SfTRKx03tL6WsUlA7Obbxl2Z2hTUSam8DSSv0NO34WH638fHHzkB_bGDs/s1600/image014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="268" data-original-width="365" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2A532-Ncsx_5-em18bwl305yE2bYatvm8RVPlZ2D4miJ7GC85P_D8vEmdALzOX4eM6wezjKIVtzYXDFoFc6SfTRKx03tL6WsUlA7Obbxl2Z2hTUSam8DSSv0NO34WH638fHHzkB_bGDs/s1600/image014.png" /></a></div>
<br />
The command is really replicating what has already been available in the REST API for running jobs.<br />
<br />
The current list of job types is:<br />
<br />
<b class="yellow">RULES<br />RULESET<br />PLAN_TYPE_MAP<br />IMPORT_DATA<br />EXPORT_DATA<br />EXPORT_METADATA<br />IMPORT_METADATA<br />CUBE_REFRESH<br />CLEAR_CUBE</b><br />
<br />
I am not going to go into detail about the REST API as I have already covered it <a href="http://john-goodwin.blogspot.com/2015/09/planning-rest-api.html"><b>previously</b></a>. <br />
<br />
The format for the REST API is as follows:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf6AwZ-BN2_JrpwwqJaFAZK4AMRJiAKoggazDzL9lZ7YT7dXnt04CFlh5iN7YRZWdEtvNUQNAU9xLE4G5ii5Pr8m-jbp2C1fRYkgichjgVydB2e540FTO64oMb_nGiNmO-QwLTu_bFqeI/s1600/image015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="150" data-original-width="595" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf6AwZ-BN2_JrpwwqJaFAZK4AMRJiAKoggazDzL9lZ7YT7dXnt04CFlh5iN7YRZWdEtvNUQNAU9xLE4G5ii5Pr8m-jbp2C1fRYkgichjgVydB2e540FTO64oMb_nGiNmO-QwLTu_bFqeI/s1600/image015.png" /></a></div>
<br />
The response will include details of the job and a URL that can be used to keep checking the status.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpqK8oY6X7zq3LhrAs3Uu8jU8tw8nkNOkTsTvdUZeDb0WID0tDQusAyKokLFdASf8fg55gDvHyniAfNjGpRT_yNRx1cebOoKU5GRlPckdLovhj0OH4-4HEmEiqcbKBfGDmFX4yM4q3N0I/s1600/image016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="398" data-original-width="631" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpqK8oY6X7zq3LhrAs3Uu8jU8tw8nkNOkTsTvdUZeDb0WID0tDQusAyKokLFdASf8fg55gDvHyniAfNjGpRT_yNRx1cebOoKU5GRlPckdLovhj0OH4-4HEmEiqcbKBfGDmFX4yM4q3N0I/s1600/image016.png" /></a></div>
<br />
I was really hoping that the functionality was going to allow any job that is available through the scheduler to be run, for instance “Restructure Cube” or “Administration Mode” but it looks like it is only for jobs that can be created. Hopefully that is one for the future.<br />
<br />
In 18.05 release a new EPM Automate command appeared called “runDailyMaintenance” which allows you to run the daily maintenance process without having to wait for the maintenance window. This is useful if new patches are available and you don’t want to wait to apply them. In 18.10 release the command includes a new parameter which provides the functionality to skip the next daily maintenance process.<br />
<br />
The format for the command is:<br />
<br />
<b class="yellow">epmautomate rundailymaintenance skipNext=true|false</b><br />
<br />
The following example will run the maintenance process and skip the next scheduled one:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtjgV2eTr2eeY8trTrkekEXnJacxt0No7YgekAPpi7RyZgMNpzWlz6G4ioLcxUScldwKI0uYgs5auP4v_0dazHj8LdlRduhspT8EWs7__vfmp4iok_aYSi0i6-B08JCEoXs7L07Ygjo48/s1600/image017.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="171" data-original-width="425" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtjgV2eTr2eeY8trTrkekEXnJacxt0No7YgekAPpi7RyZgMNpzWlz6G4ioLcxUScldwKI0uYgs5auP4v_0dazHj8LdlRduhspT8EWs7__vfmp4iok_aYSi0i6-B08JCEoXs7L07Ygjo48/s1600/image017.png" /></a></div>
<br />
I included the -f to bypass the prompted message:<br />
<i><br />“Are you sure you want to run daily maintenance (yes/no): no?[Press Enter]”</i><br />
<br />
The REST API documentation does not currently have information on the command but as the EPM Automate utility is built on top of the API, the functionality is available.<br />
<br />
The format requires a POST method and the body of the post to include the skipNext parameter.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8YKydy8dpNN6BYnEmBLN330bUnb015Za6APev26K99M49GMMTX3guYvOnWH2hTSB3ix1FlqCMIvoPqJiBBy1Op3bblgsF_yXrvQJ41m_9lYis2_CIzyhqRpRy0p9DfJsrIpLsRAfGunU/s1600/image018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="100" data-original-width="532" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8YKydy8dpNN6BYnEmBLN330bUnb015Za6APev26K99M49GMMTX3guYvOnWH2hTSB3ix1FlqCMIvoPqJiBBy1Op3bblgsF_yXrvQJ41m_9lYis2_CIzyhqRpRy0p9DfJsrIpLsRAfGunU/s1600/image018.png" /></a></div>
<br />
The response will include a URL to check the status of the maintenance process.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiINLaJXprHFH7SRHWJUkGo47BnIN9u74Imp4wOjvbaIHjUNN78XcoyV5zzjLc7zTo9IwCZaKMlQumO9Tl9j7mPEHa8Z4qVKIG71yaTWhE5-hFZKYPhbP14ZPRn5RBkUGQ9CRTxkbrtnDA/s1600/image019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="446" data-original-width="637" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiINLaJXprHFH7SRHWJUkGo47BnIN9u74Imp4wOjvbaIHjUNN78XcoyV5zzjLc7zTo9IwCZaKMlQumO9Tl9j7mPEHa8Z4qVKIG71yaTWhE5-hFZKYPhbP14ZPRn5RBkUGQ9CRTxkbrtnDA/s1600/image019.png" /></a></div>
<br />
When the process has completed, a status of 0 will be returned.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_WtUc091bPX7VVAapXQP1JeWYs19JFzuteXe7L_HzAGwWL06wZxD_F0-9wJY7-AHRvau5-aH9uW_xARFgHLLJo3QyfW_3_cey3_hn4qK6Z7rsvF_HtgyoLBrC-Ywqo6h5Mfm15guBtTg/s1600/image020.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="146" data-original-width="632" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_WtUc091bPX7VVAapXQP1JeWYs19JFzuteXe7L_HzAGwWL06wZxD_F0-9wJY7-AHRvau5-aH9uW_xARFgHLLJo3QyfW_3_cey3_hn4qK6Z7rsvF_HtgyoLBrC-Ywqo6h5Mfm15guBtTg/s1600/image020.png" /></a></div>
<br />
It is worth pointing out that as part of the maintenance steps, the web application service is restarted so you will not be able to connect to the REST API to check the status while this is happening.<br />
<br />
Another piece of functionality which has been available through the REST API for a long time, but not EPM Automate, is the ability to return or set the maintenance window time.<br />
<br />
To return the maintenance time, a GET method is required with the following URL format:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBRLjn1BFymMNu2GEAZuvtgt2ncsIl97TkjSHcg3Tfc-x-N-93uTjsCZvUQJ7ybvbOkAcRh5aClCx12gUXcQ0lFsyl3UCHjexloE9ywEWv84ioDlC8JaAUHlc4jRbshPEyFweS721lqpM/s1600/image021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="205" data-original-width="510" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBRLjn1BFymMNu2GEAZuvtgt2ncsIl97TkjSHcg3Tfc-x-N-93uTjsCZvUQJ7ybvbOkAcRh5aClCx12gUXcQ0lFsyl3UCHjexloE9ywEWv84ioDlC8JaAUHlc4jRbshPEyFweS721lqpM/s1600/image021.png" /></a></div>
<br />
The “amwTime” (Automated Maintenance Window Time) is the scheduled hour for the maintenance process, so it will be between 0 and 23.<br />
<br />
To update the schedule time a PUT method is required and the URL requires a parameter called “StartTime”<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH0xx2Lv3AGxiCDlKs7x3KSTCTcbb3mEmqVDaDOl9ibncFaEuqiTTXKLwyJEJaHY-UI4dQhbT8AFYD8m637UhmhaV9g9piQOj0DiMtC6nrp0JqChw0GX1nieVVJJTo0w2NuHk80HtH9gw/s1600/image022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="115" data-original-width="590" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH0xx2Lv3AGxiCDlKs7x3KSTCTcbb3mEmqVDaDOl9ibncFaEuqiTTXKLwyJEJaHY-UI4dQhbT8AFYD8m637UhmhaV9g9piQOj0DiMtC6nrp0JqChw0GX1nieVVJJTo0w2NuHk80HtH9gw/s1600/image022.png" /></a></div>
<br />
If the update was successful a status of 0 will be returned.<br />
<br />
You can then check the maintenance time has been updated.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBibCete5az5y5CPRMvKEtsvrSHpgpfsfb7By_YgTExAWpKNKOoI3x4DqZlHMb-v3WGIoIiJWQ8jMQZ3abuP1VP1F7kEoQ3MMJgC5t1GM3dSPwxAxpNcSMdq6gyhZBEC2GPdtt7Dq0SF0/s1600/image023.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="205" data-original-width="506" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBibCete5az5y5CPRMvKEtsvrSHpgpfsfb7By_YgTExAWpKNKOoI3x4DqZlHMb-v3WGIoIiJWQ8jMQZ3abuP1VP1F7kEoQ3MMJgC5t1GM3dSPwxAxpNcSMdq6gyhZBEC2GPdtt7Dq0SF0/s1600/image023.png" /></a></div>
<br />
The following script checks the current maintenance time and updates it to 03:00am<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2KqQ3iF2TZB8LJ795mBt6jbWpQ9kbLsa6LHgZfIrMwb25fuUTQMuQU5U2lruM5qD9wIiVhhnOLfr_I0UDk1YmZbhyphenhyphenXHQvpuoyhBEblHyeANIbpTGF8Z-iNwnYcpu7ZwVqYEDajWeUhvg/s1600/image024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="440" data-original-width="801" height="351" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2KqQ3iF2TZB8LJ795mBt6jbWpQ9kbLsa6LHgZfIrMwb25fuUTQMuQU5U2lruM5qD9wIiVhhnOLfr_I0UDk1YmZbhyphenhyphenXHQvpuoyhBEblHyeANIbpTGF8Z-iNwnYcpu7ZwVqYEDajWeUhvg/s640/image024.png" width="640" /></a></div>
<br />
I did notice a problem, even though the REST API is setting the time, it is not being reflected in the UI.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyQNc9A2eFEKa_Lw1JT_Er9yAHAhGB88uFjb2i9I-Q1Qr-b_esZMMMEtXk9_JCzCxceXEkKsiAIgaE3BW-AAt8DnX1x0AdrPM442O20RVwsBNBqaynPIRdkgGbMxdt3jsOqSeSI7w_eRE/s1600/image025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="167" data-original-width="1083" height="98" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyQNc9A2eFEKa_Lw1JT_Er9yAHAhGB88uFjb2i9I-Q1Qr-b_esZMMMEtXk9_JCzCxceXEkKsiAIgaE3BW-AAt8DnX1x0AdrPM442O20RVwsBNBqaynPIRdkgGbMxdt3jsOqSeSI7w_eRE/s640/image025.png" width="640" /></a></div>
<br />
It looks like a bug to me. Anyway, until next time…</div>
John Goodwinhttp://www.blogger.com/profile/03663642245534297566noreply@blogger.com0