...feel the spirit of Microsoft Dynamics AX RSS 2.0
 Monday, May 14, 2007
Dialog zu erzeugen ist einfach und geht in der Regel sehr schnell. Das einzige Problem bei Dialog und deren Controls ist, das man im Dialog keine Möglichkeit hat auf die Benutzereingangen sofort zu reagieren. Nun das stimmt nicht wirklich, denn auch bei Dialogen und deren Controls kann man auf die Methoden, wie Modified oder Valdidate für jede Control innerhalb des Dialoges erzeugen um auf Benutzereingaben reagieren zu können. Leider geht es nur nicht so einfach wie bei den Forms, in der in der Regel schon alle FormControls im Design vorhanden sind und sehr einfach die entsprechenden Methoden direkt hinter dem aktuellem Control zu finden und anzupassen sind.
Bei Dialog ist dies nicht der Fall, so muss man diese Methoden an dem Objekt hinterlegen, welches den Dialog aufruft.

Ein Beispiel

void DialogOeffnen()
{
Dialog meinDialog;
DialogField dCtrl1, dCtrl2;
;
meinDialog = new Dialog("Neuer Dialog", this);

// Feld Kundennummer hinzufügen
dCtrl1 = meinDialog.addField(Typeid(CustAccount));
// Feld Name hinzüfgen
dCtrl2 = meinDialog.addField(typeid(Name));

// Dialog ausführen
meinDialog.run();
}

Um nun auf Benutzereingaben reagieren zu können um Beispielsweise nach Eingabe der Kundennummer(Feld: dCtrl1) den Name des aktuellen Kunden im zweiten Feld (Feld: dCtrl2) zu erhalten, muss für das Feld Kundennummer die Methode "Modified" überschrieben werden.
Hierzu ist es nötig, dem Dialog bzw. dessen Form inkl. FormRun mitzuteilen, das sich diese Methoden im aktuellen Objekt und nicht im Dialog befinden, denn im Dialog haben wir keinen einfluss.
Das erreicht man mit

meinDialog.doInit();

meinDialog.formRun().controlMethodOverload(true);
meinDialog.formRun().controlMethodOverloadObject(this);

Die Methode "doInit" ist notwendig um FormRun im Dialog zu initialiseren, wird dieses versäumt kommt es zum Laufzeitfehler.

Alle wichtigen Dinge sind nun getan, bis auf die Definition der Methode für das Feld "Kundennummer". Leider kann man den Namen des Feldes bei DialogField nicht manipulieren und muss hier mit den automatisch generierten Controlnamen leben. Da dieses aber immer nach dem gleichen Schema passiert ist das nicht wirklich tragisch. Bei Feldern wird der Name immer wie folgt aussehen


fld + Feldnummer + _ + ArrayIdx

Die Feldnummer kann man in der Regel einfach ermitteln: Das erste Feld hat die Feldnummer 1, das zweite Feld die Feldnummer 2, usw.
Den ArrayIdx hab ich bisher auch nur als 1 gesehen.
Das kann sich natürlich immer anhand der Komplexität verändern.

Zu guter Letzt fehlt noch die Methode "Modified" die die gewünschten Änderungen beinhaltet.

public boolean fld1_1_modified()
{
FormStringControl c = dialog.formrun().controlCallingMethod(); // Die FormControl, von der der Aufruf erfolgt
boolean ret;
;
ret = c.modified(); // Super() der aktuellen FormControl aufrufen ->modified

dControl2.value(CustTable::find(dControl1.value()).Name);
dControl2.enabled(false);
return ret;
}

Eine einfach Klasse die genau dieses auch macht kann man von hier runterladen.

Class_DialogControlMethodOverload.zip (,91 KB)
Monday, May 14, 2007 1:20:27 PM (Mitteleuropäische Zeit, UTC+01:00)  Mathias Füßler  #    Comments [1] - Trackback


Wednesday, August 29, 2007 3:08:49 PM (Mitteleuropäische Zeit, UTC+01:00)
Hallo Axel!

Geniale Funktion, du hast mir damit sehr geholfen!
Danke!

Ich habe die Funktionalität in einer Klasse, die von RunBaseBatch abgeleitet ist eingebaut.

Hier müssen die Propertys controlMethodOverload und controlMethodOverloadObject in der Methode dialogPostRun gesetzt werden, da erst hier das FormRun-Objekt initialisiert ist.


public void dialogPostRun(DialogRunbase dialog)
{
;
//zur Ermittlung der aktuellen Feldnamen
// info(DialogField.name());


dialog.formRun().controlMethodOverload(true);
dialog.formRun().controlMethodOverloadObject(this);
super(dialog);
}

Nochmals Danke,
Franz Aigner
Comments are closed.


Translate
Über/Kontakt

     







© Copyright 2012 Axel Kühn
Sign In
Subscribe this blog
Blogroll
 Arijit Basu
 Axapta Blog
Blog around Microsoft Business Solutions Axapta by Helmut Wimmer
 BlaBlubBlog
Der Blog von Kai Gloth
 Dave Bowles
 Dick Wenning
Ax(apta) start pages
 Fred Shen
 Harish Mohanbabu
 jinx´s AX Blog
Everything about Microsoft Dynamcis AX
 Lars Keller
All about .NET, VSTS, VSTO and more
 Max Belugin
 TaReMoTi Blog
Der Blog von Karsten Döring
Archiv
<February 2012>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910
Statistik
Gesamte Posts: 137
Dieses Jahr: 0
Dieser Monat: 0
Diese Woche: 0
Kommentare: 49





All Content © 2012, Axel Kühn
DasBlog theme 'Business' created by Christoph De Baene (delarou)