- Criado por Usuário desconhecido (rubens.santos), última alteração por Cleane Hermann em 23 jun, 2023

Componente disponível a partir da versão 12.1.18 do Logix.
Sintaxe
_ADVPL_create_component(NULL,"LJSONOBJECT") => cComponentReference
Métodos GET
Métodos acessíveis utilizando a função _ADVPL_get_property,
que permite recuperar e manipular os valores do componente:
Método GET: ACTIVATE
Ativa o conteúdo JSON para leitura e manipulação.
Sintaxe
LET l_status = _ADVPL_get_property(< l_reference >,"ACTIVATE", < l_json >)
Parâmetros
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
l_json | CHAR | Conteúdo JSON que será utilizado. | Sim |
Retorno
Tipo | Descrição |
---|---|
SMALLINT | Verdadeiro se o JSON foi ativado com sucesso. |
Exemplo
LET l_status = _ADVPL_get_property(l_json_reference,"ACTIVATE","{""code"":1}") IF NOT l_status THEN CALL log0030_processa_mensagem("Não foi possível ativar o JSON informado, verifique se o mesmo é válido.","stop",0) RETURN FALSE END IF
Método GET: LENGTH
Retorna a quantidade de itens dentro de uma lista JSON.
Sintaxe
LET l_length = _ADVPL_get_property(< l_reference >,"LENGTH", < l_path >)
Parâmetros
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
l_path | CHAR | Caminho completo do atributo do tipo lista no JSON. | Sim |
Retorno
Tipo | Descrição |
---|---|
INTEGER | Quantidade de itens existentes dentro da lista JSON informada. |
Exemplo
# Recupera a quantidade de "phoneNumber" disponíveis no JSON. LET l_phones = _ADVPL_get_property(l_json_reference,"LENGTH","phoneNumber")
Método GET: PROPERTIES
Retorna a lista de propriedades disponíveis em determinado atributo do JSON.
Sintaxe
LET la_properties = _ADVPL_get_property(< l_reference >,"PROPERTIES", < l_path >, [ l_complete ])
Parâmetros
l_path | CHAR | Caminho completo do atributo no JSON. | Sim | |
l_complete | SMALLINT | Verdadeiro se deverá trazer o nome da propriedade completa. | Não | TRUE |
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|
Retorno
Tipo | Descrição |
---|---|
ARRAY OF CHAR | Lista com as propriedades do atributo JSON informado. |
Exemplo
DEFINE l_ind SMALLINT DEFINE la_properties ARRAY[50] OF CHAR(100) # Recupera a lista de propriedades existentes no atributo "address". LET la_properties = _ADVPL_get_property(l_json_reference,"OBJECT_PROPERTIES","address") FOR l_ind = 1 TO 50 IF la_properties[l_ind] IS NULL THEN EXIT FOR END IF CALL CONOUT("PROPERTY: " || la_properties[l_ind] CLIPPED) END FOR
Método GET: TYPE
Retorna o tipo de um atributo JSON.
Sintaxe
LET l_type = _ADVPL_get_property(< l_reference >,"TYPE", < l_path >)
Parâmetros
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
l_path | CHAR | Caminho completo do atributo no JSON. | Sim |
Retorno
Tipo | Descrição |
---|---|
CHAR | Tipo do atributo JSON, sendo: C - CHAR, N - NUMERIC, O - OBJECT e A - ARRAY. |
Exemplo
DEFINE l_type CHAR(001) # Recupera o tipo de alguns atributos JSON. LET l_type = _ADVPL_get_property(l_json_reference,"TYPE","lastName") # C - CHAR LET l_type = _ADVPL_get_property(l_json_reference,"TYPE","age") # N - NUMERIC LET l_type = _ADVPL_get_property(l_json_reference,"TYPE","address") # O - OBJECT LET l_type = _ADVPL_get_property(l_json_reference,"TYPE","phoneNumber") # A - ARRAY
Método GET: VALUE
Retorna o valor de determinado atributo do JSON.
Sintaxe
LET l_value = _ADVPL_get_property(< l_reference >,"VALUE", < l_path >)
Parâmetros
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
l_path | CHAR | Caminho completo do atributo no JSON. | Sim |
Retorno
Tipo | Descrição |
---|---|
MIXED | Valor do atributo informado, o tipo de dado depende do tipo do atributo JSON. |
Exemplo
DEFINE l_streetAddress CHAR(050) DEFINE l_phoneNumber CHAR(012) # Recupera o valor do atributo "streeAddress" dentro do objeto "address". LET l_streetAddress = _ADVPL_get_property(l_json_reference,"VALUE","address/streetAddress") # Recupera o primeiro "phoneNumber" do JSON. LET l_phoneNumber = _ADVPL_get_property(l_json_reference,"VALUE","phoneNumber[1]/number")
Exemplo (array de record)
DEFINE l_json_data CHAR(30000) DEFINE l_json_reference VARCHAR(10) DEFINE l_length_ajusts SMALLINT DEFINE l_status SMALLINT DEFINE l_ind SMALLINT DEFINE ma_ajust_bxa_adt_integ ARRAY[500] OF RECORD cod_tip_val LIKE ad_valores.cod_tip_val, valor LIKE ad_valores.valor, num_ad_nf_orig LIKE adiant.num_ad_nf_orig, ser_nf LIKE adiant.ser_nf, ssr_nf LIKE adiant.ssr_nf, cod_fornecedor LIKE adiant.cod_fornecedor, dat_mov LIKE mov_adiant.dat_mov END RECORD LET l_json_data = '{ "payload": { "ajustBxaAdtInteg": [ { "codTipVal": "1", "valor": 1000, "numAdNfOrig": 123456, "serNf": "AD", "ssrNF": "A", "codFornecedor": "12", "datMov": "10/10/2019" }, { "codTipVal": "2", "valor": 3000, "numAdNfOrig": 654321, "serNf": "AF", "ssrNF": "B", "codFornecedor": "13", "datMov": "01/12/2018" }, { "codTipVal": "3", "valor": 2000, "numAdNfOrig": 555555, "serNf": "AJ", "ssrNF": "C", "codFornecedor": "14", "datMov": "31/10/2019" } ] } }' LET l_json_reference = _ADVPL_create_component(NULL, "LJSONOBJECT") LET l_status = _ADVPL_get_property(l_json_reference,"ACTIVATE",l_json_data CLIPPED) LET l_length_ajusts = _ADVPL_get_property(l_json_reference, "LENGTH", "payload/ajustBxaAdtInteg") FOR l_ind = 1 TO l_length_ajusts LET ma_ajust_bxa_adt_integ[l_ind].cod_tip_val = _ADVPL_get_property(l_json_reference, "VALUE", "payload/ajustBxaAdtInteg["||l_ind||"]/codTipVal") LET ma_ajust_bxa_adt_integ[l_ind].valor = _ADVPL_get_property(l_json_reference, "VALUE", "payload/ajustBxaAdtInteg["||l_ind||"]/valor") LET ma_ajust_bxa_adt_integ[l_ind].num_ad_nf_orig = _ADVPL_get_property(l_json_reference, "VALUE", "payload/ajustBxaAdtInteg["||l_ind||"]/numAdNfOrig") LET ma_ajust_bxa_adt_integ[l_ind].ser_nf = _ADVPL_get_property(l_json_reference, "VALUE", "payload/ajustBxaAdtInteg["||l_ind||"]/serNf") LET ma_ajust_bxa_adt_integ[l_ind].ssr_nf = _ADVPL_get_property(l_json_reference, "VALUE", "payload/ajustBxaAdtInteg["||l_ind||"]/ssrNF") LET ma_ajust_bxa_adt_integ[l_ind].cod_fornecedor = _ADVPL_get_property(l_json_reference, "VALUE", "payload/ajustBxaAdtInteg["||l_ind||"]/codFornecedor") LET ma_ajust_bxa_adt_integ[l_ind].dat_mov = _ADVPL_get_property(l_json_reference, "VALUE", "payload/ajustBxaAdtInteg["||l_ind||"]/datMov") CALL CONOUT("------------------- Exibindo os valores --------------------") CALL CONOUT(ma_ajust_bxa_adt_integ[l_ind].cod_tip_val) CALL CONOUT(ma_ajust_bxa_adt_integ[l_ind].valor) CALL CONOUT(ma_ajust_bxa_adt_integ[l_ind].num_ad_nf_orig) CALL CONOUT(ma_ajust_bxa_adt_integ[l_ind].ser_nf) CALL CONOUT(ma_ajust_bxa_adt_integ[l_ind].ssr_nf) CALL CONOUT(ma_ajust_bxa_adt_integ[l_ind].cod_fornecedor) CALL CONOUT(ma_ajust_bxa_adt_integ[l_ind].dat_mov) END FOR
Métodos SET
Métodos acessíveis utilizando a função _ADVPL_set_property
que permite alterar e manipular os valores do componente.
Método SET: DEACTIVATE
Desativa o conteúdo JSON utilizado liberando recursos na memória do servidor.
Sintaxe
CALL _ADVPL_set_property(< l_reference >,"DEACTIVATE")
Exemplo
# Ao finalizar o uso, desativa o componente. CALL _ADVPL_set_property(l_json_reference,"DEACTIVATE")
Método SET: VALUE
Define o valor de determinado atributo do JSON.
Sintaxe
CALL _ADVPL_set_property(< l_reference >,"VALUE", < l_value >, < l_path >)
Parâmetros
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
l_value | MIXED | Valor que será definido para o atributo, o tipo de dado vai depender do tipo da variável. | Sim | |
l_path | CHAR | Caminho completo do atributo no JSON. | Sim |
Exemplo
# Altera o atributo "age". CALL _ADVPL_set_property(l_json_reference,"VALUE",30,"age")
Exemplo
Clique no link na lateral direita para expandir o código de exemplo.
#------------------------------------------------------------------------------# FUNCTION LJSONObjectExemplo() #------------------------------------------------------------------------------# DEFINE l_json_reference VARCHAR(10) DEFINE l_status SMALLINT DEFINE l_json_data CHAR(500) DEFINE l_ind SMALLINT DEFINE l_phones SMALLINT DEFINE lr_person RECORD firstName CHAR(50), lastName CHAR(50), age SMALLINT, adress RECORD streetAddress CHAR(50), city CHAR(50), state CHAR(50), postalCode INTEGER END RECORD, phoneNumber ARRAY[] OF RECORD category CHAR(10), number CHAR(12) END RECORD END RECORD INITIALIZE lr_person.* TO NULL LET l_json_data = l_json_data CLIPPED, '{' LET l_json_data = l_json_data CLIPPED, '"firstName": "John",' LET l_json_data = l_json_data CLIPPED, '"lastName": "Smith",' LET l_json_data = l_json_data CLIPPED, '"age": 25,' LET l_json_data = l_json_data CLIPPED, '"address": {' LET l_json_data = l_json_data CLIPPED, '"streetAddress": "21 2nd Street",' LET l_json_data = l_json_data CLIPPED, '"city": "New York",' LET l_json_data = l_json_data CLIPPED, '"state": "NY",' LET l_json_data = l_json_data CLIPPED, '"postalCode": "10021"' LET l_json_data = l_json_data CLIPPED, '},' LET l_json_data = l_json_data CLIPPED, '"phoneNumber": [{' LET l_json_data = l_json_data CLIPPED, '"category": "home",' LET l_json_data = l_json_data CLIPPED, '"number": "212 555-1234"' LET l_json_data = l_json_data CLIPPED, '}, {' LET l_json_data = l_json_data CLIPPED, '"category": "fax",' LET l_json_data = l_json_data CLIPPED, '"number": "646 555-4567"' LET l_json_data = l_json_data CLIPPED, '}]' LET l_json_data = l_json_data CLIPPED, '}' LET l_json_reference = _ADVPL_create_component(NULL,"LJSONOBJECT") LET l_status = _ADVPL_get_property(l_json_reference,"ACTIVATE",l_json_data CLIPPED) IF NOT l_status THEN CALL log0030_processa_mensagem("Não foi possível ativar o JSON informado, verifique se o mesmo é válido.","stop",0) RETURN FALSE END IF # Recupera os valores dos atributos do objeto principal. LET lr_person.firstName = _ADVPL_get_property(l_json_reference,"VALUE","firstName") LET lr_person.lastName = _ADVPL_get_property(l_json_reference,"VALUE","lastName") LET lr_person.age = _ADVPL_get_property(l_json_reference,"VALUE","age") # Recupera os valores dos atributos do objeto "address". LET lr_person.adress.streetAddress = _ADVPL_get_property(l_json_reference,"VALUE","address/streetAddress") LET lr_person.adress.city = _ADVPL_get_property(l_json_reference,"VALUE","address/city") LET lr_person.adress.state = _ADVPL_get_property(l_json_reference,"VALUE","address/state") LET lr_person.adress.postalCode = _ADVPL_get_property(l_json_reference,"VALUE","address/postalCode") # Recupera a quantidade de "phoneNumber". LET l_phones = _ADVPL_get_property(l_json_reference,"LENGTH","phoneNumber") FOR l_ind = 1 TO l_phones # Adiciona um novo "phoneNumber" no ARRAY. CALL ArrayAddItem(lr_person.phoneNumber,1) # Recupera os valores dos atributos do objeto "phoneNumber" para a linha atual. LET lr_person.phoneNumber[l_ind].category = _ADVPL_get_property(l_json_reference,"VALUE","phoneNumber["|| l_ind USING "<<<<<"||"]/category") LET lr_person.phoneNumber[l_ind].number = _ADVPL_get_property(l_json_reference,"VALUE","phoneNumber["|| l_ind USING "<<<<<"||"]/number") END FOR # Emite no CONSOLE os dados recuperados. CALL CONOUT("FIRST NAME....: " || lr_person.firstName CLIPPED) CALL CONOUT("LAST NAME.....: " || lr_person.lastName CLIPPED) CALL CONOUT("AGE...........: " || lr_person.age USING "<<<<<") CALL CONOUT("ADRESS---------") CALL CONOUT("STREET ADDRESS: " || lr_person.adress.streetAddress CLIPPED) CALL CONOUT("CITY..........: " || lr_person.adress.city CLIPPED) CALL CONOUT("STATE.........: " || lr_person.adress.state CLIPPED) CALL CONOUT("POSTAL CODE...: " || lr_person.adress.postalCode USING "<<<<<<<<<&") # Recupera a quantidade de "phoneNumber" a partir do ARRAY. LET l_phones = ArrayLength(lr_person.phoneNumber) FOR l_ind = 1 TO l_phones #CALL CONOUT("PHONE 01-----------") CALL CONOUT("PHONE "|| l_ind USING "<<<&&" ||"-------") CALL CONOUT("CATEGORY......: " || lr_person.phoneNumber[l_ind].category CLIPPED) CALL CONOUT("NUMBER........: " || lr_person.phoneNumber[l_ind].number CLIPPED) END FOR # Altera a idade e a cidade do "John Smith". LET lr_person.age = 30 LET lr_person.adress.city = "Los Angeles" CALL _ADVPL_set_property(l_json_reference,"VALUE",lr_person.age,"age") CALL _ADVPL_set_property(l_json_reference,"VALUE",lr_person.adress.city CLIPPED,"address/city") # Serializa o JSON alterado e emite o novo conteúdo no CONSOLE. LET l_json_data = _ADVPL_get_property(l_json_reference,"SERIALIZE") CALL CONOUT(l_json_data) # Ao finalizar o uso, desativa o componente. CALL _ADVPL_set_property(l_json_reference,"DEACTIVATE") RETURN TRUE END FUNCTION