Проверка существования переменной
Проверка существования переменной
Добрый день, подскажите пож., как можно проверить существует ли переменная(объявлена) в отчете. Возникла ситуация, когда на переменную ссылаются элементы отчета, но сама переменная была удалена раннее. Спасибо.
Re: Проверка существования переменной
Здравствуйте
Код: Выделить всё
report.getDictionary().getVariables().get(variableName)
Re: Проверка существования переменной
Добрый день. Вставил в текстоое поле синтаксис
{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
{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: Проверка существования переменной
Здравствуйте.
Не совсем понятна суть вашего вопроса.
Присланный нами код для проверки наличия переменной извне отчёта.
По логике работы с нашим продуктом, если вы делаете какие-то изменения с отчётом, по должны проверить его работоспособность.
После удаления переменной, вы получите ошибку, которая не позволит построить отчёт ещё на стадии его дизайна.
Спасибо.
Не совсем понятна суть вашего вопроса.
Присланный нами код для проверки наличия переменной извне отчёта.
По логике работы с нашим продуктом, если вы делаете какие-то изменения с отчётом, по должны проверить его работоспособность.
После удаления переменной, вы получите ошибку, которая не позволит построить отчёт ещё на стадии его дизайна.
Спасибо.
Re: Проверка существования переменной
Добрый день. Переменная вызывается динамически через this[VariableName]. Суть вопроса в том, можно ли до момента обращения к переменной проверить ее существование(объявление). Сделать это нужно в самом отчете посредством использования условия, IIF к примеру. Спасибо.
Re: Проверка существования переменной
Здравствуйте.
Но с помощью выражения this["VariableName"] можно получить значение переменной. При этом, если переменная в словаре не объявлена - вернётся значение null.
Хотя переменная типа string или object, которая не инициализирована, тоже вернёт null. Но в некоторых случаях этого бывает достаточно.
Чтобы дать какие-то более конкретные рекомендации - уточните, что именно вы потом будете с этой переменной делать.
Поэтому например проверка IIF(a!=0, b/a, c) не будет работать и выдаст ошибку при a==0, т.к. выражение b/a будет рассчитываться всегда.
В этом случае надо использовать тернарную операцию: a!=0 ? b/a : c
Только есть нюанс: тернарная операция будет правильно работать только в следующем билде, на данный момент её синтаксис распознаётся, но реализована она через IIF.
Спасибо.
Проверить, объявлена ли переменная в словаре - нельзя, такой функциональности нет.Golland писал(а):Суть вопроса в том, можно ли до момента обращения к переменной проверить ее существование(объявление).
Но с помощью выражения this["VariableName"] можно получить значение переменной. При этом, если переменная в словаре не объявлена - вернётся значение null.
Хотя переменная типа string или object, которая не инициализирована, тоже вернёт null. Но в некоторых случаях этого бывает достаточно.
Чтобы дать какие-то более конкретные рекомендации - уточните, что именно вы потом будете с этой переменной делать.
Необходимо уточнить, что IIF - это не условный оператор if, а функция, все аргументы которой рассчитываются до вызова функции.Golland писал(а):Сделать это нужно в самом отчете посредством использования условия, IIF к примеру.
Поэтому например проверка IIF(a!=0, b/a, c) не будет работать и выдаст ошибку при a==0, т.к. выражение b/a будет рассчитываться всегда.
В этом случае надо использовать тернарную операцию: a!=0 ? b/a : c
Только есть нюанс: тернарная операция будет правильно работать только в следующем билде, на данный момент её синтаксис распознаётся, но реализована она через IIF.
Спасибо.