公用通信对象结构
公用通信对象 (Common Communication Object),也称为 CCO,是用于在 Windchill 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
|
表示 Windchill 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"
}