Purpose & Overview: There are lot of threads, wiki’s and blogs available about GOS. Reading and downloading GOS attachment and also we will find lots of article on how to attach a document into GOS.

But there are not many documents which describes the complete cycle of reading GOS object and display it into adobe form dynamically. The idea of this document is to build a complete cycle of reading a GOS attachment and then embed it into SAP Adobe form.

Limitations & Restrictions: This document is to read GOS picture attachments and embedding it into SAP adobe form. As, I have tried for reading a .PDF GOS attachment and embedding it into SAP Adobe form but as per my knowledge SAP doesn’t provide such solutions till now. So, this is restricted to picture format (.JPG, .GIF, .BMP and .PNG etc.). For (.TIFF & .TIF) picture format first we have to convert from .TIF to .JPG format.

Business Requirement & Descriptions: In this document I will read GOS attachments which are quality certificates and display the quality certificates into SAP Adobe form. This is applicable for other transactions which have got generic object service.

Create a structure & table type which will be sent to SAP adobe form as an import parameter.

Create table type:

Building the program:

REPORT  zabhi_gos_attachment_read.

DATAlv_lgsystm    TYPE logsys,
lv_line      
TYPE i,
lv_input_len 
TYPE i,
ls_connection
TYPE bdn_con,
lv_docid     
TYPE so_entryid,
lv_objkey    
TYPE swo_typeid,
ls_doc_data  
TYPE sofolenti1,
ls_certattach
TYPE ztst_itab,
lv_string    
TYPE xstring.

DATAlt_connection TYPE STANDARD TABLE OF bdn_con,
lt_content   
TYPE STANDARD TABLE OF solisti1,
lt_cont_hex  
TYPE STANDARD TABLE OF solix,
lt_attachment
TYPE ztst_tt_itab.

FIELD-SYMBOLS TYPE bdn_con.

CLEAR: lv_lgsystm,
lv_input_len
,
lv_line
.


* Build selection screen


SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS: p_bo   TYPE bds_clsnam OBLIGATORY DEFAULT ‘BUS2117’,
p_cert
TYPE qcprcertno OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.
* To Get own logical system

CALL FUNCTION ‘OWN_LOGICAL_SYSTEM_GET’
     IMPORTING
own_logical_system            
= lv_lgsystm
     EXCEPTIONS
own_logical_system_not_defined
= 1
            OTHERS                                                = 2.
     IF sysubrc <> 0.
CLEAR lv_lgsystm .
     ENDIF.

* Retrieves list of attachment (quality certificate images) details through BDS_GOS_CONNECTIONS_GET function module .


CLEAR lv_objkey.
MOVE p_cert TO lv_objkey.

CALL FUNCTION ‘BDS_GOS_CONNECTIONS_GET’
     EXPORTING
logical_system    
= lv_lgsystm
classname         
= p_bo
objkey            
= lv_objkey

     TABLES
gos_connections   
= lt_connection[]      EXCEPTIONS
no_objects_found  
= 1
internal_error    
= 2
internal_gos_error
= 3
OTHERS                         = 4.
     IF sysubrc = 0.
SORT lt_connection .
     ENDIF.

LOOP AT lt_connection ASSIGNING .


TRANSLATE docuclass TO UPPER CASE.
MOVE loio_id TO lv_docid.

* Reading the content of the image file. Internal table lt_cont_hex is the converted binary format of the image is    generating.


CALL FUNCTION ‘SO_DOCUMENT_READ_API1’
EXPORTING
document_id                
= lv_docid
IMPORTING
document_data              
= ls_doc_data
TABLES
object_content            
= lt_content[]
contents_hex              
= lt_cont_hex[]      EXCEPTIONS
document_id_not_exist     
= 1
operation_no_authorization
= 2
x_error                   
= 3
OTHERS                                         = 4.
IF sysubrc <> 0.
CLEAR ls_doc_data.
ENDIF.

CLEAR: lv_line, lv_input_len.

* The most important part is to get correct length. If you do not pass the correct length you image will not be displayed.
     DESCRIBE TABLE lt_cont_hex LINES lv_line.
lv_input_len 
= lv_line * sytleng .

* Converting binary data to Xstring format

CALL FUNCTION ‘SCMS_BINARY_TO_XSTRING’
EXPORTING
input_length 
= lv_input_len
first_line   
= 0
last_line    
= 0
IMPORTING
buffer                   = lv_string
TABLES
binary_tab  
= lt_cont_hex
EXCEPTIONS
failed      
= 1
OTHERS             = 2.
         IF sysubrc <> 0.
CLEAR lv_string.
ENDIF.

* Now we need to convert the Xstring data to string data otherwise the image will not be shown.
ls_certattach
certno = p_cert.

     CALL FUNCTION ‘SSFC_BASE64_ENCODE’
EXPORTING
bindata
= lv_string

IMPORTING
b64data
= ls_certattachf_string.
IF sysubrc <> 0.
CLEAR ls_certattachf_string.
ENDIF.

APPEND ls_certattach TO lt_attachment.
CLEAR ls_certattach.

ENDLOOP.

 

* To print the image into adobe form call below subroutine.


PERFORM f_sub_print_form USING lt_attachment.
*&———————————————————————*
*&      Form  F_SUB_PRINT_FORM
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
FORM f_sub_print_form  USING  p_gt_tab TYPE ztst_tt_itab.
DATA : ls_sfpoutputparams  TYPE sfpoutputparams,
ls_docparams       
TYPE sfpdocparams,
ls_pdf_file        
TYPE fpformoutput,
lv_formname        
TYPE fpname VALUE ‘ZTEST_DYNAMIC_PICTURE’,
lv_fmname          
TYPE funcname,
lv_mseg            
TYPE  string,
lv_w_cx_root       
TYPE  REF TO cx_root” Exception class

ls_sfpoutputparamsdest     = ‘XX01’.
ls_sfpoutputparams
nodialog = ‘X’.
ls_sfpoutputparams
preview  = ‘X’.

     CALL FUNCTION ‘FP_JOB_OPEN’
CHANGING
ie_outputparams
= ls_sfpoutputparams
EXCEPTIONS
cancel         
= 1
usage_error    
= 2
system_error   
= 3
internal_error 
= 4
OTHERS          = 5.

IF sysubrc <> 0.
MESSAGE ID symsgid TYPE symsgty NUMBER symsgno
WITH symsgv1 symsgv2 symsgv3 symsgv4.
ENDIF.

     TRY .
CALL FUNCTION ‘FP_FUNCTION_MODULE_NAME’
EXPORTING
i_name    
= lv_formname
IMPORTING
e_funcname
= lv_fmname.

CATCH cx_root INTO lv_w_cx_root.
lv_mseg
= lv_w_cx_root->get_text( ).
MESSAGE lv_mseg TYPE ‘E’.

     ENDTRY.

     MOVE: sylangu TO ls_docparamslangu.

     CALL FUNCTION lv_fmname
EXPORTING
/1bcdwb/docparams 
= ls_docparams
im_itab           
= p_gt_tab
IMPORTING
/1bcdwb/formoutput
= ls_pdf_file
EXCEPTIONS
usage_error       
= 1
system_error      
= 2
internal_error    
= 3
OTHERS             = 4.

IF sysubrc <> 0.
MESSAGE ID symsgid TYPE symsgty NUMBER symsgno
WITH symsgv1 symsgv2 symsgv3 symsgv4.
ENDIF.

     CALL FUNCTION ‘FP_JOB_CLOSE’
*   IMPORTING
*     E_RESULT             =
EXCEPTIONS
usage_error         
= 1
system_error        
= 2
internal_error      
= 3
OTHERS               = 4.

IF sysubrc <> 0.
MESSAGE ID symsgid TYPE symsgty NUMBER symsgno
WITH symsgv1 symsgv2 symsgv3 symsgv4.
ENDIF.


ENDFORM.                    ” F_SUB_PRINT_FORM


Now build the simple form to test:

 

Go To SFP: Build an interface ZTEST_I_DYNAMIC_PICTURE and pass the import parameter in INPUT and OUTPUT parameter.

Now Build FORM Context.

Go to Layout:

Create one Image field into Design view and bind it with F_Sring which is the converted image in string format.

 

 

Activate it.

 

Now execute your program. Enter the parameters. Business object and Object key. Here object key is the certificate Number and Business object ‘BUS2117’.

 

If you choose different Business object then you have to give correct object key. To get correct object key you can check the business object in SWO1 transaction.

 

After executing the output is coming like below.


Reference: I don’t want to mention particular documents but I take help on few threads on GOS and Adobe form in SCN to build this document.

 

Suggestion: Please feel free to suggest.

New NetWeaver Information at SAP.com

Very Helpfull

 

 

User Rating: Be the first one !