5/7 Agregar una nueva secuencia a un módulo nuevo

He creado un nuevo módulo llamado Granjas, al que vamos agregar una nueva secuencia, el cual no tiene ninguno de los objetos necesarios.






La secuencia será para el siguiente extended Data Type.


Los pasos a seguir serán los siguientes:

Lo primero que deberemos hacer es modificar el enumerado NumberSeqModule para agregarle nuestro nuevo módulo. Accederemos a este enumerado por la siguiente ruta:

AOT > DataDictionary > BaseEnums > NumberSeqModule



Botón derecho sobre el enumerado y seleccionamos nuevo element; sobre este nuevo elemento seleccionaremos propiedades, lo modificaremos asignando en la propiedad name el nombre que caracterizará nuestro módulo, 

Por ejemplo para Clientes es Cust y todos los objetos que hacen referencia a este módulo empiezan por Cust.
En mi caso, lo he llamado Farm, le he asignado una etiqueta y he cambiado el valor por defecto de la propiedad EnumValue asignándole uno superior al último creado del estándar para evitar problemas en futuras actualizaciones de Ax.




Nos crearemos una clase del tipo NumberSeqModule<Modulo>, recordad que el formato tiene que ser como el indicado anteriormente.
En el método NumberSeqModule devolveremos el nuevo elemento creado en el enumerado NumberSeqModule y en el método loadModule crearemos la secuencia para FarmId.



class NumberSeqModuleFarm extends NumberSeqApplicationModule
{
}


public NumberSeqModule numberSeqModule()
{   return NumberSeqModule::Farm;
}

protected void loadModule()
{
   NumberSeqDatatype datatype = NumberSeqDatatype::construct();

   datatype.parmDatatypeId(
extendedtypenum(FarmId));
   datatype.parmReferenceHelp(literalstr("Clave única para la identificación de las granjas. La clave se usa al crear una nueva granja."));
   datatype.parmWizardIsContinuous(true);
   datatype.parmWizardIsManual(NoYes::No);
   datatype.parmWizardIsChangeDownAllowed(NoYes::No);
   datatype.parmWizardIsChangeUpAllowed(NoYes::No);
   datatype.parmWizardHighest(
999999);
   datatype.parmSortField(1);

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



Nos crearemos un job para llamar al método load de nuestra clase. 
  

static void loadNumberSeqModuleFarm(Args _args)
{
   NumberSeqModuleFarm numberSeqModuleFarm = new NumberSeqModuleFarm();

   numberSeqModuleFarm.load();
}


Nos faltará crearnos un método en la tabla de parámetro del módulo que devuelva la referencia de la secuencia..

client server static NumberSequenceReference numRefFarmLocationId()
{

return NumberSeqReference::findReference(extendedTypeNum(FarmLocationId));

}







Ya tendremos el módulo preparado y podremos configurar las secuencias; aunque nos quedarán un par de detalles, entre los que se encuentra, crear una pestaña de secuencias numéricas en el formulario de parámetros que lo veremos más adelante.





Y crear la secuencia en Ax.




Una vez creado podremos asignárselo a nuestro formulario de parámetros.





Con todo esto podremos llamar a la secuencia para que nos devuelva números.
  
static void Job1(Args _args)
{
   info(strFmt("%1", NumberSeq::newGetNum(FarmParameters::numRefFarmLocationId()).num()));
} 




Es posible que si la tenéis creada como secuencia continua no os permita llamarla por código, siempre tenéis la opción de indicarle que no es continua editando el registro de la secuencia.









Comentarios