Transaktion SFP - Logo einbinden

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

In einem Formular werden sehr häufig ein oder mehrere Logos ausgegeben.

Hier wird beschrieben, wie wie dem Formular das Logo (Bilddatei) als Datenstrom übergeben wird und dann in der Transaktion SFP das Logo als Grafikinhalt eingebunden wird. Die Grafikdatei wurde in der Transaktion SE78 hochgeladen vom Frontend.

Laden Bilddatei im Druckprogramm und globale Methode

  • Eleganter als in jedes Formular mit einem Logo das Coding in die Schnittstelle einzufügen, ist die Nutzung einer globalen Methode, die aus dem jeweiligen Druckprogramm aufgerufen wird.
  • Durch den Verwendungsnachweis der Methode sieht man welche Formulare/Druckprogramm diese Routine nutzen und welche nicht.
  • Der Aufruf der Methode in der SFP-Schnittstelle hat den großen Nachteil, dass der Verwendungsnachweis der Methode diese Verwendung nicht findet. Das ist gefährlich, weil man dann eventuell die kundeneigene globale Methode umbenennt oder löscht, und in diesem Moment kein Fehlerhinweis erscheint und erst bei der nächsten Ausführung des Formulars (möglicherweise im Produktivsystem) die Formularausgabe mit einem Shortdump abbrechen wird. Man sollte daher in der SFP-Schnittstelle vermeiden kundeneigene Funktionsbausteine oder Methoden aufzurufen und die Methode oder Funktionsbaustein besser im Druckprogramm aufrufen.

Grafik-Datei in SE78

In SE78 wurde die Datei Z_LOGO256.bmp hochgeladen. Als Name in SE78 wurde "Z_LOGO256" gewählt.

Logomethode2.JPG

Aufruf Methode im Druckprogramm

CALL METHOD z_cl_formulare=>fill_logo
   EXPORTING
     iv_grafikname_se78 = 'Z_LOGO256'
     iv_color           = true
   IMPORTING
     ev_logo            = ls_lieferschein-logo.

Globale Methode

Logomethode1.JPG

  METHOD fill_logo.

    DATA:
      lv_object TYPE tdobjectgr,
      lv_name   TYPE tdobname,
      lv_id     TYPE tdidgr,
      lv_btype  TYPE tdbtype.

   "CLEAR: ev_logo.

    lv_object = 'GRAPHICS'.
    lv_id     = 'BMAP'.

    CASE iv_color.
      WHEN space.
        lv_btype = 'BMON'.  "Schwarz-Weiß
      WHEN abap_true.
        lv_btype = 'BCOL'.  "Farbig (Standard)
    ENDCASE.

*   Grafik aus BDS [[Transaktion SE78 (Verwaltung von Formulargrafiken) und Logos|SE78] als BMP lesen
    CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp
      EXPORTING
        p_object       = lv_object
        p_name         = iv_grafikname_se78   "Standard-Logo 'Z_LOGO256'
        p_id           = lv_id
        p_btype        = lv_btype
      RECEIVING
        p_bmp          = ev_logo
      EXCEPTIONS
        not_found      = 1
        internal_error = 2
        OTHERS         = 3.

  ENDMETHOD.

Laden Bilddatei in Transaktion SFP-Schnittstelle

Globale Daten

  • LOGO_BMP TYPE XSTRING

Coding Initialisierung

  • Hier hängt das Logo von der Verkaufsorganisation ab.
  • Es wird eine Form-Routine verwendet. Der Aufruf einer Methode oder Funktionsbausteins ist natürlich auch möglich, aber hat den oben besprochen Nachteil, dass der Verwendungsnachweis in der Methode bzw. Funktionsbaustein die Verwendung in der SFP-Schnittstelle nicht findet.
PERFORM read_picture_bds 
  USING   gbs_head-vkorg
 CHANGING logo_bmp
          lv_retcode.
*&---------------------------------------------------------------------*
*&      Form  read_picture_bds
*&---------------------------------------------------------------------*
*       Grafikdatei aus BDS als BMP lesen
*----------------------------------------------------------------------*
*      IV_VKORG   Verkaufsorganisation
*      CS_PIC_BMP Binärdaten des Bild als BMP
*      CV_RETCODE Returncode
*----------------------------------------------------------------------*
FORM read_picture_bds USING value(iv_vkorg) TYPE vkorg
                   CHANGING cs_pic_bmp TYPE xstring
                            cv_retcode TYPE sysubrc.

  DATA: lv_object TYPE tdobjectgr,
        lv_name   TYPE tdobname,
        lv_id     TYPE tdidgr,
        lv_btype  TYPE tdbtype.

  CLEAR: cs_pic_bmp.

  lv_object = 'GRAPHICS'.
  lv_id     = 'BMAP'.
  lv_btype  = 'BCOL'.  "(farbige Grafik) für Schwarz-Weiß BMON (Domäne TDBTYPE)
  CONCATENATE 'Z_LOGO_' 
               iv_vkorg 
               INTO lv_name.

* Grafik aus BDS (Transaktion SE78) als BMP lesen
  CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp
    EXPORTING
      p_object       = lv_object
      p_name         = lv_name
      p_id           = lv_id
      p_btype        = lv_btype
    RECEIVING
      p_bmp          = cs_pic_bmp
    EXCEPTIONS
      not_found      = 1
      internal_error = 2
      OTHERS         = 3.
  cv_retcode = sy-subrc.
ENDFORM.                    "read_picture_bds

Transaktion SFP - Formular

Kontext

  • Anlage eines Elements vom Typ "Grafik"
    • Grafiktyp = "Grafikinhalt"
    • Feld = Feldinhalt (Bindung auf LOGO_BMP)
    • MIME-Typ = 'image/bmp' (Kleinschreibung)

Adobe LiveCycle Designer

  • Einfügen eines Objektes vom Typ "Bildfeld"
  • Binding auf das Grafikobjekt vom Kontext

Kontext in Transaktion SFP

Logomethode6.JPG

Im generierten Funktionsbaustein des Formulars erfolgt die Grafikausgabe mit dem Funktionsbaustein "FPCOMP_WRITE_GRAPHIC_DATA".

CALL FUNCTION 'FPCOMP_WRITE_GRAPHIC_DATA'
 EXPORTING
   I_NAME         = 'LOGO'
   I_DATA         = IS_LAUFZETTEL-LOGO
   I_MIME         = 'image/bmp'
 EXCEPTIONS
   USAGE_ERROR    = 1
   SYSTEM_ERROR   = 2
   INTERNAL_ERROR = 3
   OTHERS         = 4.

Logomethode7.JPG

Bildfeld im LiveCycle Designer

Logomethode4.JPG

Logomethode5.JPG

Bilddaten einbetten

  • Grafiken können in das Formular eingebettet werden. Der Inhalt der Grafik wird komplett in das Formular kopiert. Die URL muss danach nicht mehr gefüllt sein.
  • Dieses Vorgehen ist jedoch nicht optimal, da dann möglicherweise die Originaldatei verloren gehen kann (und nicht in SE78 hochgeladen sein muss) und später bei einem neuen Formular die Originaldatei nicht mehr zur Verfügung steht oder auch die Aktualisierung des Logos in allen Formularen erschwert wird oder auch das flexible Füllen eines Logos in Abhängigkeit von einer Organisationseinheit nur schwer möglich ist.

AdobeBilder2.JPG

Grafikausgabe per Scripting ausblenden

  • Die Ausgabe kann per Scripting unterbunden werden, bzw. die Grafik/entsprechende Teilformular auf "hidden" oder "invisible" gesetzt werden.
  • Hier wurde das Feld KSCHL genutzt für die Abfrage, aber seine Präsenz auf "unsichtbar" (invisible) gesetzt, damit sein Wert nicht im Formulardruck erscheint. In Abhängigkeit der Nachrichtenart ZALC wird das Teilformular „scr_HEADER“ ausgeblendet und somit die Grafik „HEADER“ nicht ausgegebeben.

AdobeBilder3.JPG

Maße und Auflösung von Grafiken in Formularen

Web-Links