[Gelöst] XML Port Insert Trigger abschalten

Bild Microsoft Dynamics 365 Business Central (On-Premises Version)
Forumsregeln
Impressum • Community-Knigge • Nutzungsbedingungen • Datenschutzrichtlinie

Bitte unbedingt im Titel angeben, auf welche Version (BC13, BC14, BC15, ...) sich eure Frage bezieht!

[Gelöst] XML Port Insert Trigger abschalten

Beitragvon FrausDo » 20. September 2019 10:39

Hallo,

ich versuche gerade Kopf und Zeilen Daten mit einem XML Port ins NAV zu ĂĽbertragen.
Beim Insert der Zeilen wird der Insert Trigger durchlaufen.
Dies verursacht ein Problem da er dabei prĂĽft ob die Kopfdaten schon da sind.
Obwohl der Kopf natĂĽrlich vorher mit dem XML Port eingelesen worden ist, scheint er noch nicht in der DB zur VerfĂĽgung zu stehen und es kommt zu dem Fehler.

Kann ich da etwa am XML Port einstellen, das der Insert Trigger nicht mehr durchlaufen wird ?

GruĂź Frank
Zuletzt geändert von FrausDo am 20. September 2019 11:46, insgesamt 1-mal geändert.
FrausDo
 
Beiträge: 139
Registriert: 29. Juni 2015 10:16
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2009 / 2017

Re: XML Port Insert Trigger abschalten

Beitragvon DanielF » 20. September 2019 11:13

Entweder Commit nach dem Kopf oder PrĂĽfen bei der Line fĂĽr die Zeile in den Properties DefaultFieldsValidation auf False zu setzen.

Kein Gewähr.
Benutzeravatar
DanielF
Microsoft Partner
Microsoft Partner
 
Beiträge: 110
Registriert: 27. April 2015 16:03
Realer Name: Daniel Forster
Arbeitsort: Bodensee
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2015

Re: XML Port Insert Trigger abschalten

Beitragvon Ted » 20. September 2019 11:20

FrausDo hat geschrieben:Obwohl der Kopf natĂĽrlich vorher mit dem XML Port eingelesen worden ist, scheint er noch nicht in der DB zur VerfĂĽgung zu stehen und es kommt zu dem Fehler.


Bist du dir damit sicher?
Wenn ich mich richtig erinnere arbeitet ein XML Port (bei XML Files) so:
Code: Alles auswählen
<header>
   <docNo>doc1</docNo>
   <lines>
      <line>
         <no>line1</no>
      </line>
   </lines>
</header>


Code: Alles auswählen
header.docNo := 'doc1';
repeat
   line.no = 'line1';
   line.insert(true);
until lines.next() = 0;
header.insert(true);


Ich empfehle dir temporäre Tabellen und sorge selbst dafür wann du nen Insert machst
GruĂź
Ted
Ted
 
Beiträge: 328
Registriert: 18. September 2014 11:16
Realer Name: Dennis Reinecke
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2015+

Re: XML Port Insert Trigger abschalten

Beitragvon FrausDo » 20. September 2019 11:45

Commit ist böse ! Punkt !

Nach deinem Post habe ich mir gedacht, geht ja auch anders.

Also werden erst alle Kopfdaten exportiert.
Dann alle Zeilendaten.

Und genauso eingespielt.

Das löst das akute Problem, jedoch nicht, dass es ohne Trigger läuft.

DanielF hat geschrieben:Entweder Commit nach dem Kopf oder PrĂĽfen bei der Line fĂĽr die Zeile in den Properties DefaultFieldsValidation auf False zu setzen.


Das Property umzusetzen bringt in dem Falle nichts, leider!

GruĂź Frank
FrausDo
 
Beiträge: 139
Registriert: 29. Juni 2015 10:16
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2009 / 2017

Re: [Gelöst] XML Port Insert Trigger abschalten

Beitragvon SilverX » 20. September 2019 13:44

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: [Gelöst] XML Port Insert Trigger abschalten

Beitragvon sweikelt » 20. September 2019 17:31

FrausDo hat geschrieben:Commit ist böse ! Punkt !

Also ein commit ist nicht per se böse! Punkt !
In deinem Fall aber nicht notwendig.

In den Standard XML-Imports funktioniert es doch auch normal - also mĂĽsstest du anscheinend etwas anders gemacht haben, als der Standard.

Der Satz :
FrausDo hat geschrieben:Nach deinem Post habe ich mir gedacht, geht ja auch anders.

klingt hoffentlich schlimmer, als er gemeint war!
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: XML Port Insert Trigger abschalten

Beitragvon enh » 20. September 2019 18:07

Ted hat geschrieben:Ich empfehle dir temporäre Tabellen und sorge selbst dafür wann du nen Insert machst

Ich unterstĂĽtze diese Empfehlung. Ich importiere i. d. R. nicht direkt in die NAV-Ziel-Tabelle sondern erstmal nur die Werte und mache dann alles im Code per Zuweisung usw. Dann habe ich die volle Kontrolle.
enh
 
Beiträge: 2330
Registriert: 5. Februar 2014 15:42
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: [Gelöst] XML Port Insert Trigger abschalten

Beitragvon FrausDo » 23. September 2019 08:52

Hallo,

die Temporären Tabellen lösen dass Problem nicht, dass der Trigger nicht durchlaufen wird.
Ich Exportiere nun erst die alle Kopfdaten, dann die dazugehörigen Zeilendaten.

Als Export wähle ich XML und nicht csv.

Dann klappt alles und auch das es nur einen Commit gibt.

Den Tipp von SilverX werde ich einmal testen.

GruĂź Frank
FrausDo
 
Beiträge: 139
Registriert: 29. Juni 2015 10:16
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2009 / 2017

Re: [Gelöst] XML Port Insert Trigger abschalten

Beitragvon Ted » 23. September 2019 10:05

FrausDo hat geschrieben:die Temporären Tabellen lösen dass Problem nicht, dass der Trigger nicht durchlaufen wird.


Aber du kannst nun per Code selbst dafĂĽr sorgen das der Header-Insert vor dem ersten Zeilen-Insert gemacht wird.
Wenn du im "OnAfterInitRecord" der lines aus dem TmpHeader nen richtigen Header (darfst du natürlich nur einmal pro Header machen) machst, sollte es dich nicht mehr stören das ein "Insert(true)" auf Lineebene ausgeführt wird.

Der Code wäre dadurch in etwa folgender:
Code: Alles auswählen
headerTmp.docNo := 'doc1';
repeat
   if erstelinevondemheader then begin
    header.copy(headerTmp);
    header.insert(true);
   end;

   line.no = 'line1';
   line.insert(true);
until lines.next() = 0;
headerTmp.insert(true);
GruĂź
Ted
Ted
 
Beiträge: 328
Registriert: 18. September 2014 11:16
Realer Name: Dennis Reinecke
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2015+


ZurĂĽck zu 365 Business Central (On-Premises)

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Google [Bot] und 1 Gast