Versões comparadas

Chave

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

Âncora
_Toc377992304
_Toc377992304
Image Added API de comunicação com o RM Reports

 

 

Projeto/Versão: RM Reports / 11.80.40

Data Especificação: 29/06/15

Erlon César – Framework BH

 


Esse documento tem como objetivo auxiliar os desenvolvedores na migração dos códigos que utilizam o RM Reports nos seus produtos. Lembrando que a partir da versão 12.1.5 uma nova engine de execução de relatórios do RM Reports foi disponibilizada para nossos clientes.
Para isso, foi criada uma nova API de comunicação com o RM Reports para facilitar o uso e a manutenção nos produtos RM que executam diretamente relatórios construídos no RM Reports.
Ela possibilita a execução de relatórios tanto no lado cliente (actions, forms, etc) quanto no lado server, procurando isolar os componentes internos de execução dos relatórios da RM e da DevExpress, impedindo assim, que os consumidores alterem propriedades e executem métodos diretamente nesses componentes.



















Classes removidas no novo modelo de execução do RMReports:

As classes abaixo foram removidas do RM Reports. Portanto os produtos que fazem uso dessas classes apresentarão erros durante o processo de compilação.

RptReportBase: foi retirada pois a mesma expõem funcionalidades dos componentes da XtraReports para os consumidores. Essa classe foi substituída pelas classes RptExecutorClient (utilização no lado cliente) e RptExecutorServer (utilização no lado server);

RptReportsWinForms: Foi substituída pela classe "RptExecutorClient";

Importante: A classe RptReport localizada na "RM.Rpt.Lib.dll" não poderá mais ser utilizada para gerar relatórios nos produtos. Com isso o método "CREATEDOCUMENT" não deve mais ser utilizado.

Importante: A dll RM.Rpt.Lib não deve mais ser adicionada como referência nos produtos que utilizam o Reports.

2) Execução de relatórios no "Server"

As informações abaixo auxiliam na criação dos códigos para execução de relatórios no server.

Passo-a-passo para utilização da API no server:

Adicionar referência para a dll "RM.Rpt.Executor.Intf.dll";

Remover as referências para as outras dll's do reports;

Utilizar a interface IRptExecutorServer localizada na dll RM.Rpt.Executor.Intf. Uma instância da classe RptExecutorServer deve ser criada da seguinte forma:

IRptExecutor executorServer = RM.Lib.RMSBroker.CreateServer<IRptExecutor>("RptExecutorServer");

A interface "IRptExecutorServer" possui a seguinte estrutura:

GetReportInfo: método responsável em retornar informações do layout do relatório (ele não executa o relatório). Esse método deve ser utilizado quando houver a necessidade de recuperação de informações do layout do relatório antes de executá-lo. Ele retorna informações de parâmetros e filtros criados internamente no relatório para que os consumidores possam manipular esses dados de alguma forma.

Parâmetros de entrada:

Nome do parâmetro

Tipo

Descrição

codColigada

int

Código da coligada

idReport

int

Identificador do relatório

codUsuario

String

Código do usuário

Retorno:

Tipo

Descrição

RptReportInfo

Informações do layout do relatório

RptReportInfo

Nome do parâmetro

Tipo

Descrição

ParametersReport

Lista

Parâmetros criados no relatório

ParametersProvider

Lista

Parâmetros de provider usados no provider do relatório

FiltersReport

Lista

Filtros disponíveis no relatório.

FiltersFormulas

MemoryStream

Filtros de fórmula disponíveis no relatório

DataSourceSchema

MemoryStream

Schema da fonte de dados do relatório.

MemberInfo

Membros

Informações dos membros de dados do report.


ExecuteReport: principal método da API. Ele executa o relatório e retorna informações da execução através do objeto RptExecutorReturn.

Parâmetros de entrada:

Nome do parâmetro

Tipo

Descrição

codColigada

int

Código da coligada

idReport

int

Identificador do relatório

codUsuario

String

Código do usuário

params

RptExecutorPar

Contem características de execução do relatório


Retorno:

Tipo

Descrição

RptExecutorReturn

Características de retorno de execução do relatório

RptExecutorReturn

Nome do parâmetro

Tipo

Descrição

ExecutionId

Guid

Identificador único de execução do relatório.

ExecutionStatus

RptExecutionStatus

Status de execução. [Sucesso ou erro]

ExecutionMessage

string

Mensagem de erro (em caso de erro)

PrintReport

MemoryStream

Resultado da execução do relatório. O conteúdo dessa propriedade pode ser enviado para serviços de impressão.

LayoutReport

MemoryStream

Layout do relatório gerado.

CodSistema

string

Código do sistema do relatório gerado.

CodRelatorio

string

Código do relatório gerado.

DescRelatorio

string

Descrição do relatório gerado.

RptExecutorPar

Nome do parâmetro

Tipo

Descrição

CallBackExecutionProgress

Action<>

Comunicação de incremento de barra de progresso.

CallBackMessageExecution

Action<>

Envio de mensagens do processo de execução.

ParametersReport

Lista

Parâmetros do relatório

ParametersProvider

Lista

Parâmetros do provider

FiltersReport

Lista

Filtros do relatório

FiltersFormula

Lista

Filtros de formula

ExportFileType

RptExportFileType

Tipo de exportação do relatório após sua geração. São eles: CSV, JPEG, HTML, XLSX, MHT, PDF, RTF, TXT

GenerateDiagnostics

bool

Informa se é para gerar as informações de diagnóstico da execução do relatório.

GenerateType

RptReportGenerateType

Forma de geração do relatório.

StopExecutionOnError

bool

Finaliza ou não a execução do relatório em caso de erro. Todas as informações de erros são gravadas no diagnóstico de execução se o mesmo for "true".

MaxRowNumberPrint

Int

Número máximo de linhas a serem impressas. O default 0 indica que é para imprimir todas as linhas.

ContextStr

String

Objeto RMSContext na forma de string.

DataSourceExternal

DataSet

DataSet preenchido com informações a serem usadas na geração do relatório.

ReturnLayout

bool

Informa se é para retornar o layout do relatório para rotina chamadora.

AddGroupFields

Lista

Adiciona groupFields antes da execução

ClearAllGroupFields

Lista

Permite limpar todos os groupFields no relatório antes da execução

RemoveBands

Lista

Bandas a serem removidas antes da execução.

DataMemberExternalMain

String

Nome do dataMember principal

StartPageNumber

int

Número inicial da página em caso utilização do controle de numeração de página customizada.


ExecutePartialReport: Executa o relatório de forma parcial. Utilizado para execução de grandes relatórios e passando a fonte de dados externamente. Resolve o problema de estouro de memória da DevExpress.

Parâmetros de entrada:

Nome do parâmetro

Tipo

Descrição

codUsuario

String

Código do usuário

params

RptExecutorPartialPar

Contem características de execução parcial do relatório

Retorno:

Tipo

Descrição

RptExecutorPartialReturn

Características de retorno de execução parcial do relatório


RptExecutorPartialReturn

Nome do parâmetro

Tipo

Descrição

PrintReport

MemoryStream

Resultado final da execução do relatório. O conteúdo dessa propriedade pode ser enviado para serviços de impressão.

RptExecutorPartialPar

Nome do parâmetro

Tipo

Descrição

ExportFileType

RptExportFileType

Tipo de exportação do relatório após sua geração. São eles: CSV, JPEG, HTML, XLSX, MHT, PDF, RTF, TXT

ContextStr

String

Objeto RMSContext na forma de string.

PartialSources

Lista

Lista de DataSet preenchidos com informações a serem usadas na geração do relatório.

UseUniquePageNumber

bool

Usa numeração de página sequencial.




Exemplos de uso (lado server):

Utilização da API na migração da ficha física financeira do RM Nucleus.

[Código antes]:

RptReport report;
DataTable reporttable = RptUtilsData.LoadDataTableReport(codColRel, IdRel);
report = RptUtilsData.LoadReport(reporttable.Rows[0], this.parameters.Context.CodUsuario);
string filter = string.Format("TMOV.CODCOLIGADA = {0} AND TMOV.IDMOV = {1}", CodColigada, IdMov);
report.FilterSQLExpression = filter;
report.PreviewRowCount = 0;
report.RequestParameters = false;
report.CreateDocument();
return stream.ToArray();
Código depois
//Instancia a classe RptExecutorServer reponsável em gerar o relatório do server.
IRptExecutor executorServer = RM.Lib.RMSBroker.CreateServer<IRptExecutor>("RptExecutorServer");
//Recupera as informações do report. ex: filtros do report, parametros do report.
RptReportInfo repInfo = executorServer.GetReportInfo(codColRel, IdRel, this.parameters.Context.CodUsuario);
//Recupera o objeto que representa o filtro principal do report.
//Para isso foi utlizado o Helper "RptReportInfoHelper" que possui uma série de metodos que ajuda manipular
//o objeto RptReportInfo.
RptFilterReportPar mainFilter = RptReportInfoHelper.GetMainFilter(repInfo);
//Configura o filtro necessário.
mainFilter.Value = string.Format("TMOV.CODCOLIGADA = {0} AND TMOV.IDMOV = {1}", CodColigada, IdMov);
//Instancia a classe de parametros do método.
RptExecutorPar parms = new RptExecutorPar();
//Adiciona o filtro para os parametros.
parms.FiltersReport.Add(mainFilter);
//Configura o tipo de exportação.
parms.GenerationType = RptReportGenerationType.File;
parms.ExportFileType = RptExportFileType.PDF;
//Executa o relatório.
RptExecutorReturn result = executorServer.ExecuteReport(codColRel, IdRel, this.parameters.Context.CodUsuario, parms);
//Retorna o relatório gerado para alguma outra rotinal
return result.PrintReport;

Âncora
_GoBack
_GoBack
Utilização da API sem uso do método GetReportInfo:

//Instancia a classe RptExecutorServer reponsável em gerar o relatório do server.
IRptExecutor executorServer = RM.Lib.RMSBroker.CreateServer<IRptExecutor>("RptExecutorServer");
RptExecutorPar parms = new RptExecutorPar();
//Adiciona valor para o parametro "IdPrd" definido no relatóiro
parms.ParametersReport.Add(new RptParameterReportPar("IDPRD", 84);
//Configura o tipo de exportação.
parms.GenerationType = RptReportGenerationType.File;
parms.ExportFileType = RptExportFileType.PDF;
//Executa o relatório.
RptExecutorReturn result = executorServer.ExecuteReport(1, 287, this.parameters.Context.CodUsuario, parms);
//Retorna o relatório gerado para alguma outra rotinal
return result.PrintReport;

Execução de relatórios no "Client"

As informações abaixo auxiliam no desenvolvimento dos códigos para execução de relatórios no client":

Passo-a-passo para utilização da API no client:

Adicionar referência para as dll's "RM.Rpt.Executor.Intf.dll" e "RM.Rpt.Executor.Client.dll";

Remover as referências para as outras dlls do reports, entre elas: "RM.Rpt.Lib.dll" e "RM.Rpt.Reports.intf.dll";

Utilização da classe "RptExecutorClient" disponível na dll "RM.Rpt.Executor.Client.dll": essa classe deve ser instanciada no client (actions, forms, etc).

A classe "RptExecutorClient" possui a seguinte estrutura:

AddParams: informa os valores dos parâmetros do relatório;

AddParamsProvider: informa os valores dos parâmetros de provider do relatório;

AddMainFilter: envia um filtro (no formato de string) para o "report [RptReport]" principal do relatório;

AddDetailFilter: envia um filtro (no forma de string) para as bandas de detalhe do report;

GetReportInfo: Retorna informações do layout do relatório através do objeto RprReportInfo conforme descrito acima;

GetRepositoryInfo: Retorna informações do repositório (informações do relatório);

Show: Mostra o relatório na tela passando o printReport como parâmetro. O parâmetro de showModal mostra o relatório em uma janela modal ou não.

ExecuteReport: executa o relatório no server e retorna informações da execução para o cliente.

Parâmetros de entrada:

Nome do parâmetro

Tipo

Descrição

codColigada

int

Código da coligada

idReport

int

Identificador do relatório

codUsuario

String

Código do usuário

params

RptExecutorClientParams

Contem características de execução do relatóiro

RptExecutorClientParams

Nome do parâmetro

Tipo

Descrição

showReport

bool

Exibe ou não o relatório após sua execução

ShowModal

bool

Exibe ou não o relatório de forma modal

ShowParameters

bool

Exibe ou não a tela para preenchimento dos parâmetros do relatório.

exportFileType

RptExportFileType

Tipo de exportação do relatório após sua geração. São eles: CSV, JPEG, HTML, XLSX, MHT, PDF, RTF, TXT

GenerationType

RptReportGenerationType

Tipo de geração do relatório.

PrintDialog

Bool

Envia o relatório diretamente para impressora.

PrintName

String

Nome da impressora

ShowFilters

Bool

Será mostra uma tela de filtros contendo filtros do relatório.

ReturnLayout

Bool

Permite retornar o layout do relatório.

Context

RMSContext

Contendo RM de execução.

DataMemberExternalMain

String

Nome do dataMember principal

MaxRowNumberPrint

int

Número máximo de linhas a serem impressas no relatório.

RemoveBands

Lista

Permite remover bandas.

Retorno:

Tipo

Descrição

RptExecutorClientReturn

Características de retorno de execução do relatório no cliente.


RptExecutorClientReturn

Nome do parâmetro

Tipo

Descrição

ExecutionStatus

RptExecutionStatus

Status de execução. [Sucesso ou erro]

ExecutionMessage

string

Mensagem de erro (em caso de erro)

PrintReport

MemoryStream

Resultado da execução do relatório. O conteúdo dessa propriedade pode ser enviado para serviços de impressão.

CodRelatorio

string

Código do relatório gerado.

DescRelatorio

string

Descrição do relatório gerado.

LayoutReport

MemoryStream

Layout do relatório


Exemplos de uso (lado client):

Exemplo1: execução de relatório no "client" passando parâmetro para o provider;


//Instancia o objeto de execução do client.
RptExecutorClient exClient = new RptExecutorClient();
//Instancia o objeto de parametros para ser enviado para a classe de execução do client.
RptExecutorClientParams execParams = new RptExecutorClientParams();
//Adiciona valor para o parâmetro "CODCOLIGADA_N" do provider.
exClient.AddParamsProvider("CODCOLIGADA_N", 1);
//Adiciona valor para o parâmetro "IDCTE_N" do provider.
exClient.AddParamsProvider("IDCTE_N", 5);
//Seta o tipo de exportação para PDF.
execParams.GenerationType = RptGenerationType.File;
execParams.ExportFileType = RptExportFileType.PDF;
//O relatório gerado será mostrado após sua execução.
execParams.ShowReport = true;
//O relatório gerado será mostrado em uma janela modal.
execParams.ShowDialog = true;
//Não mostra a janela para preenchimento dos valroes dos parametros pois os mesmos já foram preenchidos.
execParams.ShowParameters = false;
exClient.ExecuteReport(1, 115, RMSSession.Context.CodUsuario, execParams);

Exemplo2: execução de relatório no "client" passando parâmetro para o report;

//Instancia o objeto de execução do client.
RptExecutorClient exClient = new RptExecutorClient();
/Instancia o objeto de parametros para ser enviado para a classe de execução do client.
RptExecutorClientParams execParams = new RptExecutorClientParams();
//Adiciona valor para o parâmetro "CODCOLIGADA" do report.
exClient.AddParams("CODCOLIGADA", 1);
//Adiciona valor para o parâmetro "IDMOV" do report.
exClient.AddParamsProvider("IDMOV", 19);
//Seta o tipo de exportação para PDF.
execParams.GenerationType = RptGenerationType.File;
execParams.ExportFileType = RptExportFileType.PDF;
//O relatório gerado será mostrado após sua execução.
execParams.ShowReport = true;
//O relatório gerado não será mostrado em uma janela modal.
execParams.ShowDialog = false;
//Mostra a janela para alteração dos valores dos parametros dorelatóiro.
execParams.ShowParameters = true;

exClient.ExecuteReport(1, 115, RMSSession.Context.CodUsuario, execParams);

Exemplo3: execução de relatório no "client" passando filtro para o report principal;


//Instancia o objeto de execução do client.
RptExecutorClient exClient = new RptExecutorClient();
//Instancia o objeto de parametros para ser enviado para a classe de execução do client.
RptExecutorClientParams execParams = new RptExecutorClientParams();
//Envia um filtro para o report principal do relatório.
exClient.AddMainFilter("IDMOV > 10 AND DATAEMISSAO >= '20015/01/01'");
//Seta o tipo de exportação para PDF.
execParams.GenerationType = RptGenerationType.File;
execParams.ExportFileType = RptExportFileType.PDF;
//O relatório gerado será mostrado após sua execução.
execParams.ShowReport = true;
//O relatório gerado não será mostrado em uma janela modal.
execParams.ShowDialog = false;
//Mostra a janela para alteração dos valores dos parametros do relatóiro.
execParams.ShowParameters = true;
exClient.ExecuteReport(3, 487, RMSSession.Context.CodUsuario, execParams)