Para facilitar a identificação de elementos que representam listas de valores e outros elementos, sugere-se adotar o padrão “ListOf”+”nome singular” e não o plural do elemento repetido.
Exemplo:
- ListOfItem (e não Itens);
- ListOfSourceDocument (e não SourceDocuments ou SourcesDocuments);
- ListOfQuotation (e não Quotations).
A declaração do elemento de lista no JsonSchema deve respeitar os padrões descritos abaixo e como exemplificado na mensagem MaintenanceOrder_1_002.json:
"definitions": {
"BusinessContentType": {
"type": "object",
"properties": {
...
"ListOfMaintenanceOrderItem": {
"description": "Lista de Itens da Ordem de Manutenção",
"type": "array",
"items": {
"$ref": "#/definitions/MaintenanceOrderItemType",
"type": "object"
}
},
...
}
},
...
"MaintenanceOrderItemType": {
"type": "object",
"properties": {
"Event": {
"description": "Operação a ser executada no registro. / Upsert - Alterar/Incluir / Delete - Excluir",
"type": "string",
"enum": [
"Upsert",
"Delete"
]
},
"Code": {
"description": "Código do item da Ordem de Manutenção",
"type": "integer",
"format": "int32"
},
...
}
...
}
...
}
...
}
No local onde se queira incluir uma lista, deve-se adicionar um elemento com o nome ListOf + “elemento a repetir”, exemplo: ListOfMaintenanceOrderItem. Este elemento define por si só a tag "ListOfMaintenanceOrderItem" e a tag que irá se repetir "MaintenanceOrderItem".
O complexType "MaintenanceOrderItemType" define a estrutura do elemento que irá se repetir, ou seja, quais tags o JsonSchema da lista irá conter. No caso da MaintenanceOrder_1_002.json, são compostos por todos os elementos evidenciados no exemplo abaixo:
...
"MaintenanceOrderItemType": {
"type": "object",
"properties": {
"Event": {
"description": "Operação a ser executada no registro. / Upsert - Alterar/Incluir / Delete - Excluir",
"type": "string",
"enum": [
"Upsert",
"Delete"
]
},
"Code": {
"description": "Código do item da Ordem de Manutenção",
"type": "integer",
"format": "int32"
},
"InternalId": {
"description": "InternalId do item da Ordem de Manutenção",
"type": "string"
},
"ItemInternalId": {
"description": "Id de integração do Produto",
"type": "string"
},
"ItemReferenceCode": {
"description": "Código de Referência do Produto",
"type": "string",
"minLength": 1,
"maxLength": 20
},
"UnitPrice": {
"description": "Preço Unitário",
"type": "number",
"multipleOf": 0.01,
"minimum": -9999999999.99,
"maximum": 9999999999.99
},
"TotalPrice": {
"description": "Preço Total do Item",
"type": "number",
"multipleOf": 0.01,
"minimum": -9999999999.99,
"maximum": 9999999999.99
},
"Quantity": {
"description": "Quantidade",
"type": "number",
"multipleOf": 0.01,
"minimum": -9999999999.99,
"maximum": 9999999999.99
},
"UnitOfMeasureInternalId": {
"description": "Id de integração da Unidade de Medida",
"type": "string"
},
"WarehouseInternalId": {
"description": "Id de integração do Local de Estoque(Armazem)",
"type": "string"
},
"InitialDateTime": {
"description": "Data de Inicio do item",
"type": "string",
"format": "date-time"
},
"FinalDateTime": {
"description": "Data de Término do item",
"type": "string",
"format": "date-time"
},
"ProjectInternalId": {
"description": "Id de integração do Projeto",
"type": "string"
},
"TaskInternalId": {
"description": "Id de integração da Tarefa",
"type": "string"
},
"Observation": {
"description": "Observação",
"type": "string"
},
"ListOfApportionMaintenanceOrderItem": {
"description": "Rateio dos Itens da Ordem de Manutenção",
"type": "array",
"items": {
"$ref": "https://raw.githubusercontent.com/totvs/ttalk-standard-message/master/jsonschema/schemas/types/ApportionType_1_000.json#/definitions/ApportionType",
"type": "object"
}
}
}
},
...