Versões comparadas

Chave

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

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ão 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:

Image Added


Informações
titleRetorno 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. ).

Aviso
titleAtençã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  

Bloco de código
themelanguageEclipsedelphi
linenumberstrue
#Include 'Protheus.ch'
#Include 'birtdataset.ch'
 
DATASET TSTPROF01 DATASET TESTE01  //Em ambiente sem chave de compilação utilizar o comando USER_DATASET no lugar de DATASET
TITLE "Teste de ProfileDataset Protheus."
DESCRIPTION "Relatório de testes de gravação de profile	"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 "TSTPROF01TESTE01"
 
COLUMNS    
	defineDEFINE columnCOLUMN FIELDGCAMPO1 TYPE CHARCHARACTER SIZE 110 LABEL "GetCampo 1"    
	defineDEFINE columnCOLUMN FIELDCCAMPO2 TYPE CHARNUMERIC SIZE 6 DECIMALS 12 LABEL "ComboCampo 2"    
	defineDEFINE columnCOLUMN FIELDNGCAMPO3 TYPE NUMERICCHARACTER SIZE 110 LABEL "GetCampo 3"    
	defineDEFINE columnCOLUMN FIELDNCCAMPO4 TYPE NUMERICCHARACTER SIZE 1 LABEL "Campo 4"
	DEFINE COLUMN CAMPO5 TYPE CHARACTER SIZE 100 LABEL "ComboCampo 5"
 
DEFINE QUERY "SELECT * FROM %WTable:1%"
 
PROCESS DATASET 
 
Local cWTabAlias
 
Private cFieldGcField1 := self:execParamValue( "MV_PAR01" )
Private cFieldCcField2 := self:execParamValue( "MV_PAR02" )
Private cFieldNGcField3	:= self:execParamValue( "MV_PAR03" )
Private cFieldNCcField4	:= 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 )->FIELDG>CAMPO1 := cFieldGcField1
( cWTabAlias )->FIELDC>CAMPO2 := cFieldCcField2
( cWTabAlias )->FIELDNG>CAMPO3 := cFieldNGDtoC(cField3)
( cWTabAlias )->FIELDNC>CAMPO4 := cFieldNC 
(cWTabAlias cField4
( cWTabAlias )->CAMPO5 := cField5
 
( cWTabAlias )->( MsUnlock() ) 
 
( cWTabAlias )->( DbCloseArea() )
Return .T.

 

  

 

 

...