Histórico da Página
...
Bloco de código | ||||
---|---|---|---|---|
| ||||
DATABASE Logix { Função roteadora principal que será executada pelo Logix REST quando feito uma requisição que combine com o módulo, a versão e o recurso da função. } #---------------------------# FUNCTION wms_v1_dimensoes() #---------------------------# {DEFINIÇÃO DAS ROTAS} #Inicia a técnica para definição das rotas de execução das funções conforme a requisição recebida. CALL _ADVPL_create_rest_logix_routes() #Definição de rota onde toda requisição de método GET, que contenha o filtro a seguir, #será direcionada para função wms_v1_dimensoes_get_normal(). #FILTRO: # - Serão capturadas todas as requisições que possuírem um parâmetro Path "/normal" # e um parâmetro Query "fields" com qualquer conteúdo (*). CALL _ADVPL_add_rest_logix_routes("GET", #--# Método #--# "/normal/*/", #--# Path Param a ser filtrado #--# "fields=*", #--# QueryParam a ser filtrado #--# "wms_v1_dimensoes_get_normal") #--# Função a ser executada #--# #Definição de outra rota, onde toda requisição de método GET, que contenha o filtro a seguir, #será direcionada para função wms_v1_dimensoes_get_ordenado(). #FILTRO: # - Serão capturadas todas requisições que contenha qualquer parâmetro Path ("/*" indica "Todos Paths" ou "nenhum") # e um parâmetro Query "order" com valor "dimensao" CALL _ADVPL_add_rest_logix_routes("GET", "/*", "order=dimensao", "wms_v1_dimensoes_get_ordenado") #Definição de outra rota, onde todas as requisições de método GET, que possuírem quaisquer parâmetros #(Query e/ou Path) informados, serão direcionadas para a função wms_v1_dimensoes_get(). CALL _ADVPL_add_rest_logix_routes("GET", "/*", "", "wms_v1_dimensoes_get") #Definição de rota onde todas as requisições de método POST, que possuírem quaisquer parâmetros (Query e/ou Path) informados, #serão direcionadas para a função wms_v1_dimensoes_post(). CALL _ADVPL_add_rest_logix_routes("POST", "/*", "", "wms_v1_dimensoes_post") #Definição de rota onde todas as requisições de método PUT (update), que possuírem quaisquer parâmetros (Query e/ou Path) informados, #serão direcionadas para a função wms_v1_dimensoes_put(). CALL _ADVPL_add_rest_logix_routes("PUT", "/*", "", "wms_v1_dimensoes_put") #Definição de rota onde todas as requisições de método DELETE, que possuírem quaisquer parâmetros (Query e/ou Path) informados, #serão direcionadas para a função wms_v1_dimensoes_delete(). CALL _ADVPL_add_rest_logix_routes("DELETE", "/*", "", "wms_v1_dimensoes_delete") END FUNCTION #------------------------------------------------------# FUNCTION wms_v1_dimensoes_get_normal(l_json_reference) #------------------------------------------------------# {FUNÇÃO#FUNÇÃO GET COM PATH PARAM "NORMAL" ADICIONADA COMO ROTA NA FUNÇÃO wms_v1_dimensoes()} DEFINE l_json_reference VARCHAR(10) DEFINE l_json VARCHAR(1000) . . . RETURN l_json END FUNCTION #-------------------------------------------------------# FUNCTION wms_v1_dimensoes_get_ordenado(l_json_reference) #-------------------------------------------------------# {FUNÇÃO#FUNÇÃO GET COM PATH PARAM "ORDENADO" ADICIONADA COMO ROTA NA FUNÇÃO wms_v1_dimensoes()} DEFINE l_json_reference VARCHAR(10) DEFINE l_json VARCHAR(1000) . . . RETURN l_json END FUNCTION |
...
A variável de referência de um objeto LJSONOBJECT, recebida pela requisição como parâmetro na função 4GL definida na rota conterá informações completas da requisição, desde informações do HEADER, QUERY PARAMs, PATH PARAMs e o próprio PAYLOAD.
...
Acesse a documentação referente ao componente LOGIX LRESTLOGIXRESPONSE para saber mais detalhes a respeito das propriedades SET e GET disponíveis.Exemplos de utilização
EXEMPLO MONTAGEM DO JSON DE RETORNO DA REQUISIÇÃO
Bloco de código | ||||
---|---|---|---|---|
| ||||
#-----------------------------------------------# FUNCTION wms_v1_dimensoes_get_dimensao(l_json_reference) #-----------------------------------------------# DEFINE l_json_reference VARCHAR(10) DEFINE l_logix_response VARCHAR(10) DEFINE l_json CHAR(1000) #--# Utilização do método SERIALIZE da classe LJSONOBJECT #--# LET l_json = _ADVPL_get_property(l_json_reference,"SERIALIZE") #--# Criação da resposta padronizada utilizando a classe LRestLogixResponse #--# LET l_logix_response = _ADVPL_create_component(NULL,"LRestLogixResponse") CALL _ADVPL_set_property(l_logix_response,"PAYLOAD",l_json,"payload") #--# Propriedades opcionais (mensagem de erro, detalhamento do erro, código do erro #--# CALL _ADVPL_set_property(l_logix_response,"MESSAGE","ErroMensagem de Msgerro","ErroDetalhamento do Detailerro", "10") #--# Definição do status de retorno da requisição CALL _ADVPL_set_property(l_logix_response,"STATUS",'200') #--# Opcional, utilizada quando o conteúdo de retorno for um JSONArray #--# CALL _ADVPL_set_property(l_logix_response,"HAS_NEXT",TRUE) #Retorno do conteúdo do componente LRestLogixResponse no formato RETURN JSON RETURN _ADVPL_get_property(l_logix_response,"GENERATE") END FUNCTION |
EXEMPLO DE LEITURA DOS DADOS ENVIADOS NO JSON DA REQUISIÇÃO
A leitura dos dados do JSON da requisição é realizada utilizando a função _ADVPL_get_property(l_
...
json_
...
reference, "
...
VALUE",<campo>)
...
Bloco de código | ||||
---|---|---|---|---|
| ||||
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 //Esta#Esta informação da variável l_json_data abaixo só é atribuida manualmente //comoapenas um exemplo do conteúdo JSON que já é recebido pelas viarequisições REST. 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") #Leitura dos itens da lista "ajustBxaAdtInteg" existentes no JSON da requisição 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 |
EXEMPLO DA LEITURA DOS FILTROS QueryParam E PathParam ENVIADOS NO JSON DA REQUISIÇÃO
Bloco de código | ||||
---|---|---|---|---|
| ||||
#--------------------------------------------------# FUNCTION vdp_v1_clientes_nacionais(l_json_reference) #--------------------------------------------------# DEFINE l_json_reference VARCHAR(10) DEFINE l_logix_response VARCHAR(10) DEFINE l_query_param CHAR(200) DEFINE l_path_param CHAR(200) DEFINE l_json_retorno CHAR(1000) #--# Carrega o valor da primeira entrada do Query Param #--# #--# Exemplo de QueryParams ?order=dimensao&cliente=1234: '[["order","dimensao"],["cliente","1234"]]' #--# No exemplo abaixo, a busca acontece no primeiro QueryParam (order) buscando o nome dele (order) #--# LET l_query_param = _ADVPL_get_property(l_json_reference,"VALUE","queryparams[1][1]") #--# Neste exemplo, a busca acontece no primeiro QueryParam (order) buscando o valor dele (dimensao) #--# LET l_query_param = _ADVPL_get_property(l_json_reference,"VALUE","queryparams[1][2]") #--# No exemplo abaixo, a busca acontece no segundo QueryParam (cliente) buscando o nome dele (cliente) #--# LET l_query_param = _ADVPL_get_property(l_json_reference,"VALUE","queryparams[2][1]") #--# Neste exemplo, a busca acontece no primeiro QueryParam (cliente) buscando o valor dele (1234) #--# LET l_query_param = _ADVPL_get_property(l_json_reference,"VALUE","queryparams[2][2]") #--# Carrega o primeiro Path Param #--# #--# Exemplo: '{"pathparams":["path1","path2"]}' LET l_path_param = _ADVPL_get_property(l_json_reference,"VALUE","pathparams[1]") LET l_json_retorno = '{"queryParam":"',LOG_alltrim(l_query_param),'","pathParam":"',LOG_alltrim(l_path_param),'"}' #--# Executar a regra de negócio neste ponto #--# LET l_logix_response = _ADVPL_create_component(NULL,"LRestLogixResponse") CALL _ADVPL_set_property(l_logix_response,"PAYLOAD",l_json_retorno,"payload") CALL _ADVPL_set_property(l_logix_response,"STATUS",'200') RETURN _ADVPL_get_property(l_logix_response,"GENERATE") END FUNCTION |
...