Transaktion SFP - Logo einbinden
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Siehe Adobe Interactive Forms.
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.
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
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
XSTRING in einer Struktur
- Es kann das Datenelement "ET_XSTRING" verwendet werden.
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
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.
Bildfeld im LiveCycle Designer
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.
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.