Beleggenehmigung - Variable NavVariant nicht initialisiert

Bild Microsoft Dynamics NAV 2017

Beleggenehmigung - Variable NavVariant nicht initialisiert

Beitragvon Timo Lässer » 20. November 2020 10:26

Moin zusammen,

im Zusammenhang mit dem Problem "Beleggenehmigung - Der Typ wird nicht unterstützt" erhalten unsere Anwender in letzter Zeit immer häufiger die Fehlermeldung "Variable Microsoft.Dynamics.Nav.Runtime.NavVariant nicht initialisiert."
Screenshot.png
Screenshot.png (15.86 KiB) 844-mal betrachtet


Nach intensiven Recherchen haben wir mit dem Debugger festgestellt, dass in der Tabelle 1522 "Workflow Event Queue" Einträge vorhanden sind, die pro Session-ID mehrfach auf denselben "Record Index" zeigen.
Screenshot3.png


Bei der Abarbeitung dieser Datensätze (in der Funktion "ExecuteQueuedEvents" wird ausschließlich auf die Session-ID gefiltert und mit dem Record Index versucht, einen Record aus einem Variant-Array (in einer SingleInstance-Codeunit vorgehalten) zu ziehen.
Nachdem der Record aus dem Variant-Array geholt wurde, wird das entsprechende Array-Element geleert.
Dies führt dazu, dass bei dem nächsten Zugriff auf denselben Record Index dieses Array-Element leer ist und kein Record in die Variable "Variant" übergeben werden kann.
Bei dem Versuch, aus diesem Variant einen RecordRef zu ziehen, läuft NAV dann auf den oben genannten Fehler.
Screenshot2.png


Vermutlich befinden sich also in dieser Tabelle noch Einträge aus vorherigen Sessions, welche aus irgendeinem Grund nicht sauber abgearbeitet werden konnten (weil der Workflow z. b. durch einen unerwarteten Fehler abgebrochen war oder der Client abgestürzt war).

Wenn sich jetzt ein Anwender an NAV anmeldet und eine Session-ID zugewiesen bekommt, zu der es noch solche Relikte in der Tabelle gibt, dann kann der Workflow logischerweise nicht mehr funktionieren, da in seinem Variant-Array die Datensätze gar nicht existieren, denn sein Workflow hat ja eigene Einträge hinzugefügt. (in obigen Screenshot stammen z. B. der Eintrag mit der ID 35075.
Die Funktion ExecuteQueuedEvents will aber stumpf alle Einträge zu dieser Session-ID abarbeiten und greift sich den verwaisten Eintrag mit der ID 35048, holt sich die Records aus den Array-Elementen 1 und 2 (welche daraufhin geleert werden) und arbeitet seinen Workflow ab.
Wenn die Funktion nun auf den Eintrag mit der ID 35075 stößt, will es wieder die Array-Elemente 1 und 2 holen (die jetzt aber schon leer sind) und läuft bei der RecRef-Zuweisung auf den Fehler.

Unser Workaround:
Da der Workflow mit den alten Einträgen in der Tabelle zu Beginn einer Session-ID sowieso nichts mehr anfangen kann (weil das Variant-Array bei dem Anwender zum Beginn seiner Session auf jeden Fall leer ist), haben wir ein Event implementiert, welches alle Einträge zu dieser Session-ID bei OnAfterLogInStart löscht.
Screenshot4.png
Gruß, Timo Lässer

Frage beantwortet? Schreibe bitte "[Gelöst]" vor den Titel deines ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, E-Mail, Instant Messanger, Soziale Netzwerke, Telefon oder Fax! DafĂĽr ist dieses Forum da.
Hier kannst du fĂĽr MSDynamics.de spenden.
Benutzeravatar
Timo Lässer
Administrator
Administrator
 
Beiträge: 5279
Registriert: 14. November 2004 22:18
Wohnort: DE 49716 Meppen
Arbeitsort: DE 49733 Haren (Ems)
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 1.10a - 2018, BC14, BC21

ZurĂĽck zu NAV 2017

Wer ist online?

Mitglieder in diesem Forum: Unbekannter Robot, Unbekannter Spider und 1 Gast

cron