Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

gos image attachment to cl_gui_picture

0 Kudos
677

hello,

I got url from gos 'jpg' attachment and use it in cl_gui_picture but does not work.

what was the problem ?

1) got ( object id & folder id ) in sood table using ( instid_a , typeid_a , catid_a ) in srgbtbrel table

2) use FM so_obejct_read to get content information from ( object id & folder id )

3) convert format as ( soli -> solix -> xstring -> binary) using class cl_bcs_convert & FM scms_xstring_to_binary.

4) create url using FM DP_CREATE_URL

5) use it in cl_gui_picture=>load_picture_from_url.

- probably url does not properly work, because the url does not work in sap demo program ( SAP_PICTURE_DEMO )

- 1) ~ 2) processes are absolutly working fine, because I used so_object_download and get the image successfully.

  METHOD gos_display.


DATA : ls_folder_id TYPE soodk,
ls_object_id TYPE soodk,
i_region TYPE so_fol_rg,
i_object_hd TYPE sood2,
document_content TYPE soli_tab,
document_header TYPE soli_tab,
lv_header TYPE soli,
lv_ext(255) TYPE c,
lt_header LIKE TABLE OF lv_header,
lv_tab_line TYPE i,
document_contentx TYPE solix_tab.
* DATA: url TYPE cndp_url .

CLEAR ls_folder_id.
CLEAR ls_object_id.

IF folder_region IS INITIAL.
i_region = 'Q'.
ELSE.
i_region = folder_region.
ENDIF.

" folder id

CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
owner = i_owner
region = i_region
IMPORTING
folder_id = ls_folder_id
EXCEPTIONS
OTHERS = 1.

IF ls_folder_id IS INITIAL.
RAISE no_folder.
ENDIF.

IF sy-subrc EQ 0.
ls_object_id-objtp = objtp.
ls_object_id-objyr = objyr.
ls_object_id-objno = objno.
ELSE.
RETURN.
ENDIF.

"파일 추출
CALL FUNCTION 'SO_OBJECT_READ'
EXPORTING
folder_id = ls_folder_id
object_id = ls_object_id
IMPORTING
object_hd_display = i_object_hd
TABLES
objhead = document_header " ~~ .jpg
objcont = document_content " content
EXCEPTIONS
active_user_not_exist = 1
communication_failure = 2
component_not_available = 3
folder_not_exist = 4
folder_no_authorization = 5
object_not_exist = 6
object_no_authorization = 7
operation_no_authorization = 8
owner_not_exist = 9
parameter_error = 10
substitute_not_active = 11
substitute_not_defined = 12
system_failure = 13
x_error = 14
OTHERS = 15.

"get extension info.

CLEAR : lv_header, lv_tab_line, lt_header, lv_ext.

READ TABLE document_header INTO lv_header INDEX 1.

IF NOT ( lv_header IS INITIAL ).
SPLIT lv_header AT '.' INTO TABLE lt_header.
DESCRIBE TABLE lt_header LINES lv_tab_line.
IF lv_tab_line GT 1.
READ TABLE lt_header INDEX lv_tab_line INTO lv_ext.
TRANSLATE lv_ext TO UPPER CASE.
ENDIF.
ENDIF.
**********************************************************************
**********************************************************************
"content (soli -> solix -> xstring -> binary)
TRY.
CALL METHOD cl_bcs_convert=>soli_to_solix
EXPORTING
it_soli = document_content
RECEIVING
et_solix = document_contentx.
CATCH: cx_bcs.
BREAK-POINT.
ENDTRY.

DATA: xstring TYPE xstring .

CALL METHOD cl_bcs_convert=>solix_to_xstring
EXPORTING
it_solix = document_contentx
RECEIVING
ev_xstring = xstring.

TYPES: tp_binary TYPE x LENGTH 256 .

DATA: it_binary_tab TYPE TABLE OF tp_binary .

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = xstring
TABLES
binary_tab = it_binary_tab.

"binary -> url
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
type = 'IMAGE'
subtype = lv_ext
TABLES
data = it_binary_tab
CHANGING
url = url
EXCEPTIONS
dp_invalid_parameter = 1
dp_error_put_table = 2
dp_error_general = 3
OTHERS = 4.



ENDMETHOD.
  CALL METHOD lcl=>gos_display
EXPORTING
folder_region = 'B'
objtp = ls_sood-objtp
objyr = ls_sood-objyr
objno = ls_sood-objno
i_owner = ls_sood-ownnam
IMPORTING
url = url "get like sapr3://<content location>
EXCEPTIONS
no_folder = 1
no_content_sofm = 2
no_content_sood = 3.


CALL SCREEN 200.
MODULE show OUTPUT.

DATA : ob_gui_container type ref to cl_gui_docking_container.
DATA: ob_gui_picture_1 TYPE REF TO cl_gui_picture .
DATA : result type i.

IF ob_gui_container IS INITIAL .



CREATE OBJECT ob_gui_container
EXPORTING
dynnr = sy-dynnr
side = cl_gui_docking_container=>DOCK_AT_LEFT
extension = 500.


CREATE OBJECT ob_gui_picture_1
EXPORTING
parent = ob_gui_container.

CALL METHOD ob_gui_picture_1->load_picture_from_url
EXPORTING
url = url
IMPORTING
result = result.

CALL METHOD ob_gui_picture_1->set_display_mode
EXPORTING
display_mode = cl_gui_picture=>display_mode_fit_center.

ENDIF.

ENDMODULE.
2 REPLIES 2

0 Kudos
551

hello, to avoid confuse, I uploaded the physical attachment file to gos, not the url attachment.

I want to create url from physical attachement in gos to show.

Sandra_Rossi
Active Contributor
551

SAP_PICTURE_DEMO can't be used to check a URL generated by DP_CREATE_URL. It's valid only for HTTP URL.

You should test each part separately. Concerning the image, it works fine as you can see:

PARAMETERS dummy. " dummy code to display a screen

AT SELECTION-SCREEN OUTPUT.
  DATA l_string TYPE string.
  CONCATENATE
        '89504E470D0A1A0A0000000D49484452000000120000001108020000005F386BAE000000'
        '097048597300000EC400000EC401952B0E1B000000864944415478DA63BC79FD1803E980'
        '89812CC002A1D435AD88D773F3FA311638A7EFEC0762F414190B206C8309F1C3D9FFFEBD'
        '877A834910494927F17EEB243B4856630F122CE6310962B5079F3698C7D21818189898F6'
        '10EB48D460B847B5E81E0CDAE071CDC0C0F0EF5F1A03C33DB43860C11AB34C584CBB871C'
        '1F2C68898D48C0485E7E03007A9E1FADA3FE1BE00000000049454E44AE426082'
        INTO l_string.
  DATA(xstring) = CONV xstring( l_string ).
  TYPES: tp_binary TYPE x LENGTH 256 .
  DATA: it_binary_tab TYPE TABLE OF tp_binary .
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer     = xstring
    TABLES
      binary_tab = it_binary_tab.
  DATA:     url TYPE cndp_url .
  "binary -> url
  CALL FUNCTION 'DP_CREATE_URL'
    EXPORTING
      type                 = 'image'
      subtype              = 'png'
    TABLES
      data                 = it_binary_tab
    CHANGING
      url                  = url
    EXCEPTIONS
      dp_invalid_parameter = 1
      dp_error_put_table   = 2
      dp_error_general     = 3
      OTHERS               = 4.
  DATA : ob_gui_container TYPE REF TO cl_gui_docking_container.
  DATA(ob_gui_picture_1) = NEW cl_gui_picture( parent = ob_gui_container ).
  ob_gui_picture_1->load_picture_from_url( url = url ).
  ob_gui_picture_1->set_position( width = 20 height = 10 ).