something about Microsoft Dynamics AX RSS 2.0
 Thursday, September 17, 2009

In mehreren Artikeln wurde bereits beschrieben, wie LookupForms erstellt werden müssen, um alle Funktionen bereit zu stellen, die auch durch einen Standard-Lookup bereit gestellt werden.

Ein guter Artikel ist zum Beispiel auf Axaptapedia zu finden:
http://axaptapedia.com/Lookup_Form

Leider wurde in diesem Artikel auf eine Kleinigkeit nicht hingewiesen, die allerdings für sehr viel Verwirrung sorgen kann.

Um beim Öffnen des Lookups den bereits eingetragenen Wert zu selektieren (in dem Control der aufrufenden Maske), müssen wie in dem Artikel beschrieben, die Methoden „executeQuery“ und „init“ der DataSource der Lookup-Maske überschrieben werden.

Beispiel:

public void executeQuery()
{
    FormStringControl   callerControl   = SysTableLookup::getCallerStringControl(element.args());
    ;
    super();
 
    xyz_ds.findValue(fieldnum(xyz,id),callerControl.text());
}

public void init()
{
    Query                q = new Query();
    QueryBuildDataSource qbds;
    ;
    super();
 
    qbds = q.addDataSource(tablenum(xyz));
    qbds.orderMode(OrderMode::OrderBy);
    qbds.addSortField(fieldNum(xyz,some_other_field));
    this.query(q);
}

Es wird auch beschrieben, dass in der Methode “init” der Datasource eigene Ranges oder Sortings definiert werden können.
Dies ist soweit auch richtig, allerdings mit einer Ausnahme.

Wird auf dem Feld, welches bei dem Aufruf von „Datasource.findValue“ in der Methode „init“ angegeben wurde (sollte auch immer das Feld sein, dessen Wert durch den Lookup ausgewählt wird), eine Range definiert, so funktioniert die Selektion des zuvor gewählten Wertes nicht mehr und es wird immer der erste Wert im Lookup selektiert bzw. ausgewählt.

Beispiel:

public void executeQuery()
{
    FormStringControl   callerControl   = SysTableLookup::getCallerStringControl(element.args());
    ;
    super();
 
    xyz_ds.findValue(fieldnum(xyz,id),callerControl.text());
}

public void init()
{
    Query                q = new Query();
    QueryBuildDataSource qbds;
    QueryBuildRange      range;
    ;
    super();
 
    qbds = q.addDataSource(tablenum(xyz));
    qbds.orderMode(OrderMode::OrderBy);
    qbds.addSortField(fieldNum(xyz,some_other_field));
    range = qbds.addRange(fieldnum(xyz,id));
    range.value(SysQuery::valueNot(<someValue>));
    this.query(q);
}

Dieses Verhalten lässt sich allerdings umgehen, wenn anstelle des Aufrufs von “DataSource.findValue” in der „ExecuteQuery“ Methode der DataSource der Aufruf von „DataSoucre.findRecord“ verwendet wird.
Hierfür muss aber der entsprechende Datensatz des zuvor oder bereits ausgewählten Wertes ermittelt werden um diesen beim Aufruf von „DataSource.findRecord“ als Parameter zu übergeben.

Beispiel:

public void executeQuery()
{
    FormStringControl   callerControl;
    Xyz                 xyzRecord;
    ;
    callerControl = SysTableLookup::getCallerStringControl(element.args());
    xyzRecord = Xyz::find(callerControl.text());
 
    super();
 
    xyz_ds.findRecord(xyzRecord);
}

public void init()
{
    Query                q = new Query();
    QueryBuildDataSource qbds;
    QueryBuildRange      range;
    ; 
    super();
 
    qbds = q.addDataSource(tablenum(xyz));
    qbds.orderMode(OrderMode::OrderBy);
    qbds.addSortField(fieldNum(xyz,some_other_field));
    range = qbds.addRange(fieldnum(xyz,id));
    range.value(SysQuery::valueNot(<someValue>));
    this.query(q);
}

Es muss also darauf geachtet werden, ob eine Einschränkung (Range) auf dem „ID-Feld“ benötigt wird oder nicht.

Wird keine Einschränkung benötigt, kann, wie in dem Artikel auf Axaptapedia beschrieben, mit „DataSource.findValue“ gearbeitet werden um den entsprechenden Datensatz zu selektieren.
Wird aber eine solche Einschränkung benötigt, muss mit „DataSoucre.findRecord“ gearbeitet werden.

Thursday, September 17, 2009 9:48:11 PM (Mitteleuropäische Zeit, UTC+01:00)  Axel Kühn  #    Comments [0] -


Über/Kontakt

  




© Copyright 2012 Mathias Füßler
Sign In
Categories
Archiv
<February 2012>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910
Blogroll
Statistik
Total Posts: 107
This Year: 0
This Month: 0
This Week: 0
Comments: 19





All Content © 2012, Mathias Füßler
DasBlog theme 'Business' created by Christoph De Baene (delarou)