Páginas filhas
  • 8370362 DFWKTOOLS-1943 DT LJsonObject - Falha leitura elementos Json Array


01. DADOS GERAIS

Linha de Produto:Logix
Segmento:Tecnologia
Módulo:Framework
Função:Componente LJsonObject
Ticket:8370362
Requisito/Story/Issue (informe o requisito relacionado) :DFWKTOOLS-1943


02. SITUAÇÃO/REQUISITO

Na tentativa de ler propriedades LENGTH, TYPE e VALUE de elementos de um JSON Array utilizando o componente LJsonObject, estão sendo retornados valores incorretos.

A situação ocorria apenas com JSON Array iniciado com o símbolo "[" (colchete) sem definição do TAG com o nome da lista/array, conforme exemplo abaixo:

[ 
  { "tipo":1,
    "codigo":"11PB220521",
    "operacao":"ProcessarProduto",
    "descricao":"Operação ''ProcessarProduto'' executada com sucesso para a chave: 11PB220521."
  }
]


03. SOLUÇÃO


Correção da leitura e interpretação dos elementos de um JSON Array no componente LJsonObject, quando o formato do Json tiver as características mencionadas anteriormente no tópico 02. Situação/Requisito


Exemplo de código de carga e leitura de JSON ARRAY
#---------------------------#
 FUNCTION LJSonObject_test()
#---------------------------#
  DEFINE l_json_reference VARCHAR(10)
  DEFINE l_content        VARCHAR(500)
  DEFINE l_status         SMALLINT
  DEFINE l_value          VARCHAR(100)

  LET l_content = '[ {"tipo":1,"codigo":"11PB220521","operacao":"ProcessarProduto","descricao":"Operação ''ProcessarProduto'' executada com sucesso para a chave: 11PB220521."} ]'

  LET l_status = _ADVPL_get_property(l_json_reference,"ACTIVATE",l_content CLIPPED)
  CALL conout("STATUS CONTENT1 = " ||l_status)
  
  IF NOT l_status THEN
    CALL conout("Não foi possível ativar o JSON informado, verifique se o conteúdo e formato são válidos.")
  ELSE
    LET l_value =_ADVPL_get_property(l_json_reference,"VALUE","[1]/tipo")
    CALL conout("Valor do elemento TIPO da ocorrencia 1 da lista = ["||l_value||"]")

    #Como a lista não possui TAG com a nomenclatura, não é passado parâmetro após o parâmetro da propriedade LENGTH. 
    #Quando a lista tiver nomenclatura, deve-se passar o nome da lista após o parâmetro da propriedade LENGTH. Exemplo: _ADVPL_get_property(l_json_reference,"LENGTH",<nome_lista>)
    LET l_value = _ADVPL_get_property(l_json_reference,"LENGTH")
    CALL conout("Tamanho da lista principal = ["||l_value||"]")
    
    LET l_value =_ADVPL_get_property(l_json_reference,"TYPE","[1]/descricao")
    CALL conout("Tipo do elemento TIPO da ocorrencia 1 da lista = ["||l_value||"]")
 END IF

END FUNCTION



IMPORTANTE!

Disponível a partir do pacote oficial 12.1.29 ou Framework Fix 12.1.28.(fix01)


05. ASSUNTOS RELACIONADOS