Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Informações

Objeto oSchema

Serão feitos tratamentos internos neste objeto.

Ele possui apenas dois métodos para uso externo, usados em conjunto com os métodos da nova classe, sendo eles:

Método AliasToSchema() - Método do objeto oSchema que transforma o alias em um schema, todos os campos serão enviados.


Método AddProperty() - Método do objeto oSchema que adiciona uma propriedade ao schema.

Parâmetros:

NomeTipoObrigatórioDefaultDescrição
cNameCaracterX
Nome da propriedade
cDescriptionCaracterX
Descrição da propriedade
cTypeCaracterX
Tipo da propriedade
cDisplayNameCaracterX
Nome de exibição da propriedade
cRealNameCaracter

Nome da propriedade no Protheus (Nome real do campo da tabela)

cComboValues

(Disponível a partir da LIB Label 20220207)

Caracter
Ao ser utilizado o método self:setIsCBoxLookup() documentado abaixo, com o segundo parâmetro igual a .T., o cComboValues receberá o valor do combobox do campo a partir da SX3Valores do key-label (Formato igual ao combobox da SX3, ex.: "D MG 01=Filial BH" separado por ; caso tenha mais de uma opção)

lIsRequired

(Disponível a partir da LIB Label 20220207)

Lógico
.F.Indica que será obrigatório informar um valor para o campo

Exemplos de uso estarão abaixo nos métodos criados para a classe IntegratedProvider.


Obs: O nome real é necessário para que o filtro seja feito com base no nome real do campo, caso contrário, o mesmo levará em consideração a propriedade name.

...

Aviso
titleFiltros
Os filtros serão setados na interface do novo TReports

Implementação do LookUp dos campos

Com os métodos documentados a seguir será possível adicionar o LookUp dos campos na interface do TReports, seu uso é opcional.

Padrão Key-Label

Key - Chave do LookUp (Valor que será procurado na tabela do schema)

Label - Label de exibição do Lookup. (Nome amigável que será apresentado na interface do TReports)

Método self:setIsCBoxLookup()

Informações

Método deverá ser utilizado no new() da nova classe criada, exemplo completo estará no final da documentação.

Parâmetros:

...

Nome

...

Exemplos de criação da nova classe:

Bloco de código
titleExemplo 1
collapsetrue
#include "msobject.ch"
#include "totvs.framework.treports.integratedprovider.th"

namespace custom.financeiro.naturezas.integratedprovider

@totvsFrameworkTReportsIntegratedProvider(active=.T.)
class SEDTReportsBusinessObject from totvs.framework.treports.integratedprovider.IntegratedProvider
    public method new() as object
    public method getDisplayName() as character
    public method getAreas() as array
    public method getData() as object
    public method getSchema() as object
endclass

method new() as object class SEDTReportsBusinessObject
	_Super:new()
	self:setDescription("Naturezas financeiras do Protheus")
return self

method getDisplayName() as character class SEDTReportsBusinessObject
return "Naturezas"

method getAreas() as array class SEDTReportsBusinessObject
return {"Financeiro"}

// Os filtros serão setados na interface do novo TReports
method getData(nPage as numeric, oFilter as object) as object class SEDTReportsBusinessObject
	self:oData:aliasToData("SED", oFilter)
return self:oData

method getSchema() as object class SEDTReportsBusinessObject
	self:oSchema:aliasToSchema("SED")
return self:oSchema

Bloco de código
titleExemplo 2
collapsetrue
#include "msobject.ch"
#include "totvs.framework.treports.integratedprovider.th"

namespace custom.financeiro.fornecedores.integratedprovider

@totvsFrameworkTReportsIntegratedProvider(active=.T.)
class SA2TReportsBusinessObject from totvs.framework.treports.integratedprovider.IntegratedProvider
    public method new() as object
    public method getAreas() as array
    public method getDescription() as character
    public method getData() as object
    public method getSchema() as object
endclass

method new() as object class SA2TReportsBusinessObject
	_Super:new()
	self:setDisplayName("Fornecedores")
return self

method getDescription() as character class SA2TReportsBusinessObject
return "Fornecedores do Protheus"

method getAreas() as array class SA2TReportsBusinessObject
return {"Financeiro", "Contas a pagar"}

method getData(nPage as numeric, oFilter as object) as object class SA2TReportsBusinessObject
	local cQuery as character
	local cAlias as character

	cQuery := "SELECT A2_NOME, A2_COD FROM " + RetSqlName('SA2') + " WHERE D_E_L_E_T_ = ' '"
	
	//Os filtros serão setados na interface do novo TReports
	if oFilter:hasFilter()
	    cQuery += " AND " + oFilter:getSQLExpression()
	endif

	cAlias := MPSysOpenQuery(cQuery)

	while !(cAlias)->(Eof())
	    self:oData:appendData({"Nome": (cAlias)->A2_NOME, "Codigo": (cAlias)->A2_COD})
	    (cAlias)->(DBSkip())
	enddo

	(cAlias)->(DBCloseArea())
return self:oData

method getSchema() as object class SA2TReportsBusinessObject
	self:oSchema:addProperty("Nome", "Nome do Fornecedor", "string", "Fornecedor", "A2_NOME")
	self:oSchema:addProperty("Codigo", "Codigo do Fornecedor", "string", "Cod do Fornecedor", "A2_COD")
return self:oSchema
Bloco de código
titleExemplo 3
collapsetrue
#include "msobject.ch"
#include "totvs.framework.treports.integratedprovider.th"

namespace custom.materiais.produtos.integratedprovider

@totvsFrameworkTReportsIntegratedProvider(active=.T.)
class SB1TReportsBusinessObject 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
endclass

method new() class SB1TReportsBusinessObject
_Super:new()
self:appendArea("Materiais")
self:appendArea("Faturamento")
return self

method getDisplayName() as character class SB1TReportsBusinessObject
return "Produtos"

method getDescription() as character class SB1TReportsBusinessObject
return "Produtos do Protheus"

method getData(nPage as numeric, oFilter as object) as object class SB1TReportsBusinessObject
local cQuery as character
local cAlias as character

cQuery := "SELECT B1_COD, B1_DESC, B1_TIPO, B1_UM FROM " + RetSQLName("SB1") + " WHERE D_E_L_E_T_ = ' '"

//Os filtros serão setados na interface do novo TReports
if oFilter:hasFilter()
    cQuery += " AND " + oFilter:getSQLExpression()
endif

cAlias := MPSysOpenQuery(cQuery)

while !(cAlias)->(Eof())
    self:oData:appendData({"Filial": (cAlias)->B1_FILIAL,; 
            "Codigo": (cAlias)->B1_COD,; 
            "Descricao": (cAlias)->B1_DESC,;
            "Tipo": (cAlias)->B1_TIPO, ;
            "Unidade": (cAlias)->B1_UM, ;
            "Revisao": FwTimeStamp(6, StoD((cAlias)->B1_UREV)) }) //O campo data deverá ser enviado no formato correto
    (cAlias)->(DBSkip())
enddo

(cAlias)->(DBCloseArea())

return self:oData

method getSchema() as object class SB1TReportsBusinessObject
self:oSchema:addProperty("Codigo", "Código", "string", "Código", "B1_COD")
self:oSchema:addProperty("Descricao", "Descrição", "string", "Descricao","B1_DESC")
self:oSchema:addProperty("Tipo", "Tipo", "string", "Tipo","B1_TIPO")
self:oSchema:addProperty("Unidade", "Unidade de medida", "string", "Unidade","B1_UM")
self:oSchema:addProperty("Revisao", "Revisao", "date", "Revisao","B1_UREV") 
return self:oSchema

Implementação do LookUp dos campos

Informações

Disponível a partir da LIB Label 20220207


Com os métodos documentados a seguir será possível adicionar o LookUp dos campos na interface do TReports, seu uso é opcional.

Padrão Key-Label

Key - Chave do LookUp (Valor que será procurado na tabela do schema)

Label - Label de exibição do Lookup. (Nome amigável que será apresentado na interface do TReports)

Método self:setIsCBoxLookup

...

Exemplo de uso:

Bloco de código
self:setIsCBoxLookup(.T., .T.)

Sintaxe: self:SetIsCBoxLookUp(<lKeyLabel>, <lX3>) → nil

...

()

Informações

Método deverá ser utilizado no getSchemanew() da nova classe criada, exemplo completo estará no final da documentação.

Parâmetros:

Nome

TipoObrigatórioDefaultDescrição
lKeyLabelLógicoX.F.

Utilização com o método addProperty() documentado acima

Exemplo de uso:

Bloco de código
self:oSchema:addProperty("Filial", "Filial", "string", "Filial", "B1_FILIAL", "D MG 01=Filial BH; D MG 02=Filial Uberaba", .F.)

Exemplos de criação da nova classe:

Bloco de código
titleExemplo 1
collapsetrue
#include "msobject.ch"
#include "totvs.framework.treports.integratedprovider.th"

namespace custom.financeiro.naturezas.integratedprovider

@totvsFrameworkTReportsIntegratedProvider(active=.T.)
class SEDTReportsBusinessObject from totvs.framework.treports.integratedprovider.IntegratedProvider
    public method new() as object
    public method getDisplayName() as character
    public method getAreas() as array
    public method getData() as object
    public method getSchema() as object
endclass

method new() as object class SEDTReportsBusinessObject
	_Super:new()
	self:setDescription("Naturezas financeiras do Protheus")
return self

method getDisplayName() as character class SEDTReportsBusinessObject
return "Naturezas"

method getAreas() as array class SEDTReportsBusinessObject
return {"Financeiro"}

// Os filtros serão setados na interface do novo TReports
method getData(nPage as numeric, oFilter as object) as object class SEDTReportsBusinessObject
	self:oData:aliasToData("SED", oFilter)
return self:oData

method getSchema() as object class SEDTReportsBusinessObject
	self:oSchema:aliasToSchema("SED")
return self:oSchema

Indica que o filtro lookup será do tipo key-label
lX3Lógico
.F.Indica que utilizará o SX3 para recuperar os valores do key-label dos campos

Exemplo de uso:

Bloco de código
self:setIsCBoxLookup(.T., .T.)

Sintaxe: self:SetIsCBoxLookUp(<lKeyLabel>, <lX3>) → nil

Aviso
titleAtenção

Ao utilizar o parâmetro lX3 como .T. todos os campos da classe passará pela aplicação do lookup de acordo com a SX3, caso o número de campos seja grande a performance poderá ser afetada.

Método self:oSchema:setComboValues()

Informações

Método deverá ser utilizado no getSchema() após a criação dos campos da nova classe, exemplo completo estará no final da documentação.

Parâmetros:

Nome

TipoObrigatórioDefaultDescrição
cFieldCaracterX
Campo que receberá o LookUp Key-Label

cComboValues

CaracterX
Valores do key-label (Formato igual ao combobox da SX3, ex.: "D MG 01=Filial BH" separado por ; caso tenha mais de uma opção)

lIsRequired

Lógico
.F.Indica que será obrigatório informar um valor para o campo

Utilização com o método addProperty() documentado acima

Exemplo de uso:

Bloco de código
self:oSchema:addProperty("Filial", "Filial", "string", "Filial", "B1_FILIAL", "D MG 01=Filial BH; D MG 02=Filial Uberaba", .F.)

Exemplos completos com LookUp Key-Label:

#include "msobject.ch" #include "totvs.framework.treports.integratedprovider.th" namespace custom.materiais.produtos.integratedprovider @totvsFrameworkTReportsIntegratedProvider(active=.T.) class SB1TReportsBusinessObject 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 endclass method new() class SB1TReportsBusinessObject _Super:new() self:appendArea("Materiais") self:appendArea("Faturamento") return self method getDisplayName() as character class SB1TReportsBusinessObject return "Produtos" method getDescription() as character class SB1TReportsBusinessObject return "Produtos do Protheus" method getData(nPage as numeric, oFilter as object) as object class SB1TReportsBusinessObject local cQuery as character local cAlias as character cQuery := "SELECT B1_COD, B1_DESC, B1_TIPO, B1_UM FROM " + RetSQLName("SB1") + " WHERE D_E_L_E_T_ = ' '" //Os filtros serão setados na interface do novo TReports if oFilter:hasFilter() cQuery += " AND " + oFilter:getSQLExpression() endif cAlias := MPSysOpenQuery(cQuery) while !(cAlias)->(Eof()) self:oData:appendData({"Filial": (cAlias)->B1_FILIAL,; "Codigo": (cAlias)->B1_COD,; "Descricao": (cAlias)->B1_DESC,; "Tipo": (cAlias)->B1_TIPO, ; "Unidade": (cAlias)->B1_UM, ; "Revisao": FwTimeStamp(6, StoD((cAlias)->B1_UREV)) }) //O campo data deverá ser enviado no formato correto (cAlias)->(DBSkip()) enddo (cAlias)->(DBCloseArea()) return self:oData method getSchema() as object class SB1TReportsBusinessObject self:oSchema:addProperty("Codigo", "Código", "string", "Código", "B1_COD") self:oSchema:addProperty("Descricao", "Descrição", "string", "Descricao","B1_DESC") self:oSchema:addProperty("Tipo", "Tipo", "string", "Tipo","B1_TIPO") self:oSchema:addProperty("Unidade", "Unidade de medida", "string", "Unidade","B1_UM") self:oSchema:addProperty("Revisao", "Revisao", "date", "Revisao","B1_UREV") return self:oSchema
Bloco de código
titleExemplo 1 - LookUp Key-Label
Bloco de código
titleExemplo 2
collapsetrue
#include "msobject.ch"
#include "protheus.ch"
#include "totvs.framework.treports.integratedprovider.th"
 
namespace custom.financeiro.fornecedores.integratedprovidermateriais
 
@totvsFrameworkTReportsIntegratedProvider(active=.T.)
class SA2TReportsBusinessObjectSB1TReportsBusinessObject from totvs.framework.treports.integratedprovider.IntegratedProvider
    public method new() as object
    public method getAreasgetDisplayName() as arraycharacter
    public method getDescription() as character
    public method getData() as object
    public method getSchema() as object
    public method getLookUp() as object
endclass
 
method new() as object class SA2TReportsBusinessObjectSB1TReportsBusinessObject
	_Super:new()
	self:setDisplayNameappendArea("FornecedoresMateriais")
self:setIsCBoxLookup(.T., .T.)
return self
 
method getDescriptiongetDisplayName() as character class SA2TReportsBusinessObjectSB1TReportsBusinessObject
return "Fornecedores do ProtheusProdutos"
 
method getAreasgetDescription() as arraycharacter class SA2TReportsBusinessObjectSB1TReportsBusinessObject
return {"Financeiro", "Contas a pagar"}
Produtos do Protheus"
 
method getData(nPage as numeric, oFilter as object) as object class SA2TReportsBusinessObjectSB1TReportsBusinessObject
	local cQuery as character
	local cAlias as character
 
	cQuery := "SELECT A2_NOME, A2_COD B1_COD, B1_DESC, B1_TIPO, B1_UM, B1_UREV, B1_FILIAL FROM " + RetSqlName('SA2'RetSQLName("SB1") + " WHERE D_E_L_E_T_ = ' '"
	 
	//Os filtros serão setados na interface do novo TReports
	if oFilter:hasFilter()
	    cQuery += " AND " + oFilter:getSQLExpression()
	endif
 
	cAlias := MPSysOpenQuery(cQuery)
 
	while !(cAlias)->(Eof())
	    cDate := FwTimeStamp(6, StoD((cAlias)->B1_UREV))
    self:oData:appendData({"NomeFilial": (cAlias)->A2>B1_NOMEFILIAL,; 
            "Codigo": (cAlias)->A2>B1_COD})
	,; 
            "Descricao": (cAlias)->(DBSkip())
	enddo

	(cAlias)->(DBCloseArea())
return self:oData

method getSchema() as object class SA2TReportsBusinessObject
	self:oSchema:addProperty("Nome", "Nome do Fornecedor", "string", "Fornecedor", "A2_NOME")
	self:oSchema:addProperty("Codigo", "Codigo do Fornecedor", "string", "Cod do Fornecedor", "A2_COD")
return self:oSchema
Bloco de código
titleExemplo 3
collapsetrue
>B1_DESC,;
            "Tipo": (cAlias)->B1_TIPO, ;
            "Unidade": (cAlias)->B1_UM, ;
            "Revisao": cDate ,;
            "Data": StoD((cAlias)->B1_UREV)})
    (cAlias)->(DBSkip())
enddo
 
(cAlias)->(DBCloseArea()) 
 
return self:oData
 
method getSchema() as object class SB1TReportsBusinessObject
local cComboFil as character

cComboFil := "D MG 01=Filial BH; D MG 02=Filial Uberaba"

self:oSchema:addProperty("Filial", "Filial", "string", "Filial", "B1_FILIAL", cComboFil,.F.)
self:oSchema:addProperty("Codigo", "Codigo", "string", "Codigo", "B1_COD")
self:oSchema:addProperty("Descricao", "Descricao", "string", "Descricao","B1_DESC")
self:oSchema:addProperty("Tipo", "Tipo", "string", "Tipo","B1_TIPO")
self:oSchema:addProperty("Unidade", "Unidade de medida", "string", "Unidade","B1_UM") 
self:oSchema:addProperty("Revisao", "Revisao", "date", "revisao","B1_UREV") 
self:oSchema:addProperty("Data", "Data", "date", "Data","B1_UREV")
self:oSchema:addProperty("Preço", "Preço", "number", "Preço","B1_PRV1")

Exemplo de exibição na interface do TReports:

Com o parâmetro lX3 = .T. ele carrega o combobox da SX3, além dos valores setados no addProperty.

Imagem apresentando a interface do Filtro do TReports com a opção LookUp ativadaImage Added        Image Added

Bloco de código
titleExemplo 2 - LookUp Key-Label
collapsetrue
#include "msobject.ch"
#include "protheus.ch"
#include "totvs.framework.treports.integratedprovider.th"

namespace custom.financeiro.naturezas.integratedprovider

// Parece que ao fazer o uso da namespace dessa forma, está gerando alguams exceções aleatório quanto as propriedades das classes
// using namespace totvs.framework.treports.integratedprovider

@totvsFrameworkTReportsIntegratedProvider(active=.T.)
class SEDTReportsBusinessObject from totvs.framework.treports.integratedprovider.IntegratedProvider
    public method new() as object
    public method getDisplayName() as character
    public method getAreas() as array
    public method getData() as object
    public method getSchema() as object
endclass

method new() as object class SEDTReportsBusinessObject
_Super:new()
self:setDescription("Naturezas financeiras do Protheus")
self:setIsCBoxLookup(.T., .F.)
return self

method getDisplayName() as character class SEDTReportsBusinessObject
return "Naturezas"

method getAreas() as array class SEDTReportsBusinessObject
return {"Financeiro"}

method getData(nPage as numeric, oFilter as object) as object class SEDTReportsBusinessObject
self:oData:aliasToData("SED", oFilter)
return self:oData

method getSchema() as object class SEDTReportsBusinessObject
self:oSchema:aliasToSchema("SED")

self:oSchema:setComboValues("ED_FILIAL", "D MG 01=Filial BH; D MG 02=Filial Uberaba", .F.)
self:oSchema:setComboValues("ED_CALCIRF", "Sim=Sim; Não=Não")
return self:oSchema

Exemplo de exibição na interface do TReports:

Imagem apresentando a interface do Filtro do TReports com a opção LookUp ativadaImage Added