首页 > 其他分享 >ABAP:GOS上传和下载附件功能

ABAP:GOS上传和下载附件功能

时间:2024-02-20 16:22:20浏览次数:23  
标签:TYPE OBJECT LV ABAP LS 上传 ID GOS

 

GOS附件上传

常用的几种对象类型:

采购订单:BUS2012

销售订单:BUS2032

DN交货单:LIKP

销售发票:VBRK

采购发票:BUS2081

会计凭证:BUS6035

可以在TOJTT表中查找相关对象类型

*&---------------------------------------------------------------------*
*& Report  ZTEST_GOS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ztest_gos.

START-OF-SELECTION.

  PERFORM gos_upload USING 'BUS2012'
                           '4500000105'
                           'C:\Users\SC10516\Desktop\新建文本文档.txt'.
*&---------------------------------------------------------------------*
*&      Form  GOS_UPLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0007   text
*      -->P_0008   text
*      -->P_0009   text
*      <--P_SY_SUBRC  text
*----------------------------------------------------------------------*
FORM gos_upload  USING    p_objtype
                          p_objkey
                          p_filestr.

  DATA : obj_roleb    TYPE borident,
         obj_rolea    TYPE borident,
         document     LIKE sood4,
         folder_id    LIKE soodk,
         header_data  LIKE sood2,
         folmem_data  LIKE sofm2,
         receive_data LIKE soos6.

  DATA : BEGIN OF lt_files OCCURS 0,
           filename(128),
         END OF lt_files.

*** 获取文件夹根ID
  CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
    EXPORTING
      owner                 = ' '
      region                = 'B'
    IMPORTING
      folder_id             = folder_id
    EXCEPTIONS
      communication_failure = 1
      owner_not_exist       = 2
      system_failure        = 3
      x_error               = 4.

  CLEAR lt_files[].
  APPEND p_filestr TO lt_files.

*** 取上传文件的标题作为附件的剪短描述
  CALL FUNCTION 'J_3RVATD_SPLIT_FILENAME'
    EXPORTING
      iv_long_filename = p_filestr
    IMPORTING
      ev_pure_filename = header_data-objdes
*     EV_PURE_EXTENSION       =
    .

*** 对象文件夹:来自 ID 的对象类型
  document-foltp = folder_id-objtp.
*** 对象文件夹:来自 ID 的年
  document-folyr = folder_id-objyr.
*** 对象文件夹:来自 ID 的编号
  document-folno = folder_id-objno.
*** 内容的简短描述
  document-objdes = header_data-objdes.
*** 文档,文件夹或分配清单的名称
  document-objnam = header_data-objdes.

  CALL FUNCTION 'SO_DOCUMENT_REPOSITORY_MANAGER'
    EXPORTING
      method       = 'IMPORTFROMPC'
*     OFFICE_USER  =
*     REF_DOCUMENT =
*     NEW_PARENT   =
*   IMPORTING
*     AUTHORITY    =
*     RCODE        =
    TABLES
*     OBJCONT      =
*     OBJHEAD      =
*     OBJPARA      =
*     OBJPARB      =
*     RECIPIENTS   =
*     ATTACHMENTS  =
*     REFERENCES   =
      files        = lt_files[]
    CHANGING
      document     = document
      header_data  = header_data
      folmem_data  = folmem_data
      receive_data = receive_data.

  IF document-okcode = 'CREA' OR document-okcode = 'CHNG'.

*** 对象关键字
    obj_rolea-objkey = p_objkey.
*** 对象类型
    obj_rolea-objtype = p_objtype.

*** 对象类型
    obj_roleb-objtype = 'MESSAGE'.
*** 对象关键字
    obj_roleb-objkey = document(34).

    CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT'
      EXPORTING
        obj_rolea      = obj_rolea
        obj_roleb      = obj_roleb
        relationtype   = 'ATTA'
*   IMPORTING
*       BINREL         =
*   TABLES
*       BINREL_ATTRIB  =
      EXCEPTIONS
        no_model       = 1
        internal_error = 2
        unknown        = 3.
    IF sy-subrc = 0.
      WRITE : 'Upload success.'.
    ELSE.
      WRITE : 'Upload fail.'.
    ENDIF.
  ELSE.
    WRITE : 'Create fail.'.
  ENDIF.
ENDFORM.                    " GOS_UPLOAD

GOS下载

*&---------------------------------------------------------------------*
*& Report  ZTEST_GOS1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ztest_gos1.

START-OF-SELECTION.

  PERFORM gos_download USING 'BUS2012'
                             '4500000105'
                             'D:\说明文档.text'.

*&---------------------------------------------------------------------*
*&      Form  GOS_DOWNLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0007   text
*      -->P_0008   text
*      -->P_0009   text
*----------------------------------------------------------------------*
FORM gos_download  USING    p_classname
                             p_ebeln
                            p_filestr.

  DATA : BEGIN OF itab_srgb OCCURS 0.
           INCLUDE STRUCTURE srgbtbrel.
  DATA : filename(200),
         END OF itab_srgb.
  DATA : objcont            TYPE TABLE OF soli,
         folder_id          LIKE soodk,
         object_id          LIKE soodk,
         loio_object        LIKE sdokobject,
         context            LIKE sdokpropty OCCURS 0 WITH HEADER LINE,
         phio_object        LIKE sdokobject,
         file_access_info   LIKE sdokfilaci OCCURS 0 WITH HEADER LINE,
         file_content_ascii LIKE sdokcntasc OCCURS 0 WITH HEADER LINE,
         cont_bin           LIKE sdokcntbin OCCURS 0 WITH HEADER LINE.

  SELECT * FROM srgbtbrel
    INTO TABLE itab_srgb
    WHERE instid_a = p_ebeln
      AND typeid_a = p_classname
      AND catid_a = 'BO'
      AND reltype = 'ATTA'
      AND logsys_a = ''.

  READ TABLE itab_srgb INDEX 1.
  folder_id = itab_srgb-instid_b+0(17).
  object_id = itab_srgb-instid_b+17(17).

  CALL FUNCTION 'SO_OBJECT_READ'
    EXPORTING
      folder_id                  = folder_id
      object_id                  = object_id
    TABLES
      objcont                    = objcont
    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.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.

  CALL FUNCTION 'SO_KPRO_DATA_FROM_OBJCONT_GET'
    IMPORTING
      loio_object       = loio_object
    TABLES
      objcont           = objcont
      context           = context
    EXCEPTIONS
      missing_kpro_data = 1.

  IF sy-subrc = 0 .
    CALL FUNCTION 'SO_LOIO_PHIO_GET'
      EXPORTING
        loio_object        = loio_object
      IMPORTING
        phio_object        = phio_object
      TABLES
        context            = context
      EXCEPTIONS
        kpro_inconsistency = 1
        x_error            = 2.
    CALL FUNCTION 'SDOK_PHIO_LOAD_CONTENT'
      EXPORTING
        object_id           = phio_object
        text_as_stream      = 'X'
      TABLES
        file_access_info    = file_access_info
        file_content_ascii  = file_content_ascii
        file_content_binary = cont_bin
      EXCEPTIONS
        not_existing        = 1
        not_authorized      = 2
        no_content          = 3
        bad_storage_type    = 4.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename                = p_filestr
        filetype                = 'BIN'
      TABLES
        data_tab                = cont_bin
      EXCEPTIONS
        file_write_error        = 1
        no_batch                = 2
        gui_refuse_filetransfer = 3
        invalid_type            = 4
        no_authority            = 5
        unknown_error           = 6
        header_not_allowed      = 7
        separator_not_allowed   = 8
        filesize_not_allowed    = 9
        header_too_long         = 10
        dp_error_create         = 11
        dp_error_send           = 12
        dp_error_write          = 13
        unknown_dp_error        = 14
        access_denied           = 15
        dp_out_of_memory        = 16
        disk_full               = 17
        dp_timeout              = 18
        file_not_found          = 19
        dataprovider_exception  = 20
        control_flush_error     = 21.
  ELSE.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename                = p_filestr
        filetype                = 'ASC'
      TABLES
        data_tab                = objcont
      EXCEPTIONS
        file_write_error        = 1
        no_batch                = 2
        gui_refuse_filetransfer = 3
        invalid_type            = 4
        no_authority            = 5
        unknown_error           = 6
        header_not_allowed      = 7
        separator_not_allowed   = 8
        filesize_not_allowed    = 9
        header_too_long         = 10
        dp_error_create         = 11
        dp_error_send           = 12
        dp_error_write          = 13
        unknown_dp_error        = 14
        access_denied           = 15
        dp_out_of_memory        = 16
        disk_full               = 17
        dp_timeout              = 18
        file_not_found          = 19
        dataprovider_exception  = 20
        control_flush_error     = 21.

  ENDIF.

  IF sy-subrc = 0 .
    WRITE : 'Download success.'.
  ELSE.
    WRITE : 'Download fail.'.
  ENDIF.


*  DATA:
*       OWN_LOGICAL_SYSTEM  LIKE TBDLS-LOGSYS,
*       CLASSNAME          LIKE  BAPIBDS01-CLASSNAME,
*       GOS_OBJKEY         LIKE  SWOTOBJID-OBJKEY,
*       LT_GOS_CONNECTIONS LIKE BDN_CON OCCURS 1 WITH HEADER LINE,
*       LV_ID             TYPE SOFOLENTI1-DOC_ID,
*       LS_DOC_DATA       TYPE SOFOLENTI1,
*       LT_OBJECT_HEADER  TYPE STANDARD TABLE OF SOLISTI1 WITH HEADER LINE,
*       LT_OBJECT_CONTENT TYPE STANDARD TABLE OF SOLISTI1 WITH HEADER LINE,
*       LT_HEX            TYPE STANDARD TABLE OF SOLIX WITH HEADER LINE.
*
**** 获得当前的SAP系统名
*  CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
*    IMPORTING
*      OWN_LOGICAL_SYSTEM                = OWN_LOGICAL_SYSTEM
*    EXCEPTIONS
*      OWN_LV_LOGICAL_SYSTEM_NOT_DEFINED = 1
*      OTHERS                            = 2.
*
**** 对象关键字
*  GOS_OBJKEY = P_EBELN.
*
**** 获取GOS的链接
*  CALL FUNCTION 'BDS_GOS_CONNECTIONS_GET'
*    EXPORTING
*      LOGICAL_SYSTEM     = OWN_LOGICAL_SYSTEM
*      CLASSNAME          = P_CLASSNAME
*      OBJKEY             = GOS_OBJKEY
*      CLIENT             = SY-MANDT
*    TABLES
*      GOS_CONNECTIONS    = LT_GOS_CONNECTIONS
*    EXCEPTIONS
*      NO_OBJECTS_FOUND   = 1
*      INTERNAL_ERROR     = 2
*      INTERNAL_GOS_ERROR = 3
*      OTHERS             = 4.
*
*  LOOP AT LT_GOS_CONNECTIONS.
*
**** 文件夹条目 ID(对象+文件夹+转发者姓名)
*    LV_ID = LT_GOS_CONNECTIONS-LOIO_ID.
*
**** 通过GOS连接读取具体的附件文档名称、内容等相关信息
*    CALL FUNCTION 'SO_DOCUMENT_READ_API1'
*      EXPORTING
*        DOCUMENT_ID                = LV_ID
*      IMPORTING
*        DOCUMENT_DATA              = LS_DOC_DATA
*      TABLES
*        OBJECT_HEADER              = LT_OBJECT_HEADER
*        OBJECT_CONTENT             = LT_OBJECT_CONTENT
*        CONTENTS_HEX               = LT_HEX
*      EXCEPTIONS
*        DOCUMENT_ID_NOT_EXIST      = 1
*        OPERATION_NO_AUTHORIZATION = 2
*        X_ERROR                    = 3
*        OTHERS                     = 4.
*    BREAK-POINT.
*
*  ENDLOOP.

ENDFORM.                    " GOS_DOWNLOAD

GOS上传URL

FUNCTION ZFM_SD_CREATE_URL .
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IS_INFO) TYPE  ZSSD0022 OPTIONAL
*"  TABLES
*"      IT_URL STRUCTURE  ZSSD0020 OPTIONAL
*"      ET_RETURN STRUCTURE  ZSSD0023 OPTIONAL
*"----------------------------------------------------------------------
  DATA:LV_OBJTYP TYPE SWO_OBJTYP. "(table BDS_LOCL)
  DATA:FOLDER_ID TYPE SOFDK.
  DATA LV_URL_ID   TYPE SO_URL.
  DATA:LT_OBJCONT TYPE TABLE OF SOLI,
       LS_OBJCONT TYPE SOLI.
  DATA:LT_OBJHEAD TYPE TABLE OF SOLI,
       LS_OBJHEAD TYPE SOLI.
  DATA:LS_OBJECT_HD TYPE SOOD1,
       LS_OBJECT_ID TYPE SOODK.
  DATA:DOCUMENT_ID TYPE SOFMK,
       LS_ROLEA    TYPE BORIDENT,
       LS_ROLEB    TYPE BORIDENT.
  DATA:LV_MSG TYPE STRING.


  CASE IS_INFO-ZBUTYPE.
    WHEN 'S'. "SO
      LV_OBJTYP = 'BUS2032'.
    WHEN 'D'. "DN
      LV_OBJTYP = 'LIKP'.
    WHEN 'B'. "BILL
      LV_OBJTYP = 'VBRK'.
    WHEN 'R'.
      LV_OBJTYP = 'BUS2081'.
    WHEN 'X'."PR
      LV_OBJTYP = 'BUS2105'.
    WHEN OTHERS.
      ET_RETURN-TYPE = 'E'.
      ET_RETURN-MESSAGE = '不支持当前业务类型'.
      APPEND ET_RETURN.
      RETURN.
  ENDCASE.


  CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
    EXPORTING
      REGION    = 'B'
    IMPORTING
      FOLDER_ID = FOLDER_ID
    EXCEPTIONS
      OTHERS    = 1.

  LOOP AT IT_URL INTO DATA(LS_URL).
    CLEAR:LV_URL_ID,LS_OBJECT_HD,LS_OBJECT_ID,LT_OBJCONT,LT_OBJHEAD,
          LS_ROLEA,LS_ROLEB,LV_MSG.

    LV_URL_ID = LS_URL-URL.

    WHILE NOT LV_URL_ID IS INITIAL.
      CONCATENATE '&KEY&' LV_URL_ID(250) INTO LS_OBJCONT.
      APPEND LS_OBJCONT TO LT_OBJCONT.
      SHIFT LV_URL_ID LEFT BY 250 PLACES.
    ENDWHILE.

    LS_OBJECT_HD-OBJDES = LS_URL-TITLE.
    LS_OBJECT_HD-OBJSNS = 'O'.
    LS_OBJECT_HD-OBJLA  = SY-LANGU.

    CALL FUNCTION 'SO_OBJECT_INSERT'
      EXPORTING
        FOLDER_ID                  = FOLDER_ID
*       OBJECT_FL_CHANGE           = ' '
        OBJECT_HD_CHANGE           = LS_OBJECT_HD
        OBJECT_TYPE                = 'URL'
*       ORIGINATOR_ID              = ' '
*       OWNER                      = ' '
      IMPORTING
*       OBJECT_FL_DISPLAY          =
*       OBJECT_HD_DISPLAY          =
        OBJECT_ID                  = LS_OBJECT_ID
      TABLES
        OBJCONT                    = LT_OBJCONT
        OBJHEAD                    = LT_OBJHEAD
*       OBJPARA                    =
*       OBJPARB                    =
      EXCEPTIONS
        ACTIVE_USER_NOT_EXIST      = 1
        COMMUNICATION_FAILURE      = 2
        COMPONENT_NOT_AVAILABLE    = 3
        DL_NAME_EXIST              = 4
        FOLDER_NOT_EXIST           = 5
        FOLDER_NO_AUTHORIZATION    = 6
        OBJECT_TYPE_NOT_EXIST      = 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 = 0.

      DOCUMENT_ID-FOLTP = FOLDER_ID-FOLTP.
      DOCUMENT_ID-FOLYR = FOLDER_ID-FOLYR.
      DOCUMENT_ID-FOLNO = FOLDER_ID-FOLNO.
      DOCUMENT_ID-DOCTP = LS_OBJECT_ID-OBJTP.
      DOCUMENT_ID-DOCYR = LS_OBJECT_ID-OBJYR.
      DOCUMENT_ID-DOCNO = LS_OBJECT_ID-OBJNO.

      LS_ROLEA-OBJKEY = IS_INFO-OBJKEY.
      LS_ROLEA-OBJTYPE = LV_OBJTYP.

      LS_ROLEB-OBJKEY   = DOCUMENT_ID .
      LS_ROLEB-OBJTYPE  = 'MESSAGE' .

      CALL FUNCTION 'BINARY_RELATION_CREATE'
        EXPORTING
          OBJ_ROLEA    = LS_ROLEA " IS_OBJECT
          OBJ_ROLEB    = LS_ROLEB "REL_DOC
          RELATIONTYPE = 'URL' "'NOTE'
        EXCEPTIONS
          OTHERS       = 1.
      IF SY-SUBRC <> 0.
        ROLLBACK WORK.
        ET_RETURN-TITLE = LS_URL-TITLE.
        ET_RETURN-TYPE = 'E'.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
          INTO LV_MSG.
        ET_RETURN-MESSAGE = LV_MSG.
        APPEND ET_RETURN.
        CLEAR ET_RETURN.
        CONTINUE.
      ELSE.
        COMMIT WORK.
        ET_RETURN-TITLE = LS_URL-TITLE.
        ET_RETURN-TYPE = 'S'.
        APPEND ET_RETURN.
        CLEAR ET_RETURN.
        CONTINUE.
      ENDIF.
    ELSE.
      ROLLBACK WORK.
      ET_RETURN-TITLE = LS_URL-TITLE.
      ET_RETURN-TYPE = 'E'.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
       INTO LV_MSG.
      ET_RETURN-MESSAGE = LV_MSG.
      APPEND ET_RETURN.
      CLEAR ET_RETURN.
      CONTINUE.
    ENDIF.

  ENDLOOP.


ENDFUNCTION.

 

 

标签:TYPE,OBJECT,LV,ABAP,LS,上传,ID,GOS
From: https://www.cnblogs.com/ap-ad-java-abap/p/18023017

相关文章

  • ABAP:AS01固定资产主数据创建BAPI
    BAPI_FIXEDASSET_CREATE1*&---------------------------------------------------------------------**&Formfrm_zzsdr_data*&---------------------------------------------------------------------**&text*&-------------------------------......
  • ABAP:ABAW资产减值重固BAPI
    BAPI_ASSET_REVALUATION_POST*&---------------------------------------------------------------------**&Formfrm_import_data*&---------------------------------------------------------------------**&text*&--------------------------......
  • ABAP:PP->MD61创建独立需求计划BAPI
    BAPI_REQUIREMENTS_CREATE*&---------------------------------------------------------------------**&Formfrm_create_pbdnr_matnr*&---------------------------------------------------------------------**&text*&----------------------......
  • ABAP:ME21N状态栏添加自定义按钮
    SE38:LMEGUICJL---->代码增强点ENHANCEMENT1Z_SEND_PO_TO_OA."activeversionIFim_fcode='OA'.DATA:ls_returnTYPEzscomm03,lv_bsartTYPEekko-bsart.DATA:lv_statusTYPEzshr0004,ls_ekkoTYPEekko.CLEARim......
  • ABAP:MM01/MM02/MM03物料主数据增强
    1.屏幕增强-在主表中附加结构(判断数据的主表,如MARA,MARC)增强字段数据元素勾选更改文档以后,会记录字段变更历史 -SPRO-->物流-常规-->物料主数据-->配置物料主记录-->创建定制子屏幕的程序 会生成对应的函数组--里面会包含两个屏幕(0001,0002)这里的0001屏幕作为......
  • python 文件上传
    #-*-coding:utf-8-*-fromtornado.webimporturlimporttornado.webfromtornadoimporthttpclientfrom.baseimportBaseHandlerfromutils.utilsimportcreate_passwordfromutils.decoratorsimportjwt_async,auth_validated,role_validatedimportpeew......
  • .NET 8 中 使用 IFormFile 上传大文件报错解决方案
    前言:项目中使用IFormFile写了一个上传文件的api,测试小文件时正常,当上传大文件(几十兆)时如下报错:使用默认的http启动,如下提示使用IIS启动,如下报错Error:RequestEntityTooLarge原因:.NET官方出于安全考虑,对body的大小做了限制,超出了限制就会form转化失败,导致我们Reuest.......
  • DVWA-File Upload(文件上传漏洞)
    FileUpload文件上传漏洞是通过上传文件功能,上传一些可执行的脚本文件,且服务器端没有对上传的文件进行严格的校验或者在服务器端没有对上传的文件进行安全策略的配置,导致文件能成功上传到服务器上,且能够解析执行。DVWA-FileUpload的级别:--low--medium--high......
  • bug-missing GOSUMDB
     问题描述:D:\gopj>gomodtidygo:findingmoduleforpackagego.uber.org/zapgo:findingmoduleforpackagegithub.com/valyala/fasthttpgo:downloadinggo.uber.org/zapv1.26.0go:downloadinggithub.com/valyala/fasthttpv1.52.0go:githun.com/bigwh......
  • 第24天:安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制
    #文件管理模块-上传-过滤机制1、无过滤机制2、黑名单过滤机制3、白名单过滤机制4、文件类型过滤机制 $_FILES:PHP中一个预定义的超全局变量,用于在上传文件时从客户端接收文件,并将其保存到服务器上。它是一个包含上传文件信息的数组,包括文件名、类型、大小、临时文件名等信息......