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.
O Dataset é formado de diversos componentes utilizados para acesso a informações:
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.