PDF aus SAP erstellen mittels SapScript

Geschrieben am Montag, 18. Februar 2008 um 19:05

Auch wenn SapScript veraltet ist, ist es mir – schon aus Gründen der Performance während der Bearbeitung – sympatischer als Smartforms. Die Erstellung eines PDF aus einem SapScript Formular ist mit den richtigen Funktionsbausteinen ganz leicht.

Zuerst die Datendefinition. Wir benötigen die Struktur ls_itcpo für die Steuerung des Verhaltens von SapScript. Die Tabellen lt_otf und lt_pdf werden für die Generierung des PDFs benötigt.

DATA: ls_itcpo TYPE itcpo
    , lt_otf   TYPE STANDARD TABLE OF itcoo
    , lt_pdf   TYPE STANDARD TABLE OF tline
    .

Bevor das Fomular prozessiert wird, müssen die Steuerparameter in der Struktur ls_itcpo angepasst werden. Der Parameter tdnoprev verhindert die Ausgabe am Bildschirm, während der Parameter tdgetotf dafür sorgt, dass der Funktionsbaustein zum Beenden der Formularprozessierung die generierten Daten im OTF-Format zurück gibt.

  ls_itcpo-tdnoprev = 'X'.
  ls_itcpo-tdgetotf = 'X'.

Nun folgt das eigentliche Aufrufen des Formulars, wobei dem Funktionsbaustein OPEN_FORM die Optionen übergeben und die Dialogsteuerung deaktiviert wird. Der Abfolge ist ganz normal: OPEN, START, evtl. WRITE, END und CLOSE. Beim Funktionsbaustein CLOSE_FORM kann nun allerdings eine Tabelle für die Rückgabe der OTF Daten übergeben werden.

  CALL FUNCTION 'OPEN_FORM'
    EXPORTING
      dialog  = space
      OPTIONS = ls_itcpo.
 
  CALL FUNCTION 'START_FORM'
    EXPORTING
      form = 'Z_TEST'.
 
  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      element = 'XYZ'.
 
  CALL FUNCTION 'END_FORM'.
 
  CALL FUNCTION 'CLOSE_FORM'
    TABLES
      otfdata = lt_otf.

Der Funktionsbaustein CONVERT_OTF erledigt den Rest und konvertiert die OTF Daten in binäre PDF Daten. Dem Funktionsbaustein muss das Format “PDF” explizit angegeben werden. Zudem werden die OTF Daten und ein Behälter für die PDF Daten benötigt. Die Grösse der generierten Daten sollte ebenfalls abgeholt werden, zumindest, wenn die generierten Daten auf dem Client gespeichert werden.

  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      format       = 'PDF'
    IMPORTING
      bin_filesize = lf_filesize
    TABLES
      otf          = lt_otf
      lines        = lt_pdf.

Für das lokale Abspeichern kann der Funktionsbaustein GUI_DOWNLOAD verwendet werden. Der Funktionsbaustein erwartet die binären Daten und einen Dateinamen. Der Type muss auf “BIN” gestellt und die Dateigrösse muss angegeben werden.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize         = lf_filesize
      filename             = 'C:\\temp\\test.pdf'
      filetype             = 'BIN'
    TABLES
      data_tab             = lt_pdf.

Copyright © 2001 - 2010, faebusoft.ch