Markierte Datensätze eines Formulares verarbeiten/iterieren
03.07.2013Microsoft Dynamics AX (Axapta)
|
Dieser Beitrag bezieht sich auf die Versionen:
Dynamics AX 2012, Dynamics AX 2009
Dynamics AX 2012, Dynamics AX 2009
|
|
|
|
|
|
Dieser Beitrag bezieht sich auf die Versionen:
Dynamics AX 2012, Dynamics AX 2009
|
Um in Dynamics AX die markierten Datensätze einer Formular-Datenquelle (FormDataSource) zu verarbeiten/iterieren kann folgendes Code-Beispiel helfen:
{
inventTrans inventTransSelected;
inventTrans inventTrans4Update;
ttsbegin;
inventTrans4Update.setTmpData(inventTrans); //DIES IST NUR BEI TEMPORÄREN TABELLEN NOTWEDNIG
for (inventTransSelected = inventTrans_ds.getFirst(true) ? inventTrans_ds.getFirst(true) : inventTrans_ds.cursor();
inventTransSelected;
inventTransSelected = inventTrans_ds.getnext())
{
select firstonly forUpdate inventTrans4Update
where inventTrans4Update.RecId == inventTransSelected.RecId;
inventTrans4Update.Marked = NoYes::Yes;
inventTrans4Update.update();
}
ttscommit;
inventTrans_ds.executeQuery();
}
Im Beispiel werden die markierten Datensätze der Tabelle InventTrans durchlaufen und ein Feld Marked auf TRUE aktualisiert.
In Dynamics AX 2012 kann übrigens statt dessen auch die Klasse MultiSelectionHelper dafür verwendet werden.
{
MultiSelectionHelper = MultiSelectionHelper::construct();
MultiSelectionHelper.parmDatasource(inventTrans_ds);
InventTransSelected = MultiSelectionHelper.getFirst();
while(InventTransSelected)
{
// ...do something...
InventTransSelected = MultiSelectionHelper.getNext();
}
}
Mir ist allerdings mehrmals aufgefallen, daß nicht in allen Fällen beide Varianten zum selben Ergebnis führen - weshalb das so ist, weiß ich derzeit leider nicht. Hier hilft nur ausprobieren!
Außderdem muss man darauf achten, daß in Dynamics AX 2012 die neue Eigenschaft AutoRefreshData eines Buttons bei Verwendungen des oben beschriebenen Codes deaktiviert sein sollte. Mit aktivierter Eigenschaft funktionieren beide nicht!