Характеристика, методы и свойства объекта данных

В Flexberry ORM объектами данных называются экземпляры классов наследников абстрактного класса ICSSoft.STORMNET.DataObject. Для объектов данных генераторами Flexberry создаётся код класса на .Net CLR-совместимом языке (C#, VB и т.п.).

Объекты данных в модели

Классы объектов данных описываются на диаграмме классов в Flexberry Designer и имеют стереотип implementation. При описании объекта данных задаются атрибуты, связи и метаданные.

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

Также в Flexberry ORM поддерживаются несколько видов связей: наследование, мастеровые и детейловые связи.

К объектам данным может быть привязана дополнительная информация (метаинформация), например, представления или изображение.

Стереотип implementation является значением по умолчанию, т.е. при разработке диаграммы его можно не указывать, оставляя пустое значение.

Объекты данных вo время выполнения

Жизненный цикл объекта данных традиционно состоит из трех этапов:

  • Создание.
  • Обработка.
  • Сохранение.

Создание объекта данных

Объект данных может быть создан следующими способами:

Обработка объекта данных

Одним из основных атрибутов объекта является ключ объекта, для доступа к которому используется свойство PrimaryKey. В большинстве случаев для ключа используется глобальный уникальный идентификатор (GUID), хотя при необходимости могут быть использованы другие типы.

Наиболее часто встречаются следующие задачи обработки объектов данных:

Сохранение объекта данных в хранилище

Для сохранения объекта данных используются методы сервиса данных UpdateObject/UpdateObjects. При работе с объектами данных важными понятиями являются статус объектов, состояние загрузки и копия данных.

Основные свойство и методы ICSSoft.STORMNET.DataObject

Работа с копией данных

GetDataCopy

Назначение: Получить внутреннюю копию объекта данных

Сигнатура:

DataObject ICSSoft.STORMNET.DataObject.GetDataCopy()

InitDataCopy

Назначение: Проинициализировать копию данных

Параметры:

DataObjectCache

Сигнатура:

// 1
void ICSSoft.STORMNET.DataObject.InitDataCopy()

// 2
void ICSSoft.STORMNET.DataObject.InitDataCopy(DataObjectCache DataObjectCache)

SetDataCopy

Назначение: Установить внутреннюю копию объекта данных

Параметры:

value - Устанавливаемый объект как копия существующего

Сигнатура:

void ICSSoft.STORMNET.DataObject.SetDataCopy (DataObject value)

Получение и установка состояния объекта

ContainsAlteredProps

Назначение: Установить было ли изменение значений свойств объекта по сравнению с внутренней копией

Сигнатура:

bool ICSSoft.STORMNET.DataObject.ContainsAlteredProps()

GetAlteredPropertyNames

Назначение: Возвращает список свойств (атрибутов, мастеров, детейлов), значения которых изменились по сравнению с внутренней копией объекта.

Сигнатура:

string[] ICSSoft.STORMNET.DataObject.GetAlteredPropertyNames()

CheckNotNullProperties

Назначение: Вернуть список незаполненных полей (значения не могут быть пустыми согласно модели данных)

Параметры:

  • detailSkip - Пропускать при проверке удаленные детейлы. Словарь со списком типов детейлов и флагами для них. Если детейла нет в словаре или значение для него False, то проверка детейла не будет пропущена. Параметр может иметь значение null.
  • view - Представление, по свойствам которого происходит проверка и возвращение заголовков свойств.
  • returnCaptions - true при необходимости вернуть заголовки свойств из представления, а не имена свойств, false в противном случае.

Сигнатура:

// 1
public string[] CheckNotNullProperties()

// 2
string [] ICSSoft.STORMNET.DataObject.CheckNotNullProperties (Dictionary<Type, bool> detailSkip)

// 3
public string[] CheckNotNullProperties(View view, bool returnCaptions)

// 4
public string[] CheckNotNullProperties(View view, bool returnCaptions, Dictionary<Type, bool> detailSkip)

GetStatus

Назначение: Получение значения статуса объекта

Параметры:

recountIfAutoaltered - обновить значение принудительно (если класс с автоматическим вычислением статуса)

Сигнатура:

// 1
ObjectStatus ICSSoft.STORMNET.DataObject.GetStatus()

// 2
ObjectStatus ICSSoft.STORMNET.DataObject.GetStatus(bool recountIfAutoaltered)

SetLoadingState

Назначение: Установка состояния загрузки.

Параметры:

newState - Состояние загрузки, устанавливаемое объекту.

Сигнатура:

void ICSSoft.STORMNET.DataObject.SetLoadingState (LoadingState newState)

SetLoadedProperties

Назначение: Установка состояния загрузки.

Параметры:

newState - Состояние загрузки, устанавливаемое объекту.

Сигнатура:

void ICSSoft.STORMNET.DataObject.SetLoadingState (LoadingState newState)

SetStatus

Назначение: Установка статуса

Параметры:

newState - Статус, устанавливаемый объекту.

Сигнатура:

virtual void ICSSoft.STORMNET.DataObject.SetStatus (ObjectStatus newState)

Копирование и дублирование объектов данных

CopyTo

Назначение: Создать копию объекта данных. Если полученный в результате копирования объект планируется поместит в хранилище, у него необходимо вызвать методы InitDataCopy или ClearDataCopy.

Параметры:

  • toObject = объект данный, в который
  • CreateDataObjectsCopy - true - создавать копии связанных объектов, false - ограничиться копированием ссылки
  • PrimaryKeyCopy - true - копировать первичные ключи
  • UseParentCaching - использовать ранее установленное кеширование

Сигнатура:

  virtual void ICSSoft.STORMNET.DataObject.CopyTo(DataObject toObject,  
  bool  CreateDataObjectsCopy,  
  bool  PrimaryKeyCopy,  
  bool  UseParentCaching  
 )

Prototyping

Назначение: Прототипизировать

Параметры:

withDetails - с детейлами или без

Сигнатура:

```csharp virtual void ICSSoft.STORMNET.DataObject.Prototyping() virtual void ICSSoft.STORMNET.DataObject.Prototyping(bool withDetails)


#### SetExistObjectPrimaryKey  

__Назначение__: Установить первичный ключ в объект данных. Выполняется операция Clear() для объекта, присваивается первичный ключ, SetLoadingState(LoadingState.LightLoaded); SetLoadedProperties("__PrimaryKey");

__Параметры__:

`primaryKey` - первичный ключ

__Сигнатура__:

```csharp
void ICSSoft.STORMNET.DataObject.SetExistObjectPrimaryKey (object primaryKey)

Блокировка объекта

LockObject

Назначение: Заблокировать объект

Параметры:

key - ключ блокировки объекта

Сигнатура:

void ICSSoft.STORMNET.DataObject.LockObject(object key)

UnLockObject

Назначение: Разблокировать объект

Параметры:

key - ключ блокировки объекта.

Сигнатура:

void ICSSoft.STORMNET.DataObject.UnLockObject (object key)