Páginas filhas
  • Smart View - Objeto de negócio com Procedure

Nesta documentação, você vai encontrar um exemplo de como criar um objeto de negócio em TLPP utilizando uma procedure. Se quiser saber mais sobre todos os métodos disponíveis para a criação de objetos de negócio, consulte a documentação completa aqui: Smart View - Criação de Objetos de Negócios.

Vale lembrar que os dados de um objeto de negócio podem vir de diferentes fontes, como uma query, uma procedure, um arquivo ou qualquer outra origem que possa ser lida em ADVPL/TLPP. O mais importante é sempre garantir que o schema esteja alinhado com os dados (data), como mostrado no exemplo abaixo:

GetData

GetSchema

Os dados enviados ao objeto de negócio estão no JSON jItems. É importante garantir que o nome das propriedades enviadas seja exatamente igual ao ID enviado no getSchema. Dessa forma, você consegue obter os dados de qualquer origem suportada pelo ADVPL/TLPP.

Adaptar a procedure e seu retorno de acordo com o banco de dados utilizado.



Procedure utilizada
CREATE OR ALTER PROCEDURE Product
    @Filial NVARCHAR(10) = NULL, 
    @Cod NVARCHAR(20) = NULL 
AS
BEGIN
    SELECT 
        B1.B1_FILIAL,
        B1.B1_COD,
		B1.B1_DESC,
		B1.B1_UCOM
    FROM 
        SB1T10 AS B1
    INNER JOIN 
        SB9T10 AS B9 ON B9.B9_COD = B1.B1_COD
    WHERE 
        (@Filial IS NULL OR B1.B1_FILIAL = @Filial) AND
        (@Cod IS NULL OR B1.B1_COD = @Cod);
END;
Exemplo completo
#include "msobject.ch"
#include "protheus.ch"
#include "totvs.framework.treports.integratedprovider.th"
    
namespace customprocedure
 
@totvsFrameworkTReportsIntegratedProvider(active=.T., team="Framework", name="ON Procedure", country="BRA", initialRelease="12.1.2310")
//-------------------------------------------------------------------
/*{Protheus.doc} ProductON
Classe para criação do Objeto de Negócio
 
@author Vanessa Ruama
@since 17/01/2025
@version 1.0
*/
//-------------------------------------------------------------------  
class ProductON from totvs.framework.treports.integratedprovider.IntegratedProvider
    public method new() as object
    public method getDisplayName() as character
    public method getDescription() as character
    public method getData() as object
    public method getSchema() as object
 
    protected data aFields as array
endclass
 
//-------------------------------------------------------------------
/*{Protheus.doc} new
Método de instância da classe
 
@return object: self
 
@author Vanessa Ruama
@since 17/01/2025
@version 1.0
*/
//-------------------------------------------------------------------   
method new() class ProductON
_Super:new()
self:appendArea("Compras - Procedure")

//Campos que serão retornados da procedure
self:aFields := {"B1_FILIAL", "B1_COD", "B1_DESC", "B1_UCOM"}
return self
 
//-------------------------------------------------------------------
/*{Protheus.doc} getDisplayName
Retorna o nome de exibição do objeto de negócio
 
@return string
 
@author Vanessa Ruama
@since 17/01/2025
@version 1.0
*/
//-------------------------------------------------------------------   
method getDisplayName() as character class ProductON
return "Objeto de negócio de produtos com procedure"
 
//-------------------------------------------------------------------
/*{Protheus.doc} getDescription
Retorna a descrição do objeto de negócio
 
@return string
 
@author Vanessa Ruama
@since 17/01/2025
@version 1.0
*/
//-------------------------------------------------------------------  
method getDescription() as character class ProductON
return "Objeto de negócio de produtos com procedure"
 
//-------------------------------------------------------------------
/*{Protheus.doc} getData
Retorna os dados do objeto de negócio
 
@param nPage, numérico, indica a página atual do relatório
@param oFilter, objeto, contém o filtro do TReports
 
@return object: self:oData
 
@author Vanessa Ruama
@since 17/01/2025
@version 1.0
*/
//-------------------------------------------------------------------   
method getData(nPage as numeric, oFilter as object) as object class ProductON
local jItems as json
local jParams as json
local oStatement as object

jParams := oFilter:getParameters() //metodo para retorno do json dos parâmetros

//Faz a execução da procedure Product
cQuery := "EXEC Product "
cQuery += "@Filial = '" + FWxFilial("SB1") + "', " //Indica o primeiro parâmetro

if valtype(jParams["MV_PAR01"]) == "A" .and. Len(jParams["MV_PAR01"]) > 0
    cQuery += "@Cod = ?" //Indica o segundo parâmetro
EndIf

oStatement := FWExecStatement():New(cQuery)
oStatement:setString(1, jParams["MV_PAR01"][1])

cAlias := oStatement:OpenAlias()

while !(cAlias)->(Eof())
    jItems := JsonObject():new()
    jItems['filial'] := (cAlias)->&(self:aFields[1])
    jItems['code'] := AllTrim((cAlias)->&(self:aFields[2]))
    jItems['desc'] := AllTrim((cAlias)->&(self:aFields[3]))
    jItems['date'] := u_convertDate(AllTrim((cAlias)->&(self:aFields[4])))

    self:appendData(jItems)

    (cAlias)->(DBSkip())
enddo
return self:oData
 
//-------------------------------------------------------------------
/*{Protheus.doc} getSchema
Retorna a estrutura dos campos
 
@return object: self:oSchema
 
@author Vanessa Ruama
@since 17/01/2025
@version 1.0
*/
//-------------------------------------------------------------------   
method getSchema() as object class ProductON
self:addProperty('filial', 'Filial' , 'string', 'Filial', 'B1_FILIAL')
self:addProperty('code', 'Código' , 'string', 'Código', 'B1_COD')
self:addProperty('desc', 'Descrição' , 'string', 'Descrição', 'B1_DESC')
self:addProperty('date', 'Data Últ. Compra' , 'date', 'Data Últ. Compra', 'B1_UCOM')

self:addParameter("MV_PAR01", "Código do Produto", "string", .F.)
return self:oSchema

//-------------------------------------------------------------------
/*{Protheus.doc} convertDate
Converte o campo do tipo data para o formato do Smart View

@param xDate, variant, data recebida do Protheus
 
@return cConvDate, character, data convertida para o Smart View

@author Vanessa Ruama
@since 17/01/2025
@version 1.0
*/
//-------------------------------------------------------------------  
user function convertDate(xDate as variant) as character
local cConvDate as character

if Valtype(xDate) == "D"
    cConvDate := totvs.framework.treports.date.dateToTimeStamp(xDate)
else
    cConvDate := totvs.framework.treports.date.stringToTimeStamp(xDate)
endif

return cConvDate
  • Sem rótulos