Posts

Set current row after commit/rollback (with a twist)

Image
One of the most common requirements from user experience perspective is to keep the currently edited row selected after commit or rollback, or mark the newly created row as the current row. For edit use-case, this is quite simple to achieve. Step 1: Store the current row key. Step 2: Edit record and commit. Step 3: Execute query. Step 4: Set the old row as the current row in the Row Set. Here's a code snippet: Does this logic holds good for new rows?. Well yes, almost! Imagine this scenario: 1. You have a table of employees with a search option. You have searched for department id 10. That shows up all employees from department id 10. 2. Now you create a new employee, but this time, for department 20. 3. Now, after commit, you try to set the set the new row as the current row. Now you get an exception! oracle.jbo.RowNotFoundException: JBO-25020:View row of key oracle.jbo.Key[201] not found in EmployeesVO1Iterator. Quite obvious, isn't it? The new...

Passing tokens to ADF Faces Message

Image
The following article shows how to add tokens to Faces Messages popped up on GUI. Tokenization can be achieved by using java.text.MessageFormat class' format method. The format method takes in 2 arguments: 1. A String message - you can add a bundle text with tokens. The tokens will be replaced by supplied values, and the completed message will be displayed on the GUI. 2. Arguments of type Object array (Object[ ]). The end results are as follows: So how do we achieve this? Step 1: We build the object arguments from the EmployeesVO1Iterator current row. Step 2: We fetch the display message from the ViewControllerBundle file. Step 3: We pass the arguments to the message, and the message is formatted using those arguments, and finally displayed on the GUI. The below image shows the above logic inside a button action listener: The "emp_click_message" bundle key looks something like this: And here is how tokenization is achieved for the two ar...

Complex datatypes for ADF AM/VO client service methods

Image
JDev: 12.2.1.3.0 Source:  GitHub One very recent work-related requirement was to pass and return complex data types from an Application Module Implementation class method. For those of us who are familiar with this concept, we know that we usually pass around native Java data-types, like String, Integer, Boolean, etc, or maybe List, Map. But what if we need to pass and return a complex POJO - such as an Employees object (as shown below)? You might have also noticed that we are able to pass and return oracle.jbo.Row objects. But JDev does not allow us to create a service method if we want to return a view object's implementation class, such as EmployeesVORowImpl . The reason that AM client service implementation allows certain data-types is that those data-types are available to both Model and ViewController projects. If you open up Model or ViewController project properties and search for oracle.jbo.Row class, you will find that it is include...