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. "--------------------@斌將軍--------------------
2.3、配置目標系統
建立ABAP連線
目標系統
擁有大許可權的賬密
Unicode
連線測試成功。點選遠端登入,則能直接用配置的賬號登入SAPGUI
2.4、呼叫RFC
"--------------------@斌將軍-------------------- DATA:gv_system TYPE rfcdes-rfcdest. "目標系統 gv_system = sy-sysid && '_' && sy-mandt."S4D_300 "修改銷售訂單 PERFORM frm_salesorder_change. IF ls_result-type = 'E'. "失敗 ELSE. "成功 ENDIF. FORM frm_salesorder_change. "修改銷售訂單 CALL FUNCTION 'ZBAPI_SALESORDER_CHANGE' DESTINATION gv_system EXPORTING salesdocument = lv_salesdocument * order_header_in = ls_order_header_in order_header_inx = ls_order_header_inx logic_switch = ls_logic_switch IMPORTING e_result = ls_result TABLES return = lt_so_return order_item_in = lt_order_item_in order_item_inx = lt_order_item_inx schedule_lines = lt_schedule_lines schedule_linesx = lt_schedule_linesx extensionin = lt_extensionin. ENDFORM. "--------------------@斌將軍-------------------
2.5、關於通訊型別Unicode
Unicode:表示目標系統能夠處理Unicode字符集。Unicode是一種全球通用的字元編碼標準,用於表示世界上幾乎所有語言的字元。使用Unicode通訊型別,可以在SAP系統中處理並傳輸多種語言的資料,包括特殊字元和非拉丁字母字元。
非Unicode:表示目標系統只能處理非Unicode字符集。即系統僅支援傳輸和處理特定的字符集,如ANSI和ASCII字符集。非Unicode通訊型別適用於處理少數語言或特定的本地化需求。
區別:在於系統對字符集的支援和處理能力。Unicode通訊型別允許SAP系統處理更廣泛的字符集,使其具有更好的國際化和本地化能力。而非Unicode通訊型別的系統則限制了字符集的範圍,可能導致在處理和傳輸多語言資料時出現問題。在選擇目標系統的通訊型別時,需要根據具體的業務需求和語言環境來考慮。如果需要處理多語言資料或具有全球化的需求,建議選擇Unicode通訊型別。而如果業務僅涉及特定的語言或本地化需求,非Unicode通訊型別可能更加適合。
定期更文,歡迎關注