Struttura CCO (Common Communication Object)
Common Communication Object (CCO) è una struttura JSON utilizzata per gestire il trasferimento dei dati all'interno di Windchill Navigate. In uno dei casi di utilizzo comuni, contiene dati e metadati in una o più istanze del sistema di back-end e gli oggetti recuperati da tali sistemi.
CCO supporta sia i dati in un elenco semplice sia i dati strutturati gerarchicamente. Tuttavia, i dati gerarchici richiedono l'inclusione di alcune chiavi aggiuntive, come specificato nella tabella seguente:
Struttura CCO per dati semplici
{
"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":""
}
Struttura CCO per dati gerarchici
{
"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":""
}
|
Nome proprietà
|
Descrizione
|
|
version
|
Versione della struttura CCO utilizzata.
Tipo di proprietà: stringa.
|
|
data
|
Informazioni recuperate dai sistemi di back-end.
Tipo di proprietà: stringa.
|
|
adapter
|
Contiene informazioni sull'istanza del sistema di back-end da cui vengono recuperati i dati.
|
|
thingName
|
Nome dell'oggetto dell'adattatore che rappresenta il sistema di back-end in Windchill Navigate.
Tipo di proprietà: stringa.
|
|
instanceName
|
Nome di un'istanza specifica del sistema di back-end.
Tipo di proprietà: stringa.
|
|
ItemListsData
|
Elenco di elementi e metadati. Gli elementi all'interno di ciascuna istanza dell'elenco devono appartenere allo stesso tipo di oggetto.
|
|
objectType
|
Tipo di oggetti nella matrice items.
Tipo di proprietà: oggetto o stringa. Sotto forma di stringa può accettare anche altri tipi, ad esempio un numero intero o un valore booleano.
|
|
items
|
Elenco di elementi, dei relativi attributi e dei valori degli attributi.
|
|
value
|
Valore per un attributo e un elemento specifici.
Tipo di proprietà: oggetto o stringa.
|
|
PTC.Nav.Descendants
|
Contiene un insieme di tutti i discendenti di un elemento, ovvero figli, figli di figli ecc.
|
|
Questa proprietà è pertinente solo quando i dati sono gerarchici.
|
|
|
metadata
|
Informazioni sugli attributi comuni a tutti gli elementi. Gli elementi in metadata possono avere la stringa type ("INTEGER" e "BOOLEAN" compresi). Possono inoltre avere l'oggetto type, NAV.OBJECT.
|
|
hasChildren
|
Attributo specifico di Windchill che indica se l'elemento specifico ha figli. Pertinente solo per la parte o i documenti CAD.
Tipo di proprietà booleano.
|
|
Questa proprietà è pertinente solo quando i dati sono gerarchici.
|
|
|
typeData
|
Informazioni aggiuntive su objectType. Proprietà usata solo in alcuni casi specifici.
Tipo di proprietà: oggetto JSON.
|
|
status
|
Stato del recupero dei dati.
Tipo di proprietà: stringa.
|
|
statusMessage
|
Messaggio relativo allo stato del recupero dei dati.
Tipo di proprietà: stringa.
|
|
timeStamp
|
Data e ora del recupero dei dati.
Tipo di proprietà: stringa.
|
Esempi di struttura CCO
1. L'esempio seguente include un elemento con un tipo di oggetto.
{
"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. L'esempio seguente include un elemento con due tipi di oggetto diversi. Poiché ogni matrice items contiene un solo oggetto, è presente un elemento.
{
"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. L'esempio seguente include due elementi con un tipo di oggetto. Poiché ogni matrice items contiene due oggetti, sono presenti due elementi.
{
"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. L'esempio seguente include due elementi con due tipi di oggetto. Poiché ogni matrice items contiene due oggetti, sono presenti due elementi.
{
"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. Nell'esempio riportato di seguito sono inclusi diversi tipi di oggetto, ad esempio "string", "hyperlink" (sotto forma di stringa) e 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. L'esempio seguente include i dati gerarchici:
{
"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"
}