Компоновочные блоки > Расширение модели данных > Добавление пользовательских свойств в сущности модели данных
Добавление пользовательских свойств в сущности модели данных
Большое количество сущностей в модели данных компоновочного блока связаны с профилем данных _AP для добавления пользовательских свойств. Например, у профиля данных порядка работы (PTC.JobOrder.JobOrder) есть связанный профиль данных PTC.JobOrder.JobOrder_AP. В примере этой темы новое свойство City добавляется в профиль данных PTC.JobOrder.JobOrder_AP.
Добавление пользовательских свойств в модель данных происходит в несколько этапов:
Примеры, показывающие как выполнять программное заполнение нового пользовательского свойства, используя какой-либо сервис, см. в Заполнение пользовательского свойства.
Добавление поля в профиль данных
1. В ThingWorx Composer перейдите в профиль данных _AP для сущности. В этом примере перейдите в PTC.JobOrder.JobOrder_AP.
2. Под Определениями полей нажмите Добавить.
3. На панели Определение нового поля укажите следующее:
Имя: наименование свойства. В этом примере введите City. Новое имя не может совпадать с именами полей в исходном профиле данных.
Базовый тип: тип данных для свойства. В этом примере выберите STRING. Поддерживаются следующие типы данных:
STRING
NUMBER
INTEGER
BOOLEAN
LONG
TEXT
DATETIME
THINGNAME
THINGSHAPENAME
THINGTEMPLATENAME
USERNAME
SCHEDULE
IMAGELINK
* 
Наименованиями столбцов в таблице базы данных являются наименования полей профиля данных в нижнем регистре. Например, для поля с наименованием MyPrimaryCity столбец будет называться myprimarycity. Это приводит к тому, что в одном профиле данных не поддерживаются наименования полей с одинаковыми буквами в разном регистре, такие как MyName, myName и myname.
4. Нажмите значок галочки.Нажмите, чтобы добавить новое определение поля.
5. Нажмите Сохранить, чтобы сохранить обновления в профиль данных.
Обновить информацию базы данных, используя любые ограничения базы данных
Если для нового свойства необходимы какие-либо ограничения базы данных, выполните следующие шаги:
1. Перейдите в диспетчер сущности, добавляемой в качестве нового свойства. Для этого примера перейдите в вещь PTC.JobOrderImpl.Manager.
2. Создайте дубликат вещи диспетчера, которую можно настроить. Для этого примера создайте имя для дубликата вещи диспетчера MyCompany.MyJobOrderImpl.Manager. Для значения Проект в дубликате вещи диспетчера, используйте проект для созданного компоновочного блока. В этом примере можно использовать компоновочный блок на основе компоновочного блока PTC.JobOrderImpl с наименованием проекта MyCompany.MyJobOrderImpl. Дополнительные сведения см. в разделе Создание нового компоновочного блока.
3. Регистрация дубликата диспетчера.
a. Перейдите к вещи PTC.Base.Manager.
b. В разделе Конфигурация отредактируйте необходимую строку диспетчера в таблице конфигурации DefaultGlobalManagerConfiguration и установите значение managerThingName на новый дубликат вещи диспетчера, созданный на этапе 2. Для этого примера обновите строку для PTC.JobOrder.Manager, чтобы задать MyCompany.MyJobOrderImpl.Manager в качестве managerThingName.
c. Нажмите Сохранить, чтобы сохранить изменения в вещи диспетчера.
4. Перейдите в дубликат вещи диспетчера, созданный на 2 шаге. Для этого примера перейдите в MyCompany.MyJobOrderImpl.Manager.
5. В разделе Сервисы найдите и переопределите службу GetDBInfo.
6. В редакторе сценариев прокрутите вниз до записи профиля данных, в который добавлено свойство. В этом примере найдите следующую запись:
"dataShapeName": "PTC.JobOrder.JobOrder_AP",
"indexedFields": []
7. Обновить запись профиля данных, используя информацию для нового свойства.
Если необходимо индексировать свойство, добавьте его в массив indexedFields для профиля данных со следующими свойствами:
name: наименование столбца. Обязательно.
unique: указывает, должно ли значение свойства быть уникальным.
fieldNames: массив, в котором содержатся названия столбцов. Если указан только один столбец, создается один индекс. Если указано несколько столбцов, создается составной индекс.
* 
Один индекс можно создать, указав для name отдельное значение, которое является именем столбца, вместо того, чтобы указывать отдельное значение для fieldnames. Если указаны name и fieldnames, то name игнорируется, и индекс создается с использованием значений fieldnames.
identifier: наименование сущности в базе данных. Если значение не указано, то система автоматически создает его в формате <имя_таблицы>_<имя_столбца1>_<имя_столбца2>_<имя_столбцаN>_idx. Указанное значение должно быть уникальным в рамках указанных и созданных автоматически значений. Значение не должно превышать максимальную длину, разрешенную для идентификаторов базы данных.
Если свойство должно быть внешним ключом, добавьте массив foreignKeys для профиля данных со следующими свойствами:
name: наименование свойства, которое должно быть внешним ключом, в текущем профиле данных.
referenceDataShapeName: профиль данных ссылочной таблицы базы данных.
referenceFieldName: имя поля, содержащего ссылочное значение.
onDelete: происходит с экземплярами текущего профиля данных при удалении экземпляров ссылочного профиля данных.
deleteReference: происходит с экземплярами ссылочного профиля данных при удалении экземпляров текущего профиля данных.
Дополнительные сведения о действиях при удалении см. в Задание поведения при удалении для внешних ключей.
Чтобы установить для свойства дополнительные ограничения базы данных, добавьте его как запись в массив fields:
name: наименование нового свойства. Обязательно.
length: длина для нового свойства, если она отличается от длины столбца по умолчанию для базы данных.
notNull: укажите, если значение свойства не должно быть равно null.
defaultValue: значение по умолчанию для свойства.
* 
Если у столбца базы данных должно быть уникальное значение, установите его, используя unique в массиве indexedFields, а не в массиве fields.
В этом примере, чтобы указать длину столбцов City не более 4000 символов, и значение не равное null, обновите запись для профиля данных PTC.JobOrder.JobOrder_AP, как показано ниже:
{
"dataShapeName": "PTC.JobOrder.JobOrder_AP",
"indexedFields": []
"fields": [{
"name": "City",
"length": 4000
"notNull": true
}]
},
8. Нажмите Сохранить, чтобы сохранить изменения для сервиса.
Синхронизация информации и схемы базы данных
Синхронизируйте информацию базы данных со схемой базы данных. Дополнительные сведения см. в разделе Синхронизация информации и схемы базы данных.
Заполнение пользовательского свойства
Следующий код является примером того, как включить пользовательское свойство в сервис для программного заполнения свойства. Этот код использует сервис CreateInfoTable, который доступен в каждой вещи диспетчера в компоновочных блоках шаблона проектирования реализации для объединения профилей данных PTC.JobOrder.JobOrder и PTC.JobOrder.JobOrder_AP в одну таблицу данных и заполнения нового свойства City значением Montreal.
var jobOrderDataShapeName = "PTC.JobOrder.JobOrder";
var jobOrderManagerThingName = me.GetJobOrderManager();
var jobOrders = Things[jobOrderManagerThingName ].CreateInfoTable({
dataShapeName: jobOrderDataShapeName
});
var jobOrder = {};
jobOrder.ID = "" + 121;
jobOrder.WorkType = 1;
jobOrder.Description = "test";
jobOrder.City = "Montreal";
jobOrders.AddRow(jobOrder);

var newJobOrders = Things[jobOrderManagerThingName ].CreateJobOrders({
JobOrders: jobOrders
});
Было ли это полезно?