Вышел JDeveloper 12c . По мере изучения,
возможно, сделаю несколько постов на тему новых возможностей. В этой статье
посмотрим на новую возможность поиска записей «RowFinder». Создается он для ViewObject, на базе
существующего ViewCriteria. И служит для того чтобы выполнять поиски-фильтровки
данных основанных на ViewCriteria, но не
затрагивая существующий набор данных, не меняя текущей записи и состава набора
данных.
Схема HR на Oracle XE.
Настраивается RowFinder на вкладке VO.
Таким образом можно сделать несколько поисков для различных ViewCriteria и вызывать их.
Работу с RowFinder можно вести из BC API, вот основной код.
// 1. Find the view object with the row finder ViewObjectImpl vo = (ViewObjectImpl)am.findViewObject("View1"); Row r; RowIterator ri; // 2. Find the row finder RowFinder finder = vo.lookupRowFinder("FinderName"); // 3. Create name value pair for the row finder NameValuePairs nvp = new NameValuePairs(); // 4. Set the row finder mapped attribute nvp.setAttribute("AttributeName", "value"); // 5. Invoke the row finder ri = finder.execute(nvp, vo); while (ri.hasNext()) { r = ri.next(); r.getAttribute("Name"); }
Я покажу пример использования RowFinder для максимальной и минимальной з.п. сотрудников. Для VO EmployeesView создадим два соответствующих transient атрибута SalaryMin и SalaryMax. В EmployeesViewRowImpl классе выполним их вычисление
public BigDecimal getSalaryMin() { return getSalary(false); //return (String)getAttributeInternal(SALARYMIN); } public BigDecimal getSalaryMax() { return getSalary(true); //return (String)getAttributeInternal(SALARYMAX); } public BigDecimal getSalary(boolean isMax) { ViewObjectImpl vo = (ViewObjectImpl)getViewObject(); Row r; RowIterator ri; RowFinder finder = vo.lookupRowFinder("RowDepartFinder"); // Create name value pair for the row finder NameValuePairs nvp = new NameValuePairs(); // Set the row finder mapped attribute nvp.setAttribute("DepartmentId", getDepartmentId()); BigDecimal result = BigDecimal.valueOf(0); // Invoke the row finder try { ri = finder.execute(nvp, vo); while (ri.hasNext()) { r = ri.next(); if(!isMax && result.intValue()==0){ result = (BigDecimal)r.getAttribute("Salary"); } if (isMax) { if (((BigDecimal)r.getAttribute("Salary")).compareTo(result) > 0) { result = (BigDecimal)r.getAttribute("Salary"); } } else { if (((BigDecimal)r.getAttribute("Salary")).compareTo(result) < 0) { result = (BigDecimal)r.getAttribute("Salary"); } } } }
Результат работы
Функционал RowFinder может быть полезен например, для того чтобы понять наличие/отсутствие записи какого-то типа в наборе данных. Ранее это делал примерно так:
RowIterator itr = vo.findByViewCriteria(vc, -1, ViewObject.QUERY_MODE_SCAN_DATABASE_TABLES); while (itr.hasNext()) {
Источник
Working with Row Finders
P.S.
Для запуска интегрированного WLS пришлось
прописать в setDomainEnv.cmd, настройки NLS «set JAVA_OPTIONS=%JAVA_OPTIONS% -Duser.region=us -Duser.language=en».
В процессе небольшого дизайна, заметил неадекватную реакцию
дизайна страницы, на изменение свойств в инспекторе, приходилось нажимать F5 страницы,
сильно расстроило.
Комментариев нет:
Отправить комментарий