Bodo's Dynamics NAV Blog
Bodo ist ein Dynamics NAV Urgestein. Er programmiert NAV seit DOS Zeiten und hat auch keine Scheu vor .NET. Viele Neueinsteiger wurden von ihm in den letzten Jahren zu NAV Entwicklern ausgebildet. In diesem Blog veröffentlicht Bodo von Zeit zu Zeit technische Kabinettstückchen aus der Welt von Dynamics NAV und .NET.NAV 2009 – Unerwartetes Verhalten von Codeunit.RUN
Heute schreibt mein lieber Kollege Christian: In der Microsoft Dynamics NAV Dokumentation (C/SIDE Reference Guide) können Sie über die Funktion Codeunit.RUN nachlesen:
[Ok :=] Codeunit.RUN(Number[, Record])
“…If you include the return value and an error occurs, the calling C/AL code continues to run. This means that you must handle any errors.”
Das ist leider nur die halbe Wahrheit. Ein durch Rec.INSERT ausgelöster Fehler, bricht die Verarbeitung im Gegensatz zur Beschreibung ab und der aufrufende C/AL Code wird nicht weiter ausgeführt. Das können Sie mit dem folgenden Beispielcode nachstellen.
Die Codeunit 50503 „Run Insert Demo Record“ simuliert den Aufruf…
{
OBJECT-PROPERTIES
{
Date=12.07.11;
Time=14:46:29;
Modified=Yes;
Version List=BLOG;
}
PROPERTIES
{
>
IsOk@1000000000 : Boolean;
BEGIN
IsOk := CODEUNIT.RUN(CODEUNIT::"Insert Demo Record");
IF IsOk THEN BEGIN
MESSAGE('Ok');
END ELSE BEGIN
MESSAGE('Error: %1', GETLASTERRORTEXT);
END;
END;
}
CODE
{
BEGIN
END.
}
}
…von Codeunit 50502 „Insert Demo Record“, die einen Datensatz einfügt…
{
OBJECT-PROPERTIES
{
Date=12.07.11;
Time=14:46:37;
Modified=Yes;
Version List=BLOG;
}
PROPERTIES
{
>
Demo@1000000000 : Record 50500;
BEGIN
// ERROR('Hello World!');
Demo.INIT;
Demo.INSERT;
END;
}
CODE
{
BEGIN
END.
}
}
…in die Tabelle 50500 „Demo“.
{
OBJECT-PROPERTIES
{
Date=12.07.11;
Time=14:39:33;
Modified=Yes;
Version List=BLOG;
}
PROPERTIES
{
}
FIELDS
{
{ 1 ; ;Entry No. ;Integer }
}
KEYS
{
{ ;Entry No. ;Clustered=Yes }
}
FIELDGROUPS
{
}
CODE
{
BEGIN
END.
}
}
Den Quellcode finden Sie auch hier zum Download.
Wenn Sie die Codeunit 50503 „Run Insert Demo Record“ zweimal aufrufen, erhalten Sie beim zweiten Aufruf die Fehlermeldung, dass der Datensatz bereits existiert. Das sollte einen nicht wundern. Wundern sollte einen, dass die Verarbeitung abgebrochen wird:

Das ist nicht das erwartete Verhalten. Das erwartete Verhalten können Sie simulieren, wenn Sie in der Codeunit 50502 „Insert Demo Record“ die Kommentarzeile mit dem „Hello World!“-Error ein kommentieren. Dann bekommen Sie die folgende Mitteilung:

Weitere Nachforschungen haben folgendes ergeben:
- Von diesem Verhalten sind zumindest die Versionen NAV 2009 SP1 und R2 betroffen. Ältere Versionen haben wir nicht getestet.
- Es scheint nur ein Problem von Rec.INSERT zu sein. Fehler durch ERROR oder auch Rec.MODIFY oder Rec.DELETE verhalten sich wie erwartet.
- Nur der NAV Client für den SQL Server ist betroffen. Der vom Aussterben bedrohte NAV Client „fin.exe“ verhält sich wie erwartet.
Neueste Einträge
- Dynamics NAV und das Ausdrucken externer Dateien
- Fehlende Icons in der Toolbar der Seitenansicht für die Berichte
- Dynamics NAV Web Services und die Reihenfolge der Ereignistrigger
- Der Unterschied zwischen den Sicherheitsmodellen Standard und Enhanced
- NAV 2009 R2 – Login-Dialog für den Role Tailored Client
- [UPDATE] NAV 2009 – Kritischer Fehler in Berichten für den Role Tailored Client
- NAV 2009 – Kritischer Fehler in Berichten für den Role Tailored Client
- NAV 2009 – Security Filter, Buchungsdatum und Rec.READPERMISSION
- NAV 2009 – Funktion FORMAT, Datentyp OPTION und unterschiedliches Verhalten von Classic Client und Role Tailored Client
- NAV 2009 – Quellcode des Transformation Tools veröffentlicht
- NAV 2009 – Copy & Paste und böse Zeichen in Text- und Code-Feldern
- NAV 2009 – Unerwartetes Verhalten von Codeunit.RUN
- NAV 2009 – Notizen und Benachrichtigungen an Active Directory Gruppen
- NAV 2009 – Interner Fehler 12 in Modul 40
- NAV 2009 Form Transformation – Wo sind die deutschen (DEU) Captions hin?
- NAV 2009 und die Frage, warum die Anzahl der Inforegister PAGE.RUNMODAL beeinflusst
- NAV 2009 Web Services und das Geheimnis der Extension Codeunits
- Der NAV-Client zeigt in der Übersicht der aktiven Sessions nur die eigene Session an
- Der NAV-Client versucht, eine externe Komponente auszuführen
Nach Datum
Tag Cloud
2009 active directory add-in addin ascii bericht buchungsdatum caption classic codeunit copy drucken enhanced export extension form format gdpdu icons inforegister ldap login nav option page paste pdf r2 readpermission reihenfolge report rtc run runmodal securtiy service princial name session sicherheit sicherheitsmodelle spn sqlserver standard toolbar transformation transformation tool trigger webservices übersicht

