Компоновочные блоки > Расширение модели данных > Добавление пользовательских сущностей в модель данных
Добавление пользовательских сущностей в модель данных
Добавление новых сущностей в модель данных происходит в несколько этапов:
Создание нового компоновочного блока
Чтобы создать новый компоновочный блок, выполните следующие шаги.
1. Создайте проект. Используйте уникальный префикс для проекта, например наименование компании. Префикс PTC зарезервирован для сущностей, предоставляемых компанией PTC. В этом примере создайте проект с наименованием MyCompany.MyBuildingBlock. Для каждого нового шаблона вещи, вещи или сущности, создаваемых для этого компоновочного блока добавьте свой новый проект как значение Проекта на странице Общей информации этой сущности.
2. Создайте новый шаблон вещи точки входа в проекте. В этом примере присвойте новому шаблону вещи наименование MyCompany.MyBuildingBlock.EntryPoint_TT. Использование Базового шаблона вещи зависит от типа вашего нового компоновочного блока:
Если ваш компоновочный блок расширяется из компоновочного блока PTC, используйте шаблон вещи точки входа из компоновочного блока PTC.
Если компоновочный блок является абстрактным компоновочным блоком, используйте шаблон вещи PTC.Base.ComponentEntryPoint_TT.
Если компоновочный блок является компоновочным блоком реализации, используйте PTC.DefaultConfiguration.EntryPoint_TT
Шаблона вещи.
Если компоновочный блок является стандартным компоновочным блоком, используйте шаблон вещи PTC.Base.ComponentEntryPoint_TT.
Если компоновочный блок является компоновочным блоком интерфейса пользователя, используйте шаблон вещи PTC.Base.ComponentEntryPoint_TT.
3. Создайте в проекте вещь, которая использует шаблон вещи, созданный на шаге 2 в качестве базового шаблона вещи. В этом примере присвойте новому шаблону вещи наименование MyCompany.MyBuildingBlock.EntryPoint.
4. Если компоновочный блок не расширяется из компоновочного блока PTC создайте новый профиль вещи в своем проекте, содержащий определения сервисов для управления вашей новой сущностью. Например, назовите новый профиль вещи MyCompany.MyBuildingBlock.Managment_TS. Если ваш компоновочный блок расширяется из компоновочного блока PTC, пропустите этот этап.
5. Если ваш компоновочный блок не расширяется из компоновочного блока PTC, создайте новый шаблон вещи в вашем проекте, использующем PTC.Base.CommonManager_TT как Базовый шаблон вещи. В этом примере присвойте новому шаблону вещи наименование MyCompany.MyBuildingBlock.Manager_TT. Если ваш компоновочный блок расширяется из компоновочного блока PTC, пропустите этот этап.
6. Если ваш компоновочный блок не расширяется из компоновочного блока PTC, добавьте шаблон вещи, созданный на этапе 4 в поле Реализованные профили шаблона вещи, созданного на этапе 5. Если ваш компоновочный блок расширяется из компоновочного блока PTC, пропустите этот этап.
7. Создайте в проекте вещь, которая использует шаблон вещи, созданный на шаге 5 в качестве базового шаблона вещи. Для этого примера присвойте новому шаблону вещи наименование MyCompany.MyBuildingBlock.Manager и используйте MyCompany.MyBuildingBlock.Manager_TT в качестве базового шаблона вещи.
8. Если ваш новый компоновочный блок расширяется из компоновочного блока PTC, добавьте любые конфигурации из вещи диспетчера для изначального компоновочного блока в вещь диспетчера для вашего нового компоновочного блока.
a. Перейдите к вещи диспетчера, созданной на шаге 7 в этом примере MyCompany.MyBuildingBlock.Manager.
b. В разделе Конфигурация добавьте те же настройки, что и на странице Конфигурации для вещи диспетчера изначального компоновочного блока.
9. Регистрация настраиваемого менеджера.
a. Перейдите к вещи PTC.Base.Manager.
b. В разделе Конфигурация нажмите Добавить для таблицы конфигураций DefaultGlobalManagerConfiguration.
В Имя введите наименование настраиваемого менеджера, например: MyCompany.MyBuildingBlock.Manager.
В Значение выполните поиск и выберите вещь настраиваемого диспетчера, созданную на этапе 7.
c. Нажмите Добавить, чтобы добавить настраиваемый менеджер в таблицу конфигурации.
d. Нажмите Сохранить, чтобы сохранить обновления в вещи диспетчера.
Создание профиля данных для новой сущности
Для создания профиля данных новой сущности выполните следующие этапы:
1. Создайте новую структуру данных в ThingWorx Composer. Добавьте профиль данных в проект для нового компоновочного блока. В этом примере создайте наименование для профиля данных MyObject.
2. В разделе Определение полей нажмите Добавить и укажите новые определения полей для каждого свойства, которое необходимо включить в профиль данных.
a. Отметьте одно из полей как первичный ключ, поставив флажок на Является основным ключом.
b. Задайте Базовый тип поля, являющегося первичным ключом, на LONG. Если тип данных поля, являющегося первичным ключом, относится к LONG, то для такого поля значения создаются автоматически, и база данных отвечает за обработку логических операций для увеличения значения. Если выбран другой Базовый тип, то необходимо выполнить обработку логических операций для гарантии уникальности первичного ключа.
Для выравнивания модели данных компоновочного блока добавьте поле UID с Базовым типомLONG и поставьте флажок на Является основным ключом.
3. Нажмите Сохранить для сохранения объема данных.
* 
При создании таблицы базы данных для профиля данных ее именем будет наименование профиля данных без префикса, в нижнем регистре. Например, если наименование профиля данных ABC.MyObject, то имя таблицы данных будет myobject. Не поддерживаются наименования некоторых профилей данных, из которых могут быть созданы одинаковые имена для таблиц базы данных, по причине отсутствия в них префиксов, например: ABC.MyObject и PTC.JobOrder.MyObject.
Аналогично, наименованиями столбцов в таблице базы данных являются наименования полей профиля данных в нижнем регистре. Например, для поля с наименованием MyPrimaryLocation столбец будет называться myprimarylocation. Это приводит к тому, что в одном профиле данных не поддерживаются наименования полей с одинаковыми буквами в разном регистре, такие как MyName, myName и myname.
Обновление информации базы данных, для внесения нового профиля данных
Обновите информацию базы данных, базы данных, чтобы внести в нее новый профиль данных. Это можно сделать, добавив информацию базы данных для вашей сущности в сервис GetDBInfo вещи диспетчера нового компоновочного блока (MyCompany.MyBuildingBlock.Manager).
Для добавления сведений базы данных в существующую службу GetDBInfo:
1. Перейдите в вещь диспетчера нового компоновочного блока (MyCompany.MyBuildingBlock.Manager).
2. В разделе Сервисы перейдите в службу GetDBInfo и переопределите ее.
3. В редакторе сценариев добавьте сущность для нового профиля данных в качестве массива, так же как для существующих сущностей профилей данных. Включает следующие сведения базы данных о вашем профиле данных:
dataShapeName: наименование профиля данных, для которого добавляется новая таблица базы данных.
indexedFields: столбцы, которые необходимо проиндексировать. Индексирование делает поиск быстрее и помогает выполнять сортировку. В массиве можно установить несколько индексируемых полей. Каждый элемент в массиве может содержать следующие свойства:
name: наименование столбца. Обязательно.
unique: укажите, если у столбца должно быть уникальное значение.
fieldNames: массив, в котором содержатся названия столбцов. Если указан только один столбец, создается один индекс. Если указано несколько столбцов, создается составной индекс.
* 
Один индекс можно создать, указав для name отдельное значение, которое является именем столбца, вместо того, чтобы указывать отдельное значение для fieldnames. Если указаны name и fieldnames, то name игнорируется, и индекс создается с использованием значений fieldnames.
identifier: наименование сущности в базе данных. Если значение не указано, то система автоматически создает его в формате <table_name>_<column_name>_idx. Указанное значение должно быть уникальным в рамках указанных и созданных автоматически значений. Значение не должно превышать максимальную длину, разрешенную для идентификаторов базы данных.
fields: любой столбец, для которого требуется дополнительная спецификация. В массиве можно установить несколько полей. Каждый элемент в массиве может содержать следующие свойства:
name: наименование столбца. Обязательно.
length: длина столбца, если он является String, и необходима длина, отличающаяся от длины по умолчанию.
notNull: укажите, если значение столбца не должно быть равно null.
defaultValue: значение по умолчанию для свойства.
* 
Если значение столбца должно быть уникальным, установите его, используя unique в массиве indexedFields, а не в массиве fields.
foreignKeys: любые определения столбцов внешнего ключа для новой таблицы базы данных. В массиве можно установить несколько внешних ключей. Каждый элемент массива должен содержать следующие свойства:
name: наименование столбца в качестве внешнего ключа на текущим профиле данных.
referenceDataShapeName: профиль данных ссылочной таблицы базы данных.
referenceFieldName: имя поля, содержащего ссылочное значение.
identifier: наименование сущности в базе данных. Если значение не указано, то система автоматически создает его в формате <table_name>_<column_name>_fk. Указанное значение должно быть уникальным в рамках указанных и созданных автоматически значений. Значение не должно превышать максимальную длину, разрешенную для идентификаторов базы данных.
onDelete: происходит с экземплярами текущего профиля данных при удалении экземпляров ссылочного профиля данных.
deleteReference: происходит с экземплярами ссылочного профиля данных при удалении экземпляров текущего профиля данных.
Дополнительные сведения о действиях при удалении см. в Задание поведения при удалении для внешних ключей.
Например, чтобы отменить индексированные поля, внешний ключ и установить длину поля MyObject на 4000 знаков для нового профиля данных Location введите:
{
"dataShapeName": "MyObject",
"indexedFields": [],
"foreignKeys": [{"name":"WorkDefinitionUID", "referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition", "referenceFieldName":"UID"}],
"fields": [
{
"name": "Location",
"length": 4000
}
]
}
4. Нажмите Готово, затем нажмите Сохранить, чтобы сохранить обновленную службу.
Создание сервисов CRUD
Создайте сервисы CRUD, необходимые для управления экземплярами нового профиля данных.
1. В профиле вещи управления (MyCompany.MyBuildingBlock.Managment_TS), в разделе Сервисы нажмите Добавить и создайте необходимые сервисы. Используйте существующие сервисы CRUD для сущностей компоновочного блока в качестве моделей.
Служба создания.
Введите наименование сервиса. В этом примере введите AddMyObjects.
В качестве входных данных для службы добавьте входные данные с именем MyObjects, которые являются Базовым типом INFOTABLE. Выберите свой профиль данных в Структуре данных.
В качестве выходных данных выберите INFOTABLE, и выберите свой профиль данных.
На панели сценария введите код, идентичный указанному:
var insertParams = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Insert(insertParams);
Сервис удаления.
Введите наименование сервиса. В этом примере введите DeleteMyObject.
В качестве входных данных для службы добавьте входные данные с именем UID, которые являются Базовым типом STRING.
В качестве выходных данных выберите INFOTABLE, и выберите свой профиль данных.
На панели сценария введите код, идентичный указанному:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Delete(params);
Сервис обновления.
Введите наименование сервиса. В этом примере введите UpdateMyObjects.
В качестве входных данных для службы добавьте входные данные с именем MyObjects, которые являются Базовым типом INFOTABLE. Выберите свой профиль данных в Структуре данных.
В качестве выходных данных выберите INFOTABLE, и выберите свой профиль данных.
На панели сценария введите код, идентичный указанному:
var params = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Update(params);
Сервис для загрузки отдельных элементов этого профиля данных.
Введите наименование сервиса. В этом примере введите GetMyObject.
В качестве входных данных для службы добавьте входные данные с именем UID, которые являются Базовым типом STRING.
В качестве выходных данных выберите INFOTABLE, и выберите свой профиль данных.
На панели сценария введите код, идентичный указанному:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].GetEntity(params);
Сервис для загрузки нескольких элементов этого профиля данных, включая в качестве дополнения фильтр, смещение и ограничение входных параметров. Если не указаны входные параметры, то будут возвращены все элементы MyObject:
Введите наименование сервиса. В этом примере введите GetMyObjects.
Для этой службы введите:
Добавьте входные данные с именем filter, которые являются Базовым типом JSON.
Добавьте входные данные с именем offset, которые являются Базовым типом INTEGER.
Добавьте входные данные с именем limit, которые являются Базовым типом INTEGER.
В качестве выходных данных выберите INFOTABLE, и выберите свой профиль данных.
На панели сценария введите код, идентичный указанному:
var params = {
filter: filter,
dataShapeName: "MyObject",
offset: offset,
limit: limit
};
var result = Things[me.GetDatabaseThingName()].Query(params);
2. Нажмите Сохранить, чтобы сохранить новые сервисы в профиле вещи.
Синхронизация информации и схемы базы данных
Добавьте новую запись в базу данных, синхронизируя информацию и схему базы данных. Дополнительные сведения см. в разделе Синхронизация информации и схемы базы данных.
Было ли это полезно?