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

Re: Использование хранимых процедур как источника данных

Добавлено: 24 авг 2015, 14:22
Aleksey
Здравствуйте,

Странно, но не смогли на вашем примере воспроизвести проблему. Файл сохраняется каждые 5 минут.

Спасибо.

Re: Использование хранимых процедур как источника данных

Добавлено: 25 авг 2015, 16:23
DmitryRu
Кажется понял в чем дело.
Если имя редактируемого файла передается в параметре командной строки, я открываю файл на редактирование так:

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

            Report = new StiReport();
            Report.Load(fileName);
            Report.Design();
При этом автосохранение не работает. Если файл открыть через интерфейс Вашего редактора File -> Open, то автосохранение работает.
Что-то можно сделать, чтобы автосохранение работало и в случае, если отчет был загружен через Report.Load?
Команда File->Save работает в этом сценарии, свойство <ReportFile> задано в .mrt файле.

Еще могу похвастаться, прикрутил к Вашем движку поддержку считывания нескольких датасетов из хранимых процедур MS SQL Server.
Процедуры, возвращающие несколько наборов данных, я объявляю со свойством "ConnectOnStart" = false и инициализирую их из Report.BeforeRender примерно так:

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

            
void ReadDataFromStoredProc(StiReport report, StiSqlSource sp)
{   
   using (var dta = new SqlDataAdapter(CreateSqlCommand(sp)))
            {
                var ds = new DataSet {Locale = CultureInfo.CurrentUICulture};
                var canDisposeDataset = true;
                try
                {
                    dta.Fill(ds);
                    report.RegData(sp.SqlCommand, ds);
                    canDisposeDataset = false;
                }
                finally
                {
                    if (canDisposeDataset)
                    {
                        ds.Dispose();
                    }
                }
            }                
}
И в связи с этим еще один вопрос.
Можно ли вызывать Dispose() у класса System.Data.DataSet, который я передал здесь в метод RegData() отчета?
Или же вызов метода Dispose() приведет проблемам с этим датасетом в отчете?
Другими словами, копирует ли метод RegData() переданный ему DataSet?

Re: Использование хранимых процедур как источника данных

Добавлено: 26 авг 2015, 15:39
HighAley
Здравствуйте, Дмитрий.

DataSet можно диспоузить только после построения отчёта. Копия таблиц не создаётся.

По поводу автосохранения нам надо провести дополнительную проверку. Сообщим о результатах чуть позже.

Спасибо.

Re: Использование хранимых процедур как источника данных

Добавлено: 26 авг 2015, 16:32
DmitryRu
Здравствуйте.
Уточните, пожалуйста, момент "после построения отчёта" наступает
1) Для Reports.Web - после окончания выполнения метода

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

StiMvcViewer.GetReportSnapshotResult(HttpContext, report);
или после того, как отчет будет удален из кэша сервера(по таймауту)?

2) Для дизайнера Reports.Net я вызываю эту функцию (RegData) из события
StiOptions.Engine.GlobalEvents.ReportBeginRender
Это мне нужно для того, чтобы в Preview редактора были видны эти несколько наборов данных из одной ХП.
Что в данном случае можно считать моментом "после построения отчета"?
Симметричное событие StiOptions.Engine.GlobalEvents.ReportEndRender?

Спасибо.

Re: Использование хранимых процедур как источника данных

Добавлено: 28 авг 2015, 09:42
HighAley
Здравствуйте.

1. Вы можете вызвать построение отчёта до метода StiMvcViewer.GetReportSnapshotResult:

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

report.Render();
...
// код удаления данных отчёта
...
StiMvcViewer.GetReportSnapshotResult(HttpContext, report);
2. Если вы будете использовать глобальное событие ReportEndRender, то могут возникнуть проблемы, если вы используете двойной проход. Это событие будет вызвано дважды и на втором проходе данных уже не будет. Во можете использовать следующее условие:

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

NumberOfPass == StiNumberOfPass.SinglePass || IsSecondPass
Спасибо.

Re: Использование хранимых процедур как источника данных

Добавлено: 01 сен 2015, 11:05
DmitryRu
Здравствуйте, спасибо за ответ, сам бы я до такого не скоро дошел :-)

По поводу проблем с автосохранением в такой программе:

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

        [STAThread]
        static void Main(string[] args)
        {
            StiOptions.Engine.HideExceptions = false;
            StiOptions.Designer.CodeTabVisible = true;
            StiOptions.Designer.PreviewReportVisible = true;
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            var r = new StiReport();
            r.Load("d:/chart1.mrt");
            r.Design();
        }
нет новостей?

К слову сказать, вкладка Код в дизайнере, несмотря на опцию

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

StiOptions.Designer.CodeTabVisible = true;
становится видна лишь при обнаружении ошибки в коде

Спасибо

Re: Использование хранимых процедур как источника данных

Добавлено: 02 сен 2015, 11:53
HighAley
Здравствуйте.

На данный момент мы вплотную заняты подготовкой нашего нового продукта -- Stimulsoft Reports.JS.
Дороботку с автосохранением имеем возможность сделать после релиза.

По поводу опции CodeTabVisible. Она скрывает возможность отображения вкладки Код. При её отключении в контекстном меню пункт убирается.

Спасибо.