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

Как в шаблоне с источником в виде XML использовать отношения

Добавлено: 05 сен 2014, 15:10
centnot
Вопрос:
Как использовать отношения при работе с XML?
Как система просчитывает автоматически сгенерированные ключи?

Ситуация:
1. Есть шаблон ("positive_template_ur.mrt") у него указаны XSD ("positive_response_ur.xsd") и XML ("positive_response_ur.xml").
2. По XSD сгенерированы источники данных. Дизайнер автоматически определил вложенность элементов и для дочерних сущностей создал внешние ключи.
3. При построении отчета дизайнер считает только часть ключей.

Например:
Есть в xml ("positive_response_ur.xml", строка 150) элемент СвСтатус_РО с вложенным в него элементом СвРегОрг. При этом когда мы выводим в DataBand1 все записи СвРегОрг, то все значения внешнего ключа СвСтатус_РО_Id (автоматически созданный системой) равны 0. При этом по идее хотя бы у одной записи СвРегОрг поле СвСтатус_РО_Id должно отличаться от нуля.

Re: Как в шаблоне с источником в виде XML использовать отнош

Добавлено: 05 сен 2014, 15:14
Aleksey
Здравствуйте,

Мы работаем с XML данными с помощью стандартных .NET методов. В .Net есть некоторые проблемы при работе с вложенными данными. И здесь мы уже не сможем ничего исправить.
Поэтому, мы рекомендуем использовать плоскую структуру с отдельным указанием отношений. Как пример, вы можете посмотреть наши Demo.xml, Demo.xsd.

Спасибо.

Re: Как в шаблоне с источником в виде XML использовать отнош

Добавлено: 05 сен 2014, 16:27
centnot
Добрый день, Алексей.

Правильно ли я понял, что надо создавать отношения уже в самом дизайнере и пользоваться ими? Тогда как получить всех потомков родительской сущности если отношение создается в дочерней, и из родительской сущности доступа к дочерней нет?

Re: Как в шаблоне с источником в виде XML использовать отнош

Добавлено: 08 сен 2014, 22:40
Jan
Здравствуйте,
centnot писал(а):Правильно ли я понял, что надо создавать отношения уже в самом дизайнере и пользоваться ими?
Не совсем. Вы можете использовать готовую XSD схему. Также можно создавать связи уже в дизайнере. В целом логика работы с XML данными проста - создается ADO.Net DataSet. Если есть схема она читается туда стандартным методом. Если есть данные, они читаются. После этого генератор отчетов проверяет, если еще связи, которые описаны в словаре и которых нет в DataSet. Если таковые есть, то они создаются.
centnot писал(а):Тогда как получить всех потомков родительской сущности если отношение создается в дочерней, и из родительской сущности доступа к дочерней нет?
Связи содаются между родительской и дочерней сущностью, но отображается в дочерней, как ссылка на родительскую. Фактически Вы можете обратиться только от дочерней к родительской записи. Такое ограничение связано со структурой построения отчета. Иерархия данных строется в виде master-detail-subdetail, т.е. от родитеского источника данных к дочернему.

Если необходим обратный порядок, то можно возпользовать бизнес-объектами. DataSet можно зарегестрировать в отчете как бизнес объект:

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

var report = new StiReport();
report.RegBusinessObject(dataSet);
report.Design();
Спасибо.