INSERT ERROR innerhalb von IF CODEUNIT.RUN

Bild Microsoft Dynamics NAV 2015 (aka "NAV 8")

INSERT ERROR innerhalb von IF CODEUNIT.RUN

Beitragvon CBT » 13. September 2019 12:04

Hallo zusammen,

Ich habe, vereinfacht dargestellt, folgenden Code:

CU 50000
Code: Alles auswählen
IF NOT CU50001.RUN THEN
WriteErrorLog;


CU 50001
Code: Alles auswählen
...
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.
CBT
Microsoft Partner
Microsoft Partner
 
Beiträge: 105
Registriert: 22. März 2007 10:52

Re: INSERT ERROR innerhalb von IF CODEUNIT.RUN

Beitragvon SilverX » 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...
Cheers
Carsten


This post is my own opinion and does not necessarily reflect the opinion or view of my employer.
SilverX
Microsoft Partner
Microsoft Partner
 
Beiträge: 1252
Registriert: 16. September 2006 14:07
Realer Name: Carsten Scholling
Arbeitsort: GĂĽtersloh
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013+

Re: INSERT ERROR innerhalb von IF CODEUNIT.RUN

Beitragvon CBT » 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: Alles auswählen
OnRun()
IF NOT Codeunit50001.RUN THEN
  MESSAGE('Error.');


Codeunit 50001
Code: Alles auswählen
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.
CBT
Microsoft Partner
Microsoft Partner
 
Beiträge: 105
Registriert: 22. März 2007 10:52

Re: INSERT ERROR innerhalb von IF CODEUNIT.RUN

Beitragvon sweikelt » 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?
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC

Re: INSERT ERROR innerhalb von IF CODEUNIT.RUN

Beitragvon CBT » 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
CBT
Microsoft Partner
Microsoft Partner
 
Beiträge: 105
Registriert: 22. März 2007 10:52

Re: INSERT ERROR innerhalb von IF CODEUNIT.RUN

Beitragvon m_schneider » 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;.
MfG Michael
Benutzeravatar
m_schneider
 
Beiträge: 2141
Registriert: 20. Januar 2009 14:36
Realer Name: Michael Schneider
Arbeitsort: Treuen
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2017

Re: INSERT ERROR innerhalb von IF CODEUNIT.RUN

Beitragvon MarkusWeiland » 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
MarkusWeiland
 
Beiträge: 205
Registriert: 18. Januar 2017 10:01
Realer Name: Markus Weiland
Arbeitsort: SaarbrĂĽcken
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV


ZurĂĽck zu NAV 2015

Wer ist online?

Mitglieder in diesem Forum: Yandex [Bot] und 1 Gast