Monday, July 11, 2016

ADF: using popupFetchListener to execute a method before the popup opens

When developing ADF applications, a common way to create or update a record is doing it in a popup. There are many ways to do it that I have seen in some of my last ADF projects, for example:

  • Executing createInsert operation in the button's action listener and then opening the popup programmatically 
  • Using an action listener to create the record and using showPopupBehavior with triggerType set to click (In this case, if the button is disabled on some condition, the actionListener will be executed anyway)

In this post I am going to show you another way, using popupFetchListener.

In this example we are going to drag and drop Departments view object as a table (we don't really need it but we can see the new created record), and 2 buttons, one for creating records and other for editing them.

In each button we are going to add a showPopupBehavior component  with triggerType property set to action and popupId proerty set to the id of our popup.


Sunday, July 3, 2016

ADF: tagCloud component overview

In ADF 12.2.1.1, released a couple of weeks ago, we had many new features as you can see in my previous post ADF 12.2.1.1 has been released: Bug fixes and lots of new features.

One of them is the DVT component Tag Cloud (af:tagCloud).

In this example I am going to show a quick overview of the component. I am going to use Jobs and Employees tables of HR schema.

In order to create the component we just have to drag and drop the desired viewobject into our page and select 'Tag Cloud'.


In the wizard we have to provide at least 2 fields: 'Text Value' that will be de displayed value in the tag cloud and 'Relative Size' that will determine the size of each item.
We can also create Grouping rules to make each group to have a different color or to highlight the items of the group when we hover them, etc.



If we run the application, by default we will see something like this (rectangular layout).

Wednesday, June 22, 2016

ADF 12.2.1.1 has been released: Bug fixes and lots of new features

Oracle has released a new version 12.2.1.1, not just and ADF version, it is a new release for all Oracle Fusion Middleware products.

Although this could be seen as a minor release, it comes with lots of new features in ADF Business Components, mainly in REST support, and Data Visualization Tools among others, as well as a lot of bug fixes.



There are many new enhancements to Gauge components, we can now set a title, border and also set the indicator wider that the plot area.

Monday, June 13, 2016

Oracle MAX: Building my first application (Part 2): Application development

In the last release of Oracle Mobile Cloud Service, Oracle Mobile Application Accelerator (Oracle MAX) and Location Services were released. In my first technical post about MCS 2.0 I am going to focus on Oracle MAX, the new tool that allows us to create applications without coding, and that will enable business users, and people that doesn't know about programming, to build applications easily.

This is a 2 part post where you can find:

In the first part of this post we built a Custom API that we will consume from Oracle MAX.

In order to access Oracle MAX, In Oracle MCS applications menu, we have to click on Mobile Applications.

If we want to allow a business user to access Oracle MAX we need to asign them MobileEnvironment_BusinessUser role. Any other user should not have this role as it will not be allowed to access Oracle MCS itself.


This is what we will see the first time we log into Oracle MAX. As we don't have any application, we can just create a new one.


Once we click on New Application, we will see the first wizard. We have to set the name of the application. This is the name that we will see in our device.


The next step is to define the layout among the predefined ones.

Wednesday, June 8, 2016

Oracle MAX: Building my first application (Part 1): Custom API design

In the last release of Oracle Mobile Cloud Service, Oracle Mobile Application Accelerator (Oracle MAX) and Location Services were released. In my first technical post about MCS 2.0 I am going to focus on Oracle MAX, the new tool that allows us to create applications without coding, and that will enable business users, and people that doesn't know about programming, to build applications easily.

This is a 2 part post where you can find:

Before that any user can create an application we have to design correctly our Custom API.

Oracle MAX uses business object, so first we need to define schemas for the endpoints.

In this quick example, in our Custom API we are going to have 2 endpoints

/posts that will return a list of all posts, and
/post/id that will give us the information of the post.


Now that we have our endpoints create we have to create schemas for them.
In the left hand side menu, we have to click on 'Schema', and if we don't have any schema yet, click on 'New Schema' button.

The first one is Post schema.


This is the base schema for the post object. Now we need to create a schema for every endpoint. 
For /posts endpints we will have getPosts


And for /posts/id endpoints we are going to create getPost schema.


The first step is completed. Now we need to associate the schema to each endpoints and create Mock Data in the responses to each endpoint.

At the moment it is mandatory, and if you don't have mock data you will not be able to create lists in the application. I would like to thanks Denis Tyrell and Laura Akel for their help with this issue.

For each endpoint we have to click on methods.


Then in responses we have to select the schema that corresponds to the endpoint by adding new Media Type.


And also adding mock data in examples tab.


Our first endpoints is finished, and our second endpoints will looks like:



The last step is to publish the API, because we will not be able to consume it if it is not published.
In API menu, right click on the desired API and click on Publish.

I am not going to implement the APIs as you cna check other posts like Post 1, Post 2, Post 3 or OTN Article. Implementation and design should be done by someone with development skills,

In the next post we will build the application itself and this step can be done by anyone, as the application development is based on wizards and we don't have to write any line of code.


Sunday, June 5, 2016

Oracle MCS: Creating PDF files in Custom APIs

Oracle Mobile Cloud Service allows you to implement Custom API using node.js. This is a powerful feature as it allows you to use any of the existing node.js modules in your implementation.

In this post I am going to show you how to create and download a PDF file that will contain the weather information for the provided city, that we will get calling a REST Connector.


If you don't know how to create a REST Connector check this post: Oracle Mobile Cloud Service: Create an API that calls a REST web service


First we need to create a connector. This is the URL we are going to use:

http://api.openweathermap.org/data/2.5/forecast/daily

Openweathermap is a free rest api where we can get the weather forecast.
We have to create some rules as we need to pass some parameters into the url. These are default values that we can override when calling the connector.


The next step is to create a Custom API.


We are going to allow annonymous calls to make it easier.


We need an endpoint with a parameter. This enpoint will have a GET method.



The last step is to implement our Custom API.
Now we need to download the JavaScript Scaffold.
At this point you need to have node.js installed (You can donwload if from this link)
After that we need to install pdfkit module.
Before executing 'npm install pdfkit' you need to be in the folder where package.json is.


After that node_modules folder will be created.
The next step is to edit package.json file to add the dependencies.
We need to add pdfkit and also we have to add the connector in oracleMobile dependencies.


PDFKit allows us to create PDF files and add text, images vector graphics, links, etc to our pdf.
In this example I am just creating one line (line 41) and inserting text based on the values returned by the connector.


We cannot test the API in MCS tester as the file cannot be downloaded, but we can use postman to do it.


We can see that the downloaded pdf contains Munich weather information for the next 3 days.



Monday, May 30, 2016

ADF: af:table filter modifications using a custom Query Listener

In one of our last projects we had the requirement to allow the user to filter tables using the table filter feature. By default you can filter String fields starting with the word that the user provides, but our customer needed to find the rows that contained the criteria.

This is an easy task that can be accomplished by creating a custom Query Listener method.


As by default the filter works with "Starts with" condition you will see that filtering by "tra" will give no result although departments like Administration exists.
In this example we will use Departments table in HR schema.


When we drag and drop to create a table and we set it to be filterable, we can see that a query listener has been created by default.


As we need to modify the filter values we need to create ouor own query listener.

The idea of this method is to get every value, and if it is String we have to change the original value and concatenate '%' before and after the value.

After that we need to call the default query listener that we can get from queryListener property in the table component.

If we end here, the  user would see the new filter with % symbol, so we are going to remove it and leave it as the user type it.


This is the helper method we use to call the default  query listener.


The last step is to set our new method as the table's query listener.


If we run the application we can see that if we filter by "tra", we can now see some records.