lunedì 8 giugno 2015

AX 2012 - Lookup su tabella temporanea

In questo Post vogliamo creare una lookup avendo a disposizione come sorgente dati una tabella temporanea. Supponiamo di voler visualizzare i prima 10 clienti visualizzando codice, nome indirizzo e un campo contatore

Creiamo una nuova tabella chiamandola CustTableTmp, impostaimo la proprietà TableType = InMemory e creiamo 4 campi per contenere le informazioni. Creiamo ora un semplice form con un campo testo su cui andremo a fare l'override del metodo lookup. Creiamo un metodo a livello di form per popolare la tabella:
 public CustTableTmp fillTmpTable()  
 {  
   CustTable    custTable;  
   CustTableTmp  CustTableTmp;  
   int       i = 1;  
   while select custTable  
   {  
     if(i > 10)   
     {  
       break;  
     }  
     CustTableTmp.clear();  
     CustTableTmp.Counter        = i;  
     CustTableTmp.CustAccount      = custTable.AccountNum;  
     CustTableTmp.CustName        = custTable.name();  
     CustTableTmp.LogisticsAddressing  = custTable.address();  
     i++;  
     CustTableTmp.insert();  
   }  
   return CustTableTmp;  
 }  
a questo punto sul controllo implementiamo il metodo lookup:
 public void lookup()  
 {  
   CustTableTmp  CustTableTmp;  
   SysTableLookup sysTableLookup;   
   CustTableTmp  = element.fillTmpTable();  
   sysTableLookup = SysTableLookup::newParameters(tableNum(CustTableTmp),this,false);  
   sysTableLookup.addLookupField(fieldNum(CustTableTmp, Counter),False);  
   sysTableLookup.addLookupField(fieldNum(CustTableTmp, CustAccount),True);   
   sysTableLookup.addLookupField(fieldNum(CustTableTmp, CustName),false);   
   sysTableLookup.addLookupField(fieldNum(CustTableTmp, LogisticsAddressing),False);  
   sysTableLookup.parmTmpBuffer(CustTableTmp);  
   sysTableLookup.performFormLookup();  
 }  
Aprendo il form vediamo il risultato: