Добавление пользовательских свойств в сущности модели данных
Большое количество сущностей в модели данных компоновочного блока связаны с профилем данных _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
});