自定义 Operator Advisor > 扩展 Operator Advisor 数据模型 > 将自定义实体添加到 Operator Advisor 数据模型
将自定义实体添加到 Operator Advisor 数据模型
将新实体添加到 Operator Advisor 数据模型涉及如下多个步骤:
为新实体创建数据形状
要为新实体创建数据形状,请完成以下步骤:
1. ThingWorx Composer 中,新建数据形状。在本示例中,将此数据形状命名为 MyObject
2. “字段定义”下,单击“添加”,并为要包括在此数据形状中的每个属性指定新的字段定义。
a. 通过选择该字段的“是主键”复选框,将某个字段指定为主键。
b. 将主键字段的“基本类型”设置为 LONG。如果主键字段为 LONG 数据类型,则系统会自动生成该字段的值,且用于递增该值的逻辑将由数据库负责处理。如果选择了不同的“基本类型”,则您必须亲自处理该逻辑以确保主键的唯一性。
要与 Operator Advisor 数据模型保持一致,请添加一个“基本类型”LONGUID 字段,同时选中“是主键”复选框。
3. 单击“保存”以保存新数据形状。
* 
为数据形状创建数据库表时,数据库表名称为数据形状名称去掉所有前缀并采用小写形式。例如,如果数据形状被命名为 ABC.MyObject,则数据库表名称为 myobject。由于数据库表名称不包含前缀,因此系统不支持可生成相同数据库表名称的多个数据形状名称,例如 ABC.MyObjectPTC.SCA.SCO.MyObject
同样,数据库表中的列名称为数据形状中的字段名称,且形式为小写。例如,名为的 MyPrimaryLocation 的字段会生成名为 myprimarylocation 的列。因此,相同的数据形状不支持具有相同字母但大小写不同的字段名称,例如 MyNamemyNamemyname
更新数据库信息以包括新的数据形状
更新数据库信息以包括您的新数据形状。您可通过以下方法来实现这一点:将数据库信息 添加到您的新实体在逻辑上所属的数据模型实体的现有 Get<entity>DBInfo 服务,或为您的实体 创建新的 Get<entity>DBInfo 服务。例如,如果您的新实体在逻辑上属于作业单数据库架构的一部分,那么请将新数据形状的数据库信息添加到 GetJobOrderDBInfo 服务。
如果选择为新实体 创建自定义管理器,那么请为实体 创建一个新的 Get<entity>DBInfo 服务。
将数据库信息添加到现有服务
要将新数据形状的数据库信息添加到现有 Get<entity>DBInfo 服务:
1. 导航至默认生产订单管理器 (PTC.SCA.SCO.DefaultProductionOrderManager)。
2. “服务”下,导航至实体的 Get<entity>DBInfo 服务并将其覆盖。例如 GetJobOrderDBInfoGetWorkDefinitionDBInfo 服务。
3. 在脚本编辑器中,类似于现有数据形状条目,将新数据形状的条目添加为数组。包括数据形状的数据库信息:
dataShapeName - 要添加新数据库表的数据形状的名称。
indexedFields - 要建立索引的列。索引有助于提高搜索和排序的速度。可在数组中定义多个索引字段。数组中的每个元素均可以包含以下属性:
name -(必需)列的名称。
unique - 指定列是否必须具有唯一值。
identifier - 数据库中实体的名称。如果尚未指定,则系统会自动以 <表名>_<列名>_idx 格式生成该值。如果已指定,则无论对于指定值,还是任何自动生成的值,该值都必须具备唯一性。该值的最大长度为数据库所允许的最大标识符长度。
fields - 需要某些附加规范的任何列。可在数组中定义多个字段。数组中的每个元素均可以包含以下属性:
name - 列的名称。必填。
length - 列的长度 (列为 String 且所需长度并非数据库默认长度时)。
notNull - 指定列是否不得为空。
* 
如果某一列必须具有唯一值,那么请使用 indexedFields 而非 fields 数组中的 unique 指定此部分内容。
foreignKeys - 新数据库表的任何 外键列定义。可在数组中定义多个外键。数组中的每个元素均必须包含以下属性:
name - 当前数据形状上要作为外键的列的名称。
referenceDataShapeName - 所引用的数据库表的数据形状。
referenceFieldName - 包含所引用值的字段的名称。
identifier - 数据库中实体的名称。如果尚未指定,则系统会自动以 <表名>_<列名>_fk 格式生成该值。如果已指定,则无论对于指定值,还是任何自动生成的值,该值都必须具备唯一性。该值的最大长度为数据库所允许的最大标识符长度。
onDelete - 所引用数据形状的实例被删除时,当前数据形状的实例会出现何种情况。
deleteReference - 当前数据形状的实例被删除时,所引用数据形状的实例会出现何种情况。
有关删除行为的详细信息,请参阅 设置外键的删除行为
例如,如果希望新 MyObject 数据形状不具有索引字段,有一个外键,且将 Location 字段的长度设置为 4000 个字符,请输入以下内容:
{
"dataShapeName": "MyObject",
"indexedFields": [],
"foreignKeys": [{"name":"WorkDefinitionUID", "referenceDataShapeName":"PTC.SCA.SCO.WorkDefinition", "referenceFieldName":"UID"}],
"fields": [
{
"name": "Location",
"length": 4000
}
]
}
4. 相继单击“完成”“保存”来保存更新的服务。
新建服务以获取数据库信息
要新建服务以获取数据形状的数据库信息:
1. 导航至默认生产订单管理器 (PTC.SCA.SCO.DefaultProductionOrderManager) 或实体的 自定义管理器 (若已创建)。
2. “服务”下,单击“添加”以添加新的服务。将该服务命名为 Get<entity>DBInfo,并将 <entity> 替换为数据形状的名称。例如,GetMyObjectDBInfo
3. 将服务的输出类型设置为 JSON
4. 以现有 Get<entity>DBInfo 服务之一作为模型,输入数据形状的数据库信息。要了解须指定的数据库信息,请参阅上一节中的步骤 c。
5. 相继单击“完成”“保存”来保存新服务。
6. 覆盖并编辑 GetDBInfo 服务。
7. 在脚本编辑器中,为新服务添加一个条目。
例如,如果您要覆盖默认生产订单管理器上的 GetDBInfo 服务,请为 GetMyObjectDBInfo 服务添加一个类似于以下内容的条目:
Array.prototype.push.apply(dbInfo.dbInfo, me.GetMyObjectDBInfo().dbInfo);
例如,如果要覆盖 自定义管理器上的 GetDBInfo 服务,请为 GetMyObjectDBInfo 服务添加一个条目,使服务代码类似于以下内容:
var dbInfo = {
dbInfo: []
};
Array.prototype.push.apply(dbInfo.dbInfo, me.GetMyObjectDBInfo().dbInfo);
var result = dbInfo;
8. 相继单击“完成”“保存”来保存更新的服务。
创建 CRUD 服务
创建管理新数据形状实例所需的 CRUD 服务。
1. 导航至默认生产订单管理器 (PTC.SCA.SCO.DefaultProductionOrderManager) 或实体的 自定义管理器 (若已创建)。
2. “服务”下,单击“添加”,然后创建必要的服务。将 Operator Advisor 实体的现有 CRUD 服务用作模型。
创建服务:
输入服务名称。在本示例中,输入 CreateMyObjects
对于服务输入,请添加一个名为 MyObjects“基本类型”INFOTABLE 的输入。对于“数据形状”,请选择数据形状。
对于服务输出,请选择 INFOTABLE,然后选取您的数据形状。
在脚本窗格中,输入类似于以下内容的代码:
var insertParams = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Insert(insertParams);
删除服务:
输入服务名称。在本示例中,输入 DeleteMyObject
对于服务输入,请添加一个名为 UID“基本类型”STRING 的输入。
对于服务输出,请选择 INFOTABLE,然后选取您的数据形状。
在脚本窗格中,输入类似于以下内容的代码:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Delete(params);
更新服务:
输入服务名称。在本示例中,输入 UpdateMyObjects
对于服务输入,请添加一个名为 MyObjects“基本类型”INFOTABLE 的输入。对于“数据形状”,请选择数据形状。
对于服务输出,请选择 INFOTABLE,然后选取您的数据形状。
在脚本窗格中,输入类似于以下内容的代码:
var params = {
infoTable: MyObjects,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].Update(params);
用于检索此数据形状的单个实例的服务:
输入服务名称。在本示例中,输入 GetMyObject
对于服务输入,请添加一个名为 UID“基本类型”STRING 的输入。
对于服务输出,请选择 INFOTABLE,然后选取您的数据形状。
在脚本窗格中,输入类似于以下内容的代码:
var params = {
UID: UID,
dataShapeName: "MyObject"
};
var result = Things[me.GetDatabaseThingName()].GetEntity(params);
一种用于检索此数据形状的多个实例的服务,其中可包括 filter、offset 和 limit 输入参数。如果未指定任何输入参数,则会返回 MyObject 的所有实例:
输入服务名称。在本示例中,请输入 GetMyObjects
对于服务输入:
添加一个名为 filter“基本类型”JSON 的输入。
添加一个名为 offset“基本类型”INTEGER 的输入。
添加一个名为 limit“基本类型”INTEGER 的输入。
对于服务输出,请选择 INFOTABLE,然后选取您的数据形状。
在脚本窗格中,输入类似于以下内容的代码:
var params = {
filter: filter,
dataShapeName: "MyObject",
offset: offset,
limit: limit
};
var result = Things[me.GetDatabaseThingName()].Query(params);
3. 单击“保存”以保存默认生产订单管理器 (PTC.SCA.SCO.DefaultProductionOrderManager) 中的新服务。
4. “配置”下,将新数据形状和新创建服务的条目添加到 ServiceConfigurationSettings 表中。由此可实现:在将数据导入 Operator Advisor 时,通过上述创建服务来创建新数据形状的实例。每个数据形状在此配置表中只能指定一次。
有关详细信息,请参阅 从其他系统导入数据
同步数据库信息和数据库架构
通过同步数据库信息和数据库架构将新实体添加到数据库中。有关详细信息,请参阅 同步数据库信息和数据库架构