SAP GOS附件上传与下载[代码直接可用]
在采购订单屏幕的左上角有个特殊的按钮,可以通过它创建、查看或删除采购订单的附件。这个按钮是使用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附件上传与下载[代码直接可用]相关推荐
- 利用钉钉云盘实现业务系统需要的附件上传、下载和预览
本文主要记录自己在工作学习中遇到的坑和解决思路,仅供大家参考 目录 前言 一.钉盘是什么? 二.为什么要使用钉盘? 三.JSAPI鉴权 1.鉴权的时机 2.鉴权的时效 3.鉴权的代码 3.1.获取ac ...
- SAP服务器文件上传和下载
经常会在报表中需要用到文件模板,比如新增和修改物料主数据.上传计划数据等等.而user经常会因为找不到模板而对你进行各种骚扰.所以,何不直接把模板放在服务器上,并在报表上提供相应的按钮供user自行下 ...
- 山东大学项目实训(十七)—— 微信小程序附件上传、下载、预览、删除
目录 附件相关功能再实现 附件业务功能介绍 设计步骤 我的上报查看事件详情 (补充) 附件相关功能再实现 下图为笔者之前所写的博客关于实现的附件上传,但是没有下载.预览和删除.正因为没有下载.预览和删 ...
- SpringBoot附件上传和下载
附件上传 @PostResource(name = "新增填报", path = "/addEmmissionsReductionInput", require ...
- odoo 附件上传与下载
在想上传附件的模型仲添加一个关联字段 关联模型:ir.attachment res_id 是附件模型的关联字段,其他模型也可以直接这样写. 这样就可以实现附件的上传与下载 转载于:https://ww ...
- 解决本地从 github上传或下载代码时每次都需要输入用户名和密码
第一步,在本地执行如下命令 git config --global credential.helper store 第二步,在执行上传或下载时,输入用户名和密码即可,以后就不用输了
- git命令上传和下载代码
上传代码 git add [-A] 文件目录 #-A代表提交所有 git add -A . #添加所有被修改的文件git commit -m "提交的信息" git push -u ...
- 微信js sdk 授权上传头像下载代码片段和注意事项
/* * 描述:当前页授权 * @param url 例:index.html / 如果有参数,需加密index.html?id=1 */ 1.对需要运用js sdk的页面授权 get ...
- SAP CRM附件上传的一种增强实现
最新文章
- poj2503 Babelfish
- js iframe是否加载完成,加载完成执行函数
- kenrel volatile关键字
- IDEA中 30 秒生成 Spring Cloud Alibaba 工程
- js/d3.min.js_在5分钟内学习D3.js
- 怎样给oracle表设置序列,Oracle的sequence序列在hibernate中的配置方法
- C++基本数据类型列表
- xampp apache无法启动的解决方法
- G2.9 std_alloc源码剖析
- iOS静态库.a文件制作和导入使用
- 使用Prometheus监控Flink
- [20161118]rman备份的疑问2.txt
- 项目管理第五章项目范围管理
- Linux如何实现网络通信
- 互联网创业的未来挖掘思路分享
- 高等数学(第七版)同济大学 习题12-8 个人解答
- html mp4播放器插件,jQuery mp4视频播放器插件
- matlab 信号相位角,FFT信号处理后幅度、相角的问题
- hadoop安装过程命令汇总
- 基于聚类(Kmeans)算法实现客户价值分析系统(电信运营商)
热门文章
- 扑克王怎样于市场中基于金叉死叉进行趋势跟踪
- 史上最难618,TCL夺得电视行业京东和天猫份额双第一
- 资本赋能|灵途科技获数千万元融资,深化人工智能物联网布局
- linux ls全拼,2020-3-4--linux常用命令全拼
- SuperMap iClient3D for WebGL教程- 淹没分析
- 阿里云学生服务器专注于学生搭建个人博客
- 映客2020.12.16一面面经
- cocos2dx3.2打包apk
- zip格式压缩和解压缩(支持中文和文件嵌套解压缩)
- android开发:Theme.Light.NoTitleBar和Theme.Light.NoTitleBar.Fullscreen的区别