Páginas filhas
  • 3 - Outros cases de operação shift



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:

(ideia) 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"
}



  • Sem rótulos