I recently cleared the Oracle HCM Cloud Operations Implemenation Specialist test.
Fusion HCM Cloud uses BIP templates as part of it payroll process, its also used for printing checks. One of the most common requirements I have received is to print the employees hours and rates on the checkprinter output.
Here is what the vanilla template looks like, its called USCheckWriterReport.rtf.
cleartext.blogspot.com
It can be seen that the earnings section in the bottom prints only current and YTD amounts. The hours and rates are not printed by default.
The hours and rates are in a different node in the Payslip xml
cleartext.blogspot.com
This is the node for earnings:
And this is the one for Hours and Rates
So what we need to do is the use the REPORTING_NAME as a foreign key, and lookup the correct HOURS_X_RATE record, and then print it in the earnings table.
cleartext.blogspot.com
This is the code to use:
<?$ava_earnings/GLB_PAY_ARCH_PR_HOURS_X_RATE[REPORTING_NAME=current()/REPORTING_NAME]/EARNINGS_HOURS?>
PS: I am just putting this up for my own reference, and for anyone out there stuck like me.
cleartext.blogspot.com
Oracle’s Fusion HCM cloud service uses BIP templates as part of its pay processing. When the Payoll processes are submitted, HCM does a lot of things, it generates the Pay data, and populates tables. But the final step of this process is to generate the actual payslip , and for this it invokes a BIP report. © 2016 cleartext.blogspot.com
As report designer, I often get requests to modify these reports. But to test the reports, one need not run the entire payroll process again. Simply re-running the report with the modified template will suffice. © 2016 cleartext.blogspot.com
The BIP template to modify for US is the USOnlinePayslip.
To see when it was last run, simply check the history of this report, under More-> History. Reset the query and run search.
Pick up any of the last records, and drilldown on it. Now copy the Payroll Action Identifier from this page © 2016 cleartext.blogspot.com
Now you can go back and re-run this report with this parameter, and can see the changes of your template instantly ! Ta-da ! © 2016 cleartext.blogspot.com
What is the worst report template to work with ? After 9 years of working on varous Oracle report template formats, I am happy and frustrated to report that that would the the eText BIP template from Oracle.
cleartext.blogspot.com
It is commonly used to generate Payment Texts, to be processed by banks and other financial institutions, like ADP. It is the only Oracle template which can generate output in .txt format. It has very little functions, and all the documentation can be summarized to this one page. That’s it. All the functions and settings which can be used on the eText template is right there. The output of this template is not meant to be human-read, it is always meant to be transmitted to a banking or payment system via secure ftp. From the initial version of the template system, no new function has been added. So it is kinda version independent, there is no dependency on what version of BIP you have installed. eText templates designed on older versions of BIP will happily work on newer versions. And vice versa. But this is probably the only good thing ever about this template format.
cleartext.blogspot.com
Whereas BIP RTF templates also have some functions supported, there are ways to inject some xslt/xdofx functions in different namespaces into them. So this gives rise to redundant, but useful bunch of functions. And there is an added functionality of writing xsl templates within BIP RTF templates. And if even that does not work, one can link in external jars with added functions. But none of these can be done on eText templates. You have to make do with what you have.
cleartext.blogspot.com
Well this makes working on eText templates extremely frustrating. And error prone. The fact that you are designing payment system integrations increases the seriousness of the situation. If there are even fractional errors during the processing, that would direct the banks to pay a different amount out.Scary.
The good thing is that there is a small community of eText developers/consulants which can be accessed via supportweb. Most of the usual issues one faces are documented with workarounds. If a requirement cannot be done , all you can do is blame Oracle and tell the customer.
Here is an issue: you use the Number command to print numbers in the eText output.
cleartext.blogspot.com
Internally the template uses the format_number function to convert the source into a number. But this function has a problem, it errors out if the source data has non-numbers in it. It cannot even handle a null. So if the PAYMENT tag in the xml contains null or any non-integer, the template will error out.
Simplest solution ? Just multiply the source with 1 !
Multiplying with 1 will work fine if PAYMENT has numbers in it. And in case of any non-number, it will just get converted to 0 ! No errors thrown !
Weird. But it works, no need to do a separate check of null or isnumber.
Originally published on cleartext.blogspot.com
Looks like Oracle does not want customers/consultants to integrate other applications to its new fusion cloud based applications. There is close to NO documentation available on Oracle SupportWeb about setting up and invoking webservices, the only information available is on some Oracle blogs, and even they don't cover the full extent of APIs. Some Oracle champs have shared information on using REST services of some Oracle cloud apps, but it is clear that each of Oracle's cloud offerings have a different topology and architecture driving the integrations. I have been playing around with the Fusion HCM webservices for some time now, and I have to say that Oracle definitely needs to work on their documentation.
All of Oracle's cloud apps are following a standard approach: they will not (read cannot) consume a WSDL of another system, but they expose a WSDL/REST service of their own, which has to be invoked from outside to get the integrations working.
Consider the Fusion HCM Wsdl, the location of which has to be taken from Oracle repository. Using the get/find methods in the WSDL proved easy, but using the create/update methods proved to be a different challenge.
Problem 1: Every element in the WSDL is optional !. Check out the CreateWorker service, which is meant to be used to create the employee records in the HCM system. Usually the XSD/WSDL gives a good understanding of the structure of the system's data model, the required fields are marked so the end system has an idea of what fields to send to create a record. In Oracle's Fusion HCM wsdl, every element is marked as optional, even the name elements. This means the developer/consultant has to have an in-depth knowledge of the HCM system to start using the wsdls. cleartext.blogspot.com
Really, Oracle ? cleartext.blogspot.com
Problem 2: No useful/meaningful validation me ssages. As soon as one starts triggering the methods of the HCM wsdl, the errors come back. Or, shall we say, NO errors come back. Looks like Oracle developers have not handled every exception properly.
WTF is "JBO-29000: Unexpected exception caught: java.lang.NullPointerException, msg=null: null" supposed to mean ?
cleartext.blogspot.com
Problem 3: No documentation whatsoever. Oracle has two kind of cloud applications running now. One is the group of apps they have acquired, like Taleo, Rightnow CX etc…The other are cloud applications built by Oracle from ground up, from square one. For the former group of apps, the original developers have , thankfully, provided considerable documentation of the APIs. But for Oracle's own offerings, they have decided that less is better, and there is no detail documentation of the APIs. On these new cloud applications, the APIs are the only way to interact with the system, in traditional On-Premise systems, you could always have access to the application, filesystem and even database.
cleartext.blogspot.com
I am turning over a new leaf and starting with Oracle's Fusion HCM Cloud Service, looking into its integration system. Looks like Oracle does not want developers to use its webservices, because there seems to be no concise document available on how to set up a simple webservice integration. After sifting through numerous blogs and forums, I finally decided to explore the Oracle Enterprise Repository for information. And this seems to be the unwritten golden rule for Fusion applications: if you need information, go to OER.
After logging into OER as guest, run a quick query in the left pane to get started. If you want to know about Fusion HCMs webservices, select "ADF Service" under Type, and "Human Capital Management" under Product Family. You can also choose an appropriate Version, though everyone will be on the latest version anyway.
cleartext.blogspot.com
Running the query gives a list of Fusion ADF services which can be used for external integrations. For main Employee related webservices, choose the Worker services at the end of the list.
cleartext.blogspot.com
To find the WSDL address of this service, choose the detail tab and go to the end of the page.
And there, right at the end of the page, is the logical address of the service. You will have to replace the <hcm server> part with the actual hostname of your cloud service.
Simply entering this URL in a browser gives us the WSDL:
cleartext.blogspot.com
And providing this URL in SOAPUI downloads the WSDL and schema. The WSDL is very big, SOAP UI takes a couple of minutes to completely consume the WSDL and generate the sample messages.
cleartext.blogspot.com
And now for the really tricky part. The search request has to be built in the SOAP message so that the system can respond with data. After trying numerous combinations, I just tried a simple empty SOAP request. And…it returned successfully !
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://xmlns.oracle.com/apps/hcm/employment/core/workerServiceV2/types/" xmlns:typ1="http://xmlns.oracle.com/adf/svc/types/">
<soapenv:Header/>
<soapenv:Body>
<typ:findWorker>
<typ:findControl>
</typ:findControl>
</typ:findWorker>
</soapenv:Body>
</soapenv:Envelope>cleartext.blogspot.com
cleartext.blogspot.com
Important: The userid and password has to be provided either in the soapenv:Header section, or in the userid/password fields of SOAP UI. If you enter a wrong password, the fusion system does not respond with an error message or exception. Instead, it simply sends back the request which it received. Completely. Without any indication of any error. So if you start getting back your request payload in the response, check the credentials.