web
You’re offline. This is a read only version of the page.
close
Skip to main content
Community site session details

Community site session details

Session Id :

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

Community Member Profile Picture Community Member

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.

Comments

*This post is locked for comments