向数据模型实体添加自定义属性
构建基块数据模型中的许多实体均具有关联的 _AP 数据形状,用于添加自定义属性。例如,作业单数据形状 (PTC.JobOrder.JobOrder) 具有关联的 PTC.JobOrder.JobOrder_AP 数据形状。本主题中的示例演示了如何向 PTC.JobOrder.JobOrder_AP 数据形状添加新的 City 属性。
向数据模型添加自定义属性涉及如下多个步骤:
有关如何通过某一服务以编程方式填充新自定义属性的示例,请参阅
填充自定义属性。
将字段添加到数据形状
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 - 指定属性是否不得为空。
▪ defaultValue - 此属性的默认值。
| 如果某一数据库必须具有唯一值,那么请使用 indexedFields 而非 fields 数组中的 unique 指定此部分内容。 |
在本示例中,要指定 City 的列长度为 4000 个字符且不能有空值,请按如下方式更新 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
});