Posts tonen met het label PAAS. Alle posts tonen
Posts tonen met het label PAAS. Alle posts tonen

zaterdag 21 januari 2017

PAAS, the magic word

Since customization in Oracle Cloud applications is not possible (next to personalization of course) the new magic word I keep hearing is 'but you can use PAAS'. Sigh of relief right?
But what does this mean?

PAAS is a nice acronym for 'a machine' that is located 'somewhere' with 'some kind of tooling on it'.  In case of PAAS it's actually a machine in the cloud, handled by an external party (Oracle in this case).

So what is the idea behind 'we can create customizations using PAAS'? Actually what we are saying is that you need a machine to build your customizations and you can connect it to your SAAS application. You can fetch data from it using available web services or BI queries (also accessible as a web service) and you can write back data using web services. But only if the service is available! So if there is no service for it, you cannot automatically get data back into your SAAS application.



Now this machine where we build our customization on could be anywhere. It could be a local machine, you can rent it at a hosting company or rent is as a cloud service. Only in the latter case we actually speak of PAAS.

And if I have this PAAS environment, what do we still need to do?
You've got to have the tooling on it to build the customization! So let's assume we want to build some kind of fancy front-end, so we need ADF. We probably need a local database and we probably also need SOA Suite if we want to develop processes (although calling web services can be done in ADF as well of course).
So you always need a Database Cloud Service (DCS) and next to it you could use a JCS (Java Cloud Service) and install your own ADF/SOA Suite on it. Of course you would have to maintain the applications (keep them up to date with the versions you need, keep them running).
But you could also rent a SOA Cloud Service which would have the latest SOA version. This may be a good or a bad thing depending on what you want.
If the SOA Suite version changes, you may get into trouble with the services you've build to connect to SAAS of course, so you would have to keep track of each time it's changed underneath you.
Both methods have their advantages and drawbacks.

Of course to build the customizations you don't specifically need a PAAS environment, you could also use your own datacenter or hosted environment as you might do now. It depends on total cost of ownership eventually.

And WHAT can I build once I have my environment?
You can build custom screens containing custom logic, fetch data from your SAAS application, manipulate it and write back data. As said, writing back is a bit restricted, because a service MUST be available to be able to do that. Of course there are more and more services coming up, but we notice that a lot of the services still are missing certain elements (for example you can create a contract, but not risks and deliveries related to the contract).

So you can't actually change an existing form in SAAS, but you could copy it and rebuild it in your own application and skip the original form in the SAAS application. It's clear that would not be the reason why you bought the SAAS standard application in the first place ;-).
I would advice to restrict whatever you build next to SAAS is an addition, and not replacing functionality ..

Anyway .. as an application custom developer I see enough opportunity to be building customizations still for SAAS applications,  but I want to emphasize that PAAS is not the magic word that solves your problem. It's a fancy way of saying that you can build custom logic, forms, etc on an external environment (either in cloud PAAS or on premise/hosted environment).

:-)

woensdag 9 maart 2016

Banking Gateway Fusion Financials Cloud - a necessary add on

Although Oracle Financials Cloud delivers very rich functionality, it does not provide out of the box seamless integration with banks around the globe. Partly this is due to the fact that there is simply too many different banks with their own banking formats, but also .. even when standards are enforced like SEPA, each bank uses these standards in their own slightly different way.
Next to that, payments made by customers differ in the US from how this is done in Europe. In the US check payments are used, where Europe handles payments electronically.

In Oracle Financials Cloud you can upload your bank statements, reconcile them and create payment receipts. However this is a time consuming manual process and you must match the payment format required for Fusion Financials. We at Profource have developed an add-on for the Oracle Financials Cloud to remove the need for this manual exercise using the Profource Banking Cloud.

Now what does it do?

Actually there are two challenges to be solved. The first challenge is to deliver the correct outgoing payment instructions to the bank for paying suppliers, employees and trading partners.
Second is to process the incoming bank statement files and match them against open customer transactions. The higher the matching grade, the less manual work, so optimization of the matching procedure is key in this process.

Outbound payment instructions

From Oracle Financials Cloud the user submits the payment request to select approved due invoices for payment. The standard payment format delivered by Fusion should be amended slightly to match the payment format required by the specific bank like Rabobank, ABN Amro, etc. But also foreign payment formats should be amended to match the payment format BACS for the US and ISABEL for Belgium. The Profource Banking Cloud delivers a predefined set of payment formats ready for use.
We provide templates for all SEPA formats including CAMT for Rabobank, ING, ABN Amro, DNB Telepay, BACS and ISABEL.

Inbound bank statement and matching

The second key part of the banking gateway solution is the automation process for uploading, transforming and matching your bank statement files in an efficient and effective manor.
The bank statement is usually a combination of payments related to supplier invoices, incoming payments from your customers and miscellaneous entries like bank charges, interest, etc.
Matching the incoming payments to open transactions is complicated by the fact customers can use free format descriptions while paying their invoices, not always specifying the invoices or combining payments of several invoices in one line.

Oracle Financials Cloud does not provide you a standard mechanism to match invoice numbers specified in the line description, thus resulting in a high number of unmatched statement lines and extensive manual work.
The Profource Banking Cloud allows you to upload your bank statement, performs the transformation to the correct bank format required by the Financials Cloud and adds advanced matching algorithms to match the payments to the correct transactions, including matching on statement line description and invoice amount combinations. This results in much higher matching rates and reduces the manual labor required by the user.
The Profource Banking Cloud uploads both the bank statements in Cash Management and creates the receipts in Receivables.


The Profource Banking Cloud itself is displayed as an ADF page accessible from the Fusion environment. The user chooses the correct business unit and bank account and the bank statement to be uploaded.



The user can see the progress of the file processing in the file upload history and is automatically notified when the files have been processed within Oracle Fusion using BPEL processes on the background. The next thing to do for the user is to open the Bank Statements Reconciliation window in Fusion to check the unreconciled statement lines.

In the example above two lines have not yet been reconciled and must be reconciled manually.
The receipts are automatically created including bank statement description available as comments on the receipt for audit and reference purposes.



Summary

The Profource Banking Cloud is a necessary add-on to the Oracle Financials Cloud and
  • provides you with the right payment file format tailored for the bank you are using,
  • removes the time you need to enter your bank statements and receipts,
  • reduces the time you need to spend on unreconciled statement lines due to the advanced matching algorithms.

With thanks to Mathieu Kamp, Hakan Biroglu, Martijn Rijpkema and Marcel Mossel!

maandag 25 januari 2016

Auto-refresh on table in ADF

For some people this will be a very basic thing to handle, but I had to google from different sources to get this to work, so maybe this be of use to someone else too ..

My requirement is to auto-refresh a table without having to press a button or do refresh. The refresh should not be triggered by another field in the form .. the table is showing status results which are refreshed automatically from the database or other events in our SOA process.

So how does this work?

1. First make sure your table is not set to caching otherwise the data you see in your page is old even if you refresh (Oracle ADF Web Browser Refresh button gets old page/data).





a. To do this go to your table and check the object it is referring to.
b. Now open the Bindings tab of your page and find the correct iterator for this object.
c. In the property inspector of the iterator you set CacheResults to false in the advanced tab.

If you use manually refresh now you get the new data.

2. Second, we are going to add an execute action as a binding to our page. Open the bindings page again and add a binding of type Action.
Navigate to the object in your application module that refers to the table and choose as operation Execute.


3. Go back to your page and in your components palet  choose Poll to add a polling element to your page. In the property inspector you can set the interval in milliseconds (so 10000 is 10secs).



4. Go to the property inspector of the poll and choose Edit on the PollListener (open it using the wheel and choose Edit). Create a new managed bean and a method. In my case I want to refresh the status so I choose refreshStatus. Your bean is the package and could be anything like MyBean, etc to group your methods. You don't have to keep them one to one of course.


You have to choose the package where you want to add your bean. You could use
yourcompany.yourapp.view.bean
for example to make sure all your beans are stored in the same place.

5. Modify the code for the bean as follows



public void refreshStatus (PollEvent pollEvent) {          
// Add event code here...                   
  BindingContainer bindings = (BindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();                OperationBinding operationBinding = (OperationBinding)bindings.getOperationBinding("Execute");                
 Object result = operationBinding.execute();       
}
 



And make sure you include the correct libraries

import oracle.adf.model.BindingContext;

import oracle.adf.model.OperationBinding;

import oracle.binding.BindingContainer;

import org.apache.myfaces.trinidad.event.PollEvent;

6. Now in the partial trigger of the poll element we choose Edit and shuttle the table to the right.



That should do the trick! The table refreshes every so many seconds without you having to refresh it yourself.



vrijdag 18 december 2015

Schedule calling webservices in your PAAS for SAAS environment

We came across the issue that we need to fetch data from our SAAS environment (could be Sales Cloud, Financials Cloud, etc) on an ongoing basis to make sure the data in our environment is up to date and for speed we want to fetch the data in a batch at night for example.

Now we were used to schedule a concurrent program in eBS if necessary, but now we have this architecture right ...


So for example Java Cloud Service with included Database Cloud Service. We build a custom application in ADF and deploy that to our JCS.
Now we need some information from the SAAS application and of course we can call a webservice to retrieve the data, but in some cases we like to fetch data in bulk in the night for performance and so we can query a group of objects with batch-integrated information.

We cannot schedule something in the SAAS environment to call webservices (and push the data), so we need some scheduling mechanisme in our PAAS environment to retrieve the data.

Oracle Java Cloud Service itself does not support timers or cron, but the Oracle Database Cloud Service supports a package called CLOUD_SCHEDULER which is able to call a PL./SQL stored procedure service.
The Oracle Database Cloud service also supports the ability to call a REST service on Java Cloud Service. This REST service on the Java Cloud Service can call the Oracle SAAS Cloud directly or via a JCS object.

woensdag 16 december 2015

Oracle Mobile Cloud Service


Being a traditional eBS developer who touched mobile applications only slightly I had some trouble in understanding what Oracle Mobile Cloud Service actually was and offers.

I understand DBS (Database Cloud Service), which offers me a platform to run a database on so I don’t have to get myself a database and a server to run on it. I understand JCS (Java Cloud Service), which offers me a platform to run Java based applications, I also understand SAAS applications, so I don’t have to install and run ERP and Sales like applications on my own servers and maintain them.
And the nice thing is that in the cloud you have the newest features and monitoring is done in the service centers.

But now for MCS, Mobile Cloud Service (not that Messaging Cloud Service has the same acronym somehow).

 

You don’t run your mobile application on the mobile cloud service: you run it on a mobile device right. Like for an ADF application you would still build the app in your IDE, for example JDeveloper. For your ADF application you could deploy it on the Java Cloud Service and run the application from there. For your mobile application, assuming I would build it for example in MAF (JDeveloper with MAF extension) I would deploy it to the mobile device that needs to run it.

 

So why do I need a mobile cloud service then? What does it actually offer?
Like I said, your mobile app is not deployed on it, but it sort of runs through it. The main key here tying everything together being the mobile backend. It provides a layer between your mobile app

and the API’s you are calling and in the same time offers you common services like storage, (push) notifications, offline options and analytics on your services that are being called.


It’s also a kind of hub to register all the API’s you want to call. So rather than having to build in all kinds of methods to call services from external sources (in all kinds of different ways probably), you register the APIs in a uniform manor on the MCS platform and call the APIs through MCS using the URLs  exposed by MCS.



So your mobile app does not directly connect to the services outside anymore, but all through MCS and MCS provides you an abstraction layer so you can easily implement your mobile solution without worrying about how to call the services in the outside world.



And the nice thing is that the platform also monitors the calls made to the APIs. So you can see the response time and how often certain APIs are accessed.



Next to this standard monitoring it also provides you a mechanism to monitor events that you can raise through your app. For example how often a service call was delayed and for how much time. By coding these events in your app and flush it to MCS, MCS builds analytics on that.




So pretty cool right!


So on the one hand we have the services the MCS offer which we can take a look at and secondly we like to know what we need to do in our mobile app to make it work through MCS right? In this blog I will focuss on some of the features and briefly describe how to make a connection to your mobile backend in for example your MAF application to link to your mobile back end of MCS.
 

Feature Storage


 

One of the features, the analytics, I already touched briefly above. A second feature MCS offers is storage.

 
 
 
MCS offers you different ways to store data in an easy way to for example share data temporarily or to persist small data payloads off device (documents, pictures, preferences, etc).  The nice thing about putting this logic in MCS is that it can be used cross platform.
MCS offers three methods as depicted above
1.       As externalized REST APIs
2.       MCS mobile client SDK
3.       Internal to MCS using a custom API via Node.js
In MCS you simply define your storage under your Mobile Backend. It can be shared or user isolated.
 
 
Accessing the storage can be done again using REST calls as shown below.


You can also use parameters like ?limit=10 or ?offset=20, ?orderBy=contentLength:desc, etc.
So for example
{StorageURL}/collections/emp/objects?limit=10
To query the first 10 employees of your collection.
 

Feature Notification API


A second feature is the push notifications which are supported by MCS. Since each platform operating system has its own push solution (Android using Google’s Cloud Messaging service (GCM) and iOS using Apple’s Notification Services (APNS)), the MCS provides a generic notification service and provides a custom push server for multiple platforms. The MCS client SDK provides registration with APNS & GCM and displayes and handles the notifications.
The server side part provides tracking of the registrations, sending the messages, filterable distribution lists, schedule future messages and monitors delivery.

 


 

 

 

Tying your mobile app to the MCS mobile backend

 
In order for your mobile application to flow through MCS you need to tie it together. In your application XML you add these preferences. The Back End URL, the backend ID, the application key (same for Android and iOS) and finally the anonymous key to allow for anonymous access.




 



<adfmf:preferences>


    <adfmf:preferenceGroup id="mcs" label="Mobile Cloud Service Settings">


      <adfmf:preferenceText id="mobileBackendURL" label="Mobile Backend Base URL" default="https://ptsdev-usoracle88094.mobileenv.us2.oraclecloud.com:443"/>

      <adfmf:preferenceText id="mobileBackendId" label="Mobile Backend ID" default="781ec8e7-e306-460b-846c-5c4976a0caea"/>

      <adfmf:preferenceText id="mobileBackendApplicationKeyAndroid"

                            label="MBE Application Key (Android)"

                           default="cd3a8dca-6209-4431-bad4-7061a9f9b25e"/>

 

      <adfmf:preferenceText label="MBE Application Key (iOS)" id="mobileBackendApplicationKeyiOS"

      default="cd3a8dca-6209-4431-bad4-7061a9f9b25e"/>

      <adfmf:preferenceText id="mbeAnonymousKey" label="MBE Anonymous Key" secret="false" default="VVNPUkFDTEU4ODA5NF9QVFNERVZfTU9CSUxFX0FOT05ZTU9VU19BUFBJRDppaHpybTZrUW9kXzV1bA=="/>