BDC: CALL TRANSACTION USING... 參數祥解
CALLTRANSACTION 'tcode' USING bdc_tab ... 是 ABAP 裡提供的一個方便的執行批量輸入的語句,使用它可以通過程式碼完成多個事務碼的連續執行。
bdc_tab 這個批輸入任務表的填寫方式,網上有很多例子了,大家用到的時候可以搜尋。用事務碼 SHDB 可以產生填寫這個表的內容,按照 ABAP 字典結構類型 BDCDATA 的定義對應填寫就可以了。
下面詳細介紹一下這種調用方式中的執行參數:
... {{[MODE mode] [UPDATE upd]}
| [OPTIONS FROM opt] }
[MESSAGES INTO itab] ... .
MODE 確定批輸入的執行模式,有下面幾個可選值:
執行模式 |
作用 |
"A" |
顯示所有輸入螢幕,如果在 bdc_tab 中包含該螢幕的功能碼,則會出現小視窗顯示這個功能碼。它也是預設值,如果指定不是下面的值,則都認為是 A。 |
"E" |
只有在出現錯誤時才顯示螢幕,使用者可以修正資料,修正後程式可以繼續處理。 |
"N" |
不顯示螢幕的靜默模式。如果到達被調用事務的斷點,則系統處理終止,並設定一些系統欄位。sy-subrc 為 1001,sy-msgty 為 "S"、sy-msgid 為 "00"、sy-msgno 為 "344"、sy-msgv1 為 "SAPMSSY3"、sy-msgv2 為 "0131"。 |
"P" |
不顯示螢幕的偵錯模式。如果到達被調用事務的斷點,則系統自動轉到 ABAP 調試器,這種方式主要用於調試過程。 |
UPDATE 確定批輸入的更新模式,有下面幾個可選值:
更新模式 |
作用 |
"A" |
非同步更新。被調用程式的更新按照沒有指定 COMMIT WORK 語句和 AND WAIT 附加的方式執行。也就是說,資料更新被放到更新隊列裡,由另一個專門的更新進程執行,主程式一旦提交資料就繼續執行,而不管提交的更新是否執行完成。這種方式比較適合於用一個事務碼大量更新指定資料,比如維護主要資料等。 |
"S" |
同步更新。被調用程式的更新按照指定了 COMMIT WORK 語句和 AND WAIT 附加的方式執行。也就是說,資料更新被放到更新隊列裡,由專門的更新進程執行,但是主程式會等到資料提交完成,返回結果資訊後才繼續執行。這種方式比較適合於資料一致性要求比較高,多個不同事務碼的連續處理。 |
"L" |
本地更新。被調用程式的更新按照執行 SET UPDATE TASK LOCAL 語句的方式執行。也就是說,資料更新在主程式所在的進程中完成,主程式必定等到被調用事務完成才繼續執行。 |
OPTIONS FROM opt 則用一個參考 ABAP 字典中結構類型 CTU_PARAMS的結構資料對象來傳遞參數,CTU_PARAMS 結構包含了 MODE 和 UPDATE 兩個參數,並且還包含其它參數,結構如下:
DISMODE:顯示模式,其值對應於前面介紹的 MODE 參數;
UPDMODE:更新模式,其值對應於前面介紹的 UPDATE 參數;
CATTMODE:CATT 模式,有三個值:""、非 CATT 模式;"N"、CATT 模式但不對每個螢幕進行控制;"A"、CATT 模式並對每個螢幕進行控制;
DEFSIZE:是否使用螢幕的定義大小,有兩個值:" "、不使用螢幕定義大小,即顯示給使用者的螢幕跟普通運行時一樣,根據使用者視窗大小而自動擴充到全屏;"X"、使用螢幕定義大小,即只用來源程式中固定的螢幕大小,無論使用者視窗如何;
RACOMMIT:英文原文(CALL TRANSACTION USING... is not completed by COMMIT),德文原文(COMMIT WORK ist kein Ende bei CALL TRANSACTION USING...),沒看明白;
OPT-RACOMMIT = 'X'. 就是一個可以在所有錄屏工作結束後才觸發COMMIT事件的選項,原來預設為空白
NOBINPT:調用事務碼時,系統欄位 sy-binpt 的值,有兩個值:" "、在被調用事務執行時,系統欄位 sy-binpt 的值為 "X";:"X"、在被調用事務執行時,系統欄位 sy-binpt 的值為 " ";
NOBIEND:調用事務碼完成後,系統欄位 sy-binpt 的值,有兩個值:" "、在被調用事務執行後,系統欄位 sy-binpt 的值為 "X";:"X"、在被調用事務執行後,系統欄位 sy-binpt 的值為 " "。
最後一個 MESSAGEINTO itab 是把執行過程中的訊息都輸入到內表 itab 中,itab 的結構必須是 ABAP 字典中結構 BDCMSGCOLL。