Versões comparadas

Chave

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

Existem três formas de gerar um relatório via job:

1- Classe RptExecutorClient

Esta API deverá ser utilizada para requisições de geração de relatório realizadas da camada Cliente (RM.exe). As propriedade relacionadas à execução de relatório via job são:

  • ExecuteOnJobServer: Se true o relatório será gerado via job. Caso contrário o relatório será gerado diretamente pelo AppServer que receber a requisição.
    Valor Default: false
  • OnlineMode: Se true indica que, caso ExecuteOnJobServer seja  true, o job de geração do relatório deverá ser executado diretamente pelo AppServer e não entrará na fila de jobs do JobServer. Este é uma forma de dar prioridade à execução do job mas deve ser utilizado utilizada em casos muito especiais onde justifique que o job do relatório seja executado sem passar pela fila de jobs.
    Valor Default: false
  • TimeoutMillisec: Indica quanto tempo (em millisegundos) deve-se aguardar que o relatório seja gerado quando ExecuteOnJobServer = true. Se esse período for ultrapassado será lançada uma exceção.
    Valor Default: int.MaxValue

Bloco de código
languagec#
firstline1
titleExemplo RptExecutorClient
linenumberstrue
RptExecutorClient report = new RptExecutorClient();
RptExecutorClientParams exeParams = new RptExecutorClientParams();

...
exeParams.ExecuteOnJobServer = true;
exeParams.OnlineMode = false;
exeParams.TimeoutMillisec = 60000;

 
report.ExecuteReport(lookUpForm.ColigadaRelatorio, lookUpForm.IdRelatorio, RMSSession.Context.CodUsuario, exeParams);

 

2- RMSServer RptExecutorOnJobServer

Este server deve ser utilizado na camada Server mas não deverá ser utilizada de dentro de um RMSProcess pelo fato que ele mesma gerará um processo a ser executado como job.

...

Bloco de código
languagec#
firstline1
titleExemplo RptExecutorOnJobServer
linenumberstrue
...
 
RptExecutorJobServerReturn execReturn = null;
using (IRptExecutorOnJobServer executorJobServer = RMSBroker.CreateServer<IRptExecutorOnJobServer>("RptExecutorOnJobServer"))
{
    int timeoutMillisec = 600000;
    RMSJobID jobId = executorJobServer.SubmitReport(_CodColigada, _IdReport, _CodUsuario, executorParams, onlineMode, scheduleTo,  recurrencePattern);
    execReturn = executorJobServer.Wait(timeoutMillisec, jobId);
}

 

3- Processo de Produto

Uma outra forma de gerar o relatório via job é criar um RMSProcess e à partir dele chamar o server RptExecutor. Este procedimente geralmente é feito pelo produto.

Bloco de código
languagec#
firstline1
titleExemplo RMSProcess
linenumberstrue
...
public class AcmeProcess: RMSProcess
{
...
	protected override void DoExecute(RMSParamsProc Params)
    {
      try
      {
        AcmeParamsProc paramsProc = (AcmeParamsProc)Params;
		
		RptExecutorReturn executorReturn = null;
		
		using (IRptExecutor executorServer = RM.Lib.RMSBroker.CreateServer<IRptExecutor>("RptExecutorServer"))
		{
			executorReturn = executorServer.ExecuteReport(paramsProc.CodColigada,
			  paramsProc.IdReport, paramsProc.CodUsuario, paramsProc.ExecutorPar);
		}
		...

 

...