Existem três formas de gerar um relatório por meio de 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 , informa que o relatório deverá ser será gerado em via job. Caso contrário o valor seja false o relatório será gerado diretamente pelo AppServer que receber a requisição.
Valor Default: false - OnlineMode: Se true indica seque, 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 |
|---|
| language | c# |
|---|
| firstline | 1 |
|---|
| title | Exemplo RptExecutorClient |
|---|
| linenumbers | true |
|---|
|
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.
Os principais métodos deste server são:
- SubmitReport: Submete um relatório para ser executado em JobServer.
- Wait: Aguarda o retorno do JobServer até que ocorra um timeout.
- SubmitReportAndWait: Submete um relatório para ser executado em jobserver e aguarda o retorno do JobServer até que ocorra um timeout.
| Bloco de código |
|---|
| language | c# |
|---|
| firstline | 1 |
|---|
| title | Exemplo RptExecutorOnJobServer |
|---|
| linenumbers | true |
|---|
|
...
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 é 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.
| Bloco de código |
|---|
| language | c# |
|---|
| firstline | 1 |
|---|
| title | Exemplo RMSProcess |
|---|
| linenumbers | true |
|---|
|
...
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);
}
... |