自定义 Operator Advisor > 扩展 Operator Advisor 数据模型 > 将自定义属性添加到 Operator Advisor 实体
将自定义属性添加到 Operator Advisor 实体
Operator Advisor 数据模型中的大多数实体均具有相关的 _AP 数据形状,用以实现添加自定义属性的目的。例如,作业单数据形状 (PTC.SCA.SCO.JobOrder) 具有关联的 PTC.SCA.SCO.JobOrder_AP 数据形状。本主题中的示例演示了如何将新 Location 属性添加到 PTC.SCA.SCO.JobOrder_AP 数据形状。
将自定义属性添加到 Operator Advisor 涉及多个步骤:
有关如何通过某一服务以编程方式填充新自定义属性的示例,请参阅 填充自定义属性
将字段添加到数据形状
1. ThingWorx Composer 中,导航至此实体的 _AP 数据形状。在本示例中,导航至 PTC.SCA.SCO.JobOrder_AP
2. “字段定义”下,单击“添加”
3. “新建字段定义”窗格中,指定以下内容:
“名称”- 属性的名称。在本示例中,输入 Location
“基本类型”- 属性的数据类型。在本示例中,选择 STRING
4. 单击 以添加新的字段定义。
5. 单击“保存”以保存对数据形状的更新。
使用任意数据库约束更新数据库信息
如果新属性需要数据库约束,请完成以下步骤:
1. 请导航至 PTC.SCA.SCO.DefaultProductionOrderManager 事物。
2. “服务”下,针对要添加属性的实体,查找并改写 Get<entity>DBInfo 服务。在本示例中,请查找并改写 GetJobOrderDBInfo 服务。
3. 在脚本编辑器中,向下滚动至已向其添加属性的数据形状的条目。在本示例中,请查找以下条目:
"dataShapeName": "PTC.SCA.SCO.JobOrder_AP",
"indexedFields": []
4. 使用新属性的数据库信息更新数据形状的条目。
如果要对属性进行索引,请将其添加到具有以下属性的数据形状的 indexedFields 数组:
name -(必需)属性的名称。
unique - 指定属性是否必须具有唯一值。
identifier - 数据库中实体的名称。如果尚未指定,则系统会自动以 <表名>_<列名>_idx 格式生成该值。如果已指定,则无论对于指定值,还是任何自动生成的值,该值都必须具备唯一性。该值的最大长度为数据库所允许的最大标识符长度。
如果属性要作为 外键,那么请添加具有以下属性的数据形状的 foreignKeys 数组:
name - 当前数据形状上要作为外键的属性的名称。
referenceDataShapeName - 所引用的数据库表的数据形状。
referenceFieldName - 包含所引用值的字段的名称。
onDelete - 所引用数据形状的实例被删除时,当前数据形状的实例会出现何种情况。
deleteReference - 当前数据形状的实例被删除时,所引用数据形状的实例会出现何种情况。
有关删除行为的详细信息,请参阅 设置外键的删除行为
要为属性指定其他数据库约束,请将其添加为 fields 数组中的条目:
name - 新属性的名称。必填。
length - 新属性的列长度 (如果与数据库的默认列长度不同)。
notNull - 指定属性是否不得为空。
* 
如果某一数据库必须具有唯一值,那么请使用 indexedFields 而非 fields 数组中的 unique 指定此部分内容。
在本示例中,要指定 Location 的列长度为 4000 个字符且不能有空值,请按如下方式更新 PTC.SCA.SCO.JobOrder_AP 数据形状的条目:
{
"dataShapeName": "PTC.SCA.SCO.JobOrder_AP",
"indexedFields": []
"fields": [{
"name": "Location",
"length": 4000
"notNull": true
}]
},
5. 单击“保存”以保存对服务所做的更改。
同步数据库信息和数据库架构
将数据库信息与数据库模式同步。有关详细信息,请参阅 同步数据库信息和数据库架构
填充自定义属性
以下代码示例演示了如何将自定义属性包括在服务中,进而以编程方式填充此属性。此代码使用 CreateInfoTable 服务将 PTC.SCA.SCO.JobOrderPTC.SCA.SCO.JobOrder_AP 数据形状合并至单个信息表,并以 Montreal 值填充新的 Location 属性。
var jobOrderDataShapeName = "PTC.SCA.SCO.JobOrder";
var productionManagerThingName = Things["PTC.Factory.LaunchPointConfigurationThing"].GetProductionOrderManagerThingName();
var jobOrders = Things[productionManagerThingName ].CreateInfoTable({
dataShapeName: jobOrderDataShapeName
});
var jobOrder = {};
jobOrder.ID = "" + 121;
jobOrder.WorkType = 1;
jobOrder.Description = "test";
jobOrder.Location = "Montreal";
jobOrders.AddRow(jobOrder);

var newJobOrders = Things[productionManagerThingName ].CreateJobOrders({
JobOrders: jobOrders
});