Sunday, February 6, 2011

CreateWithParams Operation for Oracle ADF BC 11g

While coaching ADF developers, I have noticed people are not using standard ADF BC Data Control operation - CreateWithParams. Instead of simply using this standard operation to assign default values on create, sophisticated algorithms are created to provide default values for the new row initialization. This happens mainly, because standard operation CreateWithParams is a bit not intuitive to use, its why developers sometimes avoid using it. In this simple blog, I will describe how you can apply CreateWithParams operation in two easy steps.

Download sample application - ADFRegionCommunication.zip.

CreateWithParams operation allows us to define parameter to assign it to the new row for some specific attribute, for example here we have parameter for JobId declared along with CreateWithParams operation:


Its very important to mention, that when you will define CreateWithParams operation by yourself, wizard will not allow you to add parameters - parameters table will be empty (its what is confusing most of the developers). So, in order to add parameter, you should right click on already defined CreateWithParams operation and choose Insert Inside - NamedData:


When NamedData will be added, manually provide attribute name, which you want to be initialized (JobId in my example). Also provide attribute type and of course initialization value:


13 comments:

Til said...

Dear Andrejus,
I couldn't understand where you give the JobId the value .
You made executewithparam but I don't know where to put my value to the variable you created.
I think the project needs more explanation.

Andrejus Baranovskis said...

Did you read all article? Its described right there in the middle about NamedData. I will not copy paste it here again:)

Enjoy !

Andrejus

ಆಶ್ವಿನ್ ಆಲ್ಮೆಡ (Ashwin Almeida) said...

Hi Andrejus,

Can we create EntityObjects that can combine multiple table, eg: Order and Order Items. So when I call a method like getOrder(orderID) the I get the order with all the order items in a Single Object as a response.

Also, can we combine or perform joins and then create VO of these, as my requirements is to create Webservice operations to perform CRUD operations. But these operations can internally do CRUD on multiple tables. I am looking some thing like Hibernate framework.

Andrejus Baranovskis said...

Yes, you need to define Associations between Entities. Then you can join multiple Entities into one VO, to create join.

One Entity should be based on one table, as it is primary concept of Entity.

Andrejus

ಆಶ್ವಿನ್ ಆಲ್ಮೆಡ (Ashwin Almeida) said...

Thanks Andrejus,

Do you have any blogs on how this is done, or any document to which I can refer.

Thanks
Ashwin

Andrejus Baranovskis said...

Yes, ADF Developer Guide section, is the best: http://download.oracle.com/docs/cd/E17904_01/web.1111/b31974/bcquerying.htm#CEGEGHFB

Andrejus

Anonymous said...

Thanks for the trick. It works perfectly.

Anonymous said...

Hi,
Thanks for the good information.

When I use this "CreateWithParams" is there a way I can make some of the fields "readonly".

i.e. when user clicks this button, it needs to make one of the attributes/field "readonly"?

Can you tell how please?

Andrejus Baranovskis said...

Hi,

You can use isAttributeUpdateable method inside EO Impl class.

Andrejus

Murali said...

Hi Andrejus,
This worked great when we have one Iterator Binding.How can we achieve the copy functionality when we have more than one Iterator Binding to deal with as if I wish to duplicate the master as well as detail grids?

Andrejus Baranovskis said...

Hi,

You can define another CreateWithParams action in PageDef, just change it name to something else, not to conflict with already added action.

Andrejus

JennyC said...

Hi,

I have created createWithParameters and it works fine for Strings and Numbers.
When I add in Date I get this error:

JBO-25009: Cannot create an object of type:oracle.jbo.domain.Date from type:java.lang.String with value:17/10/2011

In page Def:


ApprovedDt is 'Date' in VO and EO.

Why am I getting this error?

Thanks,
Jenny

Anonymous said...

Hi Andrejus,

When I drag and drop CreateWithParams operation in task flow . It throws null pointer exception error.

Please help what's going wrong?

Thanks.