AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: За рубежом > DAX auf Deutsch
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.10.2007, 16:10   #1  
Blog bot is offline
Blog bot
Участник
 
25,626 / 848 (80) +++++++
Регистрация: 28.10.2006
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).
  • Move = Mouse+SHIFT Taste (Default)
  • Copy = Mouse+STRG Taste
So kann z.B. festgelegt werden, das auf dem Grid “InventTableGrid” kein Drag&Drop m?glich sein soll. Hierzu wird diese Methode wie folgt ?berschrieben.

> 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...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
если форму\отчет\класс тащить drag and drop-ом в соответствующую ветку AOT, то автоматом будут созданы menuItems DSPIC DAX: База знаний и проекты 2 20.02.2009 18:35
Drag&Drop + целевая строка Dronas DAX: Программирование 1 28.12.2007 22:24
axcoder: Video: howto drag and drop nodes from XPO to application Blog bot DAX Blogs 1 21.08.2007 11:44
jerry-dynamics: Where can you drag and drop an extended data type to? Blog bot DAX Blogs 0 16.06.2007 11:20
Как использовать Drag & Drop на формах Аксапты korvin DAX: Программирование 3 16.02.2006 10:40

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:55.