1、GOS介绍
GOS是一个连接文档和SAP内各种对象的工具,在SAP的一些凭证中,可以通过GOS进行附件的上传、查看和删除等功能,例如采购订单、会计凭证等。
如果没有这个按钮,可以将当前登录用户的类型设置为对话即可。
2、前台附件上传
点击创建附件,选择需要上传的附件即可
点击附件清单,即可查看上传的附件
并且可以对当前上传的附件进行删除操作
3、代码实现
源代码
"--------------------@斌将军--------------------
REPORT zgos.
TYPE-POOLS: slis,abap,truxs.
INCLUDE <cntn01>.
*----------------------------------------------------------------------*
* 屏幕定义
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-002.
PARAMETERS:p_file TYPE rlgrap-filename MEMORY ID p, "上载模版路径
p_belnr TYPE bkpf-belnr OBLIGATORY,
p_gjahr TYPE bkpf-gjahr OBLIGATORY,
p_bukrs TYPE bkpf-bukrs OBLIGATORY.
SELECTION-SCREEN END OF BLOCK blk1.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN on HELP-REQUEST|VALUE-REQUEST *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
"选择路径
PERFORM frm_choose_file.
*----------------------------------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------------------------------*
START-OF-SELECTION.
"上传附件
PERFORM frm_upload_file.
*&---------------------------------------------------------------------*
*& Form FRM_CHOOSE_FILE
*&---------------------------------------------------------------------*
* 选择文件
*----------------------------------------------------------------------*
FORM frm_choose_file.
"F4 选择文件
CALL FUNCTION 'F4_FILENAME'
IMPORTING
file_name = p_file.
IF sy-subrc <> 0.
ENDIF.
ENDFORM. "FRM_CHOOSE_FILE
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_FILE
*&---------------------------------------------------------------------*
* 上传附件
*----------------------------------------------------------------------*
FORM frm_upload_file.
DATA:lt_swcont TYPE TABLE OF swcont WITH HEADER LINE,
lt_binrel_attrib TYPE TABLE OF brelattr,
lt_bin TYPE TABLE OF solix.
DATA:lv_filename TYPE string,
lv_long_filename TYPE dbmsgora-filename,
lv_pure_filename TYPE sdbah-actid,
lv_pure_extension TYPE sdbad-funct,
ls_obja TYPE borident,
ls_roleb TYPE borident,
ls_binrel TYPE gbinrel,
ls_attsize TYPE int4,
lo_swc_obj TYPE swc_object.
"上传文件
CLEAR:lv_filename.
lv_filename = p_file.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lv_filename
filetype = 'BIN'
IMPORTING
filelength = ls_attsize
TABLES
data_tab = lt_bin
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.
IF sy-subrc <> 0.
MESSAGE '文件上传失败' TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ELSE.
CLEAR:lv_long_filename.
lv_long_filename = lv_filename.
"截取文件名称和后缀
CALL FUNCTION 'SPLIT_FILENAME'
EXPORTING
long_filename = lv_long_filename
IMPORTING
pure_filename = lv_pure_filename
pure_extension = lv_pure_extension.
"转换文件
swc_create_object lo_swc_obj 'MESSAGE' ''.
swc_set_element lt_swcont 'NO_DIALOG' 'X'.
swc_set_element lt_swcont 'DOCUMENTTITLE' lv_pure_filename."文件名
swc_set_table lt_swcont 'Content_Hex' lt_bin."文件内容
swc_set_element lt_swcont 'DOCUMENTTYPE' lv_pure_extension."文件格式
swc_set_element lt_swcont 'DOCUMENTSIZE' ls_attsize."文件大小
swc_refresh_object lo_swc_obj.
swc_call_method lo_swc_obj 'CREATE' lt_swcont.
swc_get_object_key lo_swc_obj ls_roleb-objkey.
ls_roleb-objtype = 'MESSAGE'. "
ls_obja-objtype = 'BKPF'. "
ls_obja-objkey = p_bukrs && p_belnr && p_gjahr."拼接会计公司、会计凭证、会计年度
"上传附件
CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT'
EXPORTING
obj_rolea = ls_obja
obj_roleb = ls_roleb
relationtype = 'ATTA'
IMPORTING
binrel = ls_binrel
TABLES
binrel_attrib = lt_binrel_attrib
EXCEPTIONS
no_model = 1
internal_error = 2
unknown = 3
OTHERS = 4.
IF sy-subrc EQ 0.
MESSAGE s043(sgos_msg)."已成功创建附件
ENDIF.
ENDIF.
ENDFORM.
"--------------------@斌将军--------------------
定期更文,欢迎关注