INSERT ERROR innerhalb von IF CODEUNIT.RUN

13. September 2019 12:04

Hallo zusammen,

Ich habe, vereinfacht dargestellt, folgenden Code:

CU 50000
Code:
IF NOT CU50001.RUN THEN
WriteErrorLog;


CU 50001
Code:
...
Rec.Feld1 := 'ABC';
Rec.INSERT;


Wenn es schon einen Datensatz mit ABC gibt, knallt der INSERT ja. Ich bin aber jetzt davon ausgegangne dass auf Grund des IF CODEUNIT.RUN Konstrukts dieser nicht an der Oberfläche erscheint sondern ein Eintrag im Error Log geschrieben wird. Ist aber nicht so. Greift IF CODEUNIT.RUN bei einem INSERT nicht? Ich bin gerade bisschen verwirrt und bin eigentlich davon ausgegangen dass das funktioniert und ich auch schon einige male so genutzt hätte.

Re: INSERT ERROR innerhalb von IF CODEUNIT.RUN

13. September 2019 12:58

Hattest du den Debugger an? Der zeigt den Fehler, der Client aber nicht. Falls es anders ist, wäre mir das auch neu...

Re: INSERT ERROR innerhalb von IF CODEUNIT.RUN

13. September 2019 13:24

Ne, der Debugger war aus. Der Fehler kommt ganz normal an der Oberfläche. Das oben genannte Beispiel ist natürlich nur die vereinfachte Form und es stecken natürlich noch mehr Zeilen Code dahinter. Um das aber wirklich verifizieren zu können habe ich das ganze jetzt nochmal in einer Minimalversion nachgebaut.

Codeunit 50000
Code:
OnRun()
IF NOT Codeunit50001.RUN THEN
  MESSAGE('Error.');


Codeunit 50001
Code:
OnRun()
CLEARLASTERROR;

lc_Brand.RESET;
lc_Brand.Code := 'TEMP';
lc_Brand.INSERT;

lc_Brand.RESET;
lc_Brand.Code := 'TEMP';
lc_Brand.INSERT;


Mehr nicht. Wenn ich jetzt die Codeunit 50000 aufrufe kommt im RTC die Fehlermeldung hoch dass die Marke TEMP bereits vorhanden ist. Anscheinend werden Primärschlüsselverletzungen bei einem IF CODEUNIT.RUN nicht abgefangen.

Re: INSERT ERROR innerhalb von IF CODEUNIT.RUN

13. September 2019 14:24

" Anscheinend werden Primärschlüsselverletzungen bei einem IF CODEUNIT.RUN nicht abgefangen."

nö - bei mir funktioniert es wie gewohnt - habe das gleiche auf ner 8.0 Demo DB probiert, um auszuschließen, dass es an NAV 2015 hängt.
Was für ein CU benutzt du?

Du rufst auch ganz ganz ganz ganz sicher die COD 50000 auf und nicht zufälligerweise die COD 50001?

Re: INSERT ERROR innerhalb von IF CODEUNIT.RUN

13. September 2019 14:35

Wir sind noch auf CU 4. Und Jupp, ich bin mir ziemlich sicher. Ich rufe die Codeunit direkt über C/SIDE auf. Ich bin echt ratlos. Aber Dank dir für deinen Test, das zeigt dass ich mit meiner Annahme dass das abgefangne werden müsste eigentlich richtig lag :D

Re: INSERT ERROR innerhalb von IF CODEUNIT.RUN

13. September 2019 15:15

Habe ich schonmal irgendwo (Link) gelesen.
Du kannst ja um das INSERT rum arbeiten. Entweder mit einem GET vorher, oder mit IF INSERT THEN;.

Re: INSERT ERROR innerhalb von IF CODEUNIT.RUN

13. September 2019 21:30

Das "IF NOT GET" ist "sauberer" als ein "IF NOT INSERT" - laut dem Blogbeitrag auf jeden Fall performanter.
https://cloudblogs.microsoft.com/dynamics365/no-audience/2014/12/16/understanding-error-code-85132273-in-connection-with-getlasterrorcode-statements/?source=nav