GOS Grafik in SAP Adobe Form

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.

GOS Graik auf SAP Adobe Form

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
SAP GOS Struktur

Schritt 2) Erweitern des Formularkontexts um eine Grafik

  • Erweiterung des Formularkontexts um einen Grafikknoten vom type Grafikinhalt
SAP Formularkontext

Schritt 3) Hinzufügen eines Bildfeldes im Formularlayout

  • Einbinden der Unterschrift als Bildfeld im Formularlayout
SAP 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 ------------------------------------------------------ *
   DATAlt_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 ----------------------------------------------------- *
   CLEARev_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.
 
     MOVEls_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

SAP Formulare zum Festpreis

SAP Formularentwicklung

Spezialthemen zu SAP Formularen