lunedì 1 aprile 2024

AX 2012 - D365FFO - Aggiungere controlli ad una form dinamicamente e gestire gli eventi (registerOverrideMethod)

In questo post vediamo come aggiungere a run time dei controlli ad una form e gestire gli eventi dei controlli. 

La form di base conterrà un button group a cui aggiungeremo tre pulsanti ed un gruppo a cui aggiungeremo un enumerato ed una stringa. 

Dei tre pulsanti gestiamo l'evento mouseDown (in D365 l'evento mouseDown è deprecato) per capire se il pulsante è stato premuto col pulsante destro oppure col sinistro; dell'enumerato gestiamo l'evento selectionChanged e del campo stringa l'evento modified.

Sia l'aggiunta dei controlli che gli event handler vanno aggiunti nella init della form:

 public void init()  
 {  
   int         i;  
   FormButtonControl  button;  
   FormComboBoxControl comboBox;  
   FormStringControl  stringControl;  
   
   super();  
   
   for(i = 0; i < 3; i++)  
   {  
     button = ButtonGroup.addControl(FormControlType::Button, strFmt("button_%1",i+1));  
     button.text(strFmt("%1",i+1));  
     button.registerOverrideMethod(methodStr(FormButtonControl, mouseDown), identifierStr(buttonMouseDown), this);  
   }  
     
   comboBox = ControlGroup.addControl(FormControlType::ComboBox, "InventCustVend_Combo");  
   comboBox.enumType(enumNum(ModuleInventCustVend));  
   comboBox.registerOverrideMethod(methodStr(FormComboBoxControl, selectionChange), identifierStr(ComboSelectionChange), this);  
     
   stringControl = ControlGroup.addControl(FormControlType::String, "Description_Text");  
   stringControl.extendedDataType(extendedTypeNum(Description));  
   stringControl.registerOverrideMethod(methodStr(FormStringControl, modified), identifierStr(modifiedString), this);    
 }  
I tre event handler vanno aggiunti a livello di form:
 public void buttonMouseDown(int _x, int _y, int _button, boolean _Ctrl, boolean _Shift,FormButtonControl _btn)  
 {  
   switch(_button)  
   {  
     case 1:  
       info(strFmt("hai premuto il bottone '%1' col pulsante %2",_btn.name(),"sinistro"));  
       break;  
   
     case 2:  
       info(strFmt("hai premuto il bottone '%1' col pulsante %2",_btn.name(),"destro"));  
break; } }
 public int comboSelectionChange(FormComboBoxControl _comboBox)  
 {  
   info(strFmt("L'enumerato è cambiato %1",_comboBox.selection()));  
     
   return 1;  
 }  
 public boolean modifiedString(FormStringControl _stringControl)  
 {  
   boolean ret = true;  
     
   info(strFmt("nuovo valore '%1'",_stringControl.text()));  
     
   return ret;  
 }  
Tutti i metodi per gestire gli eventi prendono il controllo come parametro. Se l'event prevede altri parametri standard, come nel caso mouseDown, il controllo và aggiunto come ultimo parametro.

1 commento: