Изменения в обработке бизнес-объектов

отредактировано 07:46 Раздел: FastReport .NET
Всем привет,

Новый билд (1.1.20) содержит совершенно новый движок для обработки бизнес-объектов. Он был разработан, чтобы снять ограничения старой версии движка:

- при регистрации бизнес-объекта надо было указывать параметр - максимальный уровень вложенности. Это было необходимо для корректного представления бизнес-объекта в виде дерева источников данных (не все бизнес-объекты являются деревьями; некоторые содержат ссылки типа parent-child, что приведет к бесконечному циклу). Теперь это ограничение снято, вы можете выбрать столько уровней вложенности, сколько необходимо в отчете. Это можно сделать в окне "Данные|Выбрать данные для отчета";

- старый движок некорретно работал с вложенными источниками данных, если они принадлежали простому св-ву (не источнику). Например, рассмотрим следующую структуру классов:
public class Master
{
  public DetailInfo Info { get; set; }
}

public class DetailInfo
{
  public List<Detail> Detail { get; set; }
}

public class Detail
{
  public int SomeProperty { get; set; }
}

В старой версии, это конвертировалось в следующее дерево данных:
Master
|
+- Info
|
+- Detail

(т.е. источник Detail принадлежал источнику Master, что не соответствует исходной структуре).
В новой версии данные представлены в натуральном виде:
Master
|
+- Info
   |
   +- Detail

К сожалению, нововведения привели к частичной несовместимости со старыми отчетами. Здесь приведен список того, что нужно поменять:

1) Метод
report.RegisterData(IEnumerable, string, BOConverterFlags, int)
оставлен для обратной совместимости. Вместо него используйте
report.RegisterData(IEnumerable, string)
-или-
report.RegisterData(IEnumerable, string, int)
Последний метод создает n-уровневую структуру начальных данных и может быть использован, если вы создаете отчет в коде. В подавляющем большинстве случаев, используйте первый метод.

2) Новый движок работает только с публичными свойствами объектов. Поля объектов не поддерживаются.
Если у вас есть код типа
public MyClass
{
  public string MyField;
}

вам нужно переделать поле в свойство:
public MyClass
{
  private string _myField;

  public string MyField
  {
    get { return _myField; }
    set { _myField = value; }
  }
}


3) Как говорилось выше, новый движок обрабатывает вложенные источники данных иначе. По этой причине, вам нужно исправить старые отчеты, если они используют вложенные источники данных:
- откройте отчет в дизайнере;
- откройте окно "Данные|Выбрать данные для отчета" и снимите флажок с корневого источника данных (в примере выше это "Master"). Закройте окно кнопкой ОК;
- сохраните отчет;
- откройте отчет снова;
- откройте окно "Данные|Выбрать данные для отчета" и пометьте флажками источники данных, которые вам нужны.

Шаги, описанные выше, необходимы для удаления старых (неправильных) объектов данных, которые хранятся в отчете, и создания новых. Теперь необходимо привязать элементы отчета к новым источникам данных:

- назначьте нужные источники данных каждому дата-бэнду в отчете (сделайте двойной щелчок на бэнде и выберите источник данных). Если вы используете объект "Матрица", проверьте также его св-во DataSource;
- вам может понадобиться исправить ссылки на поля данных. Так, в классе, рассмотренном выше, для доступа к св-ву Detail.SomeProperty, вы должны использовать полный путь к св-ву:
"Master.Info.Detail.SomeProperty"
В старой версии движка источник Detail принадлежал источнику Master, и путь к св-ву был таким:
"Master.Detail.SomeProperty"

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.