Страница 1 из 1
Проблемы с переменными типа GUID в диайнере
Добавлено: 20 фев 2008, 15:26
Валерий В. Шинкевич
Для того, чтобы присвоить переменной типа GUID значение в окне Edit Variable в поле Value приходится писать
Код: Выделить всё
new Guid("034eba81-4180-4ffa-a597-4b66b2c9594b")
по той же причине иногда замечаю, что
при передаче Guida из программы в нескомпилированный отчет (для дизайнера)
для присвоения переменной генерируется следующий код
Код: Выделить всё
this.department = 034eba81-4180-4ffa-a597-4b66b2c9594b;
что есстественно приводит к ошибке.
Проблемы с переменными типа GUID в диайнере
Добавлено: 21 фев 2008, 05:16
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"), а получаете ошибку при сериализации этого выражкения в код отчета, правильно?
Вы не могли бы привести точную последовательность действий, чтобы мы смогли воспроизвести данную проблему.
Спасибо.
Проблемы с переменными типа GUID в диайнере
Добавлено: 24 фев 2008, 04:24
Валерий В. Шинкевич
такой вот код инициализации переменных перед вызовом отчета (если вызывается для печати - отчет уже скомпилирован):
Код: Выделить всё
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;
.....
Проблемы с переменными типа GUID в диайнере
Добавлено: 24 фев 2008, 14:05
Валерий В. Шинкевич
Кстати, для чего наряду с 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..................
Проблемы с переменными типа GUID в диайнере
Добавлено: 25 фев 2008, 03:58
Vital
Здравствуйте,
Кстати, для чего наряду с Report.IsCompiled существует Report.NeedsCompiling ???
По - моему это только вводит дополнительные проблемы...
Флаг IsCompiled указывает на то, что отчет еще не скомпилирован и его нужно скомпилировать.
Флаг NeedsCompiling указывает на то, что отчет сохранен как скомпилированная сборка и его не нужно (или нужно) компилировать.
Спасибо.
Проблемы с переменными типа GUID в диайнере
Добавлено: 28 фев 2008, 03:52
Валерий В. Шинкевич
Так что насчёт этой проблемы ???!!!
А вот это присвоение в коде
Код: Выделить всё
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);
}
Проблемы с переменными типа GUID в диайнере
Добавлено: 03 мар 2008, 07:19
Edward
Большое спасибо за подробные примеры.
Да, проблема действительно есть. Мы сообщим Вам о готовности решения в этом топике.
Спасибо.
Проблемы с переменными типа GUID в диайнере
Добавлено: 03 мар 2008, 16:07
Vital
Ошибка исправлена в билде от 3 марта.
Спасибо.