Saturday, February 21, 2009

View Criteria and CRITERIA_AUTO_EXECUTE Property

I'm writing today blog post, based on information found in following document - Known Issues for JDeveloper and ADF 11g (11.1.1.0.1). In current ADF release there is no option to control View Criteria automatic execution feature using Expression Language, auto execution can be set only decloratively in Edit View Criteria wizard, Control Hints section. However, its possible to control auto execution mode programmatically, using CRITERIA_AUTO_EXECUTE property. I will describe how to use this property and how it can be applied.

Download sample application - ViewCriteriaAutoExecuteHint.zip, where I'm conditionally rendering Query Criteria (af:query) component with auto execute set to On or Off.

At first, take a look into Employees VO, you will find there EmployeesViewCriteria. Criteria is defined without auto execution, this means by default on page load it will not bring any results:


However, lets say according to functional requirements our page will accept input parameter, this means if parameter will not be Null Criteria should bring results by default and no results otherwise. This means, we need to set View Criteria execution mode conditionally. How to do this - in current release it can be achieved programmatically:


In backing bean method we can access AM and retrieve VO. Criteria is accessed through ViewCriteriaManager and auto execution parameter (true, false) is applied. Same code can be implemented in ADF BC Model layer, however in this sample I'm using it in backing bean, because I will invoke it from ADF Task Flow.

Sample application contains following ADF Task Flow structure:

1. adfc-config.xml - Unbounded ADF Task Flow

Includes main page and two ADF Task Flow Call activities.


2. task-flow-definition-departments - Bounded ADF Task Flow with Shared Scope

Includes page with Departments table, ADF Task Flow Call activity to pass parameter to Employees ADF Task Flow and ADF Task Flow Return activity.


3. task-flow-definition-employees - Bounded ADF Task Flow with Isolated Scope

Includes page with Employees Table and Criteria, Router activity, three Method Call activities and ADF Task Flow Return activity.


For this ADF Task Flow I have defined Isolated Scope, because BUG #8263481. According to this bug, in current release Query Criteria (af:query) is not rendered correctly when passing parameters to Shared Scope ADF Task Flow.

Based on defined logic, when passed parameter is Null, Router activity navigates to notQueryAuto Method Call (where 'false' value is passed to Backing bean method to set CRITERIA_AUTO_EXECUTE property). Otherwise, when parameter is not Null, queryAuto Method Call is invoked (where 'true' value is passed to Backing bean method to set CRITERIA_AUTO_EXECUTE property). In this case, next is invoked ExecuteWithParams method, this method is setting filter parameter for View Criteria. And at last, page is opened.

On runtime, in main page we have two options - to open Employees ADF Task Flow without parameter or with.


By pressing 'Employees' button, it will be opened with Null value and Criteria will be rendered with CRITERIA_AUTO_EXECUTE = false property:


By pressing 'Departments' button, user will get a table with Departments where he can select any row and press 'Employees' button.


Means - DepartmentId from selected row will be passed to Employees ADF Task Flow and Criteria will be rendered with CRITERIA_AUTO_EXECUTE = true property:


Spanish Summary:

En este post se muestra como lograr la ejecucion automatica en los View Objects. Para ello Andrejus desarrolla un ejemplo con 2 tablas : una de departamento y otra asociada a los empleados. El efecto de ejecucion automatica se notarĂ¡ cuando ustede seleccione una fila de la tabla empleados y luego se mostrarĂ¡ la tabla de los empleados asociados a ese departamento los cuales se cargaron automaticamente.

3 comments:

Batman said...

Hello Andrejus,
Thanks for lot of your useful adf tech tips.

I have another trouble with the af:query component that I couldn't include a multiple selection choice/list box in the af:query search component, a work around idea can also help.

Thanks in Advance.

Anonymous said...

Hi Andrejus,

I have a quick question about the Query component. Currently i am building up the query component using the QueryModel which i have implemented the necessary classes for that. Unfortunately i could not be able to see the "Add fields.." button inside my query panel. Meantime i can be able to see the "Basic", "Search" and "Reset" buttons inside the panel. May i know how to enable the query component to show the "Add fields.." button. Later in my backing bean i can add AttributeCriterion into my QueryDescriptor based on the added field. Thanks in advance.

Thiva

Priyadarsini said...

Hi Andrejus,

You have mentioned that "Same code can be implemented in ADF BC Model layer". Could you please tell us how to apply the same code in model layer?. In my case a view criteria should be applied conditionally at the model layer itself.

Thanks,
Priya.