16.10.2007, 16:10 | #1 |
Участник
|
jinx: Drag & Drop in Masken
Nicht nur in der Microsoft Dynamics AX Entwicklungsumgebung hat man die M?glichkeit mittels Drag & Drop Ver?nderungen vorzunehmen. Es ist recht einfach diese Funktion auch in der Applikation verf?gbar zu machen. Hier gibt es im Standard nur sehr wenige Beispiele und die es gibt verwenden alle einen Tree oder eine List als Ziel. Ich zeige diese Drag & Drop Funktion mit zwei Grids als Quelle und als Ziel anhand eines einfachen Beispiels.
Um diese Drag & Drop Funktion in einer Maske zu implementieren braucht es zuerst einmal zwei Datenquellen, eine als Quelle und eine als Ziel. Um die Daten auf der Maske anzuzeigen hab ich jeweils ein Grid gew?hlt. Als Beispiel hab ich einfach eine neue Maske erstellt, die als Datenquelle SalesLine (Zieldatenquelle) und Inventtable (Quelldatenquelle) beinhaltet. Die Anzeige der Daten spielt hier nur eine untergeordnete Rolle. Nun muss nur noch auf den Grid (SalesLineGrid und InventTableGrid) die Eigenschaft DragDrop auf „Manual“ gestellt werden um Drag & Drop zu aktivieren (Es gibt nur die M?glichkeit auf None oder Manual). Nun kann man auf der Maske schon die Daten mittels Drag & Drop verschieben. Die Funktion zum Einf?gen des Datensatzes aus der Quelle ins Ziel ist nat?rlich noch nicht vorhanden, man kann aber das optische Verhalten (Datensatz in ein anderes Grid ziehen) schon betrachten. Nun m?ssen noch einige Ereignisse ?berschrieben werden um die Funktion zu implementieren. dragOver = hier wird festgelegt welche Aktion durchgef?hrt wird (Move, Copy, None).
> public FormDrag dragOver(FormControl _dragSource, FormDrag _dragMode, int _x, int _y) { FormDrag ret; // ret = super(_dragSource, _dragMode, _x, _y); // Kein Drag&Drop zulassen ret = FormDrag::None; return ret; } Es k?nnen hier nat?rlich alle m?glichen ?berpr?fungen stattfinden um festzulegen, wann welche Option erlaubt/ nicht erlaubt ist. > Um die Funktion nun abzuschlie?en fehlt nur noch das erzeugen des Datensatzes auf der Tabelle SalesLine. Hierzu wird die Method „Drop“ auf dem Grid „SalesLineGrid“ ?berschrieben. Um Auftragspositionen aus den Artikelstamm anzulegen k?nnte die Methode so ausehen public void drop(FormControl _dragSource, FormDrag _dragMode, int _x, int _y) { SalesLine sLine; //Ist Quelle identisch mit aktuellem Grid (SalesLineGrid) if (_dragSource.equal(this)) { //TODO: Hier kann bspw. das Verschieben der Auftragsposition implementiert werden (LineNum) } //Ist Quelle InventTableGrid else if (_dragSource.name() == InventTableGrid.name()) { // Nur Aktion ausf?hren wenn Copy oder Move if(_dragMode == FormDrag::Copy || _dragMode == FormDrag::Move) { sLine.initValue(); sLine.SalesId = SalesID.valueStr(); sLine.initFromSalesTable(SalesTable::find(salesLIne.SalesId)); sLine.ItemId = inventTable.ItemId; sLine.initFromInventTable(InventTable); sLine.createLine(NoYes::Yes, NoYes::Yes, NoYes::Yes, NoYes::Yes, NoYes::Yes, NoYes::Yes); salesLine_ds.executeQuery(); } } super(_dragSource, _dragMode, _x, _y); } In der Maske kann nun aus dem Artikelstamm eine neue Auftragsposition mittels Drag & Drop erstellt werden. Hierf?r habe ich noch eine Vorbelegung/ Einschr?nkung auf die Aufragsnummer vorgenommen um die Auftragsposition erzeugen zu k?nnen. Die Drag & Drop Funktion kann nur von der Artikeltabelle zu den Auftragsposition durchgef?hrt werden. Umgekehrt funktioniert das nicht, was man auch optisch sehen kann. (Screenshots haben aus irgendwelchen Gr?nden nicht funktioniert) Ein weiterer Vorteil bei der Drag & Drop Funktion ist, das Sie auch Masken?bergreifend funktioniert. Hierf?r sind gar keine weiteren ?nderungen notwendig. Es muss in der Drop Methode, wenn dort ?berpr?fungen stattfinden, nur der Ursprung auch erlaubt, bzw. mit ber?cksichtigt wurden sein. Die gerade erstellte Maske l?sst sich schon jetzt zweimal ?ffnen um dort von der einen zu der anderen Maske Daten mittels Drag & Drop zu ?bertragen (Inventtable -> SalesLine) Durch kleine ?nderungen kann diese Funktion auch aus der Artikelmaske ausgef?hrt werden. Hierzu muss in der Artikelmaske einfach auf dem Grid DragDrop auf Manual gesetzt werden und die Drop Funktion in der neu erstellten Maske leicht angepasst werden. Beispielprojekte f?r das einfache Drag&Drop innerhalb einer Maske und die kleine Erweiterung f?r das Drag&Drop aus der Artikelmaske herraus gibts auch wieder. In der Maske "BOMDesigner" kann die Drag&Drop Funktion noch anhand einer Baumstruktur (FormTreeControl) als Quelle bewundert werden. Beispiel SimpleDragAndDrop Form_SimpleDragDrop.rar (1,99 KB) Beispiel Projekt f?r Drag&Drop aus Artikelmaske in die Maske SimpleDragAndDrop SharedProject_DragAndDropInventTable.rar (11,71 KB) Es wird keine Haftung oder Gew?hrleistung auf die Richtigkeit der gemachten Angaben gegeben. Die Verwendung erfolgt auf eigene Gefahr. Copyright © Axel K?hn (Aku's AX Blog, http://blog.ak-home.net) and Mathias F??ler (jinx's AX Blog, http://starside.eu) More... |
|
|
|