20. Juli 2017 15:00
Hallo zusamen,
ich bin ein ziemlicher NAV-Neuling und stehe gerade vor der Aufgabe Daten in Nav2016 per XmlPort zu importieren.
Hintergrund: Wir führen gerade Nav2016 + Branchenlösung ein und kommen dabei von einer stark erweiterten Nav3 / Nav2009-Installation
Daher haben wir uns entschlossen, gerade die großen Datenmengen per XmlPort zu importieren.
Um mal vom ewigen Bücher-lesen weg zu kommen und eigene Erfahrungen zu sammeln, habe ich mir aktuell die Aufgabe gestellt unsere Debitoren nach Nav2016 zu importieren.
Die besondere Herausforderung dabei ist, dass in den Daten Fehler enthalten sein können, die das importieren verhindern. So haben wir z.B. in
GlobalDimension1Code den Wert
GmbH stehen, der aber noch nicht in der Tabelle
DimensionCode enthalten ist.
Meine Idee ist nun, alle solche Fehler vor dem tatsächlichen importieren in die Zieltabelle zu erkennen, in einer eigenen ImportFehler-Tabelle zu vermerken und dann den aktuellen Datensatz zu überspringen. Dann kann ich später die Fehler geballt bereinigen (wahlweise per Code oder durch Einträge in den entsprechenden Tabellen). In einem zweiten Anlauf müsste mein Xml dann vollständig importiert werden.
Um das zu erreichen habe ich mir im XmlPort ein lokales Boolean angelegt, in dem ich mir speichere, ob der aktuelle Datensatz übersprungen werden soll oder nicht.
- Code:
OnInitXMLport()
skipCurrRecord := FALSE;
Im OnAfterAssignField-Trigger will ich dann jeweils den Inhalt überprüfen und mit ggf. in meinem Boolean festhalten, ob der komplette Datensatz zu überspringen wäre.
- Code:
GlobalDimension1Code - Import::OnAfterAssignField()
IF NOT existDimensioncode("<Customer>"."Global Dimension 1 Code") THEN BEGIN
reportImportError(
"<Customer>"."No.",
'Global Dimenstion 1 Code',
"<Customer>"."Global Dimension 1 Code",
'Dimensionscode in Tabelle Dimension (349) nicht vorhanden');
skipCurrRecord := TRUE;
END
Jetzt fehlt mir aber der Trigger, an welchem ich mein Boolean abfragen könnte, um dann ggf. meinen Skip auszuführen.
Ich hatte eigentlich erwartet, dass nach dem Zuweisen der Felder der Trigger
<Customer> - Import::OnBeforeModifyRecord() oder vielleicht auch
<Customer> - Import::OnBeforeInsertRecord() gefeuert wird, aber tatsächlich laufe ich dann durch die OnValidate-Trigger der einzelnen Tabellen-Felder.
Hat mir vielleicht jemand einen Tipp, welcher Trigger hier am besten zu verwenden wäre?