Einbinden einer GOS Grafik in ein SAP Adobe Formular
In vielen SAP Objekten können die generischen Objektdienste (GOS) genutzt werden, um zusätzliche Informationen mit dem Objekt zu verknüpfen. In vielen Fällen werden Dateien (Wordx-Dokumente, Excel-Sheets) , u.a. auch Grafiken zum Objekt hochgeladen.
Im folgenden wird beschrieben, wie eine Grafik (BMP, JPG, PNG, …) zu einem SAP Objekt gelesen und der binäre Inhalt an das Formular weitergegeben wird um dort dann angezeigt zu werden.
Problemstellung
Eine Grafik aus dem Kundenstamm, hier im speziellen eine Unterschrift, soll in einem SAP Adobe Formular zum Kundenauftrag angezeigt werden. Die Unterschrift selbst wurde als Anlage zum generischen Objektdienst des Kundenstamms hochgeladen. dabei gilt die Konvention, dass der Dateiname der Unterschrift immer gleich der Kundennummer einschließlich führender Nullen ist.
Schritte zum Einbinden der GOS Grafik im SAP Adobe Formular
Schritt 1) Erweitern der Struktur in der Formular-Schnittstelle
- Struktur wird um ein Feld vom typ XSTRING (bzw. RAWDATA) erweitert
- hier wird der Inhalt der Grafikdatei als binäres Objekt an das Formular übergeben
Schritt 2) Erweitern des Formularkontexts um eine Grafik
- Erweiterung des Formularkontexts um einen Grafikknoten vom type Grafikinhalt
Schritt 3) Hinzufügen eines Bildfeldes im Formularlayout
- Einbinden der Unterschrift als Bildfeld im Formularlayout
Schritt 4) Anlegen eines Funktionsbausteins zum Lesen der GOS Grafik
- Übergabe der Kundennummer
- Rückgabe des Dateiinhalts in einem Feld vom Typ XSTRING
SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L0S31 { font-style: italic; color: #808080; } .L0S32 { color: #3399FF; } .L0S33 { color: #4DA619; } .L0S52 { color: #0000FF; } .L0S55 { color: #800080; } .L0S70 { color: #808080; } FUNCTION z_le_get_gos_attachment. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(IV_KUNNR) TYPE KUNNR OPTIONAL *" EXPORTING *" VALUE(EV_GOS_ATTACHMENT) TYPE XSTRING *"---------------------------------------------------------------------- * Deklarationen ------------------------------------------------------ * DATA: lt_object TYPE sibflporbt, ls_object LIKE LINE OF lt_object, lt_links_a TYPE obl_t_link, lt_links_b TYPE obl_t_link, lt_links TYPE obl_t_link, ls_links LIKE LINE OF lt_links_a, lv_obj_descr type sofolenti1-obj_descr, lv_doc_id TYPE sofolenti1-doc_id, lt_obj_head TYPE TABLE OF solisti1, lt_obj_cont TYPE TABLE OF solisti1, ls_obj_cont TYPE solisti1, lt_cont_hex TYPE TABLE OF solix, lt_att_list TYPE TABLE OF soattlsti1, ls_doc_data TYPE sofolenti1, lv_file_cont TYPE xstring, lv_file_len TYPE i, crlf TYPE string, itab TYPE TABLE OF string, itab2 TYPE TABLE OF string, lv_string TYPE string. FIELD-SYMBOLS: <f> TYPE any. * Initialisieren ----------------------------------------------------- * CLEAR: ev_gos_attachment. * Anlagen zum Objekt ermitteln --------------------------------------- * ls_object-typeid = 'BUS2088'. "Serviceauftrag ls_object-typeid = 'KNA1'. "Debitor master ls_object-catid = 'BO'. ls_object-instid = iv_kunnr. * 1) Ermitteln der binären Anhänge ----------------------------------- * TRY. " Read the links for business object. CALL METHOD cl_binary_relation=>read_links_of_binrel EXPORTING is_object = ls_object ip_relation = 'ATTA' * IP_ROLE = * IP_PROPNAM = * IP_NO_BUFFER = SPACE IMPORTING et_links = lt_links. CATCH cx_obl_parameter_error. CATCH cx_obl_internal_error . CATCH cx_obl_model_error . ENDTRY. LOOP AT lt_links INTO ls_links. MOVE: ls_links-instid_b TO lv_doc_id, iv_kunnr to lv_obj_descr. CALL FUNCTION 'SO_DOCUMENT_READ_API1' EXPORTING document_id = lv_doc_id * FILTER = 'X ' IMPORTING document_data = ls_doc_data TABLES object_header = lt_obj_head object_content = lt_obj_cont attachment_list = lt_att_list contents_hex = lt_cont_hex EXCEPTIONS document_id_not_exist = 1 operation_no_authorization = 2 x_error = 3 OTHERS = 4. check ls_doc_data-obj_descr = lv_obj_descr. "Convert to XString lv_file_len = ls_doc_data-doc_size. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING input_length = lv_file_len IMPORTING buffer = lv_file_cont TABLES binary_tab = lt_cont_hex EXCEPTIONS failed = 1 OTHERS = 2. CHECK sy-subrc = 0. ev_gos_attachment = lv_file_cont. exit. ENDLOOP. ENDFUNCTION.
Der Funktionsbaustein kann nun in das Druckprogramm eingebunden werden, um das Feld vom Typ XSTRING zur Übergabe der datei an das Formular zu füllen.
Weitere Informationen