В отчете BIRT есть два параметра строкового текстового поля, которые выглядят одинаково на странице «Редактировать параметр», и оба пусты в поле «Значение по умолчанию». Однако, когда я выбираю запуск отчета, один по умолчанию выбирает «Нулевое значение», а другой по умолчанию использует пустую строку. Как я могу настроить, какое значение по умолчанию используется? Ни один из параметров не используется набором данных, поскольку это просто текст.
Как заставить параметр по умолчанию иметь нулевое значение в отчете BIRT?
Ответы (2)
Обработка нулевых параметров — одна из слабых сторон BIRT. Например, нельзя просто оставить значение параметра набора данных по умолчанию пустым. И если во время выполнения в набор данных действительно передается нуль, BIRT выдает огромные бесполезные трассировки стека, говорящие, что это не поддерживается... На стороне Oracle NULL и пустая строка эквивалентны, поэтому я обычно использую "" в качестве значение по умолчанию и убедитесь, что нулевое значение, переданное из контекста, преобразуется в "" с помощью этого маленького помощника:
function nvl_mt(x) {
if (x==null) {
return "";
}
return x;
}
Чтобы узнать, почему параметры ведут себя по-разному, взгляните на исходный XML, возможно, вы найдете разницу там.
Также обратите внимание, что для каждого параметра отчета BIRT имеет значение по умолчанию, хранящееся в файле .rptdesign, и еще одно значение по умолчанию, хранящееся в соответствующем файле .rptconfig, который используется только при запуске отчета из среды IDE.
У меня есть несколько отчетов с аналогичными ограничениями.
Одним из решений является использование «Все» в качестве значения по умолчанию и бит, если SQL такой. Он возвращает либо одно введенное значение, либо все («Все» не является допустимым значением в CONTCTSM1.OPERATOR_ID, поэтому всегда будет возвращаться нуль.
where CONTCTSM1.OPERATOR_ID = ?
or
'All' = ?
В качестве аллитерации вы можете использовать подобный оператор в своем SQL и % в качестве значения по умолчанию.
where UPMCNOTIFICATIONCONTACTSM1.UPMC_ADDRESS like ?
and UPMCNOTIFICATIONCONTACTSM1.UPMC_FULL_NAME like ?
НО
Null не отображается при поиске подстановочных знаков. Так что, если у вас действительно есть Null в ваших данных, вы можете захотеть SQL isnull() или sub is null запрос
and ( UPMC_METADATA_DOMAIN like ?
or UPMC_METADATA_DOMAIN is null )