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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
<!--StartFragment --> 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; } <span class="L0S52">FUNCTION </span>z_le_get_gos_attachment<span class="L0S55">.</span> <span class="L0S31">*"----------------------------------------------------------------------</span> <span class="L0S31">*"*"Lokale Schnittstelle:</span> <span class="L0S31">*" IMPORTING</span> <span class="L0S31">*" VALUE(IV_KUNNR) TYPE KUNNR OPTIONAL</span> <span class="L0S31">*" EXPORTING</span> <span class="L0S31">*" VALUE(EV_GOS_ATTACHMENT) TYPE XSTRING</span> <span class="L0S31">*"----------------------------------------------------------------------</span> <span class="L0S31">* Deklarationen ------------------------------------------------------ *</span> <span class="L0S52">DATA</span><span class="L0S55">: </span>lt_object <span class="L0S52">TYPE </span>sibflporbt<span class="L0S55">,</span> ls_object <span class="L0S52">LIKE </span><span class="L0S52">LINE </span><span class="L0S52">OF </span>lt_object<span class="L0S55">,</span> lt_links_a <span class="L0S52">TYPE </span>obl_t_link<span class="L0S55">,</span> lt_links_b <span class="L0S52">TYPE </span>obl_t_link<span class="L0S55">,</span> lt_links <span class="L0S52">TYPE </span>obl_t_link<span class="L0S55">,</span> ls_links <span class="L0S52">LIKE </span><span class="L0S52">LINE </span><span class="L0S52">OF </span>lt_links_a<span class="L0S55">,</span> lv_obj_descr <span class="L0S52">type </span>sofolenti1<span class="L0S70">-</span>obj_descr<span class="L0S55">,</span> lv_doc_id <span class="L0S52">TYPE </span>sofolenti1<span class="L0S70">-</span>doc_id<span class="L0S55">,</span> lt_obj_head <span class="L0S52">TYPE </span><span class="L0S52">TABLE </span><span class="L0S52">OF </span>solisti1<span class="L0S55">,</span> lt_obj_cont <span class="L0S52">TYPE </span><span class="L0S52">TABLE </span><span class="L0S52">OF </span>solisti1<span class="L0S55">,</span> ls_obj_cont <span class="L0S52">TYPE </span>solisti1<span class="L0S55">,</span> lt_cont_hex <span class="L0S52">TYPE </span><span class="L0S52">TABLE </span><span class="L0S52">OF </span>solix<span class="L0S55">,</span> lt_att_list <span class="L0S52">TYPE </span><span class="L0S52">TABLE </span><span class="L0S52">OF </span>soattlsti1<span class="L0S55">,</span> ls_doc_data <span class="L0S52">TYPE </span>sofolenti1<span class="L0S55">,</span> lv_file_cont <span class="L0S52">TYPE </span>xstring<span class="L0S55">,</span> lv_file_len <span class="L0S52">TYPE </span><span class="L0S52">i</span><span class="L0S55">,</span> crlf <span class="L0S52">TYPE </span>string<span class="L0S55">,</span> itab <span class="L0S52">TYPE </span><span class="L0S52">TABLE </span><span class="L0S52">OF </span>string<span class="L0S55">,</span> itab2 <span class="L0S52">TYPE </span><span class="L0S52">TABLE </span><span class="L0S52">OF </span>string<span class="L0S55">,</span> lv_string <span class="L0S52">TYPE </span>string<span class="L0S55">.</span> <span class="L0S52">FIELD-SYMBOLS</span><span class="L0S55">: </span><f> <span class="L0S52">TYPE </span><span class="L0S52">any</span><span class="L0S55">.</span> <span class="L0S31">* Initialisieren ----------------------------------------------------- *</span> <span class="L0S52">CLEAR</span><span class="L0S55">: </span>ev_gos_attachment<span class="L0S55">.</span> <span class="L0S31">* Anlagen zum Objekt ermitteln --------------------------------------- *</span> ls_object<span class="L0S70">-</span>typeid <span class="L0S55">= </span><span class="L0S33">'BUS2088'</span><span class="L0S55">. </span><span class="L0S31">"Serviceauftrag</span> ls_object<span class="L0S70">-</span>typeid <span class="L0S55">= </span><span class="L0S33">'KNA1'</span><span class="L0S55">. </span><span class="L0S31">"Debitor master</span> ls_object<span class="L0S70">-</span>catid <span class="L0S55">= </span><span class="L0S33">'BO'</span><span class="L0S55">.</span> ls_object<span class="L0S70">-</span>instid <span class="L0S55">= </span>iv_kunnr<span class="L0S55">.</span> <span class="L0S31">* 1) Ermitteln der binären Anhänge ----------------------------------- *</span> <span class="L0S52">TRY</span><span class="L0S55">.</span> <span class="L0S31">" Read the links for business object.</span> <span class="L0S52">CALL </span><span class="L0S52">METHOD </span>cl_binary_relation<span class="L0S70">=></span>read_links_of_binrel <span class="L0S52">EXPORTING</span> is_object <span class="L0S55">= </span>ls_object ip_relation <span class="L0S55">= </span><span class="L0S33">'ATTA'</span> <span class="L0S31">* IP_ROLE =</span> <span class="L0S31">* IP_PROPNAM =</span> <span class="L0S31">* IP_NO_BUFFER = SPACE</span> <span class="L0S52">IMPORTING</span> et_links <span class="L0S55">= </span>lt_links<span class="L0S55">.</span> <span class="L0S52">CATCH </span>cx_obl_parameter_error<span class="L0S55">.</span> <span class="L0S52">CATCH </span>cx_obl_internal_error <span class="L0S55">.</span> <span class="L0S52">CATCH </span>cx_obl_model_error <span class="L0S55">.</span> <span class="L0S52">ENDTRY</span><span class="L0S55">.</span> <span class="L0S52">LOOP </span><span class="L0S52">AT </span>lt_links <span class="L0S52">INTO </span>ls_links<span class="L0S55">.</span> <span class="L0S52">MOVE</span><span class="L0S55">: </span>ls_links<span class="L0S70">-</span>instid_b <span class="L0S52">TO </span>lv_doc_id<span class="L0S55">,</span> iv_kunnr <span class="L0S52">to </span>lv_obj_descr<span class="L0S55">.</span> <span class="L0S52">CALL </span><span class="L0S52">FUNCTION </span><span class="L0S33">'SO_DOCUMENT_READ_API1'</span> <span class="L0S52">EXPORTING</span> document_id <span class="L0S55">= </span>lv_doc_id <span class="L0S31">* FILTER = 'X '</span> <span class="L0S52">IMPORTING</span> document_data <span class="L0S55">= </span>ls_doc_data <span class="L0S52">TABLES</span> object_header <span class="L0S55">= </span>lt_obj_head object_content <span class="L0S55">= </span>lt_obj_cont attachment_list <span class="L0S55">= </span>lt_att_list contents_hex <span class="L0S55">= </span>lt_cont_hex <span class="L0S52">EXCEPTIONS</span> document_id_not_exist <span class="L0S55">= </span><span class="L0S32">1</span> operation_no_authorization <span class="L0S55">= </span><span class="L0S32">2</span> x_error <span class="L0S55">= </span><span class="L0S32">3</span> <span class="L0S52">OTHERS </span><span class="L0S55">= </span><span class="L0S32">4</span><span class="L0S55">.</span> <span class="L0S52">check </span>ls_doc_data<span class="L0S70">-</span>obj_descr <span class="L0S55">= </span>lv_obj_descr<span class="L0S55">.</span> <span class="L0S31">"Convert to XString</span> lv_file_len <span class="L0S55">= </span>ls_doc_data<span class="L0S70">-</span>doc_size<span class="L0S55">.</span> <span class="L0S52">CALL </span><span class="L0S52">FUNCTION </span><span class="L0S33">'SCMS_BINARY_TO_XSTRING'</span> <span class="L0S52">EXPORTING</span> input_length <span class="L0S55">= </span>lv_file_len <span class="L0S52">IMPORTING</span> <span class="L0S52">buffer </span><span class="L0S55">= </span>lv_file_cont <span class="L0S52">TABLES</span> binary_tab <span class="L0S55">= </span>lt_cont_hex <span class="L0S52">EXCEPTIONS</span> failed <span class="L0S55">= </span><span class="L0S32">1</span> <span class="L0S52">OTHERS </span><span class="L0S55">= </span><span class="L0S32">2</span><span class="L0S55">.</span> <span class="L0S52">CHECK </span>sy<span class="L0S70">-</span>subrc <span class="L0S55">= </span><span class="L0S32">0</span><span class="L0S55">.</span> ev_gos_attachment <span class="L0S55">= </span>lv_file_cont<span class="L0S55">.</span> <span class="L0S52">exit</span><span class="L0S55">.</span> <span class="L0S52">ENDLOOP</span><span class="L0S55">.</span> <span class="L0S52">ENDFUNCTION</span><span class="L0S55">.</span> |
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