3.1 - Condicional IF/Else com @ para referenciar o valor de um campo
Neste exemplo, utiliza-se a anotação "@" (arroba) numa estrutura de Jolt Condicional (If/Then) para que numa determinada condição seja atribuído ao elemento do Json de Saída o valor do campo que está sendo testado.
Para relembrar, o # (hashtag) é a anotação para indicar ao Jolt que é um valor fixo que deve ser atribuído ao campo, ignorando a própria anotação.
Representando a Condição Jolt numa condição de linguagem estruturada:
if (codFilial = "99") then idProprietario = "99" else idProprietario = codFilial
3.1.1 - Case utilizando @1
Ao se utilizar o valor 1 junto com @, no Json de Saída o valor do campo que está sendo referenciado no Json de Entrada é gravado diretamente no campo que foi definido no Spec de Transformação, neste caso o campo idProprietário:
Entrada
{ "items": [ { "codFilial": "1" }, { "codFilial": "99" } ] }
Transformação
[ { "operation": "shift", "spec": { "items": { "*": { "codFilial": { "99": { "#9999": "items.[&3].idProprietario" }, "*": { "@1": "items.[&3].idProprietario" } } } } } } ]
Saída
{ "items" : [ { "idProprietario" : "1" }, { "idProprietario" : "9999" } ] }
3.1.2 - Case utilizando @2
Ao se utilizar o valor 2 junto com o @, o campo que foi definido no Spec de Transformação para receber o valor do campo referenciado é transformado num objeto e o campo referenciado no Json de Entrada é adicionado como atributo desse novo objeto:
Entrada
{ "items": [ { "codFilial": "1", "codigousur": 1, "nome": "SUPERVISOR 1" }, { "codFilial": "99", "codigousur": 2, "nome": "RCA 2" } ] }
Transformação
[ { "operation": "shift", "spec": { "items": { "*": { "codFilial": { "99": { "#9999": "items.[&3].idProprietario" }, "*": { "@2": "items.[&3].idProprietario" } } } } } } ]
Saída
{ "items" : [ { "idProprietario" : { "codFilial" : "1" } }, { "idProprietario" : "9999" } ] }
3.2 - Adicionar campo com valor default numa operação shift
É possível adicionar um campo com valor default numa operação shift quando utilizada a anotação # (hashtag) na operação.
"#RCA": "items.[&1].tipo"
É um recurso interessante quando numa operação shift precisamos adicionar um campo com um valor fixo porque ele é obrigatório numa API externa.
Entrada
{ "items": [ { "codigousur": 1, "nome": "VENDEDOR 1" }, { "codigousur": 1252, "nome": "VENDEDOR 1252" } ] }
Transformação
[ { "operation": "shift", "spec": { "items": { "*": { "codigousur": "items[&1].codigousur", "nome": "items[&1].nome", "#RCA": "items.[&1].tipo" } } } } ]
Saída
{ "items" : [ { "tipo" : "RCA", "codigousur" : 1, "nome" : "VENDEDOR 1" }, { "tipo" : "RCA", "codigousur" : 1252, "nome" : "VENDEDOR 1252" } ] }
3.3 - Modificar a posição de um elemento para um nó filho
Como exemplo, será utilizado um Json de Entrada que possui um campo com o nome "codFilial", e esse campo deve ser também criado no Json de Entrada na lista de produtos.
Conforme foi apresentado nas páginas 1 - Case completo com Json de Entrada não Paginada (Estoque OL), ao criar um um novo Json com os elementos no mesmo nó ou em algum nó superior, bastou seguir a "escadinha" dos níveis a partir do nível onde está o elemento em direção ao nó raiz.
Seguindo a "escadinha":
Por exemplo, houver a necessidade de criar o numeroPedido também na lista de produtos ?
A solução é através da especificação [] (array vazio), e a quantidade de arrays dependerá da quantidade de nós filhos forem necessários.
Por exemplo para adicionar o número do pedido no Json de Saída no mesmo nível do Json de Entrada foi utilizado .
Porém se houver necessidade de criar também o número do pedido na lista de produtos, que seria somente um nó filho .
Demonstrando a transformação caso fosse necessário adicionar o número do pedido em dois nós filhos
3.4 - Transformar uma lista de objetos numa lista de arrays
Partindo da situação atual onde temos a seguinte transformação:
Entrada
{ "first": false, "items": [ { "branchId": "2", "carrierId": 0, "chargingId": "D", "createData": "2024-08-30T14:19:00.000000+14:19", "lastChange": "2024-08-30T14:21:00", "listOfOrderItem": [ { "productSKUERPReferenceKey": "7896635100016-1048", "quantity": 1, "deliveryStatus": "A" } ], "orderId": "5001854", "orderIdHube": "5483", "orderStatus": "F" }, { "branchId": "2", "carrierId": 0, "chargingId": "D", "createData": "2024-08-30T14:29:00.000000+14:29", "lastChange": "2024-08-30T14:31:00", "listOfOrderItem": [ { "productSKUERPReferenceKey": "7896635100016-1048", "quantity": 1, "deliveryStatus": "A" } ], "orderId": "5001856", "orderIdHube": "5484", "orderStatus": "F" } ], "hasNext": false }
Transformação
[ { "operation": "modify-overwrite-beta", "spec": { "items": { "*": { "idExterno": "=concat('pdvsync-status-prevenda-',@(1,orderId),'-',@(1,lastChange))", "idInterno": "=concat('', @(1,orderId))", "tipoIdInterno": "PDVSYNC-STATUS-PEDIDO" } } } }, { "operation": "shift", "spec": { "items": { "*": { "idExterno": "idExterno[]", "idInterno": "idInterno", "tipoIdInterno": "tipoIdInterno", "orderId": "items.[&1].idRetaguarda", "branchId": "items.[&1].idProprietario", "orderStatus": { "C": { "#0": "items.[&3].situacao", "#CANCELADA": "items.[&3].situacaoPreVenda" }, "F": { "#1": "items.[&3].situacao", "#RESGATADA": "items.[&3].situacaoPreVenda" } } } } } }, { "operation": "default", "spec": { "_attr_access": "items", "items[]": { "*": { "idInquilino": "{{ID_INQUILINO}}", "loteOrigem": "{{LOTE_ORIGEM}}" } } } } ]
Saída
{ "idExterno" : [ "pdvsync-status-prevenda-5001854-2024-08-30T14:21:00", "pdvsync-status-prevenda-5001856-2024-08-30T14:31:00" ], "idInterno" : [ "5001854", "5001856" ], "tipoIdInterno" : [ "PDVSYNC-STATUS-PEDIDO", "PDVSYNC-STATUS-PEDIDO" ], "items" : [ { "idRetaguarda" : "5001854", "idProprietario" : "2", "situacao" : "1", "situacaoPreVenda" : "RESGATADA", "loteOrigem" : "{{LOTE_ORIGEM}}", "idInquilino" : "{{ID_INQUILINO}}" }, { "idRetaguarda" : "5001856", "idProprietario" : "2", "situacao" : "1", "situacaoPreVenda" : "RESGATADA", "loteOrigem" : "{{LOTE_ORIGEM}}", "idInquilino" : "{{ID_INQUILINO}}" } ], "_attr_access" : "items" }
E necessitamos que a lista de items gerada seja transformada de uma lista de objetos para uma lista de arrays:
A solução está em adicionar um especificar um novo nó no Spec de transformação de array com posição fixa 0 (zero), tendo em vista que esse array somente terá um elemento, o objeto que está sendo transformado:
Entrada
{ "first": false, "items": [ { "branchId": "2", "carrierId": 0, "chargingId": "D", "createData": "2024-08-30T14:19:00.000000+14:19", "lastChange": "2024-08-30T14:21:00", "listOfOrderItem": [ { "productSKUERPReferenceKey": "7896635100016-1048", "quantity": 1, "deliveryStatus": "A" } ], "orderId": "5001854", "orderIdHube": "5483", "orderStatus": "F" }, { "branchId": "2", "carrierId": 0, "chargingId": "D", "createData": "2024-08-30T14:29:00.000000+14:29", "lastChange": "2024-08-30T14:31:00", "listOfOrderItem": [ { "productSKUERPReferenceKey": "7896635100016-1048", "quantity": 1, "deliveryStatus": "A" } ], "orderId": "5001856", "orderIdHube": "5484", "orderStatus": "F" } ], "hasNext": false }
Transformação
[ { "operation": "modify-overwrite-beta", "spec": { "items": { "*": { "idExterno": "=concat('pdvsync-status-prevenda-',@(1,orderId),'-',@(1,lastChange))", "idInterno": "=concat('', @(1,orderId))", "tipoIdInterno": "PDVSYNC-STATUS-PEDIDO" } } } }, { "operation": "shift", "spec": { "items": { "*": { "idExterno": "idExterno[]", "idInterno": "idInterno", "tipoIdInterno": "tipoIdInterno", "orderId": "items.[&1].[0].idRetaguarda", "branchId": "items.[&1].[0].idProprietario", "orderStatus": { "C": { "#0": "items.[&3].[0].situacao", "#CANCELADA": "items.[&3].[0].situacaoPreVenda" }, "F": { "#1": "items.[&3].[0].situacao", "#RESGATADA": "items.[&3].[0].situacaoPreVenda" } } } } } }, { "operation": "default", "spec": { "_attr_access": "items", "items[]": { "*": { "idInquilino": "{{ID_INQUILINO}}", "loteOrigem": "{{LOTE_ORIGEM}}" } } } } ]
Saída
{ "idExterno" : [ "pdvsync-status-prevenda-5001854-2024-08-30T14:21:00", "pdvsync-status-prevenda-5001856-2024-08-30T14:31:00" ], "idInterno" : [ "5001854", "5001856" ], "tipoIdInterno" : [ "PDVSYNC-STATUS-PEDIDO", "PDVSYNC-STATUS-PEDIDO" ], "items" : [ [ { "idRetaguarda" : "5001854", "idProprietario" : "2", "situacao" : "1", "situacaoPreVenda" : "RESGATADA" } ], [ { "idRetaguarda" : "5001856", "idProprietario" : "2", "situacao" : "1", "situacaoPreVenda" : "RESGATADA" } ] ], "_attr_access" : "items" }