7.7 La clase NumberSeqFormHandler

La clase NumberSeqFormHandler es la encargada del control de las secuencias numéricas en los formularios. Si deseamos controlar de una manera eficiente las secuencias numéricas en los formularios, deberemos utilizarla.

Para este ejemplo, he creado una tabla con dos campos; uno de los cuales utilizará la secuencia numérica(FarmId).





Sólo me falta crear un formulario que utilice esa tabla, y aquí lo tenemos:




Para empezar nos declararemos la clase numberSeqFormHandler en el ClassDeclaration de nuestro formulario.


public class FormRun extends ObjectRun
{
   NumberSeqFormHandler numberSeqFormHandler;
}



El siguiente paso será crearse este método en el nodo Methods del formulario.


NumberSeqFormHandler numberSeqFormHandler()
{
   
if (!numberSeqFormHandler)
    {
        numberSeqFormHandler = NumberSeqFormHandler::newForm     (FarmParameters::numRefFarmId().NumberSequenceId,
element,
FarmTable_DS,
fieldNum(FarmTable, FarmId));
     }

       
return numberSeqFormHandler;
}



En el método podemos ver que se inicia la clase si ésta no lo está. Para el método newForm le indicaremos la secuencia que deberá utilizar (Si recordáis es la que hemos creado en los parámetros del módulo). El siguiente paso es pasarle el formulario, esto lo hacemos con la palabra reservada (element). Los dos últimos parámetros para este método son los más importantes, en éstos le indicamos el datasource que se verá afectado por la secuencia y el campo de ésta. 

También anularemos el método close del formulario agregando el siguiente código:


void close()

{
   
if (numberSeqFormHandler)


    {
       numberSeqFormHandler.formMethodClose();
    }
    super();


}


Los siguientes métodos los crearemos en los métodos del DataSoruce (FarmTable). Éstos serán los que controlarán la secuencia al crear, validar o eliminar registros.

Podéis tomar este ejemplo para vuestros desarrollos o cualquier ejemplo de la aplicación como el formulario SalesTable.




public void create(boolean _append = false)
{
   element.numberSeqFormHandler().formMethodDataSourceCreatePre();
    
   super(_append);
 
   element.numberSeqFormHandler().formMethodDataSourceCreate();
}



public boolean validateWrite()
{
   
boolean ret;

   
    ret = super();


    ret = element.numberSeqFormHandler().formMethodDataSourceValidateWrit(ret) && ret;

   
return ret;
}



void write()
{
   
ttsbegin;

    super();

   
    element.numberSeqFormHandler().formMethodDataSourceWrite();
    ttscommit;
}



void delete()
{     
    ttsbegin;

   
    element.numberSeqFormHandler().formMethodDataSourceDelete();

    
super();

    ttscommit;
}



Al final nos debería quedar un formulario con los siguientes métodos:






Si lo abrimos y creamos algún registro veremos como automáticamente nos asigna al campo que le hemos indicado en el método numberSeqFormHandler del formulario la secuencia.






Si creáis un registro nuevo veréis como os asigna el número. Ahora sin guardar el registro presionar la tecla escape, así el registro no se guardará, al volver a generar otro registro veréis que vuelve a tomar el número de secuencia que nos dio anteriormente éste no se pierde ya que la clase se encarga de controlar si realmente se utiliza el número o no, en caso contrario lo reutiliza.





Comentarios