SAP ABAP 附件功能实现

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.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值