在采购订单屏幕的左上角有个特殊的按钮,可以通过它创建、查看或删除采购订单的附件。这个按钮是使用GOS(Generic Object Service)工具实现的,可以把GOS理解为一个连接文档和SAP内各种对象的一个工具,包括,采购订单(me23n),会计凭证(FB03)等等都用到了GOS。这里以采购订单附件的上传和下载为例进行说明。

一、附件上传

样例代码如下:

*&---------------------------------------------------------------------*
*& Report  ZTEST_GOS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*REPORT ZTEST_GOS.START-OF-SELECTION.PERFORM GOS_UPLOAD USING 'BUS2012''4500000020''C:\111.doc'.
*&---------------------------------------------------------------------*
*&      Form  GOS_UPLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0007   text
*      -->P_0008   text
*      -->P_0009   text
*      <--P_SY_SUBRC  text
*----------------------------------------------------------------------*
FORM GOS_UPLOAD  USING    P_OBJTYPEP_OBJKEYP_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.*** 获取文件夹根IDCALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'EXPORTINGOWNER                 = ' 'REGION                = 'B'IMPORTINGFOLDER_ID             = FOLDER_IDEXCEPTIONSCOMMUNICATION_FAILURE = 1OWNER_NOT_EXIST       = 2SYSTEM_FAILURE        = 3X_ERROR               = 4.CLEAR LT_FILES[].APPEND P_FILESTR TO LT_FILES.*** 取上传文件的标题作为附件的剪短描述CALL FUNCTION 'CH_SPLIT_FILENAME'EXPORTINGCOMPLETE_FILENAME = P_FILESTR
*     CHECK_DOS_FORMAT  =IMPORTING
*     DRIVE             =
*     EXTENSION         =NAME              = HEADER_DATA-OBJDES
*     NAME_WITH_EXT     =
*     PATH              =EXCEPTIONSINVALID_DRIVE     = 1INVALID_PATH      = 2.*** 对象文件夹:来自 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'EXPORTINGMETHOD             = 'IMPORTFROMPC'
*     OFFICE_USER        =
*     REF_DOCUMENT       =
*     NEW_PARENT         =
*   IMPORTING
*     AUTHORITY          =
*     RCODE              =TABLES
*     OBJCONT            =
*     OBJHEAD            =
*     OBJPARA            =
*     OBJPARB            =
*     RECIPIENTS         =
*     ATTACHMENTS        =
*     REFERENCES         =FILES              = LT_FILES[]CHANGINGDOCUMENT            = DOCUMENTHEADER_DATA         = HEADER_DATAFOLMEM_DATA         = FOLMEM_DATARECEIVE_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'EXPORTINGOBJ_ROLEA            = OBJ_ROLEAOBJ_ROLEB            = OBJ_ROLEBRELATIONTYPE         = 'ATTA'
*   IMPORTING
*     BINREL               =
*   TABLES
*     BINREL_ATTRIB        =EXCEPTIONSNO_MODEL             = 1INTERNAL_ERROR       = 2UNKNOWN              = 3.IF SY-SUBRC = 0.WRITE : 'Upload success.'.ELSE.WRITE : 'Upload fail.'.ENDIF.ELSE.WRITE : 'Create fail.'.ENDIF.
ENDFORM.                    " GOS_UPLOAD

若上传路径的文件不存在则会有如下提示:

上传成功之后,会在采购订单左上方的“附件清单”中显示。

二、附件下载

样例代码如下:

*&---------------------------------------------------------------------*
*& Report  ZTEST_GOS1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*REPORT ZTEST_GOS1.START-OF-SELECTION.PERFORM GOS_DOWNLOAD USING 'BUS2012''4500000020''D:\说明文档.doc'.*&---------------------------------------------------------------------*
*&      Form  GOS_DOWNLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0007   text
*      -->P_0008   text
*      -->P_0009   text
*----------------------------------------------------------------------*
FORM GOS_DOWNLOAD  USING    P_CLASSNAMEP_EBELNP_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 SRGBTBRELINTO TABLE ITAB_SRGBWHERE INSTID_A = P_EBELNAND TYPEID_A = P_CLASSNAMEAND 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
*   FILTER                           =FOLDER_ID                        = FOLDER_ID
*   FORWARDER                        =OBJECT_ID                        = OBJECT_ID
*   OWNER                            =
*   F_MAILER                         = ' '
* IMPORTING
*   OBJECT_FL_DISPLAY                =
*   OBJECT_HD_DISPLAY                =
*   OBJECT_RC_DISPLAY                =TABLESOBJCONT                          = OBJCONT
*   OBJHEAD                          =
*   OBJPARA                          =
*   OBJPARB                          =EXCEPTIONSACTIVE_USER_NOT_EXIST            = 1COMMUNICATION_FAILURE            = 2COMPONENT_NOT_AVAILABLE          = 3FOLDER_NOT_EXIST                 = 4FOLDER_NO_AUTHORIZATION          = 5OBJECT_NOT_EXIST                 = 6OBJECT_NO_AUTHORIZATION          = 7OPERATION_NO_AUTHORIZATION       = 8OWNER_NOT_EXIST                  = 9PARAMETER_ERROR                  = 10SUBSTITUTE_NOT_ACTIVE            = 11SUBSTITUTE_NOT_DEFINED           = 12SYSTEM_FAILURE                   = 13X_ERROR                          = 14.IF SY-SUBRC <> 0.EXIT.ENDIF.CALL FUNCTION 'SO_KPRO_DATA_FROM_OBJCONT_GET'IMPORTINGLOIO_OBJECT       = LOIO_OBJECTTABLESOBJCONT           = OBJCONTCONTEXT           = CONTEXTEXCEPTIONSMISSING_KPRO_DATA = 1.IF SY-SUBRC = 0 .CALL FUNCTION 'SO_LOIO_PHIO_GET'EXPORTINGLOIO_OBJECT        = LOIO_OBJECTIMPORTINGPHIO_OBJECT        = PHIO_OBJECTTABLESCONTEXT            = CONTEXTEXCEPTIONSKPRO_INCONSISTENCY = 1X_ERROR            = 2.CALL FUNCTION 'SDOK_PHIO_LOAD_CONTENT'EXPORTINGOBJECT_ID           = PHIO_OBJECT
*       CLIENT              = SY-MANDT
*       AS_IS_MODE          =
*       RAW_MODE            =TEXT_AS_STREAM      = 'X'TABLESFILE_ACCESS_INFO    = FILE_ACCESS_INFOFILE_CONTENT_ASCII  = FILE_CONTENT_ASCIIFILE_CONTENT_BINARY = CONT_BINEXCEPTIONSNOT_EXISTING        = 1NOT_AUTHORIZED      = 2NO_CONTENT          = 3BAD_STORAGE_TYPE    = 4.CALL FUNCTION 'GUI_DOWNLOAD'EXPORTING
*       BIN_FILESIZE                    =FILENAME                        = P_FILESTRFILETYPE                        = 'BIN'
*       APPEND                          = ' '
*       WRITE_FIELD_SEPARATOR           = ' '
*       HEADER                          = '00'
*       TRUNC_TRAILING_BLANKS           = ' '
*       WRITE_LF                        = 'X'
*       COL_SELECT                      = ' '
*       COL_SELECT_MASK                 = ' '
*       DAT_MODE                        = ' '
*       CONFIRM_OVERWRITE               = ' '
*       NO_AUTH_CHECK                   = ' '
*       CODEPAGE                        = ' '
*       IGNORE_CERR                     = ABAP_TRUE
*       REPLACEMENT                     = '#'
*       WRITE_BOM                       = ' '
*       TRUNC_TRAILING_BLANKS_EOL       = 'X'
*       WK1_N_FORMAT                    = ' '
*       WK1_N_SIZE                      = ' '
*       WK1_T_FORMAT                    = ' '
*       WK1_T_SIZE                      = ' '
*       WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
*       SHOW_TRANSFER_STATUS            = ABAP_TRUE
*       VIRUS_SCAN_PROFILE              = '/SCET/GUI_DOWNLOAD'
*     IMPORTING
*       FILELENGTH                      =TABLESDATA_TAB                        = CONT_BIN
*       FIELDNAMES                      =EXCEPTIONSFILE_WRITE_ERROR                = 1NO_BATCH                        = 2GUI_REFUSE_FILETRANSFER         = 3INVALID_TYPE                    = 4NO_AUTHORITY                    = 5UNKNOWN_ERROR                   = 6HEADER_NOT_ALLOWED              = 7SEPARATOR_NOT_ALLOWED           = 8FILESIZE_NOT_ALLOWED            = 9HEADER_TOO_LONG                 = 10DP_ERROR_CREATE                 = 11DP_ERROR_SEND                   = 12DP_ERROR_WRITE                  = 13UNKNOWN_DP_ERROR                = 14ACCESS_DENIED                   = 15DP_OUT_OF_MEMORY                = 16DISK_FULL                       = 17DP_TIMEOUT                      = 18FILE_NOT_FOUND                  = 19DATAPROVIDER_EXCEPTION          = 20CONTROL_FLUSH_ERROR             = 21.ELSE.CALL FUNCTION 'GUI_DOWNLOAD'EXPORTING
*       BIN_FILESIZE                    =FILENAME                        = P_FILESTRFILETYPE                        = 'ASC'
*       APPEND                          = ' '
*       WRITE_FIELD_SEPARATOR           = ' '
*       HEADER                          = '00'
*       TRUNC_TRAILING_BLANKS           = ' '
*       WRITE_LF                        = 'X'
*       COL_SELECT                      = ' '
*       COL_SELECT_MASK                 = ' '
*       DAT_MODE                        = ' '
*       CONFIRM_OVERWRITE               = ' '
*       NO_AUTH_CHECK                   = ' '
*       CODEPAGE                        = ' '
*       IGNORE_CERR                     = ABAP_TRUE
*       REPLACEMENT                     = '#'
*       WRITE_BOM                       = ' '
*       TRUNC_TRAILING_BLANKS_EOL       = 'X'
*       WK1_N_FORMAT                    = ' '
*       WK1_N_SIZE                      = ' '
*       WK1_T_FORMAT                    = ' '
*       WK1_T_SIZE                      = ' '
*       WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
*       SHOW_TRANSFER_STATUS            = ABAP_TRUE
*       VIRUS_SCAN_PROFILE              = '/SCET/GUI_DOWNLOAD'
*     IMPORTING
*       FILELENGTH                      =TABLESDATA_TAB                        = OBJCONT
*       FIELDNAMES                      =EXCEPTIONSFILE_WRITE_ERROR                = 1NO_BATCH                        = 2GUI_REFUSE_FILETRANSFER         = 3INVALID_TYPE                    = 4NO_AUTHORITY                    = 5UNKNOWN_ERROR                   = 6HEADER_NOT_ALLOWED              = 7SEPARATOR_NOT_ALLOWED           = 8FILESIZE_NOT_ALLOWED            = 9HEADER_TOO_LONG                 = 10DP_ERROR_CREATE                 = 11DP_ERROR_SEND                   = 12DP_ERROR_WRITE                  = 13UNKNOWN_DP_ERROR                = 14ACCESS_DENIED                   = 15DP_OUT_OF_MEMORY                = 16DISK_FULL                       = 17DP_TIMEOUT                      = 18FILE_NOT_FOUND                  = 19DATAPROVIDER_EXCEPTION          = 20CONTROL_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

若下载路径已存在同名文件则会有如下提示:

下载成功。

SAP GOS附件上传与下载[代码直接可用]相关推荐

  1. 利用钉钉云盘实现业务系统需要的附件上传、下载和预览

    本文主要记录自己在工作学习中遇到的坑和解决思路,仅供大家参考 目录 前言 一.钉盘是什么? 二.为什么要使用钉盘? 三.JSAPI鉴权 1.鉴权的时机 2.鉴权的时效 3.鉴权的代码 3.1.获取ac ...

  2. SAP服务器文件上传和下载

    经常会在报表中需要用到文件模板,比如新增和修改物料主数据.上传计划数据等等.而user经常会因为找不到模板而对你进行各种骚扰.所以,何不直接把模板放在服务器上,并在报表上提供相应的按钮供user自行下 ...

  3. 山东大学项目实训(十七)—— 微信小程序附件上传、下载、预览、删除

    目录 附件相关功能再实现 附件业务功能介绍 设计步骤 我的上报查看事件详情 (补充) 附件相关功能再实现 下图为笔者之前所写的博客关于实现的附件上传,但是没有下载.预览和删除.正因为没有下载.预览和删 ...

  4. SpringBoot附件上传和下载

    附件上传 @PostResource(name = "新增填报", path = "/addEmmissionsReductionInput", require ...

  5. odoo 附件上传与下载

    在想上传附件的模型仲添加一个关联字段 关联模型:ir.attachment res_id 是附件模型的关联字段,其他模型也可以直接这样写. 这样就可以实现附件的上传与下载 转载于:https://ww ...

  6. 解决本地从 github上传或下载代码时每次都需要输入用户名和密码

    第一步,在本地执行如下命令 git config --global credential.helper store 第二步,在执行上传或下载时,输入用户名和密码即可,以后就不用输了

  7. git命令上传和下载代码

    上传代码 git add [-A] 文件目录 #-A代表提交所有 git add -A . #添加所有被修改的文件git commit -m "提交的信息" git push -u ...

  8. 微信js sdk 授权上传头像下载代码片段和注意事项

    /*  * 描述:当前页授权  * @param url   例:index.html / 如果有参数,需加密index.html?id=1     */ 1.对需要运用js sdk的页面授权 get ...

  9. SAP CRM附件上传的一种增强实现

最新文章

  1. poj2503 Babelfish
  2. js iframe是否加载完成,加载完成执行函数
  3. kenrel volatile关键字
  4. IDEA中 30 秒生成 Spring Cloud Alibaba 工程
  5. js/d3.min.js_在5分钟内学习D3.js
  6. 怎样给oracle表设置序列,Oracle的sequence序列在hibernate中的配置方法
  7. C++基本数据类型列表
  8. xampp apache无法启动的解决方法
  9. G2.9 std_alloc源码剖析
  10. iOS静态库.a文件制作和导入使用
  11. 使用Prometheus监控Flink
  12. [20161118]rman备份的疑问2.txt
  13. 项目管理第五章项目范围管理
  14. Linux如何实现网络通信
  15. 互联网创业的未来挖掘思路分享
  16. 高等数学(第七版)同济大学 习题12-8 个人解答
  17. html mp4播放器插件,jQuery mp4视频播放器插件
  18. matlab 信号相位角,FFT信号处理后幅度、相角的问题
  19. hadoop安装过程命令汇总
  20. 基于聚类(Kmeans)算法实现客户价值分析系统(电信运营商)

热门文章

  1. 扑克王怎样于市场中基于金叉死叉进行趋势跟踪
  2. 史上最难618,TCL夺得电视行业京东和天猫份额双第一
  3. 资本赋能|灵途科技获数千万元融资,深化人工智能物联网布局
  4. linux ls全拼,2020-3-4--linux常用命令全拼
  5. SuperMap iClient3D for WebGL教程- 淹没分析
  6. 阿里云学生服务器专注于学生搭建个人博客
  7. 映客2020.12.16一面面经
  8. cocos2dx3.2打包apk
  9. zip格式压缩和解压缩(支持中文和文件嵌套解压缩)
  10. android开发:Theme.Light.NoTitleBar和Theme.Light.NoTitleBar.Fullscreen的区别