自訂 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 實體的服務並覆寫該服務。例如,GetJobOrderDBInfo 服務或 GetWorkDefinitionDBInfo 服務。
3. 在指令集編輯器中,與現有資料形式項目類似,將新資料形式的項目新增為數組。包括資料形式的資料庫資訊:
dataShapeName - 要新增新資料庫表格之資料形式的名稱。
indexedFields - 要建立索引的欄。索引有助於加快搜尋及排序。可在陣列中定義多個索引欄位。陣列中的每個元素都可以包含下列內容:
name - (必填) 欄的名稱。
unique - 指定欄是否必須有具唯一性的值。
identifier - 資料庫中實體的名稱。如果未指定,則系統會以 <table_name>_<column_name>_idx 格式自動產生值。如果已指定,則該值必須具唯一性,無論對於指定值還是任何自動產生的值。值的最大長度是資料庫所允許的識別元最大長度。
fields - 需要額外一些規格的任何欄。可在陣列中定義多個欄位。陣列中的每個元素都可以包含下列內容:
name - 欄的名稱。必填。
length - 欄的長度 (欄為 String,且所需長度並非資料庫預設長度時)。
notNull - 指定欄是否不得為空值。
* 
如果欄必須有具唯一性的值,請使用 indexedFields 陣列而不是 fields 陣列中的 unique 指定此值。
foreignKeys - 新資料庫表格的任何 外部索引鍵欄定義。可在陣列中定義多個外部索引鍵。陣列中的每個元素都必須包含下列內容:
name - 目前資料形式上要成為外部索引鍵的欄名稱。
referenceDataShapeName - 參考資料庫表格的資料形式。
referenceFieldName - 包含所參考值的欄位名稱。
identifier - 資料庫中實體的名稱。如果未指定,則系統會以 <table_name>_<column_name>_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 時,使用建立服務建立新資料形式的實例。每個資料形式只能在此配置表中指定一次。
如需詳細資訊,請參閱 從其他系統匯入資料
同步處理資料庫資訊與資料庫結構描述
透過同步處理資料庫資訊與資料庫結構描述,將新實體新增至資料庫。如需詳細資訊,請參閱 同步處理資料庫資訊與資料庫結構描述