Problemas JSON array camada servidor



  • Olá pessoal!

    Eu tinha encontrado um problema na hora de comparar um valor de uma array de um JSON na camada servidor. Consegui resolver utilizando a função "Para Letras". Agora me deparei com um outro problema.

    Seguinte...

    Eu criei um JSON com uma array de inteiros e armazeno numa variável da sessão. Depois num outro fluxo, obtenho esse JSON para inserir um novo valor nessa array e novamente atualizo a variável da sessão com o novo valor. Porém está gerando um erro ao tentar inserir o valor no array.

    O mesmo procedimento funciona certinho na camada cliente, porém NÃO na camada SERVIDOR.

    Creio que por conta da tipagem dos dados, está falando alguma implementação na camada servidor que obtém a array de forma correta. Eu chutaria algo relacionado com a conversão da array da classe Variant, visto que na camada servidor o Maker usa as variáveis como um objeto Variant.

    Alguém já se deparou com isso?

    Vídeo demonstrativo para melhor entendimento.

    https://www.dropbox.com/s/z9652cfwgkyccr6/maker_json_array_servidor.mp4


  • Poliano,

    Anexa um frz pra gente?

    Usamos as funções de JSON nas mais diversas situações e não temos problemas até o momento.

    Pode ser alguma situação não identificada.
    Vlw


  • [quote="Ronélio Oliveira" post_id=11040 time=1569001664 user_id=67] Poliano,

    Anexa um frz pra gente?

    Usamos as funções de JSON nas mais diversas situações e não temos problemas até o momento.

    Pode ser alguma situação não identificada.
    Vlw [/quote] Em anexo está um FRZ contendo um exemplo e também um vídeo demonstrando.

    No vídeo mostro o mesmo procedimento pra camada cliente e servidor. Note que o erro é gerado na camada servidor indicando que é ao tentar inserir um elemento na array.

    Esses são os protocolos dos problemas que encontrei em utilizar JSON na camada servidor:
    56148
    56170
    56197

    Cadastrei no canal de suporte da Softwell, mas me responderam com aquela mensagem padrão que não temos contrato de suporte ativo. Vejo que por ser um BUG, a empresa deveria ter um controle melhor para fazer correções, pois outros usuários também vão estar com os problemas.
    [154_json_erro.frz](/assets/uploads/files/154_json_erro.frz)
    [154_video_demonstrando.zip](/assets/uploads/files/154_video_demonstrando.zip)


  • Poliano, boa tarde.

    A função de atualização do JSON(JSON - Atualizar Valor), possui suporte para atualização de objetos JsonArray, desde que, o objeto a ser inserido seja um JsonObject.

    Realizamos uma melhoria na função para que a mesma possa funcionar com demais objetos e a mesma está sendo homologada.

    A função está em anexo, veja por favor se a sua necessidade é atendida.

    Desde já obrigado.
    [3287_json_-_atualizar_valor.frz](/assets/uploads/files/3287_json_-_atualizar_valor.frz)


  • [quote="Janpier dos Santos" post_id=11323 time=1570047312 user_id=3287] A função está em anexo, veja por favor se a sua necessidade é atendida. [/quote] Esse "frz" que você enviou contém somente a função "JSON - Atualizar Valor", mas o erro está dando quando estou tentando adicionar um valor na lista com a função "Inserir Objeto na Lista", conforme o exemplo que anexei na mensagem anterior.

    No exemplo estou apenas adicionando um novo valor para o JSON:

    {
    "usuarios": [
    1,
    2,
    3
    ]
    }

    Exceção Gerada:
    java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(Unknown Source)
    at java.util.AbstractList.add(Unknown Source)
    at wfr.com.systems.system_erp.rules.WebrunFunctions.[b]ebfSetElementAtList[/b](WebrunFunctions.java:16788)


  • Bom dia Poliano,

    Quando se tem uma estrutura em JSON na camada servidor o mesmo é prototipado para o suporte/manipulação do objeto, sendo assim, elementos do tipo ArrayList são convertidos para o formato JsonArray tendo como herança a classe List do java. Para inserir um novo valor em um objeto JsonArray é necessário utilizar as funções de manipulação do Json, ou seja, basta utilizar a função "JSON - Atualizar Valor" que a mesma será atualizada/inserida.

    Segue em anexo exemplo para melhor entendimento, lembrando que deve-se utilizar a função enviada anteriormente.

    Desde já, obrigado. :geek:
    [3287_exemplo_-_json.frz](/assets/uploads/files/3287_exemplo_-_json.frz)


  • [quote="Janpier dos Santos" post_id=11468 time=1570449994 user_id=3287] Para inserir um novo valor em um objeto JsonArray é necessário utilizar as funções de manipulação do Json, ou seja, basta utilizar a função "JSON - Atualizar Valor" que a mesma será atualizada/inserida. [/quote] Entendi!

    Seguindo o exemplo que mandei, então utilizei a função "JSON - Atualizar Valor" passando o campo chave nulo (2º parâmetro) e o novo valor no 3º parâmetro. Deu certo!

    Só mais uma questão... eu entendi pra fazer a alteração e inserção... no caso se eu precisar excluir um valor, como ficaria? Pois não tem uma função de remover.


  • Poliano,

    Neste caso, teríamos que modificar a função de Remover Objeto da Lista para "entender" o tipo JsonArray. O java é fortemente tipado, o que não ocorre com o Javascript e por isso que há essa facilidade maior com a manipulação de JSONs na camada cliente.


  • [quote="Ronélio Oliveira" post_id=11591 time=1570561609 user_id=67] Poliano,

    Neste caso, teríamos que modificar a função de Remover Objeto da Lista para "entender" o tipo JsonArray. O java é fortemente tipado, o que não ocorre com o Javascript e por isso que há essa facilidade maior com a manipulação de JSONs na camada cliente. [/quote] Entendo que a tipagem do Java pode tornar as coisas um pouco mais chata de se fazer, mas seria interessante ter um jeito de poder remover na camada servidor.

    Precisa dar uma atenção nessa parte de integração com o JSON certinho. Eu estava um pouco perdido em saber quando utilizar as funções da categoria "JSON" ou da "Lista". Fica um pouco complicado pra quem trabalha com os fluxos utilizar formas diferentes entre a camada cliente e servidor. Seria bom seguir um padrão para poder trabalhar igualmente em ambas camadas. Ou caso não seja possível, que fique bem documentado na descrição da função ou no manual.

    Obrigado por enquanto!


  • Perfeito.

    A necessidade atualmente é só a de Remover ou tem mais alguma?

    Pode ficar tranquilo que o time aqui vai ajustar o que precisar para que seja sempre fácil e descomplicada a utilização de nossa API.


  • [quote="Ronélio Oliveira" post_id=11713 time=1570622385 user_id=67] A necessidade atualmente é só a de Remover ou tem mais alguma? [/quote] A dúvida era mais voltado a manipular um elemento JSON array (inserir/alterar/excluir). Mas já que pergunta... rs!

    Só pra efeito de mostrar uma falha... Também é gerado um erro com a função "JSON - Criar JSON a partir dos Elementos" e um dos elementos da lista contém a chave mas com um valor nulo (camada servidor).

    O erro não ocorre por exemplo se utilizar a função "JSON - Atualizar Valor".

Log in to reply