mercoledì 3 agosto 2022

D365FFO - Creare un wizard

In questo post vediamo come creare un "wizard". Il nostro wizard avrà due step. Il primo dove selezioniamo da 1 a n Clienti e il secondo dove selezioniamo da 1 a n SalesOrder. Il tasto "finish" andrà semplicemente a stampare i valori selezionati.

Per prima cosa creiamo una form usando il pattern "Wizard" che chiameremo "LILTestWizard".la nostra form avrà due datasource (CustTable e SalesTable) e sarà fatta così:


la form dovrà contenere i seguenti metodi:

 public class LILTestWizardForm extends FormRun  
 {  
   LILTestWizardClassForm sysWizard;  
   void init()  
   {  
     super();  
   
     if (element.args().caller())  
     {  
       sysWizard = element.args().caller();  
     }  
   }  
   
   void run()  
   {  
     super();  
   }  
   
   SysWizard wizard()  
   {  
     return sysWizard;  
   }  
 }  
Dobbiamo poi definire una classe che chiameremo "LILTestWizardClassForm" fatta così:
 class LILTestWizardClassForm extends SysWizard  
 {  
   FormDataSource     CustTableDS;  
   FormDataSource     SalesTableDS;  
     
   CustTable        custTable;  
   SalesTable       salesTable;  
   
   MultiSelectionHelper  selectionHelperCustTable,  
               selectionHelperSalesTable;  
   
   FormName formname()  
   {  
     return formstr(LILTestWizardForm);  
   }  
   
   public void setupNavigation()  
   {  
   }  
   
   public boolean validate()  
   {  
     return true;  
   }  
   
   public static str description()  
   {  
     return "Customers and sales orders selection";  
   }  
   
   public static void main(Args args)  
   {  
     LILTestWizardClassForm wizard = new LILTestWizardClassForm();  
   
     if (wizard.prompt())  
     {  
       wizard.run();  
     }  
   }  
   
   public void finish()  
   {  
     selectionHelperCustTable  = MultiSelectionHelper::createFromCaller(this.formRun());  
     selectionHelperSalesTable  = MultiSelectionHelper::createFromCaller(this.formRun());  
   
     CustTableDS       = this.formRun().dataSource(tableStr(CustTable));  
     SalesTableDS      = this.formRun().dataSource(tableStr(SalesTable));  
   
     selectionHelperCustTable.parmDatasource(CustTableDS);  
     selectionHelperSalesTable.parmDatasource(SalesTableDS);  
   
     custTable  = selectionHelperCustTable.getFirst();  
     salesTable = selectionHelperSalesTable.getFirst();  
   
     while(custTable)  
     {  
       info(custTable.AccountNum);  
   
       custTable = selectionHelperCustTable.getNext();  
     }  
   
     while(salesTable)  
     {  
       info(salesTable.SalesId);  
   
       salesTable = selectionHelperSalesTable.getNext();  
     }  
   
     super();  
   }  
   
 }  
A questo punto dobbiamo creare un menù item di tipo action che punta a LILTestWizardClassForm e metterlo a menù.

Ecco il risultato:






1 commento: