Hi 大家好
昨天介紹了RFC
今天用一個簡單的案例來示範
情境:外部系統傳入料號跟廠別希望抓到物料的標準成本
按建立後選擇要的Function group
一般會使用模組或是專案來建立Function group,
放在同一function group的RFC可以共享全局變數還有RFC內的子程式,
來減少開發重複的代碼。
選擇Remote-Enabled moudule才能讓外部系統調用
跟寫ALV的時候一樣 宣告變數都要有參照的資料類型,
1.Price : 物料價格
2.ZMSG :當RFC找不到物料號碼時回傳錯誤訊息
3.ZRET :回傳成功或失敗
FUNCTION ZTESTRFC.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(MATERIAL) TYPE MATNR
*" VALUE(PLANT) TYPE WERKS
*" EXPORTING
*" VALUE(PRICE) TYPE STPRS
*" VALUE(ZMSG) TYPE CHAR255
*" VALUE(ZRET) TYPE CHAR1
*" EXCEPTIONS
*" NODATA "設定異常參數
*"----------------------------------------------------------------------
TABLES : mbew . "宣告要用的table ,如果同function group中有宣告過的話可以不用再宣告
select single stprs from mbew into price where matnr = material and bwkey = plant .
if sy-subrc ne 0. "如果上面的select失敗 沒有抓到資料的話回傳E 表示error
zret = 'E'.
zmsg = 'Data do not exist'.
raise nadata . "若select 失敗 ,拋出異常參數
return.
else.
zret = 'S'.
endif.
ENDFUNCTION.
REPORT ZTESTEASON.
PARAMETERS p_matnr type matnr .
PARAMETERS p_werks type werks .
DATA l_price type stprs .
call FUNCTION 'ZTESTRFC'
exporting
material = p_matnr
plant = p_werks
IMPORTing
price = l_price
EXCEPTIONS
nodata = 1 " 若select 失敗 ,異常參數no data 為1
OTHERS = 2 .
IF sy-subrc = 1.
WRITE: 'no material price found .'.
ELSEIF sy-subrc = 0.
WRITE: l_price.
ENDIF.
為了觸發異常故意輸入錯誤的料號
成功拋出異常參數
以上就是今天的RFC分享, 明天見~