Работа с переменными

Обсуждение Stimulsoft Reports.NET
Ответить
DmitryRu
Сообщения: 163
Зарегистрирован: 19 май 2014, 10:40

Работа с переменными

Сообщение DmitryRu »

Есть несколько вопросов по работе с параметрами отчета, которые может вводить пользователь. В терминах Stimulsoft- это переменные.
Предположим, я редактирую отчет в редакторе Stimulsoft Reports.Net, версия 2014.3

1) Как сделать у отчета строковый параметр (Variable), который пользователь должен обязательно ввести? Т.е. чтобы при нажатии Submit отчет не запускался на построение. Процедура, запрашивающая данные, падает, если параметр не введен.

2) Как сделать у отчета параметр "список целых чисел", в котором будет по умолчанию выделена только часть доступных параметров?
Пример:
defaults.jpg
defaults.jpg (60.5 КБ) 5363 просмотра
3) Почему Designer.exe падает при попытке построить прилагаемый отчет? Это отчет из ваших примеров, ParametersDateRange.mrt у которого всего лишь убрано значение по умолчанию для переменной.
changes.jpg
changes.jpg (57.56 КБ) 5363 просмотра
Вообще, стабильностью работы этот дизайнер не блещет. У меня он постоянно падает. Реально ли мне будет на таком коде построить приложение, которое можно будет поставлять конечным пользователям, не понимаю.
Вложения
ParametersDateRange.mrt
(41.02 КБ) 407 скачиваний
Aleksey
Сообщения: 3006
Зарегистрирован: 22 апр 2010, 06:57

Re: Работа с переменными

Сообщение Aleksey »

Здравствуйте,
1) Как сделать у отчета строковый параметр (Variable), который пользователь должен обязательно ввести? Т.е. чтобы при нажатии Submit отчет не запускался на построение. Процедура, запрашивающая данные, падает, если параметр не введен.
К сожалению, такой возможности нет. Как вариант, вы можете задать значение по умолчанию для такой переменной, чтобы процедура не "падала".
2) Как сделать у отчета параметр "список целых чисел", в котором будет по умолчанию выделена только часть доступных параметров?
К сожалению, такой возможности нет.
3) Почему Designer.exe падает при попытке построить прилагаемый отчет? Это отчет из ваших примеров, ParametersDateRange.mrt у которого всего лишь убрано значение по умолчанию для переменной.
Спасибо за сообщение об ошибке.
Проблема исправлена. Фикс будет доступен в релизе в течении недели-двух.

Спасибо.
DmitryRu
Сообщения: 163
Зарегистрирован: 19 май 2014, 10:40

Re: Работа с переменными

Сообщение DmitryRu »

Aleksey писал(а):Здравствуйте,
1) Как сделать у отчета строковый параметр (Variable), который пользователь должен обязательно ввести? Т.е. чтобы при нажатии Submit отчет не запускался на построение. Процедура, запрашивающая данные, падает, если параметр не введен.
К сожалению, такой возможности нет. Как вариант, вы можете задать значение по умолчанию для такой переменной, чтобы процедура не "падала".
Проблема тут такая - окно для ввода параметров отчета мы будем создавать сами (штатное нам не подходит по многим причинам), по нажатию кнопки "построить отчет" будет открываться новое, максимизированное окно, которое будет содержать только отчет. Параметр, о котором идет речь, обязательный - без него пользователь увидит пустой отчет, и будет вынужден закрывать окно и идти назад. Пользователю было бы удобнее, если бы при нажатии кнопки "построить отчет" ему сразу обводили красным не введенные параметры.
Для этого при редактировании шаблона отчета редактором, построенным на базе Stimulsoft, надо было бы помечать параметр как Required. Для int и Date я такую возможность в свойстве Type у класса StiVariable нашел, для string, к сожалению, нет.
Aleksey писал(а):
3) Почему Designer.exe падает при попытке построить прилагаемый отчет? Это отчет из ваших примеров, ParametersDateRange.mrt у которого всего лишь убрано значение по умолчанию для переменной.
Спасибо за сообщение об ошибке.
Проблема исправлена. Фикс будет доступен в релизе в течении недели-двух.
Спасибо, но все-таки Designer.exe падает у меня по несколько раз на дню, в том числе при демонстрации возможностей продукта руководству. Для коммерческого продукта это не приемлемо, мне кажется, надо встроить в продукт хотя бы аварийное сохранение файла перед закрытием
Aleksey
Сообщения: 3006
Зарегистрирован: 22 апр 2010, 06:57

Re: Работа с переменными

Сообщение Aleksey »

Здравствуйте,
Спасибо, но все-таки Designer.exe падает у меня по несколько раз на дню, в том числе при демонстрации возможностей продукта руководству. Для коммерческого продукта это не приемлемо, мне кажется, надо встроить в продукт хотя бы аварийное сохранение файла перед закрытием
Не могли бы вы более подробно описать в каких ситуациях у вас падает дизайнер или прислать примеры отчетов, на которых это происходит.

Спасибо.
DmitryRu
Сообщения: 163
Зарегистрирован: 19 май 2014, 10:40

Re: Работа с переменными

Сообщение DmitryRu »

Вот еще пример.
Хочу вызвать хранимую процедуру, с обязательным параметром, но хочу в качестве параметра передать NULL.
Вот код хранимой процедуры:

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

CREATE PROCEDURE dbo.MyReport
    @Parameter1 bigint
as
BEGIN
  select 1 as col1, 2 as col2
END
GO
Я полагал, что для передачи NULL в качестве параметра предназначен непонятный checkbox рядом с именем переменной. Очевидно, он делает что-то не то.
null.jpg
null.jpg (212.87 КБ) 5324 просмотра
Т.е., вопросы:
1) Как, все-таки, передать null в качестве параметра процедуры?
2) Что это за неописанный чекбокс, обведен на картинке красным?
3) И повторюсь, для коммерческого продукта так падать - крайне не красиво. Пусть бы он выдал мне сообщение "что-то не так", но падать то зачем? надо хоть файл сохранить
Вложения
Err2.mrt
(6.41 КБ) 393 скачивания
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Re: Работа с переменными

Сообщение Ivan »

Здравствуйте.
DmitryRu писал(а):Хочу вызвать хранимую процедуру, с обязательным параметром, но хочу в качестве параметра передать NULL.
Я полагал, что для передачи NULL в качестве параметра предназначен непонятный checkbox рядом с именем переменной. Очевидно, он делает что-то не то.
Т.е., вопросы:
1) Как, все-таки, передать null в качестве параметра процедуры?
Проблема в том, что SqlDataAdapter не понимает значение параметра null, он считает что параметр забыли задать и выдает exception "Procedure or function '...' expects parameter '...', which was not supplied.". Кстати, такое же сообщение выдаётся и в том случае, если значение параметра выходит за допустимые границы, или не соответствует тип.

Поэтому в качестве "null" надо использовать значение "DBNull.Value".
В вашем случае для этого необходимо в поле Expression параметра @Parameter1 вместо имени переменной Variable1 написать выражение

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

(object)Variable1 ?? DBNull.Value
DmitryRu писал(а):2) Что это за неописанный чекбокс, обведен на картинке красным?
Назначение checkbox вы определили правильно: если навести на него курсор, то через секунду всплывет подсказка "Not assigned".
Т.е. используется значение типа по умолчанию, соответственно для nullable-типов это null.
DmitryRu писал(а):3) И повторюсь, для коммерческого продукта так падать - крайне не красиво. Пусть бы он выдал мне сообщение "что-то не так", но падать то зачем? надо хоть файл сохранить
Вы можете установить следующую статическую опцию:

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

StiOptions.Engine.HideExceptions = true;
При этом все возникающие exception будут просто "проглатываться", и ничего падать не будет.

Однако тут есть нюанс.
Все ошибки можно условно разделить на два типа:
1. Простые, которые не влияют глобально на процесс построения отчета; пример - ошибка при вычислении значения отдельного текстового поля. Эти ошибки всегда отлавливаются и выводятся в окошке ReportChecker как Rendering messages.
2. Сложные ошибки, которые влияют на всё построение отчета; пример - ошибка в адаптере данных при получении данных. При возникновении таких ошибок построение отчета чаще всего не может быть продолжено, так как нарушается логика построения отчета. Эти ошибки можно отловить с помощью свойства HideExceptions, но нормальное построение отчета в этом случае не гарантируется.

Спасибо.
DmitryRu
Сообщения: 163
Зарегистрирован: 19 май 2014, 10:40

Re: Работа с переменными

Сообщение DmitryRu »

Спасибо за разъяснения.
У меня есть предложение: может, чекбокс "Not assigned" как раз и будет содержать эту логику?

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

(object)Variable1 ?? DBNull.Value
По крайней мере, для SQL Server. Ведь этот чекбокс визуально ровно для этого предназначен.
И по поводу обработки "сложных" ошибок я с Вами согласен, как программист. Однако предлагаю встать на точку зрения пользователя: он воспользовался штатным контролом (чекбокс "Not assigned") и в результате этого весь его труд по рисованию отчета пошел в урну. А ведь автосохранение по умолчанию, насколько помню, не включено. Т.е. предлагаю в случае сложной ошибки дать хотя бы шанс на сохранение файла с шаблоном отчета. А вообще-то считаю, что надо не закрывать программу, а просто отказываться от построения отчета, и все.
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Re: Работа с переменными

Сообщение Ivan »

Здравствуйте.
DmitryRu писал(а):Спасибо за разъяснения.
У меня есть предложение: может, чекбокс "Not assigned" как раз и будет содержать эту логику? По крайней мере, для SQL Server. Ведь этот чекбокс визуально ровно для этого предназначен.
Чекбокс относится только к переменной. Вы можете использовать значение переменной при вычислении значения параметра, но к источникам данных переменные не имеют никакого отношения.

Как вариант решения проблемы, можно задать значение параметра по умолчанию в самой хранимой процедуре. В этом случае SqlDataAdapter не будет ругаться на отсутствие параметра:

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

CREATE PROCEDURE dbo.MyReport
    @Parameter1 bigint = NULL
as
BEGIN
  select 1 as col1, 2 as col2
END
GO
Также мы сделали доработку для SqlSource: теперь при передаче значения параметра null заменяется на DBNull.Value
Надеемся, что эта доработка ничего не поломает у остальных наших пользователей.
DmitryRu писал(а):И по поводу обработки "сложных" ошибок я с Вами согласен, как программист. Однако предлагаю встать на точку зрения пользователя: он воспользовался штатным контролом (чекбокс "Not assigned") и в результате этого весь его труд по рисованию отчета пошел в урну. А ведь автосохранение по умолчанию, насколько помню, не включено. Т.е. предлагаю в случае сложной ошибки дать хотя бы шанс на сохранение файла с шаблоном отчета. А вообще-то считаю, что надо не закрывать программу, а просто отказываться от построения отчета, и все.
Описанная вами проблема - это недоработка нашего продукта.
В следующем билде мы добавим необходимые изменения, чтобы возникающие ошибки построения отчета не закрывали дизайнер.

Спасибо.
DmitryRu
Сообщения: 163
Зарегистрирован: 19 май 2014, 10:40

Re: Работа с переменными

Сообщение DmitryRu »

Ivan писал(а): Также мы сделали доработку для SqlSource: теперь при передаче значения параметра null заменяется на DBNull.Value
Спасибо, мне кажется, это правильный вариант.
Подскажите, в какой релиз это попадет?

К слову, вариант с правкой всех хранимых процедур, для добавления параметров по умолчанию, встретил решительное осуждение DBA
Aleksey
Сообщения: 3006
Зарегистрирован: 22 апр 2010, 06:57

Re: Работа с переменными

Сообщение Aleksey »

Здравствуйте,

Данный фикс будет доступен в первом предрелизном билде после текущего релиза 2015.1, на следующей неделе.

Спасибо.
Ответить