You are on page 1of 32

CLASS ATTRIBUTES

GOS_GET_FILE_LIST

This method gets a listing of all the attachment details for a specific object type and key

METHOD gos_get_file_list.
TYPES: BEGIN OF ts_key,
foltp TYPE so_fol_tp,
folyr TYPE so_fol_yr,
folno TYPE so_fol_no,
objtp TYPE so_obj_tp,
objyr TYPE so_obj_yr,
objno TYPE so_obj_no,
forwarder TYPE so_usr_nam,
END OF ts_key,
BEGIN OF ts_attachment,
foltp TYPE so_fol_tp,
folyr TYPE so_fol_yr,
folno TYPE so_fol_no,
objtp TYPE so_obj_tp,
objyr TYPE so_obj_yr,
objno TYPE so_obj_no,
brelguid TYPE oblguid32,
roletype TYPE oblroltype,

END OF ts_attachment,
tt_attachment TYPE TABLE OF ts_attachment.
DATA: ta_srgbtbrel TYPE STANDARD TABLE OF srgbtbrel,
wa_srgbtbrel TYPE srgbtbrel,
lta_sood TYPE STANDARD TABLE OF sood,
lwa_sood TYPE sood, ltp_pathin(1000) TYPE c,
ltp_filename TYPE string,
ltp_sortfield TYPE char30,
lta_objcont TYPE soli_tab,
lta_attachments TYPE tt_attachment,
lwa_attachments LIKE LINE OF lta_attachments,
lo_boritem TYPE REF TO cl_sobl_bor_item,
lo_al_item TYPE REF TO cl_gos_al_item,
li_link TYPE REF TO if_browser_link,
ls_option TYPE obl_s_relt,
lt_options TYPE obl_t_relt,
ls_key TYPE ts_key,
ls_attachment TYPE ts_attachment,
lt_attachment TYPE tt_attachment,
lt_links TYPE obl_t_link,
ls_link TYPE obl_s_link,
lp_linkid TYPE blnk_inst,
gs_lpor TYPE sibflporb,
ls_message TYPE bapiret2.
IF NOT is_lporb-typeid IS INITIAL AND NOT is_lporb-instid IS INITIAL.
SELECT * FROM srgbtbrel INTO TABLE ta_srgbtbrel
WHERE instid_a EQ is_lporb-instid
AND typeid_a EQ is_lporb-typeid
AND catid_a EQ 'BO'.
IF sy-subrc EQ 0.
SORT ta_srgbtbrel BY instid_a typeid_a catid_a.
DELETE ADJACENT DUPLICATES FROM ta_srgbtbrel COMPARING instid_atypeid
_a catid_a.
LOOP AT ta_srgbtbrel INTO wa_srgbtbrel.
CLEAR: lt_attachment[], lta_attachments[].
gs_lpor-instid = wa_srgbtbrel-instid_a.
gs_lpor-typeid = wa_srgbtbrel-typeid_a.
gs_lpor-catid = wa_srgbtbrel-catid_a.
ls_option-sign = 'I'.
ls_option-option = 'EQ'.
ls_option-low = 'ATTA'.
APPEND ls_option TO lt_options.
ls_option-low = 'NOTE'.
APPEND ls_option TO lt_options.
ls_option-low = 'URL'.
APPEND ls_option TO lt_options.
TRY.
CALL METHOD cl_binary_relation=>read_links_of_binrels
EXPORTING
is_object
= gs_lpor
it_relation_options = lt_options

ip_role
= 'GOSAPPLOBJ'
IMPORTING
et_links
= lt_links.
LOOP AT lt_links INTO ls_link.
CASE ls_link-typeid_b .
WHEN 'MESSAGE'.
ls_key = ls_link-instid_b.
MOVE-CORRESPONDING ls_key TO ls_attachment.
ls_attachment-roletype = ls_link-roletype_b.
IF ls_link-brelguid IS INITIAL.
ls_attachment-brelguid = ls_link-relguidold.
ELSE.
ls_attachment-brelguid = ls_link-brelguid.
ENDIF.
APPEND ls_attachment TO lt_attachment.
WHEN OTHERS.
CONTINUE.
ENDCASE.
ENDLOOP.
CATCH cx_obl_parameter_error .
CATCH cx_obl_internal_error .
CATCH cx_obl_model_error .
CATCH cx_root.
ENDTRY.
ENDLOOP.
lta_attachments[] = lt_attachment[].
CHECK LINES( lta_attachments ) > 0.
SELECT * FROM sood INTO TABLE lta_sood
FOR ALL ENTRIES IN lta_attachments
WHERE
objtp = lta_attachments-objtp AND
objyr = lta_attachments-objyr AND
objno = lta_attachments-objno.
IF sy-subrc EQ 0.
t_attachments[] = lta_sood.
ENDIF.
DATA rcode TYPE i.
DATA objhead_tab TYPE TABLE OF soli.
DATA objcont_tab TYPE TABLE OF soli.
DATA objpara_tab TYPE TABLE OF selc.
DATA objparb_tab TYPE TABLE OF soop1.
DATA sood_key TYPE soodk.
DATA hex_mode TYPE sonv-flag.
FIELD-SYMBOLS <fs> TYPE LINE OF z_tt_sood.
LOOP AT t_attachments ASSIGNING <fs>.
IF NOT ( <fs>-objtp IS INITIAL OR <fs>-objyr IS INITIAL OR <fs>objno IS INITIAL ).
CONCATENATE <fs>-objtp <fs>-objyr <fs>-objno INTO sood_key.
PERFORM socx_select IN PROGRAM sapfsso0
TABLES objhead_tab objcont_tab
objpara_tab objparb_tab

USING

sood_key
hex_mode
rcode.

IF rcode EQ 0.
DATA moff TYPE i.
DATA l_param_search TYPE soli-line.
DATA l_param_head TYPE soli-line.
DATA value TYPE soli-line.
DATA wa_objhead_tab LIKE LINE OF objhead_tab.
DATA lt_url_tab TYPE TABLE OF so_url.
DATA ld_url_tab_size TYPE sytabix.
l_param_search = '&SO_FILENAME'.
TRANSLATE l_param_search TO UPPER CASE.
LOOP AT objhead_tab INTO wa_objhead_tab.
CLEAR moff.
FIND '=' IN wa_objhead_tab-line MATCH OFFSET moff.
CHECK sy-subrc = 0.
l_param_head = wa_objhead_tab-line(moff).
TRANSLATE l_param_head TO UPPER CASE.
IF l_param_head = l_param_search.
ADD 1 TO moff.
value = wa_objhead_tab-line+moff.
IF NOT ( value IS INITIAL ).
SPLIT value AT '.' INTO TABLE lt_url_tab.
DESCRIBE TABLE lt_url_tab LINES ld_url_tab_size.
IF ld_url_tab_size GT 1.
READ TABLE lt_url_tab INDEX ld_url_tab_size INTO <fs>acnam.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messagemessage.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messagemessage.


ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDIF.
ENDMETHOD.

GOS_DOWNLOAD_FILE_TO_GUI

This method is used by SAP GUI applications to download the selected attachment to the workstation

METHOD gos_download_file_to_gui.
DATA: ex TYPE REF TO cx_root,
text TYPE string,
ltp_sortfield TYPE char30,
lta_objcont TYPE soli_tab,
ltp_pathfile(1000) TYPE c,
ltp_filename TYPE string,
ltp_binfilesize TYPE so_doc_len,
ls_message TYPE bapiret2.
TRY .
CONCATENATE attachment-objtp attachment-objyr attachment-objno INTO l
tp_sortfield.
IMPORT objcont_tab TO lta_objcont FROM DATABASE soc3(dt) ID ltp_sortf
ield.
IF sy-subrc = 0.
IF NOT attachment-acnam IS INITIAL.
CONCATENATE file_path '\' attachment-objdes '.' attachment-acnam
INTO ltp_pathfile.
ELSE.
CONCATENATE file_path '\' attachment-objdes '.' attachment-

file_ext INTO ltp_pathfile.


ENDIF.
REPLACE '\\' WITH '\' INTO ltp_pathfile+2.
TRANSLATE ltp_pathfile USING '/ '.
ltp_binfilesize = attachment-objlen.
CALL FUNCTION 'SO_OBJECT_DOWNLOAD'
EXPORTING
bin_filesize
= ltp_binfilesize
filetype
= 'BIN'
path_and_file
= ltp_pathfile
extct
= attachment-extct
no_dialog
= 'X'
IMPORTING
act_filename
= ltp_filename
TABLES
objcont
= lta_objcont
EXCEPTIONS
file_write_error = 1
invalid_type
= 2
x_error
= 3
kpro_error
= 4
OTHERS
= 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messagemessage.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messagemessage.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDIF.
CATCH cx_root INTO ex.

text = ex->get_text( ).
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messagemessage.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDTRY.
ENDMETHOD.

GOS_GET_FILE_XSTRING

This method is used to download attached files when using ABAP WebDynpro Applications

METHOD gos_get_file_xstring.
DATA: ex TYPE REF TO cx_root,
text TYPE string,
l_folder_id TYPE soodk,
l_object_id TYPE soodk,
document_id TYPE sofmk,
lo_root TYPE REF TO cx_root,
ls_fol_id TYPE soodk,

lwa_document_data TYPE sofolenti1,


document_content TYPE STANDARD TABLE OF soli,
lwa_object_header TYPE STANDARD TABLE OF solisti1,
l_subrc TYPE int4,
l_objkey TYPE soodk,
lt_data TYPE STANDARD TABLE OF solisti1,
lt_xdata TYPE solix_tab,
ls_xdata TYPE solix,
ls_data TYPE solisti1,
l_data TYPE string,
l_xdata TYPE xstring,
l_xdata_line TYPE xstring,
l_filename TYPE string,
l_mimetype TYPE string,
l_document_id TYPE sofolenti1-doc_id,
l_document_data TYPE sofolenti1,
lt_header TYPE soli_tab,
lv_filename TYPE string,
lo_header TYPE REF TO cl_bcs_objhead,
file TYPE string, dot_offset TYPE i,
extension TYPE mimetypes-extension,
mimetype TYPE mimetypes-type,
lv_message TYPE bapiret2.
TRY.
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
region
= folder_region
IMPORTING
folder_id = ls_fol_id
EXCEPTIONS
OTHERS
= 1.
IF sy-subrc EQ 0.
l_folder_id-objtp = ls_fol_id-objtp.
l_folder_id-objyr = ls_fol_id-objyr.
l_folder_id-objno = ls_fol_id-objno.
l_object_id-objtp = doctp.
l_object_id-objyr = docyr.
l_object_id-objno = docno.
CALL FUNCTION 'SO_OBJECT_READ'
EXPORTING
folder_id
= l_folder_id
object_id
= l_object_id
TABLES
objcont
= document_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.
IF sy-subrc EQ 0.
document_id-foltp = l_folder_id-objtp.
document_id-folyr = l_folder_id-objyr.
document_id-folno = l_folder_id-objno.
document_id-doctp = l_object_id-objtp.
document_id-docyr = l_object_id-objyr.
document_id-docno = l_object_id-objno.
l_document_id = document_id.
CALL FUNCTION 'SO_DOCUMENT_READ_API1'
EXPORTING
document_id
= l_document_id
IMPORTING
document_data
= l_document_data
TABLES
object_header
= lt_header
object_content
= lt_data
contents_hex
= lt_xdata
EXCEPTIONS
document_id_not_exist
= 1
operation_no_authorization = 2
x_error
= 3
OTHERS
= 4.
IF sy-subrc <> 0.
l_subrc = sy-subrc.
lv_message-type = 'E'.
IF sy-msgid IS NOT INITIAL AND sy-msgno IS NOT INITIAL.
lv_message-id = sy-msgid.
lv_message-number = sy-msgno.
lv_message-message_v1 = sy-msgv1.
lv_message-message_v2 = sy-msgv2.
lv_message-message_v3 = sy-msgv3.
lv_message-message_v4 = sy-msgv4.
ELSEIF l_subrc = 2.
lv_message-id = 'SO'.
lv_message-number = '055'.
lv_message-message_v1 = l_document_id.
ELSE.
lv_message-id = 'SO'.
lv_message-number = '006'.
lv_message-message_v1 = l_document_id.
ENDIF.
APPEND lv_message TO rt_messages.

RETURN.
ENDIF.
lo_header = cl_bcs_objhead=>create( lt_header ).
lv_filename = lo_header->get_filename( ).
o_file_name = lv_filename.
file = o_file_name.
FIND FIRST OCCURRENCE OF REGEX '\.[^\.]+$' IN file MATCH OFFSET d
ot_offset.
ADD 1 TO dot_offset.
extension = file+dot_offset.
CALL FUNCTION 'SDOK_MIMETYPE_GET'
EXPORTING
extension = extension
IMPORTING
mimetype = o_mimetype.
DATA conv_out TYPE REF TO cl_abap_conv_out_ce.
IF lt_xdata IS NOT INITIAL.
DATA l_counter TYPE i.
l_counter = l_document_data-doc_size.
LOOP AT lt_xdata INTO ls_xdata.
IF l_counter > 255.
CONCATENATE l_xdata ls_xdata-line INTO l_xdata IN BYTE MOD
E.
ELSE.
CONCATENATE l_xdata ls_xdata-line+0(l_counter) INTO l_xdata
IN BYTE MODE.
ENDIF.
l_counter = l_counter - 255.
ENDLOOP.
o_content_hex = l_xdata.
ELSE.
LOOP AT lt_data INTO ls_data.
IF doctp = 'URL' AND STRLEN( ls_data-line ) >= 5.
CONCATENATE l_data ls_data-line+5 INTO l_data.
ENDIF.
IF doctp = 'RAW'.
CONCATENATE l_data ls_data-line INTO l_data.
ENDIF.
ENDLOOP.
IF doctp = 'RAW' OR doctp = 'URL'.
o_content = l_data.
RETURN.
ENDIF.
conv_out = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
conv_out->convert( EXPORTING data = l_data IMPORTING buffer = o
_content_hex ).
ENDIF.
ENDIF.
ENDIF.
CATCH cx_root INTO ex.
lv_message-id = sy-msgid.

lv_message-number = sy-msgno.
lv_message-message_v1 = sy-msgv1.
lv_message-message_v2 = sy-msgv2.
lv_message-message_v3 = sy-msgv3.
lv_message-message_v4 = sy-msgv4.
APPEND lv_message TO rt_messages.
ENDTRY.
ENDMETHOD.

GOS_GET_FILE_SOLITAB

This method is used to download attached files when using ITS Applications

DATA: ex TYPE REF TO cx_root,


text TYPE string,
l_folder_id TYPE soodk,
l_object_id TYPE soodk,
document_id TYPE sofmk,
lo_root TYPE REF TO cx_root,
ls_fol_id TYPE soodk,
lwa_document_data TYPE sofolenti1,
document_content TYPE STANDARD TABLE OF soli,
lwa_object_header TYPE STANDARD TABLE OF solisti1,
l_subrc TYPE int4,
l_objkey TYPE soodk,
lt_data TYPE STANDARD TABLE OF solisti1,
lt_xdata TYPE solix_tab,
ls_xdata TYPE solix,
ls_data TYPE solisti1,
l_data TYPE string,
l_xdata TYPE xstring,
l_xdata_line TYPE xstring,
l_filename TYPE string,
l_mimetype TYPE string,
l_document_id TYPE sofolenti1-doc_id,
l_document_data TYPE sofolenti1,
lt_header TYPE soli_tab,
lv_filename TYPE string,
lo_header TYPE REF TO cl_bcs_objhead,
file TYPE string, dot_offset TYPE i,
extension TYPE mimetypes-extension,
mimetype TYPE mimetypes-type,
lv_message TYPE bapiret2.
TRY.

CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'


EXPORTING
region
= folder_region
IMPORTING
folder_id = ls_fol_id
EXCEPTIONS
OTHERS
= 1.
IF sy-subrc EQ 0.
l_folder_id-objtp = ls_fol_id-objtp.
l_folder_id-objyr = ls_fol_id-objyr.
l_folder_id-objno = ls_fol_id-objno.
l_object_id-objtp = doctp.
l_object_id-objyr = docyr.
l_object_id-objno = docno.
CALL FUNCTION 'SO_OBJECT_READ'
EXPORTING
folder_id
= l_folder_id
object_id
= l_object_id
TABLES
objcont
= document_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.
IF sy-subrc EQ 0.
document_id-foltp = l_folder_id-objtp.
document_id-folyr = l_folder_id-objyr.
document_id-folno = l_folder_id-objno.
document_id-doctp = l_object_id-objtp.
document_id-docyr = l_object_id-objyr.
document_id-docno = l_object_id-objno.
l_document_id = document_id.
CALL FUNCTION 'SO_DOCUMENT_READ_API1'
EXPORTING
document_id
= l_document_id
IMPORTING
document_data
= l_document_data
TABLES
object_header
= lt_header

object_content
= lt_data
contents_hex
= lt_xdata
EXCEPTIONS
document_id_not_exist
= 1
operation_no_authorization = 2
x_error
= 3
OTHERS
= 4.
MOVE l_document_data-doc_size TO o_filelength.
IF sy-subrc <> 0.
l_subrc = sy-subrc.
lv_message-type = 'E'.
IF sy-msgid IS NOT INITIAL AND sy-msgno IS NOT INITIAL.
lv_message-id = sy-msgid.
lv_message-number = sy-msgno.
lv_message-message_v1 = sy-msgv1.
lv_message-message_v2 = sy-msgv2.
lv_message-message_v3 = sy-msgv3.
lv_message-message_v4 = sy-msgv4.
ELSEIF l_subrc = 2.
lv_message-id = 'SO'.
lv_message-number = '055'.
lv_message-message_v1 = l_document_id.
ELSE.
lv_message-id = 'SO'.
lv_message-number = '006'.
lv_message-message_v1 = l_document_id.
ENDIF.
APPEND lv_message TO rt_messages.
RETURN.
ENDIF.
lo_header = cl_bcs_objhead=>create( lt_header ).
lv_filename = lo_header->get_filename( ).
o_file_name = lv_filename.
file = o_file_name.
FIND FIRST OCCURRENCE OF REGEX '\.[^\.]+$' IN file MATCH OFFSET d
ot_offset.
ADD 1 TO dot_offset.
extension = file+dot_offset.
CALL FUNCTION 'SDOK_MIMETYPE_GET'
EXPORTING
extension = extension
IMPORTING
mimetype = o_mimetype.
DATA conv_out TYPE REF TO cl_abap_conv_out_ce.
IF lt_data IS NOT INITIAL.
o_content_solitab[] = lt_data[].
ENDIF.
ENDIF.
ENDIF.
CATCH cx_root INTO ex.
lv_message-id = sy-msgid.

lv_message-number = sy-msgno.
lv_message-message_v1 = sy-msgv1.
lv_message-message_v2 = sy-msgv2.
lv_message-message_v3 = sy-msgv3.
lv_message-message_v4 = sy-msgv4.
APPEND lv_message TO rt_messages.
ENDTRY.
ENDMETHOD.
"gos_get_file_xstring

GOS_ATTACH_FILE_XSTRING

This method is used attach files when using ABAP WebDynpro Applications

METHOD gos_attach_file_xstring.
DATA: ls_message TYPE bapiret2,
filename TYPE string,
filefullname TYPE string,
mime_type TYPE string,
size TYPE i,
offset TYPE i,
offset_old TYPE i,
temp_len TYPE i,
objname TYPE string,
l_obj_type TYPE so_obj_tp,
hex_null TYPE x LENGTH 1 VALUE '20',
l_document_title TYPE so_text255,
file_ext TYPE string,
lt_objcont TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 6,
objcont LIKE LINE OF lt_objcont,
lt_ls_doc_change TYPE STANDARD TABLE OF sodocchgi1,
ls_doc_change LIKE LINE OF lt_ls_doc_change,
lt_data TYPE soli_tab,
ls_data TYPE soli,
lt_xdata TYPE solix_tab,
ls_xdata TYPE solix,

l_folder_id TYPE sofdk,


ls_object_id TYPE soodk,
l_object_id_fol TYPE so_obj_id,
l_object_id TYPE so_obj_id,
l_object_hd_change TYPE sood1,
l_tab_size TYPE int4,
l_retype TYPE breltyp-reltype,
lt_urltab TYPE STANDARD TABLE OF sood-objdes.
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
region
= 'B'
IMPORTING
folder_id = l_folder_id.
IF iv_objtp = gc_type_file.
size = XSTRLEN( iv_content_hex ).
CALL METHOD split_path
EXPORTING
iv_path
= iv_name
IMPORTING
ev_filename = filename.
CALL METHOD split_file_extension
EXPORTING
iv_filename_with_ext = filename
IMPORTING
ev_filename
= objname
ev_extension
= file_ext.
ls_doc_change-obj_name = objname.
ls_doc_change-obj_descr = objname.
ls_doc_change-obj_langu = sy-langu.
ls_doc_change-sensitivty = 'F'.
ls_doc_change-doc_size = size.
offset = 0.
WHILE offset <= size.
offset_old = offset.
offset = offset + 255.
IF offset > size.
temp_len = XSTRLEN( iv_content_hex+offset_old ).
CLEAR ls_xdata-line WITH hex_null IN BYTE MODE.
ls_xdata-line = iv_content_hex+offset_old(temp_len).
ELSE.
ls_xdata-line = iv_content_hex+offset_old(255).
ENDIF.
APPEND ls_xdata TO lt_xdata.
ENDWHILE.
l_retype = 'ATTA'.
l_obj_type = 'EXT'.
l_object_hd_change-objnam = ls_doc_change-obj_name.
l_object_hd_change-objdes = ls_doc_change-obj_descr.
l_object_hd_change-objsns = ls_doc_change-sensitivty.
l_object_hd_change-objla = ls_doc_change-obj_langu.
l_object_hd_change-objlen = ls_doc_change-doc_size.

l_object_hd_change-file_ext = file_ext.
DATA lt_obj_header TYPE STANDARD TABLE OF solisti1.
DATA ls_header TYPE solisti1.
CONCATENATE '&SO_FILENAME=' filename INTO ls_header.
APPEND ls_header TO lt_obj_header.
CLEAR ls_header.
ls_header = '&SO_FORMAT=BIN'.
APPEND ls_header TO lt_obj_header.
*
change hex data to text data
CALL FUNCTION 'SO_SOLIXTAB_TO_SOLITAB'
EXPORTING
ip_solixtab = lt_xdata
IMPORTING
ep_solitab = lt_data.
ELSE.
size = STRLEN( iv_content ).
objname = iv_name.
ls_doc_change-obj_descr = objname.
ls_doc_change-sensitivty = 'O'.
ls_doc_change-obj_langu = sy-langu.
offset = 0.
IF iv_objtp = gc_type_note.
l_retype = 'NOTE'.
l_obj_type = 'RAW'.
l_object_hd_change-file_ext = 'TXT'.
WHILE offset <= size.
offset_old = offset.
offset = offset + 255.
IF offset > size.
temp_len = STRLEN( iv_content+offset_old ).
CLEAR ls_data-line.
ls_data-line = iv_content+offset_old(temp_len).
ELSE.
ls_data-line = iv_content+offset_old(255).
ENDIF.
APPEND ls_data TO lt_data.
ENDWHILE.
IF objname IS INITIAL.
READ TABLE lt_data INDEX 1 INTO l_document_title.
WHILE l_document_title+49 <> ' '.
SHIFT l_document_title RIGHT.
ENDWHILE.
SHIFT l_document_title LEFT DELETING LEADING ' '.
ls_doc_change-obj_descr = l_document_title.
ENDIF.
ELSE.
*
it's url (not note)
l_retype = 'URL'.
l_obj_type = 'URL'.
IF objname IS INITIAL.
SPLIT iv_content AT '/' INTO TABLE lt_urltab.

DESCRIBE TABLE lt_urltab LINES l_tab_size.


READ TABLE lt_urltab INDEX l_tab_size INTO ls_doc_change-obj_descr.
ENDIF.
WHILE offset <= size.
offset_old = offset.
offset = offset + 250.
IF offset > size.
temp_len = STRLEN( iv_content+offset_old ).
CLEAR ls_data-line.
ls_data-line = iv_content+offset_old(temp_len).
ELSE.
ls_data-line = iv_content+offset_old(250).
ENDIF.
CONCATENATE '&KEY&' ls_data-line INTO ls_data-line.
APPEND ls_data TO lt_data.
ENDWHILE.
ENDIF.
ls_doc_change-doc_size = size.
l_object_hd_change-objdes = ls_doc_change-obj_descr.
l_object_hd_change-objsns = ls_doc_change-sensitivty.
l_object_hd_change-objla = ls_doc_change-obj_langu.
l_object_hd_change-objlen = ls_doc_change-doc_size.
ENDIF.
* save object
CALL FUNCTION 'SO_OBJECT_INSERT'
EXPORTING
folder_id
= l_folder_id
object_hd_change
= l_object_hd_change
object_type
= l_obj_type
IMPORTING
object_id
= ls_object_id
TABLES
objcont
= lt_data
objhead
= lt_obj_header
EXCEPTIONS
component_not_available
= 01
folder_not_exist
= 06
folder_no_authorization
= 05
object_type_not_exist
= 17
operation_no_authorization = 21
parameter_error
= 23
OTHERS
= 1000.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messagemessage.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.

ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDIF.
* create relation
DATA l_obj_rolea TYPE borident.
DATA l_obj_roleb TYPE borident.
l_obj_rolea-objkey = is_lporb-instid.
l_obj_rolea-objtype = is_lporb-typeid.
l_obj_rolea-logsys = is_lporb-catid.
l_object_id_fol = l_folder_id.
l_object_id = ls_object_id.
CONCATENATE l_object_id_fol l_object_id INTO l_obj_roleb-objkey RESPECTIN
G BLANKS.
l_obj_roleb-objtype = 'MESSAGE'.
CLEAR l_obj_roleb-logsys.
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
obj_rolea
= l_obj_rolea
obj_roleb
= l_obj_roleb
relationtype = l_retype
EXCEPTIONS
OTHERS
= 1.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messagemessage.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDIF.
ENDMETHOD.

GOS_ATTACH_FILE_SOLITAB

This method is used attach files when using ITS Applications

METHOD gos_attach_file_solitab.
DATA: ls_message TYPE bapiret2,
filename TYPE string,
filefullname TYPE string,
mime_type TYPE string,
size TYPE i,
offset TYPE i,
offset_old TYPE i,
temp_len TYPE i,
objname TYPE string,
l_obj_type TYPE so_obj_tp,
hex_null TYPE x LENGTH 1 VALUE '20',
l_document_title TYPE so_text255,
file_ext TYPE string,
lt_objcont TYPE STANDARD TABLE OF solisti1 INITIAL SIZE 6,
objcont LIKE LINE OF lt_objcont,
lt_ls_doc_change TYPE STANDARD TABLE OF sodocchgi1,
ls_doc_change LIKE LINE OF lt_ls_doc_change,
lt_data TYPE soli_tab,
ls_data TYPE soli,
lt_xdata TYPE solix_tab,
ls_xdata TYPE solix,
l_folder_id TYPE sofdk,
ls_object_id TYPE soodk,
l_object_id_fol TYPE so_obj_id,
l_object_id TYPE so_obj_id,
l_object_hd_change TYPE sood1,
l_tab_size TYPE int4,
l_retype TYPE breltyp-reltype,
lt_urltab TYPE STANDARD TABLE OF sood-objdes.
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
region
= 'B'
IMPORTING
folder_id = l_folder_id.
IF iv_objtp = gc_type_file.
size = iv_filelength.
CALL METHOD split_path
EXPORTING
iv_path
= iv_name
IMPORTING

ev_filename = filename.
CALL METHOD split_file_extension
EXPORTING
iv_filename_with_ext = filename
IMPORTING
ev_filename
= objname
ev_extension
= file_ext.
ls_doc_change-obj_name = objname.
ls_doc_change-obj_descr = objname.
ls_doc_change-obj_langu = sy-langu.
ls_doc_change-sensitivty = 'F'.
ls_doc_change-doc_size = size.
l_retype = 'ATTA'.
l_obj_type = 'EXT'.
l_object_hd_change-objnam = ls_doc_change-obj_name.
l_object_hd_change-objdes = ls_doc_change-obj_descr.
l_object_hd_change-objsns = ls_doc_change-sensitivty.
l_object_hd_change-objla = ls_doc_change-obj_langu.
l_object_hd_change-objlen = ls_doc_change-doc_size.
l_object_hd_change-file_ext = file_ext.
DATA lt_obj_header TYPE STANDARD TABLE OF solisti1.
DATA ls_header TYPE solisti1.
CONCATENATE '&SO_FILENAME=' filename INTO ls_header.
APPEND ls_header TO lt_obj_header.
CLEAR ls_header.
ls_header = '&SO_FORMAT=BIN'.
APPEND ls_header TO lt_obj_header.
lt_data[] = iv_content_solitab[].
ELSE.
size = STRLEN( iv_content ).
objname = iv_name.
ls_doc_change-obj_descr = objname.
ls_doc_change-sensitivty = 'O'.
ls_doc_change-obj_langu = sy-langu.
offset = 0.
IF iv_objtp = gc_type_note.
l_retype = 'NOTE'.
l_obj_type = 'RAW'.
l_object_hd_change-file_ext = 'TXT'.
WHILE offset <= size.
offset_old = offset.
offset = offset + 255.
IF offset > size.
temp_len = STRLEN( iv_content+offset_old ).
CLEAR ls_data-line.
ls_data-line = iv_content+offset_old(temp_len).
ELSE.
ls_data-line = iv_content+offset_old(255).
ENDIF.
APPEND ls_data TO lt_data.
ENDWHILE.

IF objname IS INITIAL.
READ TABLE lt_data INDEX 1 INTO l_document_title.
WHILE l_document_title+49 <> ' '.
SHIFT l_document_title RIGHT.
ENDWHILE.
SHIFT l_document_title LEFT DELETING LEADING ' '.
ls_doc_change-obj_descr = l_document_title.
ENDIF.
ELSE.
*
it's url (not note)
l_retype = 'URL'.
l_obj_type = 'URL'.
IF objname IS INITIAL.
SPLIT iv_content AT '/' INTO TABLE lt_urltab.
DESCRIBE TABLE lt_urltab LINES l_tab_size.
READ TABLE lt_urltab INDEX l_tab_size INTO ls_doc_change-obj_descr.
ENDIF.
WHILE offset <= size.
offset_old = offset.
offset = offset + 250.
IF offset > size.
temp_len = STRLEN( iv_content+offset_old ).
CLEAR ls_data-line.
ls_data-line = iv_content+offset_old(temp_len).
ELSE.
ls_data-line = iv_content+offset_old(250).
ENDIF.
CONCATENATE '&KEY&' ls_data-line INTO ls_data-line.
APPEND ls_data TO lt_data.
ENDWHILE.
ENDIF.
ls_doc_change-doc_size = size.
l_object_hd_change-objdes = ls_doc_change-obj_descr.
l_object_hd_change-objsns = ls_doc_change-sensitivty.
l_object_hd_change-objla = ls_doc_change-obj_langu.
l_object_hd_change-objlen = ls_doc_change-doc_size.
ENDIF.
* save object
CALL FUNCTION 'SO_OBJECT_INSERT'
EXPORTING
folder_id
= l_folder_id
object_hd_change
= l_object_hd_change
object_type
= l_obj_type
IMPORTING
object_id
= ls_object_id
TABLES
objcont
= lt_data
objhead
= lt_obj_header
EXCEPTIONS
component_not_available
= 01
folder_not_exist
= 06

folder_no_authorization
= 05
object_type_not_exist
= 17
operation_no_authorization = 21
parameter_error
= 23
OTHERS
= 1000.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messagemessage.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDIF.
* create relation
DATA l_obj_rolea TYPE borident.
DATA l_obj_roleb TYPE borident.
l_obj_rolea-objkey = is_lporb-instid.
l_obj_rolea-objtype = is_lporb-typeid.
l_obj_rolea-logsys = is_lporb-catid.
l_object_id_fol = l_folder_id.
l_object_id = ls_object_id.
CONCATENATE l_object_id_fol l_object_id INTO l_obj_roleb-objkey RESPECTIN
G BLANKS.
l_obj_roleb-objtype = 'MESSAGE'.
CLEAR l_obj_roleb-logsys.
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
obj_rolea
= l_obj_rolea
obj_roleb
= l_obj_roleb
relationtype = l_retype
EXCEPTIONS
OTHERS
= 1.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messagemessage.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.

APPEND ls_message TO rt_messages.


RETURN.
ENDIF.
ENDMETHOD.

GOS_EMAIL_ATTACHED_FILE

This method is used email attachments

METHOD gos_email_attached_file.
DATA: ex TYPE REF TO cx_root,
text TYPE string,
l_folder_id TYPE soodk,
l_object_id TYPE soodk,
document_id TYPE sofmk,
lo_root TYPE REF TO cx_root,
ls_fol_id TYPE soodk,
l_document_id TYPE so_entryid,
lwa_document_data TYPE sofolenti1,
document_content TYPE STANDARD TABLE OF soli,
lwa_object_header TYPE STANDARD TABLE OF solisti1,
lwa_object_content TYPE STANDARD TABLE OF solisti1,
lwa_object_content_1 TYPE STANDARD TABLE OF solisti1,
lwa_contents_hex TYPE STANDARD TABLE OF solix,
lt_plist TYPE STANDARD TABLE OF sopcklsti1,
wa_lt_plist TYPE sopcklsti1,
wa_lwa_object_content_1 TYPE solisti1,
mailto TYPE ad_smtpadr,
document_content_solix TYPE solix_tab,
wa_object_header LIKE LINE OF lwa_object_header,
send_request TYPE REF TO cl_bcs,
sent_to_all TYPE os_boolean,
document TYPE REF TO cl_document_bcs,
doc_size TYPE so_obj_len,

recipient TYPE REF TO if_recipient_bcs,


bcs_exception TYPE REF TO cx_bcs,
ttext TYPE bcsy_text,
wa_t_receivers LIKE LINE OF t_receivers,
moff TYPE i,
lt_url_tab TYPE TABLE OF so_url,
ld_url_tab_size TYPE sytabix,
fil_nm(50) TYPE c,
file_ext(3) TYPE c,
fil_nm_txt TYPE so_obj_des,
ls_message TYPE bapiret2.
TRY .
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
region
= folder_region
IMPORTING
folder_id = ls_fol_id
EXCEPTIONS
OTHERS
= 1.
IF sy-subrc EQ 0.
l_folder_id-objtp = ls_fol_id-objtp.
l_folder_id-objyr = ls_fol_id-objyr.
l_folder_id-objno = ls_fol_id-objno.
l_object_id-objtp = doctp.
l_object_id-objyr = docyr.
l_object_id-objno = docno.
CALL FUNCTION 'SO_OBJECT_READ'
EXPORTING
folder_id
= l_folder_id
object_id
= l_object_id
TABLES
objcont
= document_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.
IF sy-subrc EQ 0.
document_id-foltp = l_folder_id-objtp.
document_id-folyr = l_folder_id-objyr.

document_id-folno = l_folder_id-objno.
document_id-doctp = l_object_id-objtp.
document_id-docyr = l_object_id-objyr.
document_id-docno = l_object_id-objno.
l_document_id = document_id.
CALL FUNCTION 'SO_DOCUMENT_READ_API1'
EXPORTING
document_id
= l_document_id
IMPORTING
document_data
= lwa_document_data
TABLES
object_header
= lwa_object_header
object_content
= lwa_object_content_1
contents_hex
= lwa_contents_hex
EXCEPTIONS
document_id_not_exist
= 1
operation_no_authorization = 2
x_error
= 3
OTHERS
= 4.
IF sy-subrc EQ 0.
CLEAR: send_request, document, recipient, sent_to_all, fil_nm_t
xt.
TRY.
READ TABLE t_receivers INTO wa_t_receivers INDEX 1.
mailto = wa_t_receivers-receiver.
send_request = cl_bcs=>create_persistent( ).
READ TABLE lwa_object_header INTO wa_object_header INDEX 1.
IF sy-subrc EQ 0.
FIND '=' IN wa_object_header-line MATCH OFFSET moff.
ADD 1 TO moff.
fil_nm = wa_object_header-line+moff.
SPLIT fil_nm AT '.' INTO TABLE lt_url_tab.
DESCRIBE TABLE lt_url_tab LINES ld_url_tab_size.
IF ld_url_tab_size GT 1.
READ TABLE lt_url_tab INDEX ld_url_tab_size INTO file_e
xt.
ELSE.
CLEAR file_ext.
ENDIF.
ENDIF.
fil_nm_txt = fil_nm.
IF fil_nm_txt IS INITIAL.
fil_nm_txt = 'Requested File is Attached'.
ENDIF.
APPEND 'The file you requested file is attached.' TO ttext.
document = cl_document_bcs=>create_document(
i_type
= 'RAW'
i_text
= ttext
i_subject = fil_nm_txt ).
CALL METHOD document->add_attachment
EXPORTING

i_attachment_type
= file_ext
i_attachment_subject = fil_nm
i_att_content_hex
= lwa_contents_hex
i_attachment_header = lwa_object_header
i_attachment_size
= lwa_document_data-doc_size.
send_request->set_document( document ).
recipient = cl_cam_address_bcs=>create_internet_address( ma
ilto ).
send_request->add_recipient( recipient ).
sent_to_all = send_request->send( i_with_error_screen = 'X'
).
CATCH cx_bcs INTO bcs_exception.
MESSAGE i865(so) WITH bcs_exception->error_type.
ENDTRY.
IF sy-subrc EQ 0.
IF send_now EQ 'X'.
SUBMIT rsconn01 WITH mode = 'INT' AND RETURN.
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_mess
age-message.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDIF.
COMMIT WORK.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messag
e-message.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messagemessage.

ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messagemessage.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDIF.
CATCH cx_root INTO ex.
text = ex->get_text( ).
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO ls_messagemessage.
ls_message-type = sy-msgty.
ls_message-id = sy-msgid.
ls_message-number = sy-msgno.
ls_message-message_v1 = sy-msgv1.
ls_message-message_v2 = sy-msgv2.
ls_message-message_v3 = sy-msgv3.
ls_message-message_v4 = sy-msgv4.
APPEND ls_message TO rt_messages.
RETURN.
ENDTRY.
ENDMETHOD.

GOS_DELETE_FILE

This method is used delete attachments

METHOD gos_delete_file.
DATA: ex TYPE REF TO cx_root,
text TYPE string,
l_folder_id TYPE soodk,
l_object_id TYPE soodk,
document_id TYPE sofmk,
lo_root TYPE REF TO cx_root,
ls_fol_id TYPE soodk,
lwa_document_data TYPE sofolenti1,
document_content TYPE STANDARD TABLE OF soli,

lwa_object_header TYPE STANDARD TABLE OF solisti1,


l_document_id TYPE swo_typeid,
l_document_data TYPE sofolenti1,
lt_header TYPE soli_tab,
lv_message TYPE bapiret2,
lo_docsrv TYPE REF TO cl_gos_document_service.
TRY.
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
region
= folder_region
IMPORTING
folder_id = ls_fol_id
EXCEPTIONS
OTHERS
= 1.
IF sy-subrc EQ 0.
l_folder_id-objtp = ls_fol_id-objtp.
l_folder_id-objyr = ls_fol_id-objyr.
l_folder_id-objno = ls_fol_id-objno.
l_object_id-objtp = doctp.
l_object_id-objyr = docyr.
l_object_id-objno = docno.
CALL FUNCTION 'SO_OBJECT_READ'
EXPORTING
folder_id
= l_folder_id
object_id
= l_object_id
TABLES
objcont
= document_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.
IF sy-subrc EQ 0.
document_id-foltp = l_folder_id-objtp.
document_id-folyr = l_folder_id-objyr.
document_id-folno = l_folder_id-objno.
document_id-doctp = l_object_id-objtp.
document_id-docyr = l_object_id-objyr.
document_id-docno = l_object_id-objno.
l_document_id = document_id.

CREATE OBJECT lo_docsrv.


CASE doctp.
WHEN gc_type_file.
CALL METHOD lo_docsrv->delete_attachment
EXPORTING
is_lporb
= is_lporb
ip_attachment = l_document_id.
WHEN gc_type_note.
CALL METHOD lo_docsrv->delete_note
EXPORTING
is_lporb = is_lporb
ip_note = l_document_id.
WHEN gc_type_url.
CALL METHOD lo_docsrv->delete_url
EXPORTING
is_lporb = is_lporb
ip_url
= l_document_id.
ENDCASE.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ELSE.
lv_message-id = sy-msgid.
lv_message-number = sy-msgno.
lv_message-message_v1 = sy-msgv1.
lv_message-message_v2 = sy-msgv2.
lv_message-message_v3 = sy-msgv3.
lv_message-message_v4 = sy-msgv4.
APPEND lv_message TO rt_messages.
RETURN.
ENDIF.
ENDIF.
ENDIF.
CATCH cx_root INTO ex.
lv_message-id = sy-msgid.
lv_message-number = sy-msgno.
lv_message-message_v1 = sy-msgv1.
lv_message-message_v2 = sy-msgv2.
lv_message-message_v3 = sy-msgv3.
lv_message-message_v4 = sy-msgv4.
APPEND lv_message TO rt_messages.
ENDTRY.
ENDMETHOD.

You might also like