Posts

Showing posts from May, 2013

A new, interactive e-leaning on ADF mobile is available in ADF Academy

New free  e-learning course on ADF Mobile is available in ADF Academy. Check it out - ADF Mobile course

Building entity objects connected through association and view objects linked through view links at runtime

In this post I'm sharing yet another sample on building dynamic business components. The sample attached in this post covers APIs for building entity objects connected through associations as well as entity object based  view objects linked through view links.  In fact, the credit for this sample goes to my colleague Sung Im (Architect - ADF BC) who is always helpful for me on all queries or discussions centered around dynamic business components. Many thanks Sung !

This sample will teach you the following:
APIs for building entity objects at run timeAPIs for building association between  entity objects at run timeAPIs for building view objects at run timeAPIs for building view links at run timeDownload 

You can download the sample workspace from here. [Runs with Oracle JDeveloper 11g R2  11.1.2.4.0 and Oracle XE].
To know the APIs take a look at DynamicBCExample.java. The method DynamicBCExample::doProcess(...) builds entity objects for  DEPARTMENTS and EMPLOYEES table, builds as…

Referring ViewAttributeDefImpl properties from the dynamic UI tag

I have blogged on generating dynamic UI some time back. In case you missed them, here are the links
Model driven approach for building Dynamic UI
Enabling LOVs for Dynamic ViewObject attributes
Long living Dynamic Business Components

Here is a tip for you to refer the ViewAttributeDefImpl properties such as label and other custom properties  from the dynamic UI such as dynamic table.
For example if you have set label for an attribute as given below, it can be referred from UI through
#{defXXX.propertyMap.label} 

Code snippet for setting propertu for attribute definition in a dynamic view object(if you are not following this code snippet read Model driven approach for building Dynamic UI  and come back)

ViewAttributeDefImpl attrdef= getDynamicAttrdef();
attrdef.setAliasName(col.getName());
attrdef.setProperty("label", getSomeNiceLabel());

UI tag snippet referring the property that we set in the above code.

<af:tablerows="#{bindings.DynamicVO.rangeSize}"fetchSize=…

A good read on CLIENT_STATE_MAX_TOKENS !

Came across a great article by Maiko Rocha on  CLIENT_STATE_MAX_TOKENS :
www.ateam-oracle.com/understanding-client_state_max_tokens/

A new flag for SkipValidation - "validateCurrentRows"

The 12.1.2.0.0 (also available in 11.1.1.7.0) ADF release comes with a new flag for  SkipValidation attribute in page definition file - "validateCurrentRows". The setting SkipValidation="validateCurrentRows" will validate only those rows dirtied in the current request (by default run time will validate all dirty rows even if they are validated in previous requests) and also, will skip transaction level validation till you commit transaction. Try it out- its cool and may help you to avoid unwanted validation as well.

Securing ADF Business Components

Recently I came across some questions on securing entity object, view objects and business methods. The following free chapter from my book ( Oracle ADF Real World Developer’s Guide )discusses some possibilities. Take a look -

Blocking the row navigation in a table, tree and treeTable on error

Problem :  Framework is letting the business user to navigate to different row in a table(tree or treeTable) even when the currently selected row has some validation error. As there are validation error binding layer does not respond to the row selection and the UI appears to be not synchronized with model in such cases.

Solution : The 11.1.1.7.0 release has introduced a anew flag "blockRowNavigationOnError" for af:table, af:tree anf af:treeTable.
Example: 
<af:table blockRowNavigationOnError="always".../> 

Copying the description of this flag from the tag documentation.

Property                                                   Valid Values
blockRowNavigationOnError                always, never, auto

Whether we want to block row navigation in case of validation failure.
This is when you select a row and do some editing inside the table or in a related form, and this editing causes some validation failures. At this time, if you click on a different row…

JavaOne India 2013, May 8-9 at Hyderabad International Convention Centre

JavaOne India 2013 is just around the corner( May 8-9, Hyderabad International Convention Centre). This time, we have 4 sessions on ADF and a hands on lab as well.  The fullContent Catalog can be found here. See you there !


CON1178 - Understanding Oracle ADF and Its Role in Oracle Fusion
Learn what Oracle Application Development Framework (Oracle ADF) is all about, what its layers are, and what the development experience looks like. Oracle ADF is the ... View More
Wednesday, May 8, 11:45 AM - 12:45 PM - Hall 2

CON1181 - Developing for Mobile Devices: What You Need to Know Before You Start
With the explosion in the popularity of smart mobile devices, IT shops are scrambling to create applications that meet the requirements of mobile users. This sessions lays ... View More
Wednesday, May 8, 3:15 PM - 4:15 PM - Hall 2

CON1179 - The Future of Oracle Forms: Upgrade, Modernize, or Migrate?
Most Oracle Forms applications contain hundreds of man-years of investment. So what do you do with tha…

Explicitly enabling in-memory sorting for a view object

Sharing a tip that I learned while debugging an issue ;)
When you try to sort a UI component such as af:table bound to a view object, framework by default fire SQL ORDER BY clause if the selected column is not a transient one, otherwise framework will go for an in-memory sort by calling setSortCriteria(...) on the ViewObject.

You can override this default behavior by setting a custom property on the ViewObject. This make sense if your view object is a programmatic  or transient view object or if the view object contains uncommitted rows.To do this, you need to set a property named PROP_ALWAYS_USE_SORT to true (available in 11.1.1.7.0 release). When PROP_ALWAYS_USE_SORT is 'true', framework will always go for in-memory sorting.

Example:
empVO.setProperty(ViewObject.PROP_ALWAYS_USE_SORT, "true");

Warning: Note that when you enable in-memory sorting, framework will fetch all the records from the DB before performing the sort. So it makes sense only if you have limited…

Disclaimer

The views expressed on this blog are my own and do not necessarily reflect the views of my employer.