將自訂內容新增至 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。
5. 按一下「儲存」以更新對資料形式的更新。
以任何資料庫條件約束更新資料庫資訊
如果新內容需要任何資料庫條件約束,請完成下列步驟:
1. 請導覽至 PTC.SCA.SCO.DefaultProductionOrderManager 物件。
2. 在「服務」下,尋找並取代要新增內容之實體的 Get<entity>DBInfo 服務。在此範例中,尋找並取代 GetJobOrderDBInfo 服務。
3. 在指令集編輯器中,向下捲動至已新增內容之資料形式的項目。在此範例中,尋找下列項目:
"dataShapeName": "PTC.SCA.SCO.JobOrder_AP",
"indexedFields": []
4. 以新內容的資料庫資訊更新資料形式的項目。
◦ 如果要對內容進行索引,請將其新增至資料形式的 indexedFields 陣列,並附帶下列內容:
▪ name - (必填) 內容的名稱。
▪ unique - 指定內容是否必須有具唯一性的值。
▪ identifier - 資料庫中實體的名稱。如果未指定,則系統會以 <table_name>_<column_name>_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.JobOrder 與 PTC.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
});