4/7 Añadir una secuencia a un modulo existente


A continuación vamos a explicar como añadir una secuencia numérica a un módulo existente.

Lo que haremos será agregar una secuencia para el EDT CustVetId, en el módulo de clientes (Cust).














Para añadir una secuencia nueva a un módulo existente deberemos seguir los siguientes pasos:


1) El primer paso es añadir el siguiente código en la clase NumSeqReference<Módulo> en el método LoadModule.


Como estoy tratando con un extended que formará parte del módulo Cust lo haremos sobre la clase NumberSeqRefereceCustomer.


datatype.parmDatatypeId(extendedtypenum(CustVetId));
datatype.parmConfigurationKeyId(configurationkeynum(ledgerBasic));

datatype.parmReferenceHelp(literalstr("Clave única para identificar los veterinarios de los clientes."));
datatype.parmWizardIsContinuous(true);
datatype.parmWizardIsManual(NoYes::No);
datatype.parmWizardIsChangeDownAllowed(NoYes::No);
datatype.parmWizardIsChangeUpAllowed(NoYes::No);
datatype.parmWizardLowest(1);   
datatype.parmWizardHighest(999999);
datatype.parmSortField(30);

datatype.addParameterType(NumberSeqParameterType::DataArea, true, false);  
this.create(datatype);

Lo que hacemos con estas líneas de código es crear la secuencia para que Ax pueda verla en el sistema. Si miramos el código lo que estamos haciendo es iniciar unos valores para la secuencia,
como: continua, manual, el número....

El parmSortField le indica la posición de esta secuencia en el módulo.

Si observamos el código que he agregado veremos que le he asignado un sortField mayor del esperado, se supone el siguiente sería el 30. Esto lo he hecho para evitar que en las próximas actualizaciones de Ax, el sistema utilice el 30 y sobrescriba mi código.





Las dos últimas líneas son las más importantes: en la primera le indicamos a la secuencia que será por empresa y la última le indica que la creemos, sin ésta, el sistema no la verá.

Los posibles valores para el método addParameterType son los siguientes:






2) El segundo paso será agregar un método como el que sigue en la tabla de parámetros del módulo en el que estamos trabajando.

server static NumberSequenceReference numRef<TipoCampo>()
{
       return NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(<TipoCampo>)));
}



Como he mencionado anteriormente estamos creando una secuencia para el módulo de clientes así que agregaremos el siguiente método en la tabla CustParameters.



client server static NumberSequenceReference numRefCustVetId()
{   
    return NumberSeqReference::findReference(extendedTypeNum(CustVetId));
}



 

3) Antes de poder utilizarla deberemos llamar al método loadModule de la clase para que
Ax cree los registros en las tablas NumberSeq... para nuestra nueva secuencia.


Podemos utilizar un job como el que sigue:

static void callLoadModule(Args _args)
{
   NumberSeqModuleCustomer numberSeqModuleCustomer =new NumberSeqModuleCustomer();
   numberSeqModuleCustomer.load();
}



4) El último paso es saber como llamar por código a la secuencia para que nos de el siguiente número. Para llamar al siguiente número podemos hacerlo con un código como este:

 <Taula>.<Camp> = NumberSeq::newGetNum(<Módulo>Parameters::numRef<TiposCampo>()).num();


Aquí tenéis un job que pide al sistema el siguiente número de la secuencia creada.

static void GetSequenceNumber(Args _args)
{
    CustVetId num = NumberSeq::newGetNum(CustParameters::numRefCustVetId()).num();
}


5) Este no sería un paso pero deberemos configurarla (manual o automaticamente) como vimos en la parte 2 antes de poder llamarla para que nos de un número..

Comentarios

Publicar un comentario