1.7. La clase SysOperationController

Vamos a continuar esta vez realizando el mismo ejemplo que hicimos para la RunBaseBatch pero en este caso utilizando las nuevas clases del SysOperation Framework.
Empezaremos creándonos un diálogo sin ningún campo y poco a poco iremos añadiendo funcionalidad para que entendáis para que sirve cada método y clase.
Como en los últimos post a final de estos os encontraréis un fichero descargable con el xpo que contiene el ejemplo del actual post, de la misma manera para que podáis ver las diferencias entre las dos formas de trabajar incluiré un link al mismo post pero de la clase RunBaseBatch.

Lo primero que haremos será crearnos una clase que extienda de la SysOperationServiceController
Como su nombre indica la clase controller será la encargada de controlar todo el proceso, ya que contiene toda la información del proceso, por ejemplo si debe visualizar o no el diálogo, si mostrar una barra de progreso...

class TestSysOperationController extends SysOperationServiceController
{
}


Este será el nombre que aparecerá en el proceso por lotes, si ejecutamos el proceso por éstos.

public ClassDescription caption()
{
        return 'Test SysOperationController';
}

En el método new le indicaremos los siguientes parámetros. Le indicaremos la clase y método que debe ejecutar, así como el tipo de ejecución.

void new()
{
      super();

      this.parmClassName(classStr(TestSysOperationController));
      this.parmMethodName(methodStr(TestSysOperationController, showInfo));
      this.parmDialogCaption('Ejemplo SysOperationController');
      this.parmExecutionMode(SysOperationExecutionMode::Synchronous);
}

El parámetro ExecutionMode le indica el tipo de ejecución:

Reliable asynchronous:
Este tipo de ejecución es equivalente al servidor por lotes, con el añadido a que los trabajos se eliminan automáticamente , y se conservan solo en el historial de procesos por lotes.

Scheduled batch:
Este modo se utiliza para hacer que los trabajos por lotes se ejecuten de forma asíncrona.

Synchronous:
Se debe utilizar cuando la operación no es largo o se inicia a partir de una sesión de procesos por lotes.

Asynchronous:
Este tipo de llamadas es útil cuando son operaciones largas, se debe asegurar que se llaman desde el escritorio del cliente para obtener el beneficio de la ejecución asíncrona.

*Todo estos parámetros deberían ser recuperados en el main de la clase controller o pasados como parámetros mediante un menú ítem, yo para este ejemplo lo voy a dejar así.

Método que será ejecutado.

public void showInfo()
{
      if (xSession::isCLRSession())
     {
          info('Ejecutado en una sessión CLR.');
     }
     else
    {
          info('No ejecutado en CLR.');

          if (isRunningOnServer())
         {
               info('Ejecutado en el AOS.');
         }
         else
         {
               info('Ejecutado en el cliente.');
         }
     }
}


public static void main(Args args)
{
       TestSysOperationController operation = new TestSysOperationController();

       operation.startOperation();
}

No os debe sorprender el método StartOperation ya que es el típico prompt & run.

Si lanzamos nuestra primera clase SysOperation, el resultado que nos mostrará será un diálogo como el que sigue. Donde no existen campos en el diálogo y solo tenemos una pestaña para el procesamiento por lotes.

 
Si la ejecutamos el resultado será el que sigue:
 
 
 Recordar compilar y hacerle un CIL.
 
Este post es el equivalente al siguiente para la RunBaseBatch:
 

Para descargar el fichero xpo sólo tenéis que presionar en el siguiente enlace:

Descargar fichero xpo
 


 

Comentarios