Цель: ограничивать элементы в атрибуте интерфейса (выпадающий список) в зависимости от входных параметров. В нашем примере - три атрибута CAUSE_1, CAUSE_2, CAUSE_3, содержащих один и тот же комбо-бокс. Нужно выводить только те элементы, которые актуальны на текущий момент (в параметрах интегратора вводится месяц и год)
15.06.2014
10.06.2014
JBO-27122: SQL error during statement preparation
Ошибка появляется, если VO выполняется сначала с ограчением в n1 предикатов, затем в n2 предикатов, причем n2 < n1. Пример:
Для устранения ошибки достаточно принудительно очистить ограничение (раскомментировать строки во втором выполнении)
CausesVOImpl causeVO = getAm().getCausesVO1(); // первое выполнение if (!causeVO.isPreparedForExecution()){ causeVO.setMaxFetchSize(999); } causeVO.executeEmptyRowSet(); causeVO.setWhereClause("CAUSE_NUMBER > :1 and GROUP_ID = :2"); causeVO.setWhereClauseParam(0, causeNumber); causeVO.setWhereClauseParam(1, groupId); causeVO.executeQuery(); // второе выполнение CausesVOImpl causeVO = getAm().getCausesVO1(); if (!causeVO.isPreparedForExecution()){ causeVO.setMaxFetchSize(999); } causeVO.executeEmptyRowSet(); // causeVO.setWhereClause(null); // causeVO.setWhereClauseParams(null); causeVO.setWhereClause("GROUP_ID = :1"); causeVO.setWhereClauseParam(0, getEntityId()); try{ causeVO.executeQuery(); }catch (Exception e){ System.out.println(e.getMessage()); }В приведенном примере ошибка возникнет при втором вызове executeQuery(). Как видим, setWhereClause и setWhereClauseParam не перекрывают ранее заданные значения.
Для устранения ошибки достаточно принудительно очистить ограничение (раскомментировать строки во втором выполнении)
08.06.2014
Отчет из данных ViewObject
Мы можем выдать пользователю отчет сразу по нажатию кнопки, без создания конкаррента. Такое удобно, например, при выгрузке в Excel результатов с поисковой формы.
Ключевые моменты.
1) Формирование XMLNode c данными из VO. Первый параметр - глубина структуры XML.
Шаблон для нашего отчета будет иметь особенности. Имя группы будет составлено как Имя_VO || 'Row'. Например, если VO отчета назывался ReportVO, то группа будет названа ReportVORow. Имена элементов будут совпадать с именами атрибутов VO. Отдельная группа - вручную добавленные параметры шапки:
Ключевые моменты.
1) Формирование XMLNode c данными из VO. Первый параметр - глубина структуры XML.
XMLNode xmlNode = (XMLNode)reportVO.writeXML(4, XMLInterface.XML_OPT_ALL_ROWS);2) Добавление доп.параметров в XML (параметры шапки)
XMLNode xmlNode = (XMLNode)am.invokeMethod("fillWithVODataset"); XMLDocument doc = xmlNode.getDocument(); Element elem = doc.createElement("ReportInfo"); Element elemPeriod = doc.createElement("SomeParameter"); Text startPeriodVal = doc.createTextNode((String)someBean.getValue(pageContext)); elemPeriod.appendChild(startPeriodVal); elem.appendChild(elemPeriod); XMLNode firstChild = (XMLNode)xmlNode.getFirstChild(); // xmlNode пуст, если VO был пуст if (firstChild != null){ XMLNode parent = (XMLNode)firstChild.getParentNode(); parent.appendChild(elem); }else{ // добавляем элемент в корень xmlNode.appendChild(elem); }3) Натягиваем данные на существующий шаблон XDO
select lb.file_data from xdo_templates_b tmp, xdo_lobs lb where tmp.template_code = :1 and tmp.application_short_name = :2 and lb.application_short_name = tmp.application_short_name and lb.lob_code = tmp.data_source_code and lb.lob_type = 'TEMPLATE' and sysdate between tmp.start_date and nvl(tmp.end_date,sysdate)4) Формируем выходной поток с помощью класса oracle.apps.xdo.template.FOProcessor
Шаблон для нашего отчета будет иметь особенности. Имя группы будет составлено как Имя_VO || 'Row'. Например, если VO отчета назывался ReportVO, то группа будет названа ReportVORow. Имена элементов будут совпадать с именами атрибутов VO. Отдельная группа - вручную добавленные параметры шапки:
<dataStructure> <group name="reportVORow" source="reportVORow"> <element name="ATTR1" value="ATTR1"/> <element name="ATTR2" value="ATTR2"/> ... <group name="ReportInfo" source="ReportInfo"> <element name="SomeParameter" value="SomeParameter"/> ...