Base de conhecimento
Encontre respostas para suas dúvidas em quatro fontes de conhecimento diferentes ao mesmo tempo, simplificando o processo de pesquisa.

Cross Segmentos - TOTVS Backoffice (Linha Protheus) - ADVPL - Criação de Objeto de Negócio SmartView com TLPP

time.pngTempo aproximado para leitura: 00:02:00 min


Dúvida
Como criar um novo Objeto de Negócio no SmartView?


Ambiente
Cross Segmentos - Backoffice (Linha Protheus) – ADVPL – A partir da versão 12.1.2310


Solução
Desenvolver um fonte, em TLPP, utilizando a Classe IntegratedProvider, e realizar a compilação em seu RPO para que o mesmo encontre-se disponível na sessão Objetos de Negócio para a utilização dentro do SmartView.

Obs: Importante reiniciar o Server após a compilação, para que o fonte seja devidamente compilado no ambiente REST, que é onde os Objetos de Negócios são localizados pelo SmartView.

Exemplo:

#include "msobject.ch"
#include "totvs.framework.treports.integratedprovider.th"

namespace custom.materiais.produtos.integratedprovider

@totvsFrameworkTReportsIntegratedProvider(active=.T., team="SIGACOM", tables="SB1", name="Materiais", country="ALL", initialRelease="12.1.2210")
class SB1TReportsBusinessObject from totvs.framework.treports.integratedprovider.IntegratedProvider
public method new() as object
public method getData() as object
public method getSchema() as object
endclass

method new() class SB1TReportsBusinessObject
_Super:new()
//Define a Área
self:appendArea("Compras")

//Define o nome do Objeto de Negócio
self:setDisplayName("Produtos")

//Define a descrição do Objeto de Negócio
self:setDescription("Produtos do Protheus")

return self

method getData() as object class SB1TReportsBusinessObject
local cQuery as character

//Define a quantidade máxima por página (Default 100)
self:setPageSize(200)

//Define a query do Objeto de Negócio
cQuery := "SELECT #QueryFields# FROM " + RetSQLName("SB1") + " WHERE #QueryWhere#"
self:setQuery(cQuery)

//Define o campo de ordenação da query
self:setOrder("B1_COD")

//Define o where da query
self:setWhere("B1_FILIAL = '"+ FWxFilial('SB1') +"' AND D_E_L_E_T_ = ' '")

return self:oData

method getSchema() as object class SB1TReportsBusinessObject

self:addProperty("Filial", "Filial", "string", "Filial", "B1_FILIAL")
self:addProperty("Codigo", "Codigo", "string", "Código", "B1_COD")
self:addProperty("Descricao", "Descricao", "string", "Descricao","B1_DESC")
self:addProperty("Tipo", "Tipo", "string", "Tipo","B1_TIPO")
self:addProperty("Unidade", "Unidade de medida", "string", "Unidade","B1_UM")
self:addProperty("Revisao", "Revisao", "date", "Revisao","B1_UREV")

return self:oSchema

 

Obj_Negocio.gif

 

Saiba mais
Smart View - Protheus como Fonte de Dados Nativa
Smart View - Criação de Objetos de Negócios
Smart View - Annotation no objeto de negócio

Esse artigo foi útil?
Usuários que acharam isso útil: 0 de 0

3 Comentários

  • Avatar
    TI-SISTEMAS ELG

    E como faz a questao de adicao de parametros?

    Como faz para debugar?

    0
    Ações de comentário Permalink
  • Avatar
    DANIEL ALVES

    Bom dia ! 

    Poderia disponibilizar um exemplo completo com a criação de parâmetros ? 

    Grato

    1
    Ações de comentário Permalink
  • Avatar
    DANIEL ALVES (Editado )

    Bom dia ! 

    Vou deixar um código simples aqui, com declaração e retorno de parâmetros.
    Não sei se está com as melhores praticas, mas ajuda quem está começando.  

    ------------------------------------------------------------------------------------------------------------------------------------------------

    #include "protheus.ch"
    #include "msobject.ch"
    #include "totvs.framework.treports.integratedprovider.th"

    //-------------------------------------------------------------------
    //*/{Protheus.doc} SB1TReportsBusinessObject
    //Objeto de Negócio (SmartView) para visualização de Produtos (SB1).
    //
    //@author  Daniel Alves
    //@since 25/09/2025
    //@version 1.0
    //-------------------------------------------------------------------

    namespace custom.cadastros.produtos.integratedprovider

    @totvsFrameworkTReportsIntegratedProvider(active=.T., team="SIGAEST", tables="SB1", name="PRODUTOSCUSTOM", country="ALL", initialRelease="12.1.2210")
    class SB1TReportsBusinessObject from totvs.framework.treports.integratedprovider.IntegratedProvider

        public method new() as object
        public method getData(nPage as numeric, oFilter as object) as object
        public method getSchema() as object

    endclass

    //------------------------------------------------------------------------------
    // Método: new()
    //------------------------------------------------------------------------------
    method new() class SB1TReportsBusinessObject

        _Super:new()

        self:appendArea("PESSOAL")
        self:setDisplayName("PRODUTOS CUSTOM")
        self:setDescription("Consulta de Produtos da Tabela SB1")

    return self

    //------------------------------------------------------------------------------
    // Método: getData()
    //------------------------------------------------------------------------------
    method getData(nPage as numeric, oFilter as object) as object class SB1TReportsBusinessObject
        local cQuery     := ""
        local jParams    := NIL
        local lUseParams as logical

        self:setPageSize(500)

        cQuery := "SELECT SB1.B1_FILIAL, SB1.B1_COD, SB1.B1_DESC, SB1.B1_TIPO, SB1.B1_UM, SB1.B1_GRUPO " +;
                  "FROM " + RetSqlName("SB1") + " SB1 " +;
                  "WHERE SB1.D_E_L_E_T_ = ' ' "

        lUseParams := .T.

        // Filtros vindos da interface
        if oFilter:hasFilter()
            cQuery += " AND " + oFilter:getSQLExpression()
        endif

        // Parâmetros definidos no getSchema()
        // Aqui você recebe o retorno dos parametros informados no smartview
        //
        if ValType(oFilter) == "O"
            jParams := oFilter:getParameters()

            if !Empty(jParams["CODIGO"][1])
                cQuery += " AND SB1.B1_COD = '" + AllTrim(jParams["CODIGO"][1]) + "'"
            endif

            if !Empty(jParams["GRUPO"][1])
                cQuery += " AND SB1.B1_GRUPO = '" + AllTrim(jParams["GRUPO"][1]) + "'"
            endif
        endif

        self:setQuery(cQuery)
        self:setOrder("SB1.B1_COD")

    return self:oData

    //------------------------------------------------------------------------------
    // Método: getSchema()
    //------------------------------------------------------------------------------
    method getSchema() class SB1TReportsBusinessObject

        // Parâmetros que virão da tela do SmartView (Aqui são criados os filtros)
        self:addParameter("CODIGO", "Código do Produto", "string", .F., "SB1.B1_COD")
        self:addParameter("GRUPO", "Grupo de Produtos", "string", .F., "SB1.B1_GRUPO")

        // Propriedades exibidas no relatório (Campos que estarão disponiveis no samrtview)
        self:addProperty("B1_FILIAL", "Filial", "string", "Filial do Produto", "SB1.B1_FILIAL")
        self:addProperty("B1_COD", "Código", "string", "Código do Produto", "SB1.B1_COD")
        self:addProperty("B1_DESC", "Descrição", "string", "Descrição do Produto", "SB1.B1_DESC")
        self:addProperty("B1_TIPO", "Tipo", "string", "Tipo de Produto", "SB1.B1_TIPO")
        self:addProperty("B1_UM", "Unidade", "string", "Unidade de Medida", "SB1.B1_UM")
        self:addProperty("B1_GRUPO", "Grupo", "string", "Grupo de Produtos", "SB1.B1_GRUPO")

    return self:oSchema


    ------------------------------------------------------------------------------------------------------------------------------------------------
     





     
     
     



     

    Atenciosamente

    1
    Ações de comentário Permalink
Por favor, entre para comentar.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Preencha os campos abaixo para iniciar o atendimento:

Chat _