构建基块 > 扩展数据模型 > 向数据模型实体添加自定义属性
向数据模型实体添加自定义属性
构建基块数据模型中的许多实体均具有关联的 _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 的列。因此,相同的数据形状不支持具有相同字母但大小写不同的字段名称,例如 MyNamemyNamemyname
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 指定单个值,这样可创建单一索引。如果 namefieldnames 均已指定,则 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.JobOrderPTC.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
});
这对您有帮助吗?