[Gelöst] Problem mit Dialog INPUT (CC)

10. Januar 2011 18:49

Hallo zusammen!

Ich habe ein "kleines" Problem mit einer Dialog-Variable und der INPUT-Funktion. Ich weiß, dass man es vermeiden sollte diese zu verwenden, aber ich sah zum Zeitpunkt der Entwicklung leider keine andere Möglichkeit (und sehe sie nach wie vor nicht). Erst einmal zum "drum herum":
Ich habe das Änderungsprotokoll so erweitert, dass bei bestimmten Feldern/Tabellen ein Grund für die Änderung angegeben werden kann oder muss (insbesondere für Einrichtungstabellen). Dashabe ich so gemacht, dass ich mich in CU 423 "Change Log Management" ans Ende von InsertLogEntry hänge, dort prüfe ob für dieses Feld ein Änderungsgrund notwendig ist und falls notwendig, meine Funktion zum Abfragen eines Grundes aufrufe.

Code:
AskForReason(RecRef : RecordRef;FldRef : FieldRef;ChangeLogEntry : Record "Change Log Entry") : Text[100]
TblCaption := RecRef.CAPTION;
FldCaption := FldRef.CAPTION;
MyReason := LastReason;
MsgText := STRSUBSTNO(Text001, TblCaption, FldCaption, ChangeLogEntry."Old Value",ChangeLogEntry."New Value");
REPEAT
  DialogInput.OPEN(MsgText);
  ReturnID := DialogInput.INPUT(9, MyReason);
UNTIL (ReturnID <> 0) AND IsValidReason(MyReason);

LastReason := MyReason;
EXIT(MyReason);


Ich habe hier mit Dialog gearbeitet, da ich mich schließlich in einer Transaktion befinde und somit ein RUNMODAL wegfällt. RUN fällt raus, da ein Grund u.U. zwingend ist und daher nicht einfach in den Hintergrund rutschen darf.

Das ganze funktioniert soweit auch recht gut (auch wenn die Dialog-Box bescheiden aussieht). Sobald der Datensatz gewechselt wird oder die Form geschlossen o.ä., geht der Dialog auf, fragt nach einem Grund (evtl. auch mehrmals, falls jemand Murks eingibt) und speichert diesen in den Änderungsprotokollposten.

Nun ist nach 2 Monaten (da diese Funktionalität recht selten genutzt wird) ein Problem aufgefallen, das irgendwie nach NAV-Bug aussieht. Wenn ich auf einer Form eine Änderung durchführe (die Tabelle wird protokolliert) und von dieser Form aus auf ein Element im linken Menü oder auf eine andere geöffnete Form klicke stürzt NAV ab. Im Debugger sieht es zu Anfang noch korrekt aus (d.h. genauso wie bei dem funktionierenden Aufruf), jedoch kommt NAV in eine "Endlosschleife", welche immer wieder von vorne anfängt, wenn der Debugger in o.g. Funktion auf die "REPEAT"-Zeile trifft (zumindest sieht es so aus, ich vermute aber eher, dass es die Zeile mit "OPEN" ist). Sobald diese Zeile erreicht ist, springt NAV in den OnModify der Tabelle, dann in OnGlobalModify und dann in die Änderungsprotokoll-Codeunit.

[Immer wieder die gleichen Aufrufe]
Codeunit 1 ApplicationManagement\OnGlobalModify(RecRef,xRecRef)
Codeunit 423 Change Log Management\AskForReason(RecRef,FldRef,ChangeLogEntry)
Codeunit 423 Change Log Management\InsertLogEntry(FldRef,xFldRef,RecRef,TypeOfChange)
Codeunit 423 Change Log Management\LogModification(RecRef,xRecRef)
Codeunit 1 ApplicationManagement\OnGlobalModify(RecRef,xRecRef)
Codeunit 423 Change Log Management\AskForReason(RecRef,FldRef,ChangeLogEntry)
Codeunit 423 Change Log Management\InsertLogEntry(FldRef,xFldRef,RecRef,TypeOfChange)
Codeunit 423 Change Log Management\LogModification(RecRef,xRecRef)
Codeunit 1 ApplicationManagement\OnGlobalModify(RecRef,xRecRef)


So öffnen sich dann innerhalb von ein paar Sekunden ca. 1000 Fenster und NAV schmiert ab :-(

Da die Funktion ja unter "normalen Umständen" funktioniert, wollte ich ungern generell von dem Vorgehen abweichen und eher nach einem Workaround für dieses Phänomen schauen. Habt ihr da vielleicht eine Idee?

LG
Kleba
Zuletzt geändert von Kleba am 20. Januar 2011 09:22, insgesamt 1-mal geändert.

Re: Problem mit Dialog INPUT (CC)

20. Januar 2011 09:22

Hi folks :)

also, ich kann jetzt mit ziemlicher Sicherheit sagen, dass es ein Problem der Dialog-Variable ist. Anscheinend zerstört/verliert der OPEN-Aufruf des Dialog ein Fenster-Handle, wenn ich in oben beschriebener Reihenfolge vorgehe.
Ich umgehe das jetzt dadurch, dass ich eine selbst geschrieben C#-DLL über Automation aufrufe, welche prinzipiell das Gleiche macht (halt nur über Windows-Forms und nicht über NAV-Controls). Funktioniert sehr gut in allen möglichen Konstellationen *freu*

Das Einzige was mich noch etwas stört, ist dass ich nicht weiss, wie ich die DLL jetzt am besten verteile, damit jeder Client die verfügbar hat (oder auch vor dem Benutzen abfragen, ob DLL verfübar). Falls jemand etwas weiß, immer raus damit. Ich befrage in der Zwischenzeit all-mighty Google ;-)

LG
Kleba

Re: [Gelöst] Problem mit Dialog INPUT (CC)

20. Januar 2011 10:09

Hoi,

erstmal Gratulation :D Mit der C# Variante kannst du das Fenster auch schöner aussehen lassen.
Zu deinem Problem:
http://www.navision24.de/downloads/date ... erung.html

Re: [Gelöst] Problem mit Dialog INPUT (CC)

24. Januar 2011 12:50

Hi Matthias,

danke für deine Rückmeldung. An dieses Tool von Nav24 hab ich auch schon gedacht (bzw. habs beim googlen über ein anderes Forum gefunden). In diesem anderen Forum stand etwas davon, dass das unter Windows Vista bzw. 7 nicht mehr einwandfrei funktioniert (wg. UAC). Aus diesem Grund hab ich die Idee wieder verworfen, aber ich werde das wohl bei Gelegenheit noch mal aufgreifen und prüfen.

Falls ihr noch andere Ideen/Workarounds kennt oder euch noch was einfällt, immer raus damit :)