建構區塊 > 延伸資料模型 > 將自訂實體新增至資料模型
將自訂實體新增至資料模型
將新實體新增至資料模型涉及多個步驟:
建立新的建構區塊
欲建立新的建構區塊,請完成下列步驟:
1. 建立新專案。針對您的專案使用具唯一性的前綴,例如您的公司名稱。PTC 前綴會保留給由 PTC 遞送的實體。在此範例中,建立名為 MyCompany.MyBuildingBlock 的專案。針對您為此建構區塊建立的每個新物範本、物件或其他實體,在實體的「一般資訊」頁中將您的新專案新增為「專案」值。
2. 在您的專案中建立進入點物範本。針對此範例,將新物範本命名為 MyCompany.MyBuildingBlock.EntryPoint_TT。要使用的「基礎物範本」取決於新建構區塊的類型:
如果您的建構區塊是從 PTC 建構區塊延伸而來,請使用 PTC 建構區塊中的進入點物範本。
如果您的建構區塊是抽象建構區塊,請使用 PTC.Base.ComponentEntryPoint_TT 物範本。
如果您的建構區塊是實行建構區塊,請使用 PTC.DefaultConfiguration.EntryPoint_TT 物範本。
如果您的建構區塊是標準建構區塊,請使用 PTC.Base.ComponentEntryPoint_TT 物範本。
如果您的建構區塊是使用者介面建構區塊,請使用 PTC.Base.ComponentEntryPoint_TT 物範本。
3. 在您使用步驟 2 中建立之物範本作為其「基礎物範本」的專案中建立進入點物件。針對此範例,將新物件命名為 MyCompany.MyBuildingBlock.EntryPoint
4. 為您的構建區塊建立管理員物件。
如果您的構建區塊是從 PTC 構建區塊延伸,請完成下列步驟:
1. 在從 PTC 建構區塊使用管理員物範本作為其「基礎物範本」的專案中建立物範本。
2. 在您使用步驟 a 中建立之物範本作為其「基礎物範本」的專案中建立物件。針對此範例,將新物件命名為 MyCompany.MyBuildingBlock.Manager
如果您的構建區塊不是從 PTC 構建區塊延伸,請完成下列步驟:
1. 在您的專案中建立物形式,以保留用來管理新實體的服務定義。在此範例中,將新物形式命名為 MyCompany.MyBuildingBlock.Managment_TS
2. 在使用 PTC.Base.CommonManager_TT 作為其「基礎物範本」的專案中建立物範本。針對此範例,將新物範本命名為 MyCompany.MyBuildingBlock.Manager_TT
3. 將您在步驟 a 中建立的物形式新增至您在步驟 b 中建立之物範本上的「已實行的形式」欄位中。
4. 在您使用步驟 b 中建立之物範本作為其「基礎物範本」的專案中建立物件。針對此範例,將新物件命名為 MyCompany.MyBuildingBlock.Manager 並使用 MyCompany.MyBuildingBlock.Manager_TT 作為其「基礎物範本」
5. 如果您的建構區塊是從 PTC 建構區塊延伸而來,請將原始建構區塊的管理員物件中的所有組態新增至新建構區塊的管理員物件。
a. 導覽至您在步驟 4 中建立的管理員物件,在此範例中為 MyCompany.MyBuildingBlock.Manager
b. 「組態」下,新增在原始建構區塊之管理員物件的「組態」頁中找到的相同組態。
6. 為您的構建區塊註冊管理員物件。
a. 導覽至 PTC.Base.Manager 物件。
b. 「組態」下,針對 DefaultGlobalManagerConfiguration 組態表按一下「新增」
針對「名稱」,輸入自訂管理員的名稱,例如 MyCompany.MyBuildingBlock.Manager
針對「值」,搜尋並選取在步驟 4 中建立的自訂管理員物件。
c. 按一下「新增」,將自訂管理員新增至組態表。
d. 按一下「儲存」,儲存管理員物件的更新。
為新實體建立資料形式
欲為新實體建立資料形式,請完成下列步驟:
1. ThingWorx Composer 中,建立新資料形式。為新建構區塊的專案新增資料形式。在此範例中,將此資料形式命名為 MyObject
2. 「欄位定義」下,按一下「新增」,並為要包括在此資料形式中的每個內容指定新的欄位定義。
a. 將一個欄位指定為主索引鍵,方法是選取該欄位的「是主索引鍵」核取方塊。
b. 將主索引鍵欄位的「基礎類型」設定為 LONG。如果主索引鍵欄位是 LONG 資料類型,則此欄位的值會自動產生,而值的遞增邏輯會由資料庫處理。如果選取了其他「基礎類型」,則使用者必須處理遞增邏輯來確保主索引鍵具唯一性。
欲符合建構區塊資料模型,請新增一個「基礎類型」LONGUID 欄位,並選取「是主索引鍵」核取方塊。
3. 按一下「儲存」以儲存新資料形式。
* 
當針對資料形式建立資料庫表格時,資料庫表格名稱為資料形式名稱去掉任何前綴,且全部小寫。例如,如果資料形式命名為 ABC.MyObject,則資料庫表格名稱為 myobject。由於前綴不會包含在資料庫表格名稱中,因此不支援會產生相同資料庫表格名稱的多個資料形式名稱,例如 ABC.MyObjectPTC.JobOrder.MyObject
同樣地,資料庫表格中的欄名稱是來自資料形式的欄位名稱,且為小寫。例如,名為 MyPrimaryLocation 的欄位會產生名為 myprimarylocation 的欄。因此,相同的資料形式不支援具有相同字母但大小寫不同的欄位名稱,例如 MyNamemyNamemyname
更新資料庫資訊以包括新資料形式
更新資料庫資訊以包括新資料形式。為達成此目的,您可以將實體的資料庫資訊新增至新建構區塊 (MyCompany.MyBuildingBlock.Manager) 之管理員物件上的 GetDBInfo 服務。
欲將新資料形式的資料庫資訊新增至現有 GetDBInfo 服務:
1. 導覽至新建構區塊 (MyCompany.MyBuildingBlock.Manager) 的管理員物件。
2. 「服務」下,導覽至並覆寫 GetDBInfo 服務。
3. 在指令集編輯器中,與現有資料形式項目類似,將新資料形式的項目新增為數組。包括資料形式的資料庫資訊:
dataShapeName - 要新增新資料庫表格之資料形式的名稱。
indexedFields - 要建立索引的欄。索引有助於加快搜尋及排序。可在陣列中定義多個索引欄位。陣列中的每個元素都可以包含下列內容:
name - 欄的名稱。必填。
unique - 指定欄是否必須有具唯一性的值。
fieldNames - 包含欄名稱的陣列。如果僅指定了一欄,則會建立單一索引。如果指定了多個欄,則會建立複合索引。
* 
透過為 name 指定單一值 (欄名稱),而不是為 fieldnames 指定單一值,可以建立單一索引。如果同時指定 namefieldnames,則會略過 name,且會使用 fieldnames 值建立索引。
identifier - 資料庫中實體的名稱。如果未指定,則系統會以 <table_name>_<column_name>_idx 格式自動產生值。如果已指定,則該值必須具唯一性,無論對於指定值還是任何自動產生的值。值的最大長度是資料庫所允許的識別元最大長度。
fields - 需要額外一些規格的任何欄。可在陣列中定義多個欄位。陣列中的每個元素都可以包含下列內容:
name - 欄的名稱。必填。
length - 欄的長度 (欄為 String,且所需長度並非資料庫預設長度時)。
notNull - 指定欄是否不得為空值。
defaultValue - 內容的預設值。
* 
如果欄必須有具唯一性的值,請使用 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. 按一下「完成」,然後按一下「儲存」來儲存更新後的服務。
建立 CRUD 服務
建立管理新資料形式的實例所需的 CRUD 服務。
1. 在您的建構區塊的管理物形式 (MyCompany.MyBuildingBlock.Managment_TS) 上,按一下「服務」下的「新增」並建立必要的服務。將建構區塊實體的現有 CRUD 服務作為模型使用。
建立服務:
輸入服務名稱。在此範例中,輸入 AddMyObjects
針對服務輸入,新增名稱為 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);
2. 按一下「儲存」,將新服務儲存在物形式中。
同步處理資料庫資訊與資料庫結構描述
透過同步處理資料庫資訊與資料庫結構描述,將新實體新增至資料庫。如需詳細資訊,請參閱同步處理資料庫資訊與資料庫結構描述
這是否有幫助?