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.
faebu | Allgemein

Comments

No comments yet

Write a comment

Copyright © 2001 - 2010, faebusoft.ch