6/7 Añadir la pestaña de secuencias numéricas en formulario de parámetros

A continuación explicaremos los pasos para agregar la pestaña de las secuencias numéricas en un formulario de parámetros.

Si os preguntáis a que me refiero, es a esto:



Para el siguiente ejemplo me crearé el tab en el siguiente formulario de parámetros de mi nuevo módulo.


Para agregar el tab seguiremos los siguientes pasos:

1.- Agregaremos la tabla NumberSequenceReference como DataSource a nuestro formulario.

Para realizar este paso nos abriremos otro AOT y nos dirigiremos al nodo

DataDictionary > Tables > NumberSequenceReference

y aprovecharemos la funcionalidad Drag and Drop (Arrastrar y soltar) de AX para arrastrar la tabla al nodo DataSource de nuestro formulario de parámetros.


2.- Agregaremos el tab de las secuencias numéricas.

Lo podemos crear manualmente basándonos en algún ejemplo o directamente arrastrar el TabPage de otro formulario al nuestro.


Si abrimos nuestro formulario veremos que se nos muestran todas las secuencias de nuestra aplicación. Pero debería mostrar sólo las de nuestro módulo. Para eso deberemos filtrar el formulario por nuestro módulo.



3.- Filtrar por las secuencias de nuestro módulo.

Para este paso deberemos agregar los siguientes métodos/código en nuestro formulario.
Empezaremos agregando las siguientes variables al método ClassDeclaration

public class FormRun extends ObjectRun
{
    NumberSeqApplicationModule numberSeqApplicationModule;
    NumberSeqScope scope;

    TmpIdRef  tmpIdRef;
    boolean   runExecuteDirect;
    container numberSequenceModules;
}

Crearemos los siguientes métodos en el nodo methods del formulario.

En este primero le indicaremos el módulo del que debe sacar las secuencias [NumberSeqModule::Farm], si desearamos mostrar secuencias de distintos módulos tan solo deberiamos separalos por ','.

Ejemplo:

numberSequenceModules = [NumberSeqModule::Sales, NumberSeqModule::Cust];


void numberSeqPreInit()
{
   runExecuteDirect =
false;
   numberSequenceModules = [NumberSeqModule::Farm];

   numberSeqApplicationModule =
new NumberSeqModuleFarm();
   scope = NumberSeqScopeFactory::createDataAreaScope();

   NumberSeqApplicationModule::createReferencesMulti(numberSequenceModules, scope);

tmpIdRef.setTmpData(NumberSequenceReference::configurationKeyTableMulti(numberSequenceModules));
}


void numberSeqPostInit()
{
   allowSameAs.visible(numberSeqApplicationModule.sameAsActive());
   labelSameAs.visible(allowSameAs.visible());
}


Anularemos el método Init del formulario (Si no lo tenemos ya anulado) modificándolo para que llame a los dos métodos anteriormente creados.

public void init()
{
   this.numberSeqPreInit();

   super();


   FarmParameters::find();

   this.numberSeqPostInit();
}



El siguiente paso será agregar la NumberSequenceTable como referencia del DataSource NumberSequenceReference.  Lo podemos hacer situándonos encima del nodo ReferenceData y botón derecho sobre éste




O lo haremos como nos gusta, arrastrando y soltando.



De esta manera Ax nos asignará las propiedades.

4.- Modificar la query del DataSource NumberSequenceReference.

En los métodos del dataSource anularemos/modificaremos los siguentes:

void executeQuery()
{
    if (runExecuteDirect)
    {
       super();
    }
    else
    {
       runExecuteDirect = true;
       this.queryRun(NumberSeqReference::buildQueryRunMulti(
numberSequenceReference,
tmpIdRef,
numberSequenceTable,
numberSequenceModules,
scope));

       numbersequenceReference_ds.research();
    } }

void removeFilter()
{
    runExecuteDirect = false;
    numbersequenceReference_ds.executeQuery();
}


Nuestro formulario debería tener una apariencia como la que sigue:





Podéis tomar como ejemplo el formulario BankParameters.

Comentarios