Dynamics AX Blog - lookup - Beiträge von 2012
AX 2012: Eigene Lookups mit Hilfe der Klasse SysLookupMultiSelectCtrl erstellen
21.02.2012Microsoft Dynamics AX (Axapta)
In AX 2012 gibt es über die Klasse SysLookupMultiSelectCtrl eine neue Möglichkeit, um bei einem Formularfeld, welches weder an eine DataSource noch an einen Extended Datatyp gebunden ist, dem Benutzer ein Lookup-Formular anzubieten. Diese Klasse hat gegenüber der Klasse SysTableLookup, die es schon in Dynamics AX 2009 gegeben hat, sowohl einige Vorteile aber auch ein paar Nachteile: Vorteile
Nachteile
|
Eigenes Lookup-Formular mit Hilfe der Klasse SysTableLookup gestalten
20.02.2012Microsoft Dynamics AX (Axapta)
Ab und an kommt man als Entwickler in die Verlegenheit, ein Formularfeld, welches weder an eine Datenquelle (DataSource) oder einen Extended Datatyp gebunden ist, um ein Lookup-Formular zu erweitern. Dafür stellt Dynamics AX die Klasse SysTableLookup zur Seite, die man in die lookup-Methode des jeweiligen Feldes einbinden kann. Hier ein einfaches Beispiel unter Verwendung eines Queries, bei dem prinzipiell ein Lookup auf die Kundengruppen möglich sein soll, aber nur bestimmte angezeigt werden sollen. Diese Einschränkung kann über sysQuery::findOrCreateRange abgebildet werden. Das Beispiel funktioniert übrigens sowohl in Dynamics AX 2009 als auch AX 2012. public void lookup()
{ sysTableLookup sysTableLookup; query query; super(); query = new query(); query.addDataSource(tableNum(custGroup)); sysQuery::findOrCreateRange(query.dataSourceTable(tableNum(custGroup)), fieldNum(custGroup, name)).value("*inter*"); sysTableLookup = sysTableLookup::newParameters(tableNum(custGroup), this); sysTableLookup.parmQuery(query); sysTableLookup.addLookupfield(fieldNum(custGroup, custGroup)); sysTableLookup.addLookupfield(fieldNum(custGroup, name)); sysTableLookup.performFormLookup(); } |
|
|
|
|
|
|
Mit Hilfe der Klasse SysTableLookup kann man sich den Lookup von Formularfeldern anpassen. Über die Methode addLookupMethod() können in diese Lookup-Formulare auch Display-Methoden eingebunden werden. Wichtig dabei ist lediglich, daß im Lookup alle Felder angezeigt werden, die von der jeweiligen Display-Methode zur Ermittlung benötigt werden.
Will man beispielsweise das Lookupformular der Artikelnummer um den Produktnamen erweitern, kann man dafür die folgende Methode nutzen. Hierbei ist beispielsweise das Feld Product der InventTable nur enthalten, um die Display-Methode itemName() im Lookup verwenden zu können.
{
sysTableLookup sysTableLookup;
query query;
QueryBuildDataSource qbds_inventTable;
query = new query();
qbds_inventTable = query.addDataSource(tableNum(inventTable));
sysTableLookup = sysTableLookup::newParameters(tableNum(inventTable), _lookupCtrl);
sysTableLookup.parmQuery(query);
sysTableLookup.addLookupfield(fieldNum(inventTable, itemId));
sysTableLookup.addLookupMethod(tableMethodStr(inventTable, itemName));
sysTableLookup.addLookupfield(fieldNum(inventTable, NameAlias));
sysTableLookup.addLookupfield(fieldNum(inventTable, ItemType));
sysTableLookup.addLookupfield(fieldNum(inventTable, product), false);
sysTableLookup.performFormLookup();
}