SAP ABAP - URL Attachment
Updated: Aug 29, 2022
INCLUDE : <cntn01> .
TYPES: BEGIN OF ty_message_key,
foltp TYPE so_fol_tp ,
folyr TYPE so_fol_yr ,
folno TYPE so_fol_no ,
doctp TYPE so_doc_tp ,
docyr TYPE so_doc_yr ,
docno TYPE so_doc_no ,
fortp TYPE so_for_tp ,
foryr TYPE so_for_yr ,
forno TYPE so_for_no ,
END OF ty_message_key.
DATA : lv_message_key TYPE ty_message_key.
DATA : p_reltyp LIKE mdoblrel- reltype VALUE 'URL' .
DATA : folder_id TYPE sofdk,
document_id TYPE sofmk ,
document_title TYPE sood-objdes ,
url TYPE so_url,
is_object TYPE borident .
DATA rel_doc TYPE borident.
data url_save type so_url .
PARAMETERS : p_ebeln TYPE ekpo- ebeln,
p_url TYPE char100 .
PERFORM add_attachment_url USING p_ebeln p_url.
FORM add_attachment_url USING pv_ebeln
pv_link .
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
region = 'B'
IMPORTING
folder_id = folder_id
EXCEPTIONS
OTHERS = 1.
CLEAR url.
CLEAR document_id. "note 1387602
document_title = 'EBA FORM'.
CLEAR rel_doc.
rel_doc-objkey = document_id.
rel_doc-objtype = 'MESSAGE'.
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
obj_rolea = is_object
obj_roleb = rel_doc
relationtype = 'URL'
EXCEPTIONS
OTHERS = 1.
CLEAR rel_doc.
CONCATENATE document_id- FOLTP
document_id-FOLYR
document_id-FOLNO
document_id-DOCTP
document_id-DOCYR
document_id-DOCNO
into rel_doc-objkey .
* rel_doc-objkey = document_id.
rel_doc-objtype = 'MESSAGE'.
is_object-objkey = pv_ebeln.
is_object-objtype = 'BUS2012'.
url = pv_link.
perform create_url_doc.
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
obj_rolea = is_object
obj_roleb = rel_doc
relationtype = 'URL'
EXCEPTIONS
OTHERS = 1.
IF sy- subrc = 0 .
lv_message_key = document_id.
ENDIF.
DATA : lo_is_object_a TYPE sibflporb.
lo_is_object_a-instid = pv_ebeln .
lo_is_object_a-typeid = 'BUS2012' .
lo_is_object_a-catid = 'BO' .
DATA : lo_is_object_b TYPE sibflporb.
lo_is_object_b-instid = document_id .
lo_is_object_b-typeid = 'MESSAGE' .
lo_is_object_b-catid = 'BO' .
CALL METHOD cl_binary_relation=> create_link
EXPORTING
is_object_a = lo_is_object_a
is_object_b = lo_is_object_b
ip_reltype = p_reltyp.
COMMIT WORK .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_URL_DOC
*&---------------------------------------------------------------------*
FORM create_url_doc .
data lt_objhead type standard table of soli.
data lt_objcont type standard table of soli.
data ls_objcont type soli.
data lt_urltab type standard table of sood-objdes .
data l_tab_size type i .
data l_url_id type so_url.
data l_obj_id type soodk.
data l_obj_data type sood1.
* l_url_id = url. "note 509858
if url_save( 255) <> url (255). "note 1884687
l_url_id = url.
else.
l_url_id = url_save.
endif.
while not l_url_id is initial .
concatenate '&KEY&' l_url_id( 250) into ls_objcont.
append ls_objcont to lt_objcont .
shift l_url_id left by 250 places.
endwhile.
l_obj_data-objsns = 'O'.
l_obj_data-objla = sy-langu .
if document_title is initial .
split url at '/' into table lt_urltab.
describe table lt_urltab lines l_tab_size .
read table lt_urltab index l_tab_size into document_title.
endif.
l_obj_data-objdes = document_title.
call function 'SO_OBJECT_INSERT'
exporting
folder_id = folder_id
object_type = 'URL'
object_hd_change = l_obj_data
importing
object_id = l_obj_id
tables
objhead = lt_objhead
objcont = lt_objcont
exceptions
active_user_not_exist = 35
folder_not_exist = 6
object_type_not_exist = 17
owner_not_exist = 22
parameter_error = 23
others = 1000.
if sy- subrc = 0 .
document_id- foltp = folder_id -foltp.
document_id- folyr = folder_id -folyr.
document_id- folno = folder_id -folno.
document_id- doctp = l_obj_id -objtp.
document_id- docyr = l_obj_id -objyr.
document_id- docno = l_obj_id -objno.
else.
endif.
ENDFORM.