26. September 2009 22:55
Hi,
mir ist aufgefallen, dass nicht immer nach einem ERROR ein erstelltes Dialog Fenster geschlossen wird.
Immer wenn eine Funktion über eine Subform aufgerufen wird, werden die Dialog Fenster nicht geschlossen...was natuerlich ziemlich unschoen ist, wenn man fuer die Anwender ausagekräftige Dialoge anzeigen will wie z.B. "
Daten werden verarbeitet!...". Nun kommt ein Fehler und dieser Text steht noch immer da....
Kennt ihr das Problem? und wie umgeht ihr das? bzw. haettet ihr da gute Ideen?
Gruß,
Matthias
Zuletzt geändert von MatthiasKönig am 30. September 2009 14:32, insgesamt 1-mal geändert.
27. September 2009 11:14
MatthiasKönig hat geschrieben:Immer wenn eine Funktion über eine Subform aufgerufen wird, werden die Dialog Fenster nicht geschlossen..
Steht diese Funktion auf der (Sub-)Form, Tabelle oder in einem ganz anderen Objekt?
Lässt sich das Problem evtl. umgehen, wenn du deine Berechnung mitsamt dem Dialog in einer Codeunit unterbringst?
27. September 2009 13:01
kurze Erklaerung:
Codeunit in der NUR
- Code:
dlg.OPEN('Ich bin offen!!');
ERROR('Schlimmer Fehler!');
und wenn ich diese aus einer Subform aufrufe schliesst sich der Dialog nicht! auch wenn ich diesen Code direkt in die Subform schreibe, schliesst sich der Dialog auch nicht! nur wenn ich die Codeunit oder den Code direkt aufrufe, schliesst sich der Dialog.....
BTW
ich programmier eigentlich nie auf Forms, wenns nich sein muss ;)
BTW²
ich hab schon versucht das auszutricksen über andere Objekte springen oder so...aber Fakt ist, sobald der aufruf aus einer Subform gestartet wird, bleibt der Dialog offen.... :(
27. September 2009 13:18
MatthiasKönig hat geschrieben:und wenn ich diese aus einer Subform aufrufe schliesst sich der Dialog nicht!
Hab ich ausprobiert und kann ich nicht bestätigen!
Habe auch so eine Codeunit erstellt und rufe sie in der Verkaufsauftragssubform auf, Trigger OnAfterGetRecord:
- Code:
CODEUNIT.RUN(50000);
Öffne ich die Auftragsform, erhalte ich also die Fehlermeldung.
Nach dem Bestätigen der Fehlermeldung wird auch das Dialogfenster geschlossen.
Also müssen wir jetzt aufdröseln, was genau bei dir anders umgesetzt ist.
Ich teste das übrigens mit 2009 SP1 CC.
27. September 2009 14:15
ich teste mit 5.0 SP 1...
und ich frage mich gerade warum das auf der Sales Order geht O.o ich dachte ich wuesste nun woran das liegt... :(
ich hab mal ne Fob zusammen gestellt mit 3 Objekten...Main,, Sub-Form und ne Codeunit wo der Fehler auftritt O.o
mal weiter analysieren
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
27. September 2009 14:22
Naja, bei deinem Objektpaket handelt es sich nicht um eine "echte", funktionale Subform, denn sie hat keinen SubformLink.
Deine Subform ersetzt in Wirklichkeit eine Mainform.
Aber falls es dich tröstet: Mit deinen Objekten kann ich das Problem nachvollziehen
Sie sieht denn die Main-/Subform aus, bei der du das Phänomen erstmalig entdeckt hast? Ist es auch eine Subform ohen Subformlink?GROSSES EDIT:
Es liegt wirklich daran, dass wir innerhalb der Subform unterschiedliche Stellen angesprochen haben.
Ich habe wie gesagt in der Subform im OnAfterGetRecord-Trigger die Codeunit gestartet.
Du dagegen rufst von der Mainform aus eine Funktion der Subform aus.
Wenn ich in
deiner Subform wieder den Codeunitaufrauf in den OnAfterGetRecord packe, dann wird diesmal der Dialog geschlossen.
27. September 2009 14:39
dooferweise gehts bei mir auf der Sales Order auch, wenn ich eine funktion des Subform anspreche O.o
und wenn man dort auch den Subformlink rausnimmt, klappt das nicht....es ist zum Maeusemelken...... >.<
27. September 2009 15:19
MatthiasKönig hat geschrieben:und wenn man dort auch den Subformlink rausnimmt, klappt das nicht....
Oh, ist dann meine erste Idee mit dem Subformlink doch noch relevant gewesen?
27. September 2009 17:03
ne, damit hats auch nichts zu tun...leider.
27. September 2009 17:08
Gegenvorschlag:
Scheinbar brauchst du ja für deine Verarbeitung Informationen aus den Subformrecords.
Verlege den Codeunitaufruf in die Mainform und übergebe der Codeunit vorher Informationen aus der Subform. Müsste doch theoretisch klappen
28. September 2009 08:00
mhhh bin mir unsicher ob das an dieser Stelle der richtige Weg waere.... aber danke...ich schau mal wie ichs nun mache. Wenn ich ne gute Lösung habe, melde ich mich.
29. September 2009 16:16
mmhh sorry wegen dem Doppel-Post aber ich frage mich, ob nicht jemand schon analyisert hat, warum der "Fehler" auftaucht.
ich steh da noch immer auf dem Schlauch :(
29. September 2009 16:19
MatthiasKönig hat geschrieben:aber ich frage mich, ob nicht jemand schon analyisert hat, warum der "Fehler" auftaucht.
Ich zähle wohl nicht
Hast du denn schon meinen Vorschlag ausprobiert?
29. September 2009 16:38
och Natalie, natuerlich zaehlst du! ;)
dein Vorschlag waere ne riesen umprogrammiererei :( und das versuch ich mir noch zu sparen :D
nein noch nicht.... verschiebe in dem Projekt zurzeit die Dialoge aus dem Grund!
lieber wuesste ich, woran das liegt und dann erst ob ich das anders machen koennte...
30. September 2009 14:31
soooo ich hab die Lösung!
1. Dialog Variablen werden NIE Global erstellt! Falls man dies doch tut und ein Fehler auftritt, ist die Dialog Variable noch im "Zugriffsbereich" (mit faellt gerade der Deutsche Begriff fuer Scope einfach nicht ein >.<) und wird somit NICHT geschlossen!
2. Dialog Variablen werden NIE in Single Instance CodeUnits geschrieben....da bleibt der Scope sowieso!
So werde ich mich, bis mir das Gegenteil bewiesen wird, verhalten :)
30. September 2009 15:08
Wiki - Scope = Sichtbarkeitsbereich einer Variable.
Danke für diesen Interessanten Beitrag, ich habe mich schon ab und an über einen Dialog gewundert, der stehen bleibt. Allerdings bisher nicht versucht dieses zu erforschen.
30. September 2009 16:29
achja, das Wort hoert sich im Deutschen i-wie total bescheuert an :D
danke :)
22. Januar 2013 13:06
Hallo!
Ich melde mich dazu nun auch nach langer Zeit zu Wort:
Ich habe gerade in 2009R2 getestet und mir ist folgendes aufgefallen.
Wird eine Codeunit per
- Code:
Codeunit.Run(ID-Codeunit)
aufgerufen so wird beim Fehler der Dialog geschlossen. Legt man aber eine Codeunit als Variable an
(
- Code:
Variable.Run
)
und ruft sie dann auf, so bleibt der Dialog offen.
Ich benötige aber die zweite Variante, da ich eine eigene Funktion aufrufen möchte und nicht den OnRun-Trigger.
Gruß
Volker
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.