Структура общего объекта взаимодействия
Общий объект взаимодействия, также называемый CCO (Common Communication Object), представляет собой структуру JSON, используемую для управления передачей данных в Windchill Navigate. В одном из распространенных сценариев использования он содержит данные и метаданные для одного или нескольких экземпляров серверной системы и объекты, загруженные из этих систем.
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.
Тип свойства: string.
data
Информация, полученная из серверной системы (систем).
Тип свойства: string.
adapter
Содержит информацию об экземпляре серверной системы, из которой загружаются данные.
thingName
Наименование вещи адаптера, которая представляет серверную систему в Windchill Navigate.
Тип свойства: string.
instanceName
Наименование конкретного экземпляра серверной системы.
Тип свойства: string.
ItemListsData
Список элементов и метаданных. Элементы внутри каждого экземпляра списка должны иметь один и тот же тип объекта.
objectType
Тип объектов в массиве items.
Тип свойства: string или object. Принимаются также другие типы, если они сериализованы, такие как integer или boolean.
items
Список элементов, их атрибуты и значения атрибутов.
value
Значение конкретного атрибута и элемента.
Тип свойства: string или object.
PTC.Nav.Descendants
Содержит массив всех потомков элемента, т. е. потомков, потомков потомков и т. д.
* 
Это свойство существенно только для иерархических данных.
metadata
Информация об атрибутах, общих для всех элементов. Элементы в metadata могут иметь строку type, включающую строковые значения "INTEGER" и "BOOLEAN". Они также могут содержать объект type, например NAV.OBJECT.
hasChildren
Атрибут, специфичный для Windchill, который указывает, есть ли у конкретного элемента потомки. Относится только к детали или CAD-документам.
Тип свойства - boolean.
* 
Это свойство существенно только для иерархических данных.
typeData
Дополнительная информация о objectType. Используется только в редких случаях.
Тип свойства: объект JSON.
status
Статус загрузки данных.
Тип свойства: string.
statusMessage
Сообщение о статусе загрузки данных.
Тип свойства: string.
timeStamp
Метка времени для загрузки данных.
Тип свойства: string.
Примеры структуры 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"
}
Было ли это полезно?