Проблема BIRT при использовании окна списка MultiSelect

Я должен был использовать список MultiSelect (динамический), где пользователь может выбрать несколько значений (удерживая клавишу Ctrl), чтобы просмотреть отчет.

Поэтому при реализации я попытался получить значение параметра в методе BeforeOpen и передать его в DataSet, добавить его в предложение where с помощью оператора IN. Я получил ошибку SQL на экране. Поэтому, когда я печатаю значение параметра, это было что-то вроде [Ljava.lang.Object;@26ba26ba], что вызывало ошибку в запросе. Я думал, что не могу обработать это значение параметра множественного выбора в сценарии и передать его в запрос. Так что отбросил эту Идею.

Теперь я использую встроенную функцию фильтра BIRT в наборе данных. То, что я делал в SQL, используя скрипт в Beforeopen Method, теперь я делаю то же самое в фильтре набора данных. Я использовал row["dataColumn"]IN param["param"].value, и он работает нормально. Я могу выбрать одно или несколько значений на экране фильтра, выполнить отчет и получить правильный результат.

Теперь еще одна вещь, которую мне нужно реализовать: в списке фильтров должно быть «Выбрать все», чтобы вместо выбора любого другого значения пользователь мог просто выбрать «Выбрать все» и вывести отчет для всех данных. Я передаю '%' против Select All. Поскольку я использую оператор IN, я не могу получить данные в отчете.

Я хочу предоставить функциональность «Выбрать все» вместе с множественным выбором, но не могу сделать это из-за вышеуказанных ограничений. В качестве альтернативы я могу использовать Ctrl + A, чтобы выбрать все, и это работает, и я могу это сделать, но это соответствует требованию, которое мне нужно реализовать.

Я использую BIRT version="3.2.17"

ЛЮБАЯ ИДЕЯ БУДЕТ ОЦЕНЕНА. Заранее спасибо.. :)


person Santosh Singh    schedule 21.03.2013    source источник


Ответы (1)


Можете ли вы добавить опцию «Выбрать все» к параметрам выбора? Я сделал это, используя объединение с моим запросом параметров и просто добавив «Выбрать все» к результатам моего запроса.

Обычно я добавляю в свой запрос что-то, что позволит мне легко заменить параметры. Что-то типа:

SELECT myStuff
FROM myTables
/**where**/

Затем вы можете изменить запрос DataSet в операторе beforeOpen.

Что-то вроде:

if(params["myParam"]!='Select All'){
    this.queryText=this.queryText.replace("/**where**/","WHERE myStuff IN ('" + params["myParams"].join("','") + "')");
} 

Это, очевидно, очень упрощено, но вы должны иметь возможность использовать его в той или иной форме, чтобы разрешить то, что вы просите.

person Phil Freeman    schedule 13.04.2013