Проблемы с переменными типа GUID в диайнере

Обсуждение Stimulsoft Reports.NET
Ответить
Валерий В. Шинкевич
Сообщения: 83
Зарегистрирован: 21 фев 2007, 06:29
Откуда: Нижний Новгород/Йошкар-Ола

Проблемы с переменными типа GUID в диайнере

Сообщение Валерий В. Шинкевич »

Для того, чтобы присвоить переменной типа GUID значение в окне Edit Variable в поле Value приходится писать

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

new Guid("034eba81-4180-4ffa-a597-4b66b2c9594b")

по той же причине иногда замечаю, что
при передаче Guida из программы в нескомпилированный отчет (для дизайнера)
для присвоения переменной генерируется следующий код

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

this.department = 034eba81-4180-4ffa-a597-4b66b2c9594b;
что есстественно приводит к ошибке.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Проблемы с переменными типа GUID в диайнере

Сообщение Edward »

Для того, чтобы присвоить переменной типа GUID значение в окне Edit Variable в поле Value приходится писать

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

new Guid("034eba81-4180-4ffa-a597-4b66b2c9594b")
Да, это совершенно правильная последовательность действий.

А вот это присвоение в коде

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

this.department = 034eba81-4180-4ffa-a597-4b66b2c9594b;
что есстественно приводит к ошибке.
воспроизвести не удалось.

Если я правильно понял, Вы указываете new Guid("034eba81-4180-4ffa-a597-4b66b2c9594b"), а получаете ошибку при сериализации этого выражкения в код отчета, правильно?

Вы не могли бы привести точную последовательность действий, чтобы мы смогли воспроизвести данную проблему.

Спасибо.
Валерий В. Шинкевич
Сообщения: 83
Зарегистрирован: 21 фев 2007, 06:29
Откуда: Нижний Новгород/Йошкар-Ола

Проблемы с переменными типа GUID в диайнере

Сообщение Валерий В. Шинкевич »

такой вот код инициализации переменных перед вызовом отчета (если вызывается для печати - отчет уже скомпилирован):

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

        public void SetVariable(string name, object value)
        {
            if (Report != null)
            {
                if (Report.IsCompiled)
                {
                    Report[name] = value;
                }
                else
                {
                    if (Report.Dictionary.Variables.Contains(name))
                    {
                        Report.Dictionary.Variables[name].ValueObject = value;
                    }
                    else
                    {
                        Report.Dictionary.Variables.Add(name, value);
                    }
                }
            }
        }
вызов отчета (примерно - на самом деле код разбросан по методам двух классов)
forDesign = true

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


Report.Load(ReportFileName);
if (!forDesign)
{
   Report.Compile(AssemblyPath, StiOutputType.ClassLibrary, true);
}


SetVariable("DocDate", DocDate.Date);
SetVariable("_department", _department.ID);


if (!forDesign)
{
   Report.Render(true);
   stiPreviewControl.SaveConfig();
   stiPreviewControl.Report = Report;
   stiPreviewControl.Refresh();
   stiPreviewControl.LoadConfig();
}
else
{
   Report.Design(true);
}

в итоге, в дизайнере, в коде отчета видим:

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

 // Variables init
            this.DocDate = ParseDateTime("2/24/2008");
            this._department = db03b680-bfd9-479a-8bf4-92726d460a75;
.....           
Валерий В. Шинкевич
Сообщения: 83
Зарегистрирован: 21 фев 2007, 06:29
Откуда: Нижний Новгород/Йошкар-Ола

Проблемы с переменными типа GUID в диайнере

Сообщение Валерий В. Шинкевич »

Кстати, для чего наряду с Report.IsCompiled существует Report.NeedsCompiling ???
По - моему это только вводит дополнительные проблемы...

например, при проверке только Report.IsCompiled:

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

Report = StiReport.GetReportFromAssembly(AssemblyPath, true); // по идее загружается уже скомпилированный отчет, НО...

if (Report.IsCompiled)  // = false
                {
                    Report[name] = value;   // Этот оператор не будет выполнен
                }

if (!Report.IsCompiled)  // Report.IsCompiled = false
                {
                    Report.Compile();   // А тут вовсе возникнет исключение, поскольку отчет уже скомпилирован
                }
И методом проб и ошибок я пришел к тому, что лучше использовать такую проверку

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


if (forDesign || !File.Exists(AssemblyPath) || recompile)
{
   Report.Load(ReportPath);
   
   if (!forDesign)
   {
        PrepareData(true); //вызывается перед компиляцией, поскольку некоторые 
                                    //переменные могут быть неопределены и это вызовет ошибку при компиляции

        Report.Compile(AssemblyPath, StiOutputType.ClassLibrary, true);
    }
}
else
{
    Report = StiReport.GetReportFromAssembly(AssemblyPath, true);
}
 
..............
..............

if (Report.IsCompiled||!Report.NeedsCompiling)
{
   Report[name] = value;
}
else..................
Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Проблемы с переменными типа GUID в диайнере

Сообщение Vital »

Здравствуйте,
Кстати, для чего наряду с Report.IsCompiled существует Report.NeedsCompiling ???
По - моему это только вводит дополнительные проблемы...
Флаг IsCompiled указывает на то, что отчет еще не скомпилирован и его нужно скомпилировать.
Флаг NeedsCompiling указывает на то, что отчет сохранен как скомпилированная сборка и его не нужно (или нужно) компилировать.

Спасибо.
Валерий В. Шинкевич
Сообщения: 83
Зарегистрирован: 21 фев 2007, 06:29
Откуда: Нижний Новгород/Йошкар-Ола

Проблемы с переменными типа GUID в диайнере

Сообщение Валерий В. Шинкевич »

Так что насчёт этой проблемы ???!!!
А вот это присвоение в коде

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

this.department = 034eba81-4180-4ffa-a597-4b66b2c9594b;
что есстественно приводит к ошибке.
воспроизвести не удалось.
происходит когда

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

..................
                    if (Report.Dictionary.Variables.Contains(name))
                    {
                        Report.Dictionary.Variables[name].ValueObject = value;
                    }
                    else
                    {
                        Report.Dictionary.Variables.Add(name, value);
                    }
................
                    Report.Design(true);

            }
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Проблемы с переменными типа GUID в диайнере

Сообщение Edward »

Большое спасибо за подробные примеры.

Да, проблема действительно есть. Мы сообщим Вам о готовности решения в этом топике.

Спасибо.
Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Проблемы с переменными типа GUID в диайнере

Сообщение Vital »

Ошибка исправлена в билде от 3 марта.

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