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









