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.
1) 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. |
Export: Exporta um relatório em um formato especifico a partir de um binário proveniente de uma geração prévia. Utilizado em casos em que a geração é executada em um momento e a exportação do arquivo, em outro.
Parâmetros de entrada:
Nome do parâmetro | Tipo | Descrição |
parms | RptExecutorExportPar | Contem os parãmetros da exportação do relatório |
Retorno:
Tipo | Descrição |
RptExecutorExportReturn | Características de retorno de exportação do relatório |
RptExecutorExportReturn
Nome do parâmetro | Tipo | Descrição |
ExportedReport | MemoryStream | Resultado final da exportação do relatório. O conteúdo dessa propriedade pode ser enviado para serviços de impressão. |
RptExecutorExportPar
Nome do parâmetro | Tipo | Descrição |
ExportType | RptExportFileType | Tipo de exportação do relatório após sua geração. São eles: CSV, JPEG, HTML, XLSX, MHT, PDF, RTF, TXT |
ReportResult | MemoryStream | Stream contendo o resultado de uma geração do relatório |
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;
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 |
ExportReport: Exporta um relatório em um formato especifico a partir de um binário proveniente de uma geração prévia. Utilizado em casos em que a geração é executada em um momento e a exportação do arquivo, em outro.
Parâmetros de entrada:
Nome do parâmetro | Tipo | Descrição |
parms | RptExecutorClientExportPar | Contem os parâmetros da exportação do relatório |
Retorno:
Tipo | Descrição |
RptExecutorClientExportReturn | Características de retorno de exportação do relatório |
RptExecutorClientExportReturn
Nome do parâmetro | Tipo | Descrição |
ExportedReport | MemoryStream | Resultado final da exportação do relatório. O conteúdo dessa propriedade pode ser enviado para serviços de impressão. |
RptExecutorClientExportPar
Nome do parâmetro | Tipo | Descrição |
ExportType | RptExportFileType | Tipo de exportação do relatório após sua geração. São eles: CSV, JPEG, HTML, XLSX, MHT, PDF, RTF, TXT |
ReportResult | MemoryStream | Stream contendo o resultado de uma geração 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)