Since I had a strange reply for the previews post in oracle forums
I decided to investigate cascading LOVs a little more
So I created a ManagersLOV view object with query:
SELECT m.EMPLOYEE_ID,
m.FIRST_NAME,
m.LAST_NAME,
m.DEPARTMENT_ID
FROM EMPLOYEES m
WHERE EXIST (select null
from employees e
where e.manager_id = m.employee_id)
I added bind variable inDepartmentId and view criteria for DepartmentId
I added it as LOV in the employees view and in the accessors I set DepartmentId as value for the bind variable.
SELECT m.EMPLOYEE_ID,
m.FIRST_NAME,
m.LAST_NAME,
m.DEPARTMENT_ID
FROM EMPLOYEES m
WHERE EXIST (select null
from employees e
where e.manager_id = m.employee_id)
I added bind variable inDepartmentId and view criteria for DepartmentId
I added it as LOV in the employees view and in the accessors I set DepartmentId as value for the bind variable.
I see in property inspector that Row Level Bind Variables is set to true.
I also added ManagerId in query Criteria
I test the application.
In query page if I select a department from LOV and then open manager LOV, managers are filtered correctly depending on department, But:
Bug 1:
If I Type a value in department (or if I remove value) and then try to select manager then the managers are not filtered correctly.
I test the application.
In query page if I select a department from LOV and then open manager LOV, managers are filtered correctly depending on department, But:
Bug 1:
If I Type a value in department (or if I remove value) and then try to select manager then the managers are not filtered correctly.
Bug 2: If I type an invalid value in Department and press search, and then try to select a manager I have a null pointer exception.:
Caused by: java.lang.NullPointerException
at oracle.adfinternal.view.faces.model.binding.FacesCtrlSearchBinding$AdfCriterionValues.(FacesCtrlSearchBinding.java:2834)
Caused by: java.lang.NullPointerException
at oracle.adfinternal.view.faces.model.binding.FacesCtrlSearchBinding$AdfCriterionValues.
Bug 3: If I type an invalid value in Department and go to Edit page (press Edit or New) and return (New Search) tha page is corrupted with the same null pointer exception.
Bug 4: In Edit page I type an invalid value in ManagerId, then I change the department and try to select new value for the ManagerId from the LOV. But the managers are filtered according to the old department
So I think this is not correct so I go to the LOV of ManagerId field and in the UI Hints I select the checkbox Filter Combo Box Using 'ManagersLovCriteria'
I go again to the accessor and I see that property Row Level Bind Variables is empty.
I go again to the LOV of ManagerId field and in the UI Hints and I see the checkbox Filter Combo Box not checked. No mater how many times I try to check it it remains unchecked.
So I try the application and I reproduce all the above bugs.
So I manually change the value of property 'Row Level Bind Variables' to “false” and I try the application.
I cannot reproduce the Bugs 2 and 3 with NullPointerException but the Managers never filter for the selected department no mater if I select it from LOV or not
So as a conclusion, cascading LOVs don't work correctly in Jdeveloper 11g r1 no mater the value of
'Row Level Bind Variables'
Find test case application at:
Great Job!
ReplyDeleteIt is good to know the current status of Cascade LOVs in this new Release!
Thank you!
I think all the problems here stem from the same issue: when using an LOV on a query, you must set the autosubmit on the attribute in the View.
ReplyDeleteOpen up your EmployeesView, go to
Attributes, double-click on Dept,
go to Control Hints in the "Edit Attributes" dialog, and change Auto-Submit from the
default of "false" to "true".
In general, there is no need to autosubmit
on attributes; however, when you have
a cascading LOV situation, where the
values of another attribute are dependent
on the values of a first, then there has got
to be some way to tell the server about the changes in the first. Autosubmit does that.
This is a requirement for the base attribute in a cascading LOV situation.
The new release has moved toward many rich-client types of behaviors, and as a result, there is a greater burden on developers to realize the implications of client side actions.
Hope this helps.
I havent reproduced, for me Cascading LOV components work well with suggested proper solution.
ReplyDeleteRegards,
Andrejus
Thanks for the tip guys, but it doesn't help much.
ReplyDeleteIt solves the bug 1 but now i get null pointer exception as soon as i type an invalid value for departmentId and press search or new.
So it does not solve bugs 2,3 and 4.
also in query criteria i have now the bug described in previus post http://adfbugs.blogspot.com/2009/07/adf-input-list-of-values-autosubmit-bug.html
I've posted my findings in http://forums.oracle.com/forums/thread.jspa?threadID=928068
ReplyDeleteThanks Steve, Always helpfull
ReplyDelete