O DataSet compreende a entidade responsável pelo processamento das informações. É a inteligência do Report sendo a entidade produtora de resultados capazes de serem processados pelos componentes do Layout para a posterior exibição.

Datasets são criados quando é necessário um processamento prévio das informações que serão populadas em uma WorkTable contendo os resultados para posterior pesquisa que será realizada pelo Layout em conjunto com o TOTVS | WebViewer.

O desenvolvimento de um Dataset é feito em ADVPL utilizando a metalinguagem para Datasets BIRT. Após o Dataset ser compilado em um repositório de objetos, estará disponível para ser adicionado a um Layout através do TOTVS | Developer Studio.

Estrutura de um Dataset

O Dataset é formado de diversos componentes utilizados para acesso a informações:

Exemplo de um Dataset

Criaremos um exemplo de um Dataset simples que solicita alguns parâmetros baseado em um Grupo de Perguntas do SX1 e grava na WorkTable os valores digitados nestes parâmetros.

Alguns comandos foram utilizados a partir da Metalinguagem de Datasets Birt, toda documentação sobre a metalinguagem utilizada pode ser obtida nos links citados acima, na Estrutura de um Dataset.


Configuração do SX1 utilizado no exemplo:


Após o processamento, o Dataset deverá sempre retornar um valor Lógico (booleano) indicando o processamento finalizado com sucesso ( .T. ) ou falha na execução ( .F. ).

Para desenvolvimento sem chave de compilação, trocar no exemplo abaixo o comando DATASET por USER_DATASET. 

Necessário fontes BIRTReport.prw, TDSProcess.prw e BIRTDataset.prw com data igual ou superior a 06/04/2016 e pacote de Includes com data igual ou superior a  

#Include 'Protheus.ch'
#Include 'birtdataset.ch'
 
DATASET TESTE01  //Em ambiente sem chave de compilação utilizar o comando USER_DATASET no lugar de DATASET
TITLE "Teste de Dataset Protheus."
DESCRIPTION 	"Este é um teste de um Dataset Protheus utilizando perguntas do SX1 que serve como exemplo para o desenvolvedor." + CRLF + ;
		"Este Dataset solicita um conjunto de parâmetros do SX1 e grava na WorkTable os parâmetros digitados."
PERGUNTE "TESTE01"
 
COLUMNS    
	DEFINE COLUMN CAMPO1 TYPE CHARACTER SIZE 10 LABEL "Campo 1"    
	DEFINE COLUMN CAMPO2 TYPE NUMERIC SIZE 6 DECIMALS 2 LABEL "Campo 2"    
	DEFINE COLUMN CAMPO3 TYPE CHARACTER SIZE 10 LABEL "Campo 3"    
	DEFINE COLUMN CAMPO4 TYPE CHARACTER SIZE 1 LABEL "Campo 4"
	DEFINE COLUMN CAMPO5 TYPE CHARACTER SIZE 100 LABEL "Campo 5"
 
DEFINE QUERY "SELECT * FROM %WTable:1%"
 
PROCESS DATASET 
 
Local cWTabAlias
 
Private cField1 := self:execParamValue( "MV_PAR01" )
Private cField2 := self:execParamValue( "MV_PAR02" )
Private cField3	:= self:execParamValue( "MV_PAR03" )
Private cField4	:= self:execParamValue( "MV_PAR04" )
Private cField5	:= self:execParamValue( "MV_PAR05" )  

cWTabAlias := self:createWorkTable()

If self:isPreview()
	//utilize este método para verificar se esta em modo de preview
	//e assim evitar algum processamento, por exemplo atualização
	//em atributos das tabelas utilizadas durante o processamento
EndIf
 
RecLock( cWTabAlias, .T. ) 

( cWTabAlias )->CAMPO1 := cField1
( cWTabAlias )->CAMPO2 := cField2
( cWTabAlias )->CAMPO3 := DtoC(cField3)
( cWTabAlias )->CAMPO4 := cField4
( cWTabAlias )->CAMPO5 := cField5
 
( cWTabAlias )->( MsUnlock() )
 
( cWTabAlias )->( DbCloseArea() )
Return .T.