lunedì 15 aprile 2013

AX 2009 - Duplicazione dati multiriga su form grid

Molte volte capita di dover duplicare i dati presenti su una o più righe di una griglia appartenente ad un form. Generalmente all griglia è associato un datasource specificato nel form.

Per prima cosa possiamo creare un bottone, che una volta schiacciato si assicurerà di effettuare l'operazione di duplica. Per permettere questa operazione in multiriga è necessario impostare la proprietà "MultiSelect" del bottone a "Yes".

Dopodichè basterà inserire questa logica (ne esistono comunque diverse varianti) nel metodo "clicked" del bottone stesso:

   DataSource  dataSourceLocale;  
   DataSource  dataSourceNuovo;  
   MultiSelectionHelper selection = MultiSelectionHelper::construct();  
   super();
  
   selection.parmDatasource(DataSource_ds);  
   dataSourceLocale = selection.getFirst();  

   while (DSLunchOrderslocal.RecId != 0)  
   {  
       dataSourceNuovo.field1 = dataSourceLocale.field1;  
       dataSourceNuovo.field2 = dataSourceLocale.field2;  
       ....  
       dataSourceNuovo.insert();  
       dataSourceLocale = selection.getNext();  
   }  
   DataSource_ds.executeQuery();  
    

Come si vede dal codice basta dichiarare due buffer dello stesso tipo della tabella che è impostata nella griglia, e un oggetto "MultiSelectionHelper" che ci aiuterà a scorrere le righe selezionate.

Il primo buffer (dataSourceLocale) serve per raccogliere i record che mano a mano vogliamo copiare, ovvero ogni singola riga, e il secondo serve per l'inserimento nel database.

Dopo aver inizializzato l'oggetto "MultiSelectionHelper", lo si parametrizza con i dati selezionati dal form e lo si inizia a scorrere partendo dal primo record con "getFirst()" parametrizzando il primo buffer. All'interno del ciclo si parametrizza il secondo buffer con gli stessi valori del primo che viene via via ciclato con "getNext()".

Infine per visualizzare le nuove righe nel form basta effettuare il metodo "executeQuery()" del datasource dello stesso.

Nessun commento:

Posta un commento