Бизнес-объекты - это тип данных, который является набором объектов связанных между собой, с помощью которых можно представлять данные в различных структурах: таблицы, списки, массивы и т.д. Эти данные могут быть переданы в генератор отчетов и на основе их можно построить отчет. Бизнес-объекты создаются, регистрируются и передаются в генератор отчетов из кода.

 

Заполнение бизнес-объектов вручную в Net

 

Рассмотрим пример создания отчета с Бизнес-объектом. Для начала необходимо создать структуру бизнес-объекта. Ниже представлен пример кода создания класса бизнес-объекта:  

C#

...

public class MyObject

{

public class Category

{

public int number;

public int Number

{

get

{

return number;

}

}

 

public string name;

public string Name

{

get

{

return name;

}

}

 

public string description;

public string Description

{

get

{

return description;

}

}

}

 

public Category[] list = null;

public Category[] List

{

get

{

return list;

}

}

}

...

 

 

Теперь, следует заполнить данными бизнес-объект. Ниже представлен пример кода, с помощью которого бизнес-объект заполняется данными:

 

C#

...

MyObject obj = new MyObject();

obj.list = new MyObject.Category[2];

 

MyObject.Category c1 = new MyObject.Category();

c1.number = 1;

c1.name = "Cat1";

c1.description = "desc for n1";

 

MyObject.Category c2 = new MyObject.Category();

c2.number = 2;

c2.name = "Cat2";

c2.description = "desc for n2";

 

obj.list[0] = c1;

obj.list[1] = c2;

 

StiReport mainreport = new StiReport();

mainreport.RegBusinessObject("MyObject", obj);

mainreport.Design();

...

 

 

Использование бизнес-объектов в отчете

 

После этого бизнес-объект создан, заполнен данными, зарегистрирован и передан в генератор отчетов. Для того, чтобы построить отчет в дизайнере с использованием бизнес-объектов необходимо создать описание данных в словаре отчета. Для этого, следует в словаре отчета выделить созданный бизнес-объект MyObject, и выбрать пункт Новый бизнес-объект... (New Business Object...) в контекстном меню или меню Новый элемент (New Item). После выбора данной команды, будет открыто окно Новый бизнес-объект (New Business Object), в котором следует указать пункт Подчиненный бизнес-объект (Child Business Object) и выбрать списки данных. На рисунке снизу представлено окно Новый бизнес-объект (New Business Object):

 

 

После нажатия кнопки Ок, пользователю будет отображено 2-ая диалоговая форма окна Новый бизнес объект (New Business Object), в котором можно изменить параметры подчиненного бизнес объекта. На рисунке снизу представлена 2-ая диалоговая форма окна Новый бизнес объект (New Business Object):

 

 

img_1 В поле Категория (Category) отображается имя категории. При создании бизнес объектов данное поле не доступно для редактирования и носит сугубо информативный характер. Также оно может быть пустым, как в данном случае.

img_2 Поле Наименование (Name) предназначено для указания имени бизнес-объекта. Это поле доступно для редактирования всегда и, в данном случае, используется имя List.

img_3 В поле Псевдоним (Alias) указывается псевдоним бизнес-объекта. Это поле доступно для редактирования всегда и, в данном случае, используется имя List.

img_4 Кнопка Новая колонка (New Column). При нажатии на которую в бизнес объекте будет создана новая колонка данных. Следует отметить, что созданная таким образом колонка данных, является виртуальной колонкой данных и реальных данных, она не содержит.

img_5 При нажатии кнопки Новая рассчитываемая колонка (New Calculated Column) в бизнес-объект будет вставлена новая рассчитываемая колонка.

img_6 При нажатии на кнопку Удалить (Delete) будет удалена выделенная колонка данных. Если выделена закладка Колонки (Columns), то будут удалены все колонки, которые располагаются в данной вкладке.

img_7 Кнопка просмотра запроса.

img_8 C помощью кнопки Получить колонки (Retrieve Columns) можно получить колонки данных из бизнес объекта.

img_9 При нажатии кнопки Взять колонки из сборки (Get Columns from Assembly) будет открыто окно Открыть сборку (Open Assembly), в котором следует выбрать файл сборки. После выбора файла сборки следует нажать кнопку Открыть (Open) и из этого файла будут извлечены колонки данных, если они там присутствуют.

img_10 Панель Колонки (Columns) представлена тремя полями. В этих полях отображается список колонок, их свойства и описание этих свойств.

 

После того как поля заполнены и параметры указаны следует нажать кнопку ОК. После этого, в словаре данных отчета будет создано описание нового бизнес объекта, который можно использовать для построения отчетов. На рисунке снизу представлен отчет построенный с помощью бизнес-объекта:

 

 

 

Получение данных для бизнес-объектов из источника данных в Net

 

Созданные бизнес-объекты, которые зарегистрированы и переданы в генератор отчетов, но не содержащие реальные данные называются описанием бизнес-объектов. С помощью описания бизнес-объектов можно создать шаблон отчета (обозначить структуру и оформление отчета), а затем перед построением подключить источник с реальными данными и построить отчет. Это удобно, если необходимо создавать отчеты с одинаковой структурой и оформлением, но с различными данными. Для начала создадим структурное описание бизнес-объекта. Ниже представлен пример кода создания класса бизнес-объекта:

 

C#

...

public class MyObject

{

public class Category

{

public int categoryID;

public int CategoryID

{

get

{

return categoryID;

}

}

 

public string categoryName;

public string CategoryName

{

get

{

return categoryName;

}

}

 

public string description;

public string Description

{

get

{

return description;

}

}

 

}

 

public Category[] list = null;

public Category[] Categories

{

get

{

return list;

}

}

}

...

 

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

 

C#

...

MyObject.Category obj = new MyObject.Category();

int busobjLevel = 1;

 

StiReport report = new StiReport();

report.RegBusinessObject("Categories", obj);

report.Dictionary.SynchronizeBusinessObjects(busobjLevel);

report.Design();

...

 

 

Теперь при помощи созданного описания бизнес-объекта, создадим шаблон отчета в дизайнере. На рисунке снизу представлен созданный шаблон отчета с описанием бизнес-объекта:

 

 

 

После того, как шаблон отчета создан, следует сохранить его, к примеру, по следующему пути D:\\Report.mrt. Поскольку, описание бизнес-объекта не содержит реальных данных, то для того, чтобы построить отчет, необходимо будет получить реальные данные для бизнес-объектов. В этом примере, данные будут получены из базы данных Northwind. Для начала, необходимо в Visual Studio создать соединение к этой базе данных. После этого, следует указать код получения данных для бизнес-объекта. Получение реальных данных для бизнес-объекта происходит непосредственно перед построением отчета. Ниже представлен код получения данных для бизнес-объекта:

 

C#

...

int busobjLevel = 1;

 

StiReport report = new StiReport();

report.Load("D:\\Report.mrt");

 

using (NorthwindDataContext context = new NorthwindDataContext())

{

var categories =

from c in context.Categories

select new { c.CategoryID, c.CategoryName, c.Description };

 

report.RegBusinessObject("Categories", categories);

report.Show();

}

...

 

После этого, генератор отчетов получит данные для бизнес-объекта из указанного источника, в данном случае из базы данных Northwind. Далее, отчет будет построен по созданному шаблону. На рисунке снизу представлен построенный отчет:

 

 

 

Бизнес-объекты в Web

 

Создание, заполнение, регистрация и передача бизнес-объектов в Web осуществляется практически также как и в Net. Для начала создадим класс бизнес-объекта, идентичный как в Net. Далее, следует создать объект класса бизнес-объекта, зарегистрировать его, заполнить вручную данными и передать их. Здесь отличия будут в том, что вместо метода mainreport.Design() следует использовать метод StiWebDesigner1.Design(mainreport). А также обязательно произвести синхронизацию с помощью метода mainreport.Dictionary.SynchronizeBusinessObjects(), потому как в дизайнере Web отсутствует возможность создавать описание бизнес-объектов из словаря данных (описание может создаваться только из кода). Ниже представлен пример кода создания, заполнения, регистрации и передачи бизнес-объекта:

 

C#

...

MyObject obj = new MyObject();

obj.list = new MyObject.Category[2];

 

MyObject.Category c1 = new MyObject.Category();

c1.number = 1;

c1.name = "Cat1";

c1.description = "desc for n1";

 

MyObject.Category c2 = new MyObject.Category();

c2.number = 2;

c2.name = "Cat2";

c2.description = "desc for n2";

 

obj.list[0] = c1;

obj.list[1] = c2;

 

int busobjLevel = 1;

 

StiReport mainreport = new StiReport();

mainreport.RegBusinessObject("MyObject", obj);

mainreport.Dictionary.SynchronizeBusinessObjects(busobjLevel);

StiWebDesigner1.Design(mainreport);

...

 

 

Также как и в NET, в Web можно сначала создать описание бизнес-объектов, затем шаблон отчета, а потом перед построением подключить источник с реальными данными и построить отчет. Для начала, создадим описание бизнес-объекта. Предварительно создав класс бизнес-объекта, идентичный классу бизнес-объекта в NET. Ниже представлен пример создания описания бизнес-объекта:

 

C#

...

MyObject.Category obj = new MyObject.Category();

int busobjLevel = 1;

 

StiReport report = new StiReport();

report.RegBusinessObject("Categories", obj);

report.Dictionary.SynchronizeBusinessObjects(busobjLevel);

StiWebDesigner1.Design(report);

...

 

 

Теперь при помощи созданного описания, создадим шаблон отчета, идентичный шаблону в NET. После того, как шаблон отчета создан, следует сохранить его, к примеру, по следующему пути D:\\Report.mrt. Поскольку, описание бизнес-объекта не содержит реальных данных, то для того, чтобы построить отчет, необходимо будет получить реальные данные для бизнес-объектов. В этом примере, данные будут получены из базы данных Northwind. Для начала, необходимо в Visual Studio создать соединение к этой базе данных. После этого, следует указать код получения данных для бизнес-объекта. Получение реальных данных для бизнес-объекта происходит непосредственно перед построением отчета. Ниже представлен код получения данных для бизнес-объекта:

 

C#

...

int busobjLevel = 1;

 

StiReport report = new StiReport();

report.Load("D:\\Report.mrt");

 

using (NorthwindDataContext context = new NorthwindDataContext())

{

var categories =

from c in context.Categories

select new { c.CategoryID, c.CategoryName, c.Description };

 

report.RegBusinessObject("Categories", categories);

StiWebViewer1.Report = report;

}

...