Показаны сообщения с ярлыком ViewCriteria. Показать все сообщения
Показаны сообщения с ярлыком ViewCriteria. Показать все сообщения

вторник, 29 октября 2013 г.

Как получить текст запроса для поисковой формы


Хотим получить запрос выполняющийся в поисковой форме (Query) элементе
для этого переопределяем метод executeQueryForCollection объекта ViewObjectImpl

    protected void executeQueryForCollection(Object qc, Object[] params,
        int numUserParams) {
            System.out.println("--- numUserParams "+numUserParams);
            System.out.println("--- getQuery "+getQuery());
            for(int i=0;i<numUserParams;i++) {
                Object[] o = (Object[])params[i];
            System.err.println(o[0] + " " + o[1]);
        }
        super.executeQueryForCollection(qc, params, numUserParams);
    }

Получаем что-то такое:


SELECT * FROM
(SELECT /*+ FIRST_ROWS */ IQ.*, ROWNUM AS Z_R_N FROM
(SELECT TrInOperationsEO.ID,         TrInOperationsEO.INOUT_DATA_LOG_ID,
...
TrInOperationsEO.CLIENT_CODE
FROM TR_IN_OPERATIONS TrInOperationsEO
WHERE (ROWNUM <= :bndMaxRows)
AND ( ( ( (TrInOperationsEO.ID = :vc_temp_1 )
AND (TrInOperationsEO.INOUT_DATA_LOG_ID = :vc_temp_2 ) ) ) ) ORDER BY id DESC
) IQ  WHERE ROWNUM < :Bind_RangePage_High
) WHERE Z_R_N > :Bind_RangePage_Low

Надо заметить, что параметры Bind_RangePage_High, Bind_RangePage_Low возникают из постраничного вывода VO, остальные имеют имена vc_temp_1, vc_temp_2, и т.д. в соответствии с тем, какие параметры отмечены в форме.

Список параметров выглядит примерно так:


bndMaxRows 100
vc_temp_1 15613
vc_temp_2 23
vc_temp_3 R

Первая переменная bndMaxRows добавлена в запрос VO вручную, остальные формируются по полям автоматически. 




  

воскресенье, 13 октября 2013 г.

Работа с критериями поиска ViewCriteria


Полезные ссылки:


ViewObject (VO) - Выводимый Объект (ВО)
ViewCriteria(VC) - Критерий Поиска (КП)

Похоже, Критерии Поиска довольно мощный и гибкий механизм. Суть в том, что на один VO можно навесить несколько разных критериев, а затем, использовать один и тот же VO в нужном контексте. 

Примерная последовательность действий:
  • Добавляем несколько КритериевПоиска в интересующий ViewObject
  • Создаем таблицу "t1" в форме на основе VO
  • Добавляем в форму popup элемент в который вставляем query(Запрос с Параметрами) на основе NamedCriteria   для нашего VO.  Можно создать Запрос с Параметрами на основе конкретного Критерия Поиска, но потом всё-равно можно перемещаться выбирая другие КП.
  • Для каждого КП можно декларативно определить выводимые параметры на основе атрибутов VO
----------------------------------------------------------------------------------------------------------

Программное изменение использования атрибута в запросе критерия

В классе ViewObjectImpl определяем метод:


public void setQuerable(String attributeName, Boolean isQuerable) {  
   
     int indx = this.getAttributeIndexOf(attributeName);  
   
     ViewAttributeDefImpl attr = (ViewAttributeDefImpl)this.getAttributeDef(indx);  
   
     attr.setQueriable(isQuerable);  
   
   }