Bodo's Dynamics NAV und Business Central Blog

Bodo ist ein Dynamics NAV Urgestein. Er programmiert Navision seit DOS Zeiten und hat auch keine Scheu vor .NET und schon gar nicht vor Dynamics 365 oder Azure. Viele Neueinsteiger wurden von ihm in den letzten Jahren zu Entwicklern ausgebildet.

In diesem Blog veröffentlichen Bodo und andere Superhelden Interessantes aus der Welt von Dynamics 365 Business Central / Dynamics NAV und Microsoft Azure.

NAV 2009 – Copy & Paste und böse Zeichen in Text- und Code-Feldern

Verfasst von Bodo am Freitag, 12. August 2011

Tags: 2009, copy, paste, GDPdU, export, ascii

In den Zeiten zunehmender Beliebtheit von Copy & Paste möchte auch ich mich diesem Thema annehmen und auf ein Problem im Zusammenhang mit Dynamics NAV hinweisen.

Machen wir ein Beispiel. Besuchen Sie unser Impressum (http://www.comporsys.de/impressum) und kopieren den Firmennamen „Comporsys Hansa GmbH“ (Namen markieren und dann Strg+C drücken). Danach starten Sie den NAV 2009 Classic Client, legen einen neuen Debitor an und fügen den gerade kopierten Inhalt ein (Strg+V). Das Ergebnis sieht wie folgt aus:

Ich habe in der Abbildung oben extra den Namen markiert, damit das Problem offensichtlich wird. Beim Kopieren sind zwei nicht sichtbare Zeichen mit kopiert worden: Carriage Return (ASCII Code 13) und Line Feed (ASCII Code 10). Böse Zeichen.

Wenn Sie diesen Zeichen nicht entfernen, haben Sie den Salat, sobald Sie zum Beispiel die Daten als Textdatei exportieren. Dann haben Sie unerwartete Zeilenumbrüche in der Textdatei. Das führt unter anderem beim GDPdU-Export zu Programmfehlern, die sehr schwer zu lokalisieren sind.

Wie sieht die Lösung aus?

In Codeunit 1 finden Sie eine Funktion „MakeText“. Diese Funktion wird vom NAV Client aufgerufen, wenn Sie Zeichen in einem Text-Feld eingeben. Und hier ist die richtige Stelle einzugreifen, um die bösen Zeichen aus dem Text zu entfernen. Dazu rufen wir unsere eigene Funktion „RemoveBadChars“ auf. Siehe unten.

Der Quellcode der Funktion „RemoveBadChars“ sieht wie folgt aus. Neben den bereits genannten Zeichen Carriage Return und Line Feed entfernen wir auch noch das Tabulator-Zeichen.

PROCEDURE RemoveBadChars@1000000001(t@1000000000 : Text[250]) : Text[250];
  VAR
    Ch@1000000001 : Text[3];
  BEGIN
    Ch[1] := 9;   // TAB
    Ch[2] := 10;  // LF
    Ch[3] := 13;  // CR
    EXIT(DELCHR(t, '=', Ch));
  END;

Und wie sieht die Lösung für Code-Felder aus? Eine Funktion „MakeCode“ gibt es in Codeunit 1 nicht. Sie können diese aber mit der ID 109 erstellen. Diese Funktion wird der NAV Client dann aufrufen.

PROCEDURE MakeCode@109(VAR CodeText@1000000000 : Text[250]) : Integer;
  BEGIN
    CodeText := RemoveBadChars(CodeText);
    EXIT(0);
  END;

PS: Der NAV 2009 Role Tailored Client kennt das Problem der bösen Zeichen nicht.


Mitglied der Dynamics NAV
Community

Microsoft Dynamics NAV community Comporsys 365 - Cloud ERP powered by Dynamics NAV
Comporsys 365 - Cloud ERP
powered by Dynamics NAV

Tag Cloud


Kontakt

Comporsys Hansa GmbH
Schulauer Moorweg 25
22880 Wedel, Deutschland

Tel. +49 (0)4103 12117 - 0
Fax +49 (0)4103 12117 - 29
E-Mail: info@comporsys.de