7. Juni 2017 10:41
Guten Morgen,
meine Aufgabe ist es einen 2009er Dataport in einen 2016er XMLport umzuwandeln, um CSV-Dateien zu importieren.
Dafür habe ich den XMLport auf "Variabler Text" gestellt und den Seperator gesetzt. Die Daten sollen in die Customer Table importiert werden, allerdings nicht vollständig.
Und zwar gibt es Spalten, die nicht verwendet werden, aber natürlich trotzdem geladen werden sollen, um die Struktur beizubehalten. Im Dataport war das mit einem Array gelöst. So konnte man einfach alles in einen TextBuffer_[X] packen und im Customer OnAfterImport nutzen (neben anderen Feldern).
Ich bin mir aber nicht sicher wie ich das am besten im XMLport nachbauen kann. Bisher ist es mir nicht gelungen dort ein Array zu nutzen und über Google finde ich leider auch nichts dazu, wie man am besten einen Dataport zum XMLport umwandelt - außer ihn neuzubauen (da es mein erster ist, ist das nicht von Vorteil). Ich habe bereits versucht im Standard was mitzunehmen, aber das hilft mir bisher auch nicht weiter.
Sollte ich eine Mischung aus Textelementen und Fields nehmen oder lässt sich das Array doch nutzen? (EDIT: Das Array ist ja unnötig, außer dass ich da nicht durchiteriern kann - habe aktuell nur Textelemente und jeden Buffer einzeln)
Benötige ich die globalen Variablen oder reichen die Textelemente & Fields?
Ist der adäquate Ersatz vom OnAfterImport Trigger nun OnAfterInitRecord oder doch ein anderer?
Im Dataport wurden alle Elemente von Ansi zu Ascii umgewandelt - das sollte durch jetzige UTF8 Unterstützung ja wegfallen oder?
#Edit
Also ich habe nun versucht alles über Textelemente zu laden.. Ergebnis: Nichts. Kann es leider auch nicht debuggen. Ich weiß jetzt nicht warum überhaupt nichts eingelesen wird.
Ich muss sagen, dass NAV zu lernen echt ein ganzer Brocken ist, der jahrelange Übung erfordert.. Respekt an euch.
7. Juni 2017 17:27
Ich habe einen Import einer CSV Datei per XMLport so gelöst dass ich alle Spalten so definiert habe:
Node Type = Attribute
Source Type = Text
Im Trigger Import::OnBeforeInsertRecord() weise ich die Werte dann den passenden Feldern zu, validiere, mache sonstige Logik. Das funktioniert.
Vielleicht solltest du auch deine XMLport Properties mal prüfen.
TextEncoding = WINDOWS
Format = Variable Text
FieldDelimiter = <">
FieldSeparator = ;
7. Juni 2017 18:40
bennyb hat geschrieben:Im Dataport wurden alle Elemente von Ansi zu Ascii umgewandelt - das sollte durch jetzige UTF8 Unterstützung ja wegfallen oder?
Wegfallen nicht, wird aber anders verarbeitet, siehe
hier. Die aktuellen Versionen haben diese alten ANSI2ASCII-Funktionen auch
gar nicht mehr.
Dazu wäre also die tatsächliche aktuelle Dateikodierung zu klären. UTF-8 im Bereich der Sonderzeichen nicht identisch mit ANSI (= Codepage 1252), die darf also nur verwendet werden wenn es wirklich eine Unicodeabildung ist, ansonsten wie schon beschrieben "Windows".
9. November 2017 16:19
The 5 must-know facts about upgrading Microsoft Dynamics NAV Dataports to XMLportsDieser Partner bietet auch ein Tool mit kostenloser Testmöglichkeit für die Konvertierung an.