В Flexberry ORM объектами данных называются экземпляры классов наследников абстрактного класса ICSSoft.STORMNET.DataObject
. Для объектов данных генераторами Flexberry создаётся код класса на .Net CLR-совместимом языке (C#, VB и т.п.).
Объекты данных в модели
Классы объектов данных описываются на диаграмме классов в Flexberry Designer и имеют стереотип implementation. При описании объекта данных задаются атрибуты, связи и метаданные.
Атрибуты объекта данных могут быть двух типов стандартные (описанные на диаграмме) и динамические динамические свойства объекта данных. В случае если значение атрибута не предполагается размещать в хранилище, он может быть объявлен как нехранимый. При описании атрибутов им могут быть присвоены значения по умолчанию.
Также в Flexberry ORM поддерживаются несколько видов связей: наследование, мастеровые и детейловые связи.
К объектам данным может быть привязана дополнительная информация (метаинформация), например, представления или изображение.
Стереотип implementation является значением по умолчанию, т.е. при разработке диаграммы его можно не указывать, оставляя пустое значение.
Объекты данных вo время выполнения
Жизненный цикл объекта данных традиционно состоит из трех этапов:
- Создание.
- Обработка.
- Сохранение.
Создание объекта данных
Объект данных может быть создан следующими способами:
- Создание экземпляра класса стандартными средствами языка
- Загрузка из хранилища методами LoadObject/LoadObjects сервиса данных.
- Прототипирование
- Копирование.
- Десериализация ранее сохраненного объекта.
Обработка объекта данных
Одним из основных атрибутов объекта является ключ объекта, для доступа к которому используется свойство 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)