论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
企业信息化/数字化
›
ERP
›
SAP
›
SAP ABAP 当标准BAPI或事务无法指定用户名执行的处理办 ...
SAP ABAP 当标准BAPI或事务无法指定用户名执行的处理办法 ...
知者何南
金牌会员
|
2023-11-18 16:27:52
|
显示全部楼层
|
阅读模式
楼主
主题
983
|
帖子
983
|
积分
2949
@
目录
需求
一、远程调用RFC的方式
1.SM59配置
2.指定用户需要满足以下条件
3.创建远程RFC
二、创建SE38程序 通过调用后台作业的方式指定用户名执行
总结
需求
有时我们会面对某一标准事务或bapi需要以特定账户执行,以财务的过账、冲销举例,过账时可以在header中填写用户名指定创建人,这里不做阐述。
如果面对BAPI_ACC_DOCUMENT_REV_POST这样用于冲销且没有指定用户名字段的BAPI,但又需要冲销到指定用户名下,有以下方法
1.远程调用RFC的方式
2.创建SE38程序 通过调用后台作业的方式指定用户名执行
一、远程调用RFC的方式
1.SM59配置
新建ABAP类型连接
指定client和用户名
注意系统是否为Unicode
连接测试通过即可
2.指定用户需要满足以下条件
①.未被锁定
②.有S_RFCACL和S_RFC权限
3.创建远程RFC
BAPI调用成功后需要在当前luw中调用commit。
FUNCTION zbapi_acc_document_rev_post.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(REVERSAL) LIKE BAPIACREV STRUCTURE BAPIACREV
*" VALUE(BUS_ACT) LIKE BAPIACHE09-BUS_ACT
*" EXPORTING
*" VALUE(OBJ_TYPE) LIKE BAPIACREV-OBJ_TYPE
*" VALUE(OBJ_KEY) LIKE BAPIACREV-OBJ_KEY
*" VALUE(OBJ_SYS) LIKE BAPIACREV-OBJ_SYS
*" TABLES
*" RETURN STRUCTURE BAPIRET2
*"----------------------------------------------------------------------
DATA:lv_error TYPE char1.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_REV_POST'
EXPORTING
reversal = reversal
bus_act = bus_act
IMPORTING
obj_type = obj_type
obj_key = obj_key
obj_sys = obj_sys
TABLES
return = return.
LOOP AT return[] INTO DATA(ls_return) WHERE type EQ 'E'.
lv_error = 'X'.
EXIT.
ENDLOOP.
IF lv_error IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
* IMPORTING
* RETURN =
.
ENDIF.
ENDFUNCTION.
复制代码
实现代码:
*首先判断destination是否存在
CALL FUNCTION 'CAT_CHECK_RFC_DESTINATION'
EXPORTING
rfcdestination = 'ZDEST_FOR_TEST'
IMPORTING
msgv1 = lv_msg1
msgv2 = lv_msg2
rfc_subrc = lv_subrc.
CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
IMPORTING
own_logical_system = lv_system.
ls_reversal-obj_type = 'BKPFF'.
ls_reversal-obj_key = ls_bkpf-awkey.
ls_reversal-obj_key_r = ls_bkpf-awkey.
ls_reversal-comp_code = ls_bkpf-bukrs.
ls_reversal-obj_sys = lv_system .
ls_reversal-pstng_date = gs_date-zcxdate.
CALL FUNCTION 'ZBAPI_ACC_DOCUMENT_REV_POST' " 使用带commit远程rfc
DESTINATION 'ZDEST_FOR_XGF' " 使用HELPDESK冲销
EXPORTING
reversal = ls_reversal
bus_act = 'RFBU'
IMPORTING
obj_key = lv_obj_key
TABLES
return = lt_return.
READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc = 0.
READ TABLE lt_return INTO ls_return_id WITH KEY number = 361 id = 'F5'.""已被冲销
IF sy-subrc = 0.
MESSAGE '凭证号:' && ls_bkpf-awkey && '已冲销' TYPE 'E'.
ELSE.
ROLLBACK WORK.
cv_status = 'E'.
MESSAGE '凭证冲销失败,凭证号:' && ls_bkpf-awkey TYPE 'E'.
RETURN.
ENDIF.
ELSE.
cv_status = 'S'.
ENDIF.
复制代码
二、创建SE38程序 通过调用后台作业的方式指定用户名执行
submit后跟用户名,程序内代码这里就自己补充啦
代码如下(示例):
* 安排作业 立即执行
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = lv_name
IMPORTING
jobcount = lv_number
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3.
IF sy-subrc EQ 0.
SUBMIT zreport WITH SELECTION-TABLE lt_seltab
USER lv_user AND RETURN
VIA JOB lv_name NUMBER lv_number.
IF sy-subrc EQ 0.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = lv_number
jobname = lv_name
strtimmed = 'X'. "立即开始
ENDIF.
复制代码
总结
以上
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
知者何南
金牌会员
这个人很懒什么都没写!
楼主热帖
SQLServer数据库基础教程
Sqlserver创建用户并授权
开源二三事|ShardingSphere 与 Databa ...
「笔记」某移动SRE运维体系交流 ...
ESP32-C3 学习测试 蓝牙 篇(六、添加 ...
Oracle调度器Scheduler
华为再次登上央视!鸿蒙系统3.0今年上 ...
Kubernetes(K8S) Controller - Statefu ...
这个简单的小功能,半年为我们产研团队 ...
我眼中的大数据(三)——MapReduce ...
标签云
运维
CIO
存储
服务器
浏览过的版块
人工智能
主机安全
快速回复
返回顶部
返回列表