Langtexte lesen und formatieren
Written at Freitag, 11. September 2009 on 15:07
Immer wieder werden im SAP Langtexte benötigt, die einfach über den Funktionsbaustein READ_TEXT gelesen werden. Dieser Baustein gibt aber gar keinen Plaintext zurück, sondern sog. ITF Text, welcher von SAPScript verwendet wird. In der ersten Spalte steht somit die entsprechenden Absatzformatierung, welche steuert, wo eine neue Zeile bzw. ein neuer Absatz beginnt. Zudem hängt an der Text-Id die Zeilenbreite (Einsehbar über Transaktion SE75), welche hier streng berücksichtigt wird. Somit erhalten wir im Idealfall bereits einen Text mit 132 Zeichen Zeilenbreite, im Normalfall wird dies jedoch nur ein Text mit einer Breite von 72 Zeichen sein und unter Umständen beträgt die Breite aber auch nur 40 Zeichen.
Um nun die Zeilenbreite variabel zu gestalten und die Absätze korrekt zu interpretieren habe ich oftmals selber eine Lösung gestrickt, was jedoch sehr umständlich ist. Die Suche nach einem geeigneten Baustein hat sich jedoch als sehr schwierig herausgestellt, da es keine Baustein gibt, der diese ITF Daten in der Breite flexibel macht. Mehr durch einen Zufall bin ich darauf gestossen, dass der Weg zum Ziel über eine Konvertierung läuft, nämlich der von ITF nach ASCII (darauf muss man auch erst einmal kommen).
Um nun aus diesem ITF Text einen reinen ASCII Text zu erstellen, der die Zeilenumbrüche aus dem Absatzformat berücksichtigt existiert der Baustein CONVERT_ITF_TO_ASCII, der zugleich die Angabe einer neuen Zeilenbreite beinhaltet – allerdings ebenfalls auf 132 Zeichen beschränkt, was jedoch normalerweise ausreicht. Damit ist das gesamte Problem einfach und unumständlich gelöst:
data: lt_text_itf type tlinetab , lt_text_ascii type tdtab_c132 . call function 'READ_TEXT' exporting id = 'MPO' language = sy-langu name = '600M........' object = 'BOM' tables lines = lt_text exceptions others = 1. check sy-subrc = 0. call function 'CONVERT_ITF_TO_ASCII' exporting formatwidth = 110 importing c_datatab = lt_text_ascii tables itf_lines = lt_text_itf exceptions others = 1.