Pages

Saturday, November 14, 2009

ADF Contextual Events in 11G R1 PS1

In a previous blog I already talked about ADF events and how you can use it in the Task Flow interaction communication. With the new JDeveloper 11g Patch Set 1, Oracle really improved this event mechanism and the JDeveloper IDE support for these events.
In this blog entry I will show you the new features and give you examples of a tree and table selection Event and inputtext change Event.
First we start by adding events to the ADF application. The first way we can do it, is by selecting an af:inputtext, af:tree or af:table component . Here an example of how you can add an event to an inputtext. Contextual Events is now part of the component property window.
The second big difference is that you can change the payload of the event. You can return now what you want, for example an binding or a backing bean method. In the previous release the payload was fixed ( return of the MethodAction or the new value of an attribute). If you don't specify a payload then this is the default.
And you can restrict the events by adding a condition to the event. In this case it only fires when the value is hello
The events are registered in the pagedef of the page or fragment. This is how it can looks like.
In this case the attributeValue got a restricted event and in the bottom the default payload is changed for this event.
The pagedef editor got a Contextual Events tab, where we can add producers or subscription to an event.

Lets subscribe to this attribute event. First we need to add an MethodAction to a page or fragment. We can call this method and pass on the attribute payload. I made a java class with this method and generate a DataControl on this class.
Open the page definition and go the Subscribers tab where we add a new one subscription. We need to select the event and the publisher ( or use any ) and the handler, this is the ADF MethodAction which has 3 parameters. And we need to provide the required values for these parameters.


That's all for the Inputtext. The value is now passed on to a other page fragment.

ADF Table selection Event
We can do the same with the ADF Table component, just select the table and go to the Contextual Events part of the property window. You can now select a class and in my case is that the Department class.
To do something usefull with this Table selection event I add a method to the Java datacontrol and add this as a MethodAction to a pagedef of a page or fragment

public String tableEvent( Object payload) {
if ( payload != null) {
System.out.println("handle tableEvent");
DCBindingContainerCurrencyChangeEvent event = (DCBindingContainerCurrencyChangeEvent)payload;
DCDataRow row = (DCDataRow)event.getRow();
if ( row.getDataProvider() instanceof Department ) {
// do department stuff like displaying the department task flow
Department dept = (Context.Department)row.getDataProvider();
return "handle tableEvent for Department "+dept.getName();
}
} else {
return "empty payload tableEvent";
}
return null;
}

Now we can add a subscription to this event and we call the above method as handler of this event.


ADF Tree Selection Event
This is almost the same as an ADF Table but now we can define more events because a tree can have different levels , In my case I made a department / employee example so I can have a department and employee event and do different things with this. For example show a department or employee Task Flow.
Here you see two events in the property window of the ADF tree. One for the department selection and one for the employees

This is how it looks like in the page defintion with an event on every level of the tree.

Here is my example workspace with Task Flows who produces these different event and the index page who pass the events on to the output Task Flow.

4 comments:

  1. Hi Edwin,
    Can you confirm if the ADF Table selection contextual event still works for 11gR1PS2? I have downloaded the project and observe nothing with regards to the table selection.

    Thanks,
    pino

    ReplyDelete
  2. Hi,

    you are right, in PS1 everything is working fine and in PS2 it gives the following errors.

    table event is not working and in the tree , the highest level node ( department event ) is not working.

    I will send the case to Frank.

    thanks

    ReplyDelete
  3. Hi Edwin/Pino,

    Good day.

    Has this issue been resolved? I am also encountering this one.
    I am using Oracle Jdev 11gRelease1(11.1.1.6.0).

    I am getting these issues also,

    table event is not working and in the tree , the highest level node ( department event ) is not working.

    Thanks,

    Jaime




    ReplyDelete
    Replies
    1. Hi,

      I don't know, but looks like a bug then.

      Thanks

      Delete