Existem três formas de gerar um relatório via job:
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:
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); |
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.
Os principais métodos deste server são:
... 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); } |
Uma outra forma de gerar o relatório via job é criando um RMSProcess e à partir dele chamar o server RptExecutor. Este procedimento é geralmente realizado pelo produto em seus processos quando existe a necessidade de geração de relatório.
... 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); } ... |