如何在事务中一次将多个文档添加到GOS

2020-08-19 09:31发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨,专家 我想在一个事务(PO)...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,专家

我想在一个事务(PO)中添加多个文档。

我知道通过使用GOS Customization我们可以一个接一个地添加多个文档,但是 我想一次添加多个文档。

我的逻辑是我创建了一个类(ZCL_MUL_ATTACHMENTS),其超级类为CL_GOS_SERVICE

我重新定义了z的execute方法 使用

调用方法cl_gui_frontend_services => file_open_dialog

的类,导出multiselection ='X'

" file_filter =''

更改file_table = file_tab

rc =返回

例外other = 0。

通过上述方法(multiselection ='X'),我们 一次可以选择多个文件。

然后我将包含多个文件路径的内部表循环到工作区。

在循环中,我使用了CALL FUNCTION'GUI_UPLOAD' 已经从工作区传递了文件路径。

通过这种逻辑,我能够选择多个文件,但无法附加它们。

通过使用create_attachment方法,我们可以创建附件,但如何获取这些多个路径的is_object字段?

调用方法lo_attachment-> create_attachment

导出is_object = ls_object

导入ep_attachment = lp_attachment。

请先谢谢。

Venkat

2条回答
葫芦娃快救爷爷
2020-08-19 10:10

嗨朋友,

您的问题的解决方案是:

1。 在BAPI中创建实施ZGOS_SRV_REQUEST:GOS_SRV_REQUEST

2。 在ZGOS_SRV_REQUEST中放入过滤器:PCATTA_CREA

3。 创建模块函数或方法ZGOS_MULTI_ATTACHEMENT

IMPUT PARAMETERE-IS_LPOR类型的SIBFLPORB和EV_MSG类型的MSGTX。

4。 在实现方法
IF_EX_GOS_SRV_REQUEST〜START_SERVICE

中调用MF或METHOD

5。 将此代码放入MF或METHOD并激活实现。
**************************************** *******************************************

数据:
lt_binary_tab类型solix_tab,
lt_objcont类型soli_tab,
ls_folder_id类型soodk,
ls_obj_id类型soodk,
ls_obj_data类型sood1,
lt_objhead类型标准
ls_objhead TYPE孤单,
ls_obj_rolea TYPE borident,
ls_obj_roleb TYPE borident,
ls_sofmk TYPE sofmk,
lv_ep_note TYPE borident-objkey,
lv_rc TYPE i,
lv ,
lv_filename TYPE字符串,
lv_fname TYPE字符串,
lv_ext TYPE char4,
lv_msg TYPE char50,
lv_text_path TYPE字符串,
lt_bin TYPE标准标准表,
lv_root TYPE字符串,
ls_content TYPE SOLI,
lt_file_table TYPE文件表,
lv_filelength TYPE i,
ls_buffer TYPE xstring,
lo_manager TYPE引用cl_gos_manager,
ls_obj TYPE borident。

调用方法cl_gui_frontend_services => file_open_dialog
导出
initial_directory ='C:\ Temp \'
多项选择='X'
CHANGING
file_table = lt_file_table []
rc = lv_rc
例外
file_op en_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
其他=4。

如果sy-subrc <>0。
情况sy-subrc。
何时1。
lv_msg ='File_open_dialog_failed'。
何时2.
lv_msg ='Cntl_error'。
何时3.
lv_msg ='Error_no_gui'。
何时4.
lv_msg = "其他打开的对话框错误"。
ENDCASE。

消息lv_msg类型'E'像'I'一样显示。
ELSE。

在lt_file_table处循环进入数据(ls_file_table)。
*应同时匹配Windows前端和应用程序服务器路径
免费:lv_root,lv_path,lv_filename,lv_fname,lv_ext。
查找正则表达式'^(。:\\ | \/\///)(。+ \ \ |。+ \/)*(。+)\。(。+)'IN ls_file_table-filename
子对象lv_root lv_path lv_fname lv_ext。

lv_text_path = lv_path。
MOVE ls_file_table-filename TO lv_filename。
将lv_ext转换为大写。
* lv_filename转换为大写。

*上载文件并将内容转换为BIN格式
调用方法cl_gui_frontend_services => gui_upload
导出
>文件名= lv_filename < br> filetype ='BIN'
IMPORTING
filelength = lv_filelength
CHANGING
data_tab = lt_bin
EXCEPTIONS
其他= 1.

如果sy-subrc = 0 。

调用函数'SCMS_BINARY_TO_XSTRING'
导出
input_length = lv_filelength
IMPORTING
buffer = ls_buffer
TABLES
binary_tab = lt_bin
EXCEPTIONS
失败 = 1
其他=2。

如果sy-subrc =0。

调用函数'SCMS_XSTRING_TO_BINARY'
导出
缓冲= ls_buffer
表格
binary_tab = lt_binary_tab。

呼叫功能'SO_SOLIXTAB_TO_SOLITAB'
导出
ip_solixtab = lt_binary_tab
导入
ep_solitab = lt_objcont。

功能名称'RO EXPORTING
区域='B'
IMPORTING
folder_id = ls_folder_id
例外情况
其他= 1.

如果sy-subrc =0。

ls_obj_data -objsns ='O'。
ls_obj_data-objla = sy-langu。
ls_obj_data-objdes = lv_fname。
ls_obj_data-file_ext = lv_ext。
ls_obj_data-objlen = lv_f ilelength。

免费:lt_objhead。
CONCATENATE'&SO_FILENAME ='lv_fname'。 lv_ext INTO ls_content。 " lv_filename
追加ls_content到lt_objhead。
免费:ls_content。
ls_content ='&SO_FORMAT = BIN'。
追加ls_content到lt_objhead。

通话功能'SO_OBJECT_INSERT'
导出
folder_id = ls_folder_id
object_type ='EXT'
object_hd_change = ls_obj_data
IMPORTING
object_id = ls_obj_id
TABLES
objhead = lt_objhead
objcont = lt_objcont <> 例外情况
active_user_not_exist = 1
通讯失败= 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 = br> owner_not_exist = 9
parameter_error = 10
replace_not_active = 11
replace_not_defined = 12
system_failure = 13
x_error = 14
OTHERS =15。

如果IF sy -subrc = 0.

ls_sofmk-foltp = ls_folder_id-objtp。
ls_sofmk-folyr = ls_folder_id-objyr。
ls_sofmk-folno = ls_folder_id-objnop。 ls_sofmk objtp。< br> ls_sofmk-docyr = ls_obj_id-objyr。
ls_sofmk-docno = ls_obj_id-objno。
lv_ep_note = ls_sofmk。

ls_obj_roleb-objtype ='MESSAGE'。
ls_key_ep_note

ls_obj_rolea-objkey = is_lpor-instid。
ls_obj_rolea-objtype = is_lpor-objtype-typeid。
ls_obj_rolea-logsys ='OB'。

IF sy-dynnr NE '0200'。
*在对象和文档之间创建关系
调用功能'BINARY_RELATION_CREATE_COMMIT'
导出
obj_rolea = ls_obj_rolea
obj_roleb = ls_obj_roleb
关系类型='ATTA'
例外
no_model = 1
内部错误= 2
未知= 3
其他=4。

如果sy-subrc =0。
提交工作并等待。
ENDIF 。
ELSE。
调用函数'BINARY_RELATION_CREATE'
导出
obj_rolea = ls_obj_rolea
obj_roleb = ls_obj_roleb
关系类型='ATTA'
例外
no_model = 1
internal_error = 2
未知= 3
OTHERS =4。
ENDIF。

ENDIF。
ENDIF。
ENDIF。
ENDIF。
ENDLOOP。

创建对象lo_manager
导出
is_object = ls_obj_rolea
ip_no_commit =空格
异常
其他= 1.

调用方法lo_manager->未发布。
免费 lo_manager。

创建对象lo_manager
导出
is_object = ls_obj_rolea
ip_no_commit = space
例外情况
其他= 1.

ENDIF。
< br> ****************************************************

我希望能解决您的问题。

最好的问候
Romulus C。

一周热门 更多>