Olá, estou utilizando a classe FWAdapterBaseV2 para retornar pedidos de compras pendentes, estou com problema onde esta sendo repetido os itens no retorno da API, ao efetuar o debug e pegando o cQuery e cWhere, pego os dados que estão sendo executando na Query e executo no QueryAnalyse do APSDU e os dados não duplicam, mas na API esta duplicando, acredito que seja algum tratamento que esteja faltando no codigo referente ao FWAdapterBaseV2, já montei uma API sem utilizar o FWAdapterBaseV2, usando a mesma Query e os dados não duplicam.
Segue as evidencias:
Codigo do fonte:
@get('api/compras/pedidos-list/v2')
Function u_pedidoxfilxcentro() as logical
Local lRPC
Local cError as character
Local jResp as json
Local cResult as character
Local jResult as json
Local cUser := '000139'as character
Local aUserCentro as array
Local cOrder := 'C7_NUM' as character
Local nPageSize as numeric
Local nPage as numeric
Local oQuery as object
Local cBFil as character
Local cBcen as character
try
IF type('cEmpAnt') <> 'C'
rpcSetEnv('01','010101')
lRPC := .T.
EndIF
aUserCentro := TRAZERPEDIDO(cUser)
cBFil := aUserCentro[1]
cBcen := aUserCentro[2]
oQuery := fwAdapterBaseV2():new('GET',.T.)
oQuery:addMapFields('filial' ,'C7_FILIAL' ,.T.,.F.)
oQuery:addMapFields('pedido' ,'C7_NUM' ,.T.,.T.)
oQuery:addMapFields('item' ,'C7_ITEM' ,.T.,.F.)
oQuery:addMapFields('descricao' ,'B1_DESC' ,.T.,.F.)
oQuery:addMapFields('status' ,'CR_STATUS' ,.T.,.F.)
oQuery:addMapFields('emissao' ,'C7_EMISSAO' ,.T.,.F.)
oQuery:addMapFields('nome' ,'AK_NOME' ,.T.,.F.)
oQuery:addMapFields('vtotal' ,'C7_TOTAL' ,.T.,.F.)
oQuery:addMapFields('c_desc' ,'CTT_DESC01' ,.T.,.F.)
oQuery:addMapFields("recno" , "RECNO" , .T., .F., { "RECNO", "N", 16, 0 }, "SC7.R_E_C_N_O_")
cQuery := "SELECT DISTINCT #QueryFields# FROM " + retSQLName("SC7") + " SC7 "
cQuery += " INNER JOIN " + RetSQLName("SCR") + " SCR ON C7_NUM=CR_NUM AND C7_XNAT <> ' ' AND C7_FILIAL=CR_FILIAL AND SCR.D_E_L_E_T_='' "
cQuery += " INNER JOIN " + RetSQLName("CTT") + " CTT ON CTT_CUSTO=SC7.C7_CC AND CTT.D_E_L_E_T_='' AND CTT_FILIAL=SUBSTRING(SC7.C7_FILIAL,1,4) "
cQuery += " INNER JOIN " + RetSQLName("SB1") + " SB1 ON B1_COD=C7_PRODUTO AND SB1.D_E_L_E_T_='' "
cQuery += " INNER JOIN " + RetSQLName("SAK") + " SAK ON SAK.D_E_L_E_T_='' AND CR_APROV=AK_COD AND CR_USER=AK_USER "
cQuery += " WHERE #QueryWhere# "
cWhere := " SCR.D_E_L_E_T_ = '' "
cWhere += CRLF + " AND CR_USER='000139'"
cWhere += CRLF + " AND CR_TIPO='IP' "
cWhere += CRLF + " AND CR_STATUS='02' "
cWhere += CRLF + " AND SCR.CR_FILIAL IN (" + cBFil + ") "
cWhere += CRLF + " AND SC7.C7_CC IN (" + cBcen + ") "
nPageSize := 20
nPage := 1
oQuery:setQuery(cQuery)
oQuery:setWhere(cWhere)
oQuery:setOrder(cOrder)
oQuery:setPageSize(nPageSize)
oQuery:setPage(nPage)
IF oQuery:execute()
oQuery:fillGetResponse()
cResult := oQuery:getJsonResponse()
Else
nError := oQuery:getCode()
cError := oQuery:getMessage()
jResp := jsonObject():new()
jResp['error'] := cError
oRest:setFault(jResp:toJson())
EndIF
jResult := jsonObject():new()
jResult:fromJson(cResult)
oRest:setResponse(cResult)
catch err
cError := err:errorstack
jResp := jsonObject():new()
jResp['error'] := cError
oRest:setFault(jResp:toJson())
endtry
IF lRPC
rpcClearEnv()
EndIF
return .T.
Print executando a Query na APSDU, note a quantidades de linhas que retornou, uma quantidade menor:
Agora com um ponto de parada debugando, note a quantidade de itens duplicados
(so consigo enviar uma imagem)
Se alguem já passou por esse problema, gostaria de um apoio, estou usando o [FWAdapterBaseV2] por que estou utilizando o retorno para uma aplicação em PO UI