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

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

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

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

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

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

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

Спасибо.

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

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

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

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

Спасибо.

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

Добавлено: 10 апр 2015, 15:13
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 КБ) 5323 просмотра
Т.е., вопросы:
1) Как, все-таки, передать null в качестве параметра процедуры?
2) Что это за неописанный чекбокс, обведен на картинке красным?
3) И повторюсь, для коммерческого продукта так падать - крайне не красиво. Пусть бы он выдал мне сообщение "что-то не так", но падать то зачем? надо хоть файл сохранить

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

Добавлено: 12 апр 2015, 20:25
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, но нормальное построение отчета в этом случае не гарантируется.

Спасибо.

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

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

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

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

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

Добавлено: 15 апр 2015, 13:05
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") и в результате этого весь его труд по рисованию отчета пошел в урну. А ведь автосохранение по умолчанию, насколько помню, не включено. Т.е. предлагаю в случае сложной ошибки дать хотя бы шанс на сохранение файла с шаблоном отчета. А вообще-то считаю, что надо не закрывать программу, а просто отказываться от построения отчета, и все.
Описанная вами проблема - это недоработка нашего продукта.
В следующем билде мы добавим необходимые изменения, чтобы возникающие ошибки построения отчета не закрывали дизайнер.

Спасибо.

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

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

К слову, вариант с правкой всех хранимых процедур, для добавления параметров по умолчанию, встретил решительное осуждение DBA

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

Добавлено: 16 апр 2015, 14:58
Aleksey
Здравствуйте,

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

Спасибо.