1. 在开发过程中,部分数据可能需要上载附件,该功能为标准功能,这里演示如何实现加载附件及附件的相应处理.
代码实现:
FORM frm_attach_popup .
DATA: ls_object TYPE sibflporb,
lv_zztr_nb TYPE zztr_nb,
lv_posnr TYPE zztr_posnr.
IF gs_selection-zztr_nb IS INITIAL.
MESSAGE s012 DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ls_object-instid = gs_selection-zztr_nb.
ls_object-typeid = 'ZGSPLIC'.
ls_object-catid = 'BO'.
IF gs_selection-tcode = co_chg.
DATA(lv_mode) = 'E'. "编辑模式
ELSE.
lv_mode = 'D'. "显示模式
ENDIF.
CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
EXPORTING
is_object = ls_object
ip_mode = lv_mode.
ENDFORM.
添加、修改、删除附件后,点击保存按钮就可。
2. 代码实现删除附件:
*&---------------------------------------------------------------------*
*& Form frm_delete_attachment
*&---------------------------------------------------------------------*
*& 删除URL附件
*&---------------------------------------------------------------------*
FORM frm_delete_attachment USING iv_zzlicid TYPE ztgsp_licn_d-zzlicid
iv_zztr_nb TYPE ztgsp_licn_d-zztr_nb
iv_zztr_posnr TYPE ztgsp_licn_d-zztr_posnr.
DATA: ls_object TYPE sibflporb,
lt_relation TYPE obl_t_relt,
lt_links TYPE obl_t_link.
DATA: ls_obj_rolea TYPE borident,
ls_obj_roleb TYPE borident.
DATA:
ls_folder_id TYPE soodk,
ls_object_id TYPE soodk.
* 读取URL附件
ls_object-instid = iv_zztr_nb && iv_zztr_posnr.
ls_object-typeid = 'ZGSPLIC'.
ls_object-catid = 'BO'.
lt_relation = VALUE #( ( sign = 'I'
option = 'EQ'
low = 'URL' ) ).
CALL METHOD cl_binary_relation=>read_links
EXPORTING
is_object = ls_object
it_relation_options = lt_relation
IMPORTING
et_links = lt_links.
* 删除URL附件
LOOP AT lt_links INTO DATA(ls_link).
CLEAR: ls_obj_rolea, ls_obj_roleb.
ls_obj_rolea-objkey = ls_link-instid_a.
ls_obj_rolea-objtype = ls_link-typeid_a.
ls_obj_roleb-objkey = ls_link-instid_b.
ls_obj_roleb-objtype = ls_link-typeid_b.
CALL FUNCTION 'BINARY_RELATION_DELETE'
EXPORTING
obj_rolea = ls_obj_rolea
obj_roleb = ls_obj_roleb
relationtype = 'URL'
EXCEPTIONS
entry_not_existing = 1
internal_error = 2
no_relation = 3
no_role = 4
OTHERS = 5.
IF sy-subrc = 0.
CLEAR: ls_folder_id, ls_object_id.
ls_folder_id-objtp = ls_link-instid_b+0(3).
ls_folder_id-objyr = ls_link-instid_b+3(2).
ls_folder_id-objno = ls_link-instid_b+5(12).
ls_object_id-objtp = ls_link-instid_b+17(3).
ls_object_id-objyr = ls_link-instid_b+20(2).
ls_object_id-objno = ls_link-instid_b+22(12).
CALL FUNCTION 'SO_OBJECT_DELETE'
EXPORTING
folder_id = ls_folder_id
object_id = ls_object_id
EXCEPTIONS
communication_failure = 1
folder_not_empty = 2
folder_not_exist = 3
folder_no_authorization = 4
forwarder_not_exist = 5
object_not_exist = 6
object_no_authorization = 7
operation_no_authorization = 8
owner_not_exist = 9
substitute_not_active = 10
substitute_not_defined = 11
system_failure = 12
x_error = 13
OTHERS = 14.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
3. 代码实现添加附件
*&---------------------------------------------------------------------*
*& Form frm_create_attachment
*&---------------------------------------------------------------------*
*& 新建URL附件
*&---------------------------------------------------------------------*
*& --> is_licn_d 证书
*&---------------------------------------------------------------------*
FORM frm_create_attachment USING iv_zzlicid TYPE ztgsp_licn_d-zzlicid
iv_zztr_nb TYPE ztgsp_licn_d-zztr_nb
iv_zztr_posnr TYPE ztgsp_licn_d-zztr_posnr
iv_zzlictyp TYPE ztgsp_licn_d-zzlictyp
iv_zzlicurl.
DATA: ls_object TYPE sibflporb.
DATA: lv_folder_id TYPE sofdk .
DATA: ls_document_id TYPE sofmk .
DATA l_obj_id TYPE soodk .
ls_object-instid = iv_zztr_nb && iv_zztr_posnr.
ls_object-typeid = 'ZGSPLIC'.
ls_object-catid = 'BO'.
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
region = 'B'
IMPORTING
folder_id = lv_folder_id
EXCEPTIONS
communication_failure = 1
owner_not_exist = 2
system_failure = 3
x_error = 4
OTHERS = 5.
DATA l_obj_data TYPE sood1.
DATA l_url_id TYPE so_url.
DATA lt_objcont TYPE STANDARD TABLE OF soli.
DATA ls_objcont TYPE soli.
DATA lt_objhead TYPE STANDARD TABLE OF soli.
l_obj_data-objsns = 'O'.
l_obj_data-objla = sy-langu.
l_obj_data-objdes = '附件描述'.
"URL
l_url_id = iv_zzlicurl.
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.
CALL FUNCTION 'SO_OBJECT_INSERT'
EXPORTING
folder_id = lv_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.
ls_document_id-foltp = lv_folder_id-foltp.
ls_document_id-folyr = lv_folder_id-folyr.
ls_document_id-folno = lv_folder_id-folno.
ls_document_id-doctp = l_obj_id-objtp.
ls_document_id-docyr = l_obj_id-objyr.
ls_document_id-docno = l_obj_id-objno.
ENDIF.
DATA: ls_object1 TYPE borident,
ls_rel_doc TYPE borident.
ls_object1-objkey = ls_object-instid.
ls_object1-objtype = 'ZGSPLIC'.
ls_rel_doc-objkey = ls_document_id.
ls_rel_doc-objtype = 'MESSAGE'.
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
obj_rolea = ls_object1
obj_roleb = ls_rel_doc
relationtype = 'URL'
EXCEPTIONS
OTHERS = 1.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ENDIF.
ENDFORM.