...
Descrição
Faz o set da condição padrão utilizada para ordenação do ResultSet
Parâmetros
Nome | Tipo | Descrição |
---|---|---|
cOrder | Carácter | String contendo a ordenação que irá ser utilizada no ResultSet |
...
Descrição
String contendo a ordenação informada via QueryParam
Parâmetros
Nome | Tipo | Descrição |
---|---|---|
cOrder | Carácter | String contendo a ordenação que irá ser utilizada no ResultSet |
...
Descrição
Realiza o parse dos ids #QueryFields# e #QueryWhere# gerando o ResultSet
...
Bloco de código |
---|
#include 'totvs.ch'
#include 'parmtype.ch'
//-------------------------------------------------------------------
/*/{Protheus.doc} PrdAdapter
Classe Adapter para o serviço
@author Anderson Toledo
/*/
//-------------------------------------------------------------------
CLASS PrdAdapter FROM FWAdapterBaseV2
METHOD New()
METHOD GetListProd()
EndClass
Method New( cVerb ) CLASS PrdAdapter
_Super:New( cVerb, .T. )
return
Method GetListProd( ) CLASS PrdAdapter
Local aArea AS ARRAY
Local cWhere AS CHAR
aArea := FwGetArea()
//Adiciona o mapa de campos Json/ResultSet
AddMapFields( self )
//Informa a Query a ser utilizada pela API
::SetQuery( GetQuery() )
//Informa a clausula Where da Query
cWhere := " B1_FILIAL = '"+ FWxFilial('SB1') +"' AND SB1.D_E_L_E_T_ = ' '"
::SetWhere( cWhere )
//Informa a ordenação padrão a ser Utilizada pela Query
::SetOrder( "B1_COD" )
//Executa a consulta, se retornar .T. tudo ocorreu conforme esperado
If ::Execute()
// Gera o arquivo Json com o retorno da Query
// Pode ser reescrita, iremos ver em outro artigo de como fazer
::FillGetResponse()
EndIf
FwrestArea(aArea)
Return
Static Function AddMapFields( oSelf )
oSelf:AddMapFields( 'CODE' , 'B1_COD' , .T., .T., { 'B1_COD', 'C', TamSX3( 'B1_COD' )[1], 0 } )
oSelf:AddMapFields( 'DESCRIPTION' , 'B1_DESC' , .T., .F., { 'B1_DESC', 'C', TamSX3( 'B1_DESC' )[1], 0 } )
oSelf:AddMapFields( 'GROUP' , 'B1_GRUPO', .T., .F., { 'B1_GRUPO', 'C', TamSX3( 'B1_GRUPO' )[1], 0 } )
oSelf:AddMapFields( 'GROUPDESCRIPTION' , 'BM_DESC' , .T., .F., { 'BM_DESC', 'C', TamSX3( 'BM_DESC' )[1], 0 } )
Return
Static Function GetQuery()
Local cQuery AS CHARACTER
//Obtem a ordem informada na requisição, a query exterior SEMPRE deve ter o id #QueryFields# ao invés dos campos fixos
//necessáriamente não precisa ser uma subquery, desde que não contenha agregadores no retorno ( SUM, MAX... )
//o id #QueryWhere# é onde será inserido o clausula Where informado no método SetWhere()
cQuery := " SELECT #QueryFields#"
cQuery += " FROM " + RetSqlName( 'SB1' ) + " SB1 "
cQuery += " LEFT JOIN " + RetSqlName( 'SBM' ) + " SBM"
cQuery += " ON B1_GRUPO = BM_GRUPO"
cQuery += " AND BM_FILIAL = '"+ FWxFilial( 'SBM' ) +"'"
cQuery += " AND SBM.D_E_L_E_T_ = ' '"
cQuery += " WHERE #QueryWhere#"
Return cQuery |
...
Bloco de código |
---|
#include "totvs.ch" #include "restful.ch" //------------------------------------------------------------------- /*/{Protheus.doc} products Declaração do ws products @author Anderson Toledo /*/ //------------------------------------------------------------------- WSRESTFUL products DESCRIPTION 'endpoint products API' FORMAT "application/json,text/html" WSDATA Page AS INTEGER OPTIONAL WSDATA PageSize AS INTEGER OPTIONAL WSDATA Order AS CHARACTER OPTIONAL WSMETHOD GET ProdList; DESCRIPTION "Retorna uma lista de produtos"; WSSYNTAX "/api/v1/products" ; PATH "/api/v1/products" ; PRODUCES APPLICATION_JSON END WSRESTFUL WSMETHOD GET ProdList QUERYPARAM Page WSREST products Return getPrdList(self) Static Function getPrdList( oWS ) Local lRet as logical Local oProd as object DEFAULT oWS:Page := 1 DEFAULT oWS:PageSize := 10 lRet := .T. //PrdAdapter será nossa classe que implementa fornecer os dados para o WS // O primeiro parametro indica que iremos tratar o método GET oProd := PrdAdapter():new( 'GET' ) //o método setPage indica qual página deveremos retornar //ex.: nossa consulta tem como resultado 100 produtos, e retornamos sempre uma listagem de 10 itens por página. // a página 1 retorna os itens de 1 a 10 // a página 2 retorna os itens de 11 a 20 // e assim até chegar ao final de nossa listagem de 100 produtos oProd:setPage(oWS:Page) // setPageSize indica que nossa página terá no máximo 10 itens oProd:setPageSize(oWS:PageSize) // SetOrderQuery indica a ordem definida por querystring oProd:SetOrderQuery(oWS:Order) // setUrlFilter indica o filtro querystring recebido (pode se utilizar um filtro oData) oProd:SetUrlFilter(oWS:aQueryString ) // Esse método irá processar as informações oProd:GetListProd() //Se tudo ocorreu bem, retorna os dados via Json If oProd:lOk oWS:SetResponse(oProd:getJSONResponse()) Else //Ou retorna o erro encontrado durante o processamento SetRestFault(oProd:GetCode(),oProd:GetMessage()) lRet := .F. EndIf //faz a desalocação de objetos e arrays utilizados oProd:DeActivate() oProd := nil Return lRet |
...