1.3. Los métodos pack y unpack

¿No sabéis para que sirven estos métodos? Cuando ejecutéis la clase por lotes o en el servidor, necesitaréis almacenar el valor introducido en los campos del diálogo para posteriormente poderlos utilizar.

Imaginad que habéis programado la clase para que se ejecute dentro de diez horas y habéis introducido valores en los campos del diálogo para utilizarlos posteriormente, necesitaréis de algún lugar donde guardar estos valores y ésto lo haremos mediante estos dos métodos.

El método pack se utilizar para empaquetar las variables y el unpack para desempaquetar las variables almacenadas.
Cuando ejecutamos la clase lo primero que se hace es ejecutar el unpack para intentar desempaquetar las variables almacenadas.
Cuando aceptamos la ejecución de la clase se empaquetan en el pack las variables por ejemplo el cliente seleccionado, si esta clase se ejecuta por lotes , en el momento que se vaya a ejecutar desempaquetará dichas variables almacenadas.

Para hacer todo esto primero deberemos crearnos una lista con las variables que vamos a empaquetar.

¿No sabéis que es una macro? Pues visita el siguiente enlace

Macros

En nuestro ejemplo empaquetaremos la variable custAccount.
Tenemos que indicarle una versión porque podríamos tener distintas listas declaradas y al desempaquetar el unpack debe conocer que versión esta desempaquetando.

class TestRunBaseBatch extends RunBaseBatch
{
    DialogField         dlgCustAccount;

    CustAccount         custAccount;

    #define.CurrentVersion(1)
    #LOCALMACRO.CurrentList
        CustAccount
    #ENDMACRO
}

Ahora anularemos los métodos pack y unpack, dejándolos como se ven.

El método pack devuelve un container con la versión del empaquetado y la lista de las variables enpaquetadas.

public container pack()
{
    return [#CurrentVersion, #CurrentList];
}

El método unpack recibe un container y como veis en el código dependiendo de la versión empaquetada realiza una acción u otra.

public boolean unpack(container packedClass)
{
    Integer version = conPeek(packedClass,1);

    switch (version)
    {
        case #CurrentVersion:
            [version,#CurrentList] = packedClass;
            break;
        default:
            return false;
    }
    return true;
}

Ahora si ejecutamos nuestra clase nos guardará el cliente seleccionado en el diálogo y se mostrará por pantalla.


En la siguiente ejecución de la clase veremos que tenemos el cliente seleccionado anteriormente guardado.
El container packedClass tendrá lo guardado en el pack que es la versión y el cliente. 


Al mostrarse el diálogo nos lo mostrará con el cliente seleccionado en la anterior ejecución.


Nos muestra el valor en el campo del diálogo porque en el método Dialog utilizamos el método addfieldvalue y le indicamos de donde sacar el valor.


Estos datos empaquetados se almacenan en una tabla, que son los de uso del usuario, borrando éstos se perderían los datos almacenados.
 


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

Descargar fichero xpo

Comentarios