martedì 29 novembre 2016

AX 7 - Aggiungere una nuova number sequence

In questo post andiamo ad aggiungere una nuova sequenza numerica in "Parametri contabilità fornitori" che nel mio caso è servita per la numerazione automatica degli ordini di reso. La differenza principale rispetto ad AX 2012 è che il metodo  loadModule() della calsse NumberSeqModuleVendor è protetto e non possiamo quindi agganciarci tramite eventi. Dobbiamo quindi

1)Creare una nuova classe  che nel nostro caso si chiamerà FITNumberSeqModuleVendor_ReturnOrder che estende NumberSeqApplicationModule

2) Fare l'override del metodo loadModule aggiungendo i parametri della sequenza

     NumberSeqDatatype datatype = NumberSeqDatatype::construct();

     datatype.parmDatatypeId(extendedTypeNum(FITPackingSlipIdReturn));  
     datatype.parmDatatypeSameAsId(extendedTypeNum(FITPackingSlipIdReturn));  
     datatype.parmReferenceLabel(literalStr("Packing slip id return item"));  
     datatype.parmReferenceHelp(literalStr("Packing slip id return item"));  
     datatype.parmWizardIsContinuous(true);  
     datatype.parmWizardIsManual(NoYes::No);  
     datatype.parmWizardIsChangeDownAllowed(NoYes::No);  
     datatype.parmWizardIsChangeUpAllowed(NoYes::No);  
     datatype.parmWizardLowest(1);  
     datatype.parmWizardHighest(999999);  
     datatype.parmIsGroupEnabled(NoYes::Yes);  
     datatype.parmSortField(41);  
     datatype.addParameterType(NumberSeqParameterType::DataArea, true, false);  
     this.create(datatype);  

3)Fare l'override del metodo inizializa reference:

   public void initializeReference(NumberSequenceReference _reference, NumberSeqDatatype _datatype, NumberSeqScope _scope)  
   {  
     super(_reference, _datatype, _scope);  
     _reference.AllowSameAs = true;  
   }  

4)Fare l'override del metodo numberSequenceModule:

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

5)Sottorscivere il delegato buildModulesMapDelegate della classe NumberSeqGlobal



   [SubscribesTo(classstr(NumberSeqGlobal),delegatestr(NumberSeqGlobal,buildModulesMapDelegate))]  
   static void buildModulesMapSubsciber(Map numberSeqModuleNamesMap)  
   {  
     NumberSeqGlobal::addModuleToMap(classnum(FITNumberSeqModuleVendor_ReturnOrder), numberSeqModuleNamesMap);  
   }  

6) Creare un job (Runnable) che fà il load:

 FITNumberSeqModuleVendor_ReturnOrder FITNumberSeqModuleVendor_ReturnrOder = new FITNumberSeqModuleVendor_ReturnOrder();  
 FITNumberSeqModuleVendor_ReturnOrder.load();  

7)Andare in Organization Administration -> CommonForms -> Numbersequences -> Numbersequences -> Generate, Seguire il wizard fino alla fine.

8)Verificare nei parametri della contabilità fornitori la presenza della nuova sequenza