Common Communication Object 結構
Common Communication Object (CCO) 是用來在 ThingWorx Navigate 中管理資料傳輸的 JSON 結構。在其中一個常用的使用案例中,它包含在後端系統的一或多個實例上的資料與中繼資料,以及從這些系統中擷取的物件。
CCO 支援以一般清單與階層結構顯示資料。但是,階層資料需要包括一些額外的索引鍵,如下表所指定。
一般資料的 CCO 結構
{
"version":"1.0.0",
"data":[
{
"adapter":{
"thingName":"",
"instanceName":""
},
"itemListsData":[
{
"objectType":"",
"items":[
{
"id":{
"value":""
},
"Name":{
"value":""
}
}
],
"metadata":{
"id":{
"label":"",
"type":""
},
"Name":{
"label":"",
"type":""
}
},
"typeData":{
}
}
]
}
],
"status":"",
"statusMessage":"",
"timeStamp":""
}
階層資料的 CCO 結構
{
"version":"1.0.0",
"data":[
{
"adapter":{
"thingName":"",
"instanceName":""
},
"itemListsData":[
{
"objectType":"",
"items":[
{
"id":{
"value":""
},
"Name":{
"value":""
},
"PTC.Nav.Descendants":{
"items":[
{
"id":{
"value":""
},
"Name":{
"value":""
}
}
]
}
}
],
"metadata":{
"id":{
"label":"",
"type":""
},
"Name":{
"label":"",
"type":""
}
},
"typeData":{
}
}
]
}
],
"status":"",
"statusMessage":"",
"timeStamp":""
}
內容名稱
|
描述
|
version
|
所用 CCO 結構的版本。
內容類型為字串。
|
data
|
從後端系統中擷取的資訊。
內容類型為字串。
|
adapter
|
包含從中擷取資料的後端系統實例的相關資訊。
|
thingName
|
用來表示 ThingWorx Navigate 後端系統之轉接器物件的名稱。
內容類型為字串。
|
instanceName
|
後端系統之特定實例的名稱。
內容類型為字串。
|
ItemListsData
|
項目與中繼資料的清單。此清單中每個實例內的項目都必須具有相同的物件類型。
|
objectType
|
items 陣列中的物件類型。
內容類型為字串或物件。在字串化后也可以接受其他類型,例如整數或布林值。
|
items
|
項目及其屬性與屬性值的清單。
|
value
|
特定屬性與項目的值。
內容類型為字串或物件。
|
PTC.Nav.Descendants
|
包含項目的所有子代的陣列,其中子代表示子項、子項的子項等。
|
metadata
|
關於屬性的資訊,通用於所有項目。metadata 下的項目可以有 type 字串,包括已字串化的 "INTEGER" 與 "BOOLEAN"。它們也可以擁有 type 物件 NAV.OBJECT。
|
hasChildren
|
Windchill 專用的屬性,用於指示特定項目是否有子項。僅與零件或 CAD 文件相關。
內容類型為布林值。
|
typeData
|
關於 objectType 的其他資訊。僅在極少數情況下使用。
內容類型為 JSON 物件。
|
status
|
資料擷取的狀況。
內容類型為字串。
|
statusMessage
|
關於資料擷取狀況的訊息。
內容類型為字串。
|
timeStamp
|
資料擷取的時間戳記。
內容類型為字串。
|
CCO 結構範例
1. 下列範例包含一個具有一種物件類型的項目。
{
"version":"1.0.0",
"data":[
{
"adapter":{
"thingName":"PTC.WCAdapter",
"instanceName":"windchill"
},
"itemListsData":[
{
"objectType":"PTC.ChangeMgmt.ChangeRequest",
"items":[
{
"id":{
"value":"OR:wt.change2.WTChangeRequest2:258323"
},
"Name":{
"value":"CR"
}
}
],
"metadata":{
"id":{
"label":"Id",
"type":"string"
},
"Name":{
"label":"Change Request Name",
"type":"string"
}
}
}
]
}
],
"status":"200",
"statusMessage":"OK",
"timeStamp":" 2019-01-02 06:43:19.77"
}
2. 下列範例包含一個具有兩種不同物件類型的項目。由於每個 items 陣列都僅包含一個物件,因此有一個項目。
{
"version":"1.0.0",
"data":[
{
"adapter":{
"thingName":"PTC.WCAdapter",
"instanceName":"windchill"
},
"itemListsData":[
{
"objectType":"PTC.ChangeMgmt.ChangeRequest",
"items":[
{
"id":{
"value":"OR:wt.change2.WTChangeRequest2:258323"
},
"Name":{
"value":"CR"
}
}
],
"metadata":{
"id":{
"label":"Id",
"type":"string"
},
"Name":{
"label":"Change Request Name",
"type":"string"
}
}
},
{
"objectType":"PTC.Workflow.WorkItem",
"items":[
{
"Category#Display":{
"value":"Cost Reduction"
},
"RequestPriority#Display":{
"value":"Low"
}
}
],
"metadata":{
"Category#Display":{
"label":"Category",
"type":"string"
},
"RequestPriority#Display":{
"label":"Request Priority",
"type":"string"
}
}
}
]
}
],
"status":"200",
"statusMessage":"OK",
"timeStamp":" 2019-01-02 06:43:19.77"
}
3. 下列範例包括兩個具有一種物件類型的項目。由於每個 items 陣列都包含兩個物件,因此有兩個項目。
{
"version":"1.0.0",
"data":[
{
"adapter":{
"thingName":"PTC.WCAdapter",
"instanceName":"windchill"
},
"itemListsData":[
{
"objectType":"PTC.ChangeMgmt.ChangeRequest",
"items":[
{
"id":{
"value":"OR:wt.change2.WTChangeRequest2:258323"
},
"Name":{
"value":"CR1"
}
},
{
"id":{
"value":"OR:wt.change2.WTChangeRequest2:32456"
},
"Name":{
"value":"CR2"
}
}
],
"metadata":{
"id":{
"label":"Id",
"type":"string"
},
"Name":{
"label":"Change Request Name",
"type":"string"
}
}
}
]
}
],
"status":"200",
"statusMessage":"OK",
"timeStamp":" 2019-01-02 06:43:19.77"
}
4. 下列範例包括兩個具有兩種物件類型的項目。由於每個 items 陣列都包含兩個物件,因此有兩個項目。
{
"version":"1.0.0",
"data":[
{
"adapter":{
"thingName":"PTC.WCAdapter",
"instanceName":"windchill"
},
"itemListsData":[
{
"objectType":"PTC.ChangeMgmt.ChangeRequest",
"items":[
{
"id":{
"value":"OR:wt.change2.WTChangeRequest2:258323"
},
"Name":{
"value":"CR"
}
},
{
"id":{
"value":"OR:wt.change2.WTChangeRequest2:32456"
},
"Name":{
"value":"CR2"
}
}
],
"metadata":{
"id":{
"label":"Id",
"type":"string"
},
"Name":{
"label":"Change Request Name",
"type":"string"
}
}
},
{
"objectType":"PTC.Workflow.WorkItem",
"items":[
{
"Category#Display":{
"value":"Cost Reduction"
},
"RequestPriority#Display":{
"value":"Low"
}
},
{
"Category#Display":{
"value":"Cost Reduction"
},
"RequestPriority#Display":{
"value":"High"
}
}
],
"metadata":{
"Category#Display":{
"label":"Category",
"type":"string"
},
"RequestPriority#Display":{
"label":"Request Priority",
"type":"string"
}
}
}
]
}
],
"status":"200",
"statusMessage":"OK",
"timeStamp":" 2019-01-02 06:43:19.77"
}
5. 下列範例包含不同的物件類型,例如 "string"、已字串化的 "hyperlink" 與 NAV.OBJECT 。
{
"timeStamp":"2021-10-18 17:14:05.445",
"data":[
{
"itemListsData":[
{
"metadata":{
"method":{
"label":"method",
"type":"string"
},
"body":{
"label":"body",
"type":"NAV.OBJECT"
},
"url":{
"label":"url",
"type":"hyperlink"
}
},
"items":[
{
"method":{
"value":"post"
},
"body":{
"value":{
"Variables":[
],
"UserEventList":[
"Approve"
],
"AutomateFastTrack":false,
"VoteAction":"",
"task_id":"OR:wt.workflow.work.WorkItem:408170",
"WorkitemComment":"",
"redirect_url":"",
"Name":"Conduct Online CRB Review"
}
},
"url":{
"value":""
}
}
],
"objectType":"PTC.Navigate.ESignInvoke.Adapter"
}
],
"adapter":{
"instanceName":"windchill",
"thingName":"PTC.WCAdapter"
}
}
],
"version":"1.0.0",
"statusMessage":"OK",
"status":"200"
}
6. 下列範例包括階層結構資料:
{
"version": "1.0.0",
"data": [
{
"adapter": {
"thingName": "PTC.WCAdapter",
"instanceName": "windchill"
},
"itemListsData": [
{
"objectType": "PTC.ProdMgmt.PartStructureItem",
"items": [
{
"id": {
"value": "PartId1"
},
"Name": {
"value": "Part1"
},
"PTC.Nav.Descendants": {
"items": [
{
"id": {
"value": "PartId2"
},
"Name": {
"value": "Part2"
}
},
{
"id": {
"value": "PartId3"
},
"Name": {
"value": "Part3"
}
}
]
}
},
{
"id": {
"value": "PartId4"
},
"Name": {
"value": "Part4"
}
}
],
"metadata": {
"id": {
"label": "Id",
"type": "string"
},
"Name": {
"label": "Name",
"type": "string"
}
}
}
]
}
],
"status": "200",
"statusMessage": "OK",
"timeStamp": " 2019-01-02 06:43:19.77"
}