Страница 1 из 1

Проверка существования переменной

Добавлено: 03 янв 2018, 14:14
Golland
Добрый день, подскажите пож., как можно проверить существует ли переменная(объявлена) в отчете. Возникла ситуация, когда на переменную ссылаются элементы отчета, но сама переменная была удалена раннее. Спасибо.

Re: Проверка существования переменной

Добавлено: 04 янв 2018, 07:41
Vadim
Здравствуйте

Код: Выделить всё

report.getDictionary().getVariables().get(variableName)

Re: Проверка существования переменной

Добавлено: 04 янв 2018, 19:57
Golland
Добрый день. Вставил в текстоое поле синтаксис
{report.getDictionary().getVariables().get("Language")}
и получил ошибку

Jan 04, 2018 9:54:13 PM com.stimulsoft.report.engine.parser.StiParser ParseTextValue
WARNING: Parser error: The name 'report' does not exist in the current context
Jan 04, 2018 9:54:13 PM com.stimulsoft.report.engine.parser.StiParser checkForDataBandsUsedInPageTotals
WARNING: Expression in Text property of 'Text50' can't be evaluated! Parser error: The name 'report' does not exist in the current context
Jan 04, 2018 9:54:13 PM com.stimulsoft.base.utils.StiLoggingUtil showWarning

Re: Проверка существования переменной

Добавлено: 05 янв 2018, 10:07
HighAley
Здравствуйте.

Не совсем понятна суть вашего вопроса.
Присланный нами код для проверки наличия переменной извне отчёта.
По логике работы с нашим продуктом, если вы делаете какие-то изменения с отчётом, по должны проверить его работоспособность.
После удаления переменной, вы получите ошибку, которая не позволит построить отчёт ещё на стадии его дизайна.

Спасибо.

Re: Проверка существования переменной

Добавлено: 05 янв 2018, 10:14
Golland
Добрый день. Переменная вызывается динамически через this[VariableName]. Суть вопроса в том, можно ли до момента обращения к переменной проверить ее существование(объявление). Сделать это нужно в самом отчете посредством использования условия, IIF к примеру. Спасибо.

Re: Проверка существования переменной

Добавлено: 11 янв 2018, 03:17
Ivan
Здравствуйте.
Golland писал(а):Суть вопроса в том, можно ли до момента обращения к переменной проверить ее существование(объявление).
Проверить, объявлена ли переменная в словаре - нельзя, такой функциональности нет.
Но с помощью выражения this["VariableName"] можно получить значение переменной. При этом, если переменная в словаре не объявлена - вернётся значение null.
Хотя переменная типа string или object, которая не инициализирована, тоже вернёт null. Но в некоторых случаях этого бывает достаточно.
Чтобы дать какие-то более конкретные рекомендации - уточните, что именно вы потом будете с этой переменной делать.
Golland писал(а):Сделать это нужно в самом отчете посредством использования условия, IIF к примеру.
Необходимо уточнить, что IIF - это не условный оператор if, а функция, все аргументы которой рассчитываются до вызова функции.
Поэтому например проверка IIF(a!=0, b/a, c) не будет работать и выдаст ошибку при a==0, т.к. выражение b/a будет рассчитываться всегда.
В этом случае надо использовать тернарную операцию: a!=0 ? b/a : c
Только есть нюанс: тернарная операция будет правильно работать только в следующем билде, на данный момент её синтаксис распознаётся, но реализована она через IIF.

Спасибо.