添加自定义属性和数据形状
添加自定义属性和数据形状
Operator Advisor 数据模型可以扩展为将业务特定数据添加到未在出厂时提供的模型中。可通过以下方式来实现此目的:
通过更新与 Operator Advisor 实体关联的 _AP 数据形状,将自定义属性添加到现有 Operator Advisor 实体中。
通过创建自定义数据形状以及用于对其进行管理的服务,将新实体添加到 Operator Advisor 中。
将自定义属性添加到 _AP 数据形状中
Operator Advisor 数据模型中的大多数实体均具有相关的 _AP 数据形状,用以实现添加自定义属性的目的。例如,作业单数据形状 (PTC.SCA.SCO.JobOrder) 具有关联的 PTC.SCA.SCO.JobOrder_AP 数据形状。
请按下列步骤将自定义属性添加到 Operator Advisor 实体中。本示例演示了如何将新 Location 属性添加到 PTC.SCA.SCO.JobOrder_AP 数据形状中。
1. ThingWorx Composer 中,导航至此实体的 _AP 数据形状。在本示例中,导航至 PTC.SCA.SCO.JobOrder_AP
2. “字段定义”下,单击“添加”
3. “新建字段定义”窗格中,指定以下内容:
“名称”- 属性的名称。在本示例中,输入 Location
“基本类型”- 属性的数据类型。在本示例中,选择 STRING
4. 单击 以添加新的字段定义。
5. 单击“保存”以保存对数据形状的更新。
6. 导航至针对您的系统配置的数据库事物,例如,PTC.SCA.SCO.PostgresDatabase
7. “服务”下,通过以下输入执行 AddColumn 服务:
对于 dataShapeName,搜索并选择已添加新字段定义的 _AP 数据形状。在本示例中,搜索并选择 PTC.SCA.SCO.JobOrder_AP
对于 fieldName,输入新字段定义的名称。在本示例中,输入 Location
对于 dbInfo,输入新列的数据库信息:
name - 添加到新属性数据库中的列的名称。必填
length - 新列的列长度 (如果与数据库的默认列长度不同)。
unique - 指定列是否必须具有唯一值。
notNull - 指定列是否不得为空。
在本示例中,请输入以下内容:
{"name":"Location","length":4000}
以下代码示例演示了如何将自定义属性包括在服务中,进而以编程方式填充此属性。此代码使用 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
});
在混搭中包括自定义属性
以下步骤提供了有关使用“在混搭中包括属性”的最佳做法。
1. 如上文所述,将自定义属性添加到 _AP 数据形状,然后执行 AddColumn 服务。在本示例中,我们从上一节中添加到 PTC.SCA.SCO.JobOrder_AP 数据形状的自定义 Location 属性部分继续。
2. 使用主实体数据形状和 _AP 数据形状中的字段定义创建新数据形状。
在本示例中,创建名为 MyJobOrder 的新数据形状。为 ID (从 PTC.SCA.SCO.JobOrder 数据形状) 和 Location (从 PTC.SCA.SCO.JobOrder_AP 数据形状) 添加字段定义。
3. 导航到 PTC.SCA.SCO.ProductionOrderUtils 事物。
4. “服务”下,添加新服务以便为步骤 2 中创建的数据形状创建实例。对于输入和输出参数,均使用新数据形状的信息表。
在本示例中,添加一个名为 CreateMyJobOrder 的新服务,其中输入和输出参数均具有 MyJobOrder 数据形状的信息表。在服务编辑器中,输入类似于以下内容的代码:
var productionManagerThingName = Things["PTC.Factory.LaunchPointConfigurationThing"].GetProductionOrderManagerThingName();
var newJobOrders = Things[productionManagerThingName].CreateJobOrders({
JobOrders: myJobOrders
});
//Put new job orders in a new info table of MyJobOrder in order to filter the return attribute, this is not required.
var params = {
infoTableName : "InfoTable",
dataShapeName : "MyJobOrder"
};
var result = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape(params);
var tableLength = newJobOrders.rows.length;
for (var x=0; x < tableLength; x++) {
var row = newJobOrders.rows[x];
result.AddRow(row);
}
5. 在混搭中使用新服务将会为具有自定义属性的实体创建新实例。在本示例中,在混搭内使用 CreateMyJobOrder 服务可通过在 PTC.SCA.SCO.JobOrder 数据库表填充的 ID 属性以及在 PTC.SCA.SCO.JobOrder_AP 数据库表填充的 Location 属性创建新作业单。
添加自定义数据形状
要向 Operator Advisor 中添加新实体,请为具有必要服务的实体创建新的数据形状,以管理此数据形状的实例。
1. ThingWorx Composer 中,创建新的数据形状。在本示例中,将此数据形状命名为 MyObject
2. “字段定义”下,单击“添加”,并为要包括在此数据形状中的每个属性指定新的字段定义。
3. 单击“保存”以保存新的数据形状。
4. 导航至针对您的系统配置的数据库事物,例如,PTC.SCA.SCO.PostgresDatabase
5. “服务”下,通过以下输入执行 CreateTable 服务:
对于 dataShapeName,搜索并选择在步骤 1 中创建的新数据形状。
对于 dbInfo,输入其中包含该数据形状数据库信息的 JSON 数组:
dataShapeName - 要添加新数据库表的数据形状的名称。
indexedFields - 要建立索引的列。索引有助于提高搜索和排序的速度。可在数组中定义多个索引字段。数组中的每个元素均可以包含以下属性:
name - 列的名称。必填。
unique - 指定列是否必须具有唯一值。
fields - 需要某些附加规范的任何列。可在数组中定义多个字段。数组中的每个元素均可以包含以下属性:
name - 列的名称。必填。
length - 列的长度 (列为 String 且所需长度并非数据库默认长度时)。
unique - 指定列是否必须具有唯一值。
notNull - 指定列是否不得为空。
foreignKeys - 新数据库表的任何外键列定义。可在数组中定义多个外键。数组中的每个元素均必须包含以下属性:
name - 当前数据形状上要作为外键的列的名称。
referenceDataShapeName - 所引用的数据库表的数据形状。
referenceFieldName - 包含所引用值的字段的名称。
有关详细信息,请参阅 添加或移除外键
例如,如果希望新 MyObject 数据形状不具有索引字段,有一个外键,且将 Location 字段的长度设置为 4000 个字符,请输入以下内容:
{
"dataShapeName": "MyObject",
"indexedFields": [],
"foreignKeys": [{"name":"WorkDefinitionUID", "referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition", "referenceFieldName":"UID"}],
"fields": [
{
"name": "Location",
"length": 4000
}
]
}
6. 导航至默认生产订单管理器 (PTC.SCA.SCO.DefaultProductionOrderManager)。
7. “服务”下,单击“添加”,并创建必要的服务来管理新数据形状的实体。将 Operator Advisor 实体的现有 CRUD 服务用作模型。
创建服务。在本示例中,输入 CreateMyObjects 作为服务名称。在服务编辑器中,输入以下代码:
var insertParams = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Insert(insertParams);
删除服务。在本示例中,输入 DeleteMyObject 作为服务名称。在服务编辑器中,输入以下代码:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Delete(params);
更新服务。在本示例中,输入 UpdateMyObjects 作为服务名称。在服务编辑器中,输入以下代码:
var params = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Update(params);
一种用于检索此数据形状的单个实例的服务。在本示例中,输入 GetMyObject 作为服务名称。在服务编辑器中,输入以下代码:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].GetEntity(params);
一种用于检索此数据形状的多个实例的服务,其中可包括 filter、offset 和 limit 输入参数。如果未指定任何输入参数,则会返回 MyObject 的所有实例。在本示例中,输入 GetMyObjects 作为服务名称。在服务编辑器中,输入以下代码:
var params = {
filter: filter,
dataShapeName: "MyObject",
offset: offset,
limit: limit
};
var result = Things[me.GetDatabaseThingName()].Query(params);
8. 单击“保存”以保存默认生产订单管理器 (PTC.SCA.SCO.DefaultProductionOrderManager) 中的新服务。