Rest advpl - Parametros no postman sendo ignorados.

o Código anexado debugando no vscode consigo retornar os dados que preciso, ocorre tudo certo com os parâmetros e a query filtra diante da inserção dos mesmos. Mas quando vou checar no postman acontece que os parâmetros inseridos são ignorados e retorna todos os dados da consulta sem a filtragem necessário dos parâmetros.

include "TOTVS.ch"

include "RESTFUL.ch"

Include "topconn.ch"

Include "tbiconn.ch"

//------------------------------------------------------------------- //{Protheus.doc} Itens de Notas Fiscais WebService para disponibilização de Itens notas fiscais de saída @author Erick Cordeiro @since 28/11/2024 @version 1.0// //------------------------------------------------------------------- WsRestful CashUpItemNFv10 Description "WebService de Item Notas fiscais v10" WSDATA dtini AS STRING OPTIONAL WSDATA dtfim AS STRING OPTIONAL WsMethod GET Description "Disponibilização de Item Notas Fiscais v10" WSSYNTAX "/GET" End WsRestful

WSMETHOD GET WSRECEIVE dtini, dtfim WSSERVICE CashUpItemNFv10

Local nPosDtini := aScan(Self:AQueryString, {|x| AllTrim(Upper(x[1])) == "dtini"}) Local nPosDtfim := aScan(Self:AQueryString, {|x| AllTrim(Upper(x[1])) == "dtfim"}) Local cDtIni := '' Local cDtFim := '' Local oBody Local cJson

//ConOut(dtini,dtfim)

If nPosDtini > 0 cDtIni := Self:AQueryString[nPosDtini][2] EndIf

If nPosDtfim > 0 cDtFim := Self:AQueryString[nPosDtfim][2] EndIf

//ConOut(cDtIni,cDtFim) // Log para depuração

oBody := u_INFcash(cDtIni,cDtFim) cJson := oBody:toJson()

::SetContentType('application/json') ::SetResponse(cJson)

Return .T.

//------------------------------------------------------------------- //{Protheus.doc} Get de Itens de Notas Fiscais WebService para disponibilização de itens de Notas Fiscais @author Erick Cordeiro @since 28/11/2024 @version 1.0 // //-------------------------------------------------------------------

User Function INFcash(cDtIni,cDtFim) Local cQuery1 := "" Local lAtivAmb := .F. Local a := 0 Local oBody := JsonObject():new() Local oLine := Nil Private xConteudo := "" Private aCampos := {} Private aNomes := {} Default cDtIni := '' Default cDtFim := '' // Default dDtini := SToD(cDtIni) // Default dDtFim := SToD(cDtFim) // Prepara o ambiente caso precise If Select("SX2") == 0 RPCClearEnv() RpcSetType(3) RpcSetEnv("01", '010101', , , "", , , , , ,) lAtivAmb := .T. // Seta se precisou montar o ambiente EndIf

// Campos da query AADD(aCampos, "D2_DOC") AADD(aCampos, "D2_EMISSAO") AADD(aCampos, "D2_SERIE") AADD(aCampos, "A1_CGC") AADD(aCampos, "M0_CGC") AADD(aCampos, "D2_COD") AADD(aCampos, "B1_DESC") AADD(aCampos, "D2_QUANT") AADD(aCampos, "D2_PRCVEN") AADD(aCampos, "D2_PEDIDO") AADD(aCampos, "D2_DESC") AADD(aCampos, "D2_ITEM") AADD(aCampos, "D2_VALICM") AADD(aCampos, "D2_CLASFIS") AADD(aCampos, "D2_VALIPI") AADD(aCampos, "D2_VALPIS") AADD(aCampos, "D2_VALCOF") AADD(aCampos, "D2_VFCPDIF") AADD(aCampos, "D2_VALFRE") AADD(aCampos, "B1_POSIPI") AADD(aCampos, "B1_CODBAR") AADD(aCampos, "D2_CF") AADD(aCampos, "D2_TOTAL") AADD(aCampos, "D2_COMIS1") AADD(aCampos, "D2_CLIENTE") AADD(aCampos, "D2_DESC") AADD(aCampos, "D2_SEGURO") // AADD(aCampos, "DTINI") // AADD(aCampos, "DTFIM")

AADD(aNomes, "NUMERO_NF") AADD(aNomes, "DT_EMISSAO") AADD(aNomes, "SERIE_NF") AADD(aNomes, "CNPJ_CLI") AADD(aNomes, "CNPJ_EMIT") AADD(aNomes, "COD_PRODUTO") AADD(aNomes, "DESCR_PRODUTO") AADD(aNomes, "QUANTIDADE") AADD(aNomes, "PRECO") AADD(aNomes, "NRO_PEDIDO") AADD(aNomes, "VLR_DESCONTO") AADD(aNomes, "SEQ") AADD(aNomes, "VLR_ICMS") AADD(aNomes, "VLR_ST") AADD(aNomes, "VLR_IPI") AADD(aNomes, "VLR_PIS") AADD(aNomes, "VLR_COFINS") AADD(aNomes, "VLR_FCP") AADD(aNomes, "VLR_FRETE") AADD(aNomes, "NCM") AADD(aNomes, "COD_BARRAS") AADD(aNomes, "CFOP") AADD(aNomes, "VLR_TOTAL") AADD(aNomes, "COMIS_PERC") AADD(aNomes, "COD_CLI") AADD(aNomes, "VLR_DESCONTO") AADD(aNomes, "VLR_SEGURO") // AADD(aNomes, "DATA_INI") // AADD(aNomes, "DATA_FIM")

// Monta a query cQuery1 := "SELECT D2DOC, D2_EMISSAO, D2_SERIE, A1_CGC, M0_CGC, D2_COD, B1_DESC, D2_QUANT, D2_PRCVEN, D2_PEDIDO, D2_DESC, D2_ITEM, " cQuery1 += "D2_VALICM, D2_CLASFIS, D2_VALIPI, D2_VALPIS, D2_VALCOF, D2_VFCPDIF, D2_VALFRE, B1_POSIPI, B1_CODBAR, D2_CF, D2_TOTAL, " cQuery1 += "D2_COMIS1, D2_CLIENTE, D2_DESC, D2_SEGURO " cQuery1 += "FROM SD2010 SD2 " cQuery1 += "INNER JOIN SYS_COMPANY ON D2_FILIAL = M0_CODFIL " cQuery1 += "INNER JOIN SB1010 SB1 ON D2_COD = B1_COD " cQuery1 += "INNER JOIN SA1010 SA1 ON D2_CLIENTE = A1_COD AND D2_LOJA = A1_LOJA " cQuery1 += "WHERE D2_FILIAL IN ('010101', '020101', '020102', '020103', '020104') AND " cQuery1 += "SD2.D_E_L_E_T = '' AND SB1.DE_L_E_T = '' AND SA1.DE_L_E_T = '' "

// cQuery1 := cQuery

// Adiciona filtro de data If !Empty(cDtIni) .and. !Empty(cDtFim) cQuery1 += " AND D2_EMISSAO BETWEEN '"+cDtini+"' AND '" +cDtFim+"'" EndIf

cQuery1 := ChangeQuery(cQuery1)

MpSysOpenQuery(cQuery1, "TMP")

If TMP->(!EOF()) TMP->(DBGOTOP()) oBody["ItemNotaFiscal"] := {} While TMP->(!EOF()) oLine := JsonObject():new() For a := 1 To Len(aCampos) xConteudo := &("TMP->"+aCampos[a]) &('oLine["'+aNomes[a]+'"] := '+IIF(ValType(xConteudo) == 'N', cValToChar(xConteudo), '"' + AllTrim(xConteudo) + '"')) Next AADD(oBody["ItemNotaFiscal"], oLine) TMP->(DbSkip()) EndDo Else SetRestFault(404, 'Item Nota Fiscal: "' + cDtIni + '", Status: Nao encontrado', .T.) EndIf

TMP->(DbCloseArea())

If lAtivAmb RPCClearEnv() Endif

return oBody // Limpa o ambiente, se

compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags advpl rest protheus api sql ou faça a sua própria pergunta.