1、业务背景
由于业务流程的复杂性,用户往往只具备部分功能的权限,导致在操作自开发程序时出现权限问题。例如前台限制了用户对销售订单的修改,而自开发功能中又涉及单据修改,此时一味限制权限,则无法正常使用功能。
2、使用RFC跳过权限
2.1、实现原理
将被权限限制的逻辑,封装成RFC函数,在调用时,使用拥有大权限的账号,远程调用目标系统(实际还是本系统)的RFC,则实际上在代码运行时,是使用了大权限的账号,执行了该函数。最终在凭证中的更改日志,也是记录了大权限账号的修改记录。
2.2、封装RFC
例如将销售订单修改逻辑封装到RFC中
复制BAPI_SALESORDER_CHANGE到ZBAPI_SALESORDER_CHANGE,确保远程模式
原参数保持不变,多增加一个返回结构E_RESULT,将调用BAPI的最终结果处理后返回,这样外部调用时,可以避免重复编写处理BAPI消息的代码
将commit和rollback写在函数中,待凭证处理完之后,执行事务,防止事务一直未提交,出现锁单情况
"--------------------@斌将军-------------------- FUNCTION zbapi_salesorder_change. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(SALESDOCUMENT) LIKE BAPIVBELN-VBELN *" VALUE(ORDER_HEADER_IN) LIKE BAPISDH1 STRUCTURE BAPISDH1 *" OPTIONAL *" VALUE(ORDER_HEADER_INX) LIKE BAPISDH1X STRUCTURE BAPISDH1X *" VALUE(SIMULATION) LIKE BAPIFLAG-BAPIFLAG OPTIONAL *" VALUE(BEHAVE_WHEN_ERROR) LIKE BAPIFLAG-BAPIFLAG DEFAULT SPACE *" VALUE(INT_NUMBER_ASSIGNMENT) LIKE BAPIFLAG-BAPIFLAG DEFAULT *" SPACE *" VALUE(LOGIC_SWITCH) LIKE BAPISDLS STRUCTURE BAPISDLS OPTIONAL *" VALUE(NO_STATUS_BUF_INIT) LIKE BAPIFLAG-BAPIFLAG DEFAULT SPACE *" EXPORTING *" VALUE(E_RESULT) TYPE BAPIRETURN *" TABLES *" RETURN STRUCTURE BAPIRET2 *" ORDER_ITEM_IN STRUCTURE BAPISDITM OPTIONAL *" ORDER_ITEM_INX STRUCTURE BAPISDITMX OPTIONAL *" PARTNERS STRUCTURE BAPIPARNR OPTIONAL *" PARTNERCHANGES STRUCTURE BAPIPARNRC OPTIONAL *" PARTNERADDRESSES STRUCTURE BAPIADDR1 OPTIONAL *" ORDER_CFGS_REF STRUCTURE BAPICUCFG OPTIONAL *" ORDER_CFGS_INST STRUCTURE BAPICUINS OPTIONAL *" ORDER_CFGS_PART_OF STRUCTURE BAPICUPRT OPTIONAL *" ORDER_CFGS_VALUE STRUCTURE BAPICUVAL OPTIONAL *" ORDER_CFGS_BLOB STRUCTURE BAPICUBLB OPTIONAL *" ORDER_CFGS_VK STRUCTURE BAPICUVK OPTIONAL *" ORDER_CFGS_REFINST STRUCTURE BAPICUREF OPTIONAL *" SCHEDULE_LINES STRUCTURE BAPISCHDL OPTIONAL *" SCHEDULE_LINESX STRUCTURE BAPISCHDLX OPTIONAL *" ORDER_TEXT STRUCTURE BAPISDTEXT OPTIONAL *" ORDER_KEYS STRUCTURE BAPISDKEY OPTIONAL *" CONDITIONS_IN STRUCTURE BAPICOND OPTIONAL *" CONDITIONS_INX STRUCTURE BAPICONDX OPTIONAL *" EXTENSIONIN STRUCTURE BAPIPAREX OPTIONAL *" EXTENSIONEX STRUCTURE BAPIPAREX OPTIONAL *"---------------------------------------------------------------------- DATA:lv_check TYPE char1, lv_message TYPE char255. "修改销售订单 CALL FUNCTION 'BAPI_SALESORDER_CHANGE' EXPORTING salesdocument = salesdocument * order_header_in = order_header_in order_header_inx = order_header_inx logic_switch = logic_switch TABLES return = return order_item_in = order_item_in order_item_inx = order_item_inx schedule_lines = schedule_lines schedule_linesx = schedule_linesx extensionin = extensionin. CLEAR:lv_check,lv_message,e_result. LOOP AT return INTO DATA(ls_return) WHERE type CA 'AEX'. lv_message = lv_message && ls_return-message. lv_check = 'E'. CLEAR:ls_return. ENDLOOP. IF lv_check = 'E'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. e_result-type = 'E'. e_result-message = lv_message. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true. e_result-type = 'S'. e_result-message = '修改成功'. ENDIF. ENDFUNCTION. "--------------------@斌将军--------------------
文章版权声明:除非注明,否则均为
譬如朝露_策温技术开发工作室博客原创文章,转载或复制请以超链接形式并注明出处。
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接