lunedì 14 ottobre 2013

AX 2012 - Form di lookup che ritornano più valori

Per far sì che un form di lookup restituisca più di un valore al chiamante dobbiamo fare l'override del metodo closeSelect() nel form di lookup.

Allo scopo creiamo una tabella (e relativa form) principale che chiameremo "LILMainTable" con i campi codice e descrizione. Creiamo poi una tabella  (e relariva form) per la lookup che chiameremo  "LILLookUpTable" aventi sempre due campi codice e descrizione.

Facciamo l'override del metodo lookup sul campo del datasource "LILMainTable" così:

 public void lookup(FormControl _formControl, str _filterStr)  
 {  
   Args args = new Args();  
   FormRun lookUpForm;  
   ;  
     
   args.name(formstr(LILLookUpTable));  
   args.caller(element);  
   lookUpForm = new FormRun(args);  
   lookUpForm.init();  
   this.performFormLookup(lookUpForm, _formControl);  
 }  

A questo punto nella form di lookup  "LILLookUpTable" facciamo l'override del metodo closeSelect:

 public void closeSelect(str _selectString)  
 {  
    LILMainTable    mainTable;
    FormRun formRun;
    
    super(_selectString);
    
    formRun = element.args().caller();

    //recupero il buffer in cui sono posizionato al momento della chiamata al form di lookup  
    mainTable = formRun.dataSource().cursor();
   
   
    mainTable.Code   		   = LILLookUpTable.Code; //LILLookUpTable è il nome del datasource della form di lookup contenente i valori correnti selezionati
    mainTable.Description      = LILLookUpTable.Description;
 
    //refresh del datasource di origine per vedere i valori aggiornati  
    formRun.dataSource().refresh();  
 }