2012年2月9日 星期四

五種RFC類型的簡介

五種RFC類型的簡介:




Remote Function Call (RFC)是SAP所提供的溝通介面,用於串連兩個不同的系統,進行資料的交換。


RFC的種類可以分為以下五種:



  1. Synchronous RFC(sRFC)

  2. Asynchronous RFC(aRFC)

  3. Transactional RFC (tRFC)

  4. Queued RFC (qRFC)

  5. Parallel Process with Asynchronous RFC (pRFC)



以下依序介紹:



  1. Synchronous RFC(sRFC)



RFC的第一個版本是synchronous RFC (sRFC):




CALL FUNCTION func DESTINATION dest


parameter_list.





  • 這是最為常見的RFC類型,適合在需要立即得到執行結果的時候使用

  • 同步更新的方式執行Function call synchronous communication。在執行RFC的時候,所有關聯的系統都必須是可使用的。

  • 會立刻呼叫目標伺服器,原始程式會停止直到獲得RFC的結果 。

  • 如果DESTINATION沒有輸入或空白的話,系統會把RFC視為一般的Function call。




CALL FUNCTION 'YJE_TRFC' DESTINATION 'YJE_IDES2'


EXPORTING


PI_ROWS = c_rows


TABLES


PT_YJERFC = gt_yjerfc .



Asynchronous RFC(aRFC)




在需要增加效能的時候,aRFC是一個很好的選擇。因為aRFC可以平行的呼叫多個Function,不用等待Function處理完畢。


CALL FUNCTION func STARTING NEW TASK <taskname> DESTINATION dest


parameter_list .



1. 非同步處理Asynchronous,使用aRFC的時候,主程式不用等待aRFC處理完畢,會立刻執行下一行程式碼。系統建立System Call之後,會在目標伺服器上建立一個新的Session,直到RFC處理結束。


2. aRFC的參數會直接傳到目標伺服器,不會暫存於DB中,所以必須確保目標伺服器是可用的。


3. aRFC可以回傳參數與處理結果,增加PERFORMING ... ON END OF TASK的語法來做後續處理。taskname為自定義的獨特名稱,就像Memory ID。搭配「WAIT UNTIL」來取得結果。


4. 無法控制RFC執行的順序。



g_result_count = 0.


CALL FUNCTION 'YJE_ARFC' DESTINATION 'YJE_IDES2' STARTING NEW TASK 'TASK001'


PERFORMING resp_1 ON END OF TASK


EXPORTING


pi_rows = c_rows.


WAIT UNTIL g_result_count = 1.


FORM resp_1 USING taskname.


DATA: l_uzeit.


BREAK-POINT.


CLEAR gt_yjerfc.


RECEIVE RESULTS FROM FUNCTION 'YJE_ARFC'


IMPORTING " 只能 IMPORT ,不能 EXPORT


pe_uzeit = l_uzeit


TABLES


pt_yjerfc = gt_yjerfc.


add 1 to g_result_count.


ENDFORM.



Transactional RFC (tRFC)


tRFC可以把多個Function Call包起來放在tRFC LUW裡面,直到程式下了COMMIT WORK,系統才會開始執行RFC Call。


CALL FUNCTION func IN BACKGROUND TASK


DESTINATION dest


parameter_list


COMMIT WORK


1. 系統偵測到tRFC的呼叫,系統會指定一個唯一的Transaction ID,並把Function Call紀錄在DB中,然後繼續執行後續的程式碼,就像aRFC一樣,差別在於tRFC並不會立刻去執行RFC Call。


2. 直到程式下了COMMIT WORK,系統才會開始執行RFC Call。tRFC LUW裡面的function call將會一起被commit work或是rollback work。


3. tRFC的SY-SUBRC一定等於「0」,因此無法在Main Program來進行錯誤處理。但是可以用SM58來進行監控,SM58還可以重新啟動因為錯誤而停止的Function Call。


4. 因為tRFC無法回傳參數,如果要作錯誤處理的話可以用email等方式。



CALL FUNCTION 'YJE_TRFC' IN BACKGROUND TASK


DESTINATION 'YJE_IDES2'


EXPORTING


PI_ROWS = c_rows


PI_VKGRP = l_vkgrp


PI_SAVE = l_commit.







Queued RFC (qRFC)


CALL FUNCTION 'TRFC_SET_QUEUE_NAME'.


EXPORTING


QNAME = 'QUEUE1'.


CALL FUNCTION func IN BACKGROUND TASK


DESTINATION dest


parameter_list


COMMIT WORK


tRFC雖然同一個TID中的function call會依照順序執行,但無法指定多個TID的執行順序。qRFC是tRFC的延伸,會依照Queue的順序來傳送LUW。


1. 使用qRFC的語法就是在tRFC的呼叫之前,先呼叫「TRFC_SET_QUEUE_NAME」。這會讓系統知道要把接下來的RFC Call放置到哪一個Queue之中。


2. 跟tRFC很像,RFC Call會等到COMMIT WORK之後執行。


3. 可以使用SMQ1來監控Queue裡面的LUW順序;使用SM58監控RFC處理結果。



CALL FUNCTION 'TRFC_SET_QUEUE_NAME'


EXPORTING


qname = 'YJE_QUEUE_1'


EXCEPTIONS


invalid_queue_name = 1


OTHERS = 2 .


l_vkgrp = 110.


CALL FUNCTION 'YJE_TRFC' IN BACKGROUND TASK


DESTINATION 'YJE_IDES2'


EXPORTING


pi_rows = c_rows


pi_vkgrp = l_vkgrp


pi_save = l_commit.


COMMIT WORK.







Parallel Process with Asynchronous RFC (pRFC)




pRFC是aRFC的延伸,目標是使用多台SERVER來分散系統的負擔,以縮短程式的處理時間。適用於資料量大、處理時間久的程式(ex: MRP)。


CALL FUNCTION <Remotefunction> STARTING NEW TASK <Taskname>


DESTINATION IN GROUP <Groupname>




1. 因為pRFC無法保證執行的順序,所以處理的資料必須為獨立元件---不依賴其他在parallel processing的元件;不適合需要依照順序執行的需求。


2. pRFC依照Destination Group的設定來進行loading balance,在heavy loading的程式使用pRFC取代aRFC,可以提高系統運作的效能。


3. pRFC依照Destination Group的設定的server來分配loading。


pRFC Reference:http://help.sap.com/saphelp_470/helpdata/en/fa/096e92543b11d1898e0000e8322d00/content.htm








總結:













































sRFCaRFCtRFCqRFCpRFC
執行時間立刻立刻等待COMMIT WORK等待COMMIT WORK立刻
執行方式同步非同步非同步(只執行一次)非同步(照順序執行一次)非同步
回傳參數支援支援不支援不支援支援
監控方式無法無法SM58SM58無法



備註:


l 設定Destinations: In transaction SM59, choose Tools ® System Administration ® Administration ® Network ® RFC Destinations.


l 設定Destinations Group: In transaction RZ12


l 如果是"ABAP-to-ABAP" RFCs,可以使用DEBUG來偵錯


l RFC中無法使用obligatory屬性(因為系統在背後會自動產生一段程式碼,呼叫RFC並傳入所有參數),替代方案是全部宣告成Optional,然後使用「IF field IS NOT SUPPLIED」來作錯誤處理。

Table Maintenance: 隱藏部分欄位

Table Maintenance: 隱藏部分欄位

在建立Table Maintenance時,若需要隱藏部分欄位,可以使用Maintenance View來達成:

1 使用T-Code:「SE11」,選擇建立view

2 Choose View Type 時,選擇Maintenance View
clip_image002

3 在「Table/Join Conditions」的頁面輸入要維護的tables。clip_image004

4 在「View Field」的頁面,由於主鍵欄位是一定要顯示的,所以系統會自動把Primary Table的主鍵欄位帶入。非主鍵的欄位則需要點選「Table fields」來選擇。

clip_image006

5 在「Field Selection」的視窗選擇要顯示在Table Maintence的欄位後,按下clip_image008

clip_image010

6 之後再使用「Utilities -> Table Maintenance Generator」建立即可。

Back Order Process

Backorder(缺貨訂單)的條件 :
1.      數量無法滿足
2.      交貨日期需要延後

Backorder比例客戶等待時間,是客戶滿意度庫存管理的重要評量指標。

Backorder Processing:
1.      手動調整,重新跟客戶確認交期跟數量
2.      插單,依照delivery priority作為排序的條件來重新排程。