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:

  • Title: Título do Dataset;
  • Description: Descrição do Dataset;
  • Pergunte: Utilizado para indicar o código de grupo de Perguntas Padrões (SX1) quando utilizado;
  • Parameters: Conjunto de parâmetros quando necessário e não utilizadas Perguntas Padrões (SX1);
  • Columns: Define a estrutura do arquivo de saída. Esta estrutura é utilizada para definir a WorkTable (tabela temporária) a ser criada no Banco de Dados que conterá os resultados do processamento do Dataset para posterior pesquisa;
  • Query: Define a estrutura SQL de pesquisa na WorkTable no momento da exibição do Dataset pelo TOTVS | WebViewer, no momento da renderização do Layout;
  • Process: Início do código ADVPL que será executado na chamada do Dataset.

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:


Retorno do Dataset

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. ).

Atenção

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.