2023 Feb 17 1:28 AM
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.
2023 Feb 17 1:31 AM
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.
2023 Feb 17 6:32 AM
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 ).