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.