вторник, 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 вручную, остальные формируются по полям автоматически. 




  

Комментариев нет:

Отправить комментарий