Histórico da Página
Âncora | ||||
---|---|---|---|---|
|
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"
...
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 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]:
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.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);
report.FilterSQLExpression = filter;
//Instancia a classe de parametros do método.
RptExecutorPar parms = new RptExecutorParreport.PreviewRowCount = 0;
report.RequestParameters = false;
report.CreateDocument();
//Adiciona o filtro para os parametros.
parms.FiltersReport.Add(mainFilterreturn stream.ToArray();
Código depois
//Configura o tipo de exportação.
parms.GenerationType = RptReportGenerationType.File;
parms.ExportFileType = RptExportFileType.PDF;
//Executa o relatório.
RptExecutorReturn result = executorServer.ExecuteReportInstancia 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, parms);
//Retorna o relatório gerado para alguma outra rotinal
return result.PrintReport;
...
//Instancia a classe RptExecutorServer reponsável em gerar o relatório do server.
IRptExecutor executorServer = RM.Lib.RMSBroker.CreateServer<IRptExecutor>("RptExecutorServer");
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 valor para o parametro "IdPrd" definido no relatóiroo filtro para os parametros.
parms.ParametersReportFiltersReport.Add(new RptParameterReportPar("IDPRD", 84mainFilter);
//Configura o tipo de exportação.
parms.GenerationType = RptReportGenerationType.File;
parms.ExportFileType = RptExportFileType.PDF;
//Executa o relatório.
RptExecutorReturn result = executorServer.ExecuteReport(1codColRel, 287IdRel, 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 |
...
Âncora | ||||
---|---|---|---|---|
|
//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 | 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 |
RptExecutorClientExportReturn | Características de retorno de |
exportação do relatório |
...
RptExecutorClientExportReturn
PrintReport | ||
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) |
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 | string | Código do relatório gerado. |
DescRelatorio | string | Descrição do relatório gerado. |
LayoutReport | MemoryStream | Layout do relatório |
...
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):
...