利用BSP call ABAP程式更新資料庫表

I-IN發表於2007-07-04
需求及解決方案:
1,建立一個資料庫表,例如兩個欄位:ID (char 5),STATUS(char 5),輸入幾條資料記錄
2,建立一個ABAP程式實現螢幕上輸入ID號及STATUS,執行時根據對應的ID號更新資料庫表中的資料.功能實現後,為此程式建立一個T_code
3,建立一個BSP程式,實現call ABAP 程式的T_code來實現資料更新(因為發現不能直接使用call transcation 語句後面帶兩個引數的function,而用F1查得,可以有Call transcation using BDC_table的語法,所以想到在BSP裡的call之前,先利用ABAP程式錄制一個BDC檔案並生成其自帶的program,建立一個BAPI檔案,利用BDC檔案生成program裡提到的call transaction的方法,實現call 我們自己的Transaction的功能,然後在BSP的OnInputprocessing裡call 我們自建的Function.
[@more@]
解決過程.
1.建立資料庫表,T_code: SE11,資料庫名ZKBSP,兩個欄位:ID (char 5),STATUS(char 5),輸入3條記錄:1,open;2,close,3,new.
2,建立一個ABAP程式,T_code: SE80,程式名ZABAP_BSP,實現了根據對應的ID號更新資料庫表中的資料功能.並給予其建立一個T_code:ZABAP_BSP程式如下 :
REPORT ZABAP_BSP.
DATA: BEGIN OF IT_OUT OCCURS 100,
ID(5) TYPE C,
Status(5) type C,
END OF IT_OUT.

DATA: WA_OUT LIKE IT_OUT.

SELECTION-SCREEN BEGIN OF BLOCK SEL WITH FRAME TITLE T-001.
PARAMETERS: P_ID(5) TYPE C,
P_STATUS(5) TYPE C.
SELECTION-SCREEN END OF BLOCK SEL.

SELECT SINGLE ID STATUS INTO WA_OUT FROM ZKBSP WHERE ID = P_ID.
IF SY-SUBRC = 0.
WA_OUT-STATUS = P_STATUS.
MODIFY ZKBSP FROM WA_OUT.

MESSAGE 'DATA HAS BEEN MODIFIED SUCCESSFUL!' TYPE 'S'.
ENDIF.
3,利用BDC的方法生成一個call T_code的程式.
1)T_code: SHDB 進入BDC介面
2)錄製一段先前做好的ABAP程式執行過程.New Recording->ZBSP->輸入需要錄製的Transaction code:ZABAP_BSP->Starting Recording->輸入執行程式的兩個引數->執行->退出->儲存->recording 生成.
3)選中先前建立的recording 記錄,點選Test Data button->create Test data for recording ->輸入一個file name,這個檔案將會成為後來生成程式中的BDCDATA dataset.
4)點選Program button,生成BDC的程式,分析程式,找到其中可以實現call T_ code的方法.
4.建立一個Function module ,命名為I_call_BSP,主要功能是利用BDC生成的程式,抽出其中的可以實現call T_code執行程式的方法.
其中Import 為:I_ID type CHAR5;I_STATUS type CHAR5.Export 為Output type I.Source code 部分程式如下:
FUNCTION Z_CALL_BSP.
perform bdc_dynpro using 'ZABAP_BSP' '1000'.
perform bdc_field using 'BDC_CURSOR'
'P_STATUS'.
perform bdc_field using 'BDC_OKCODE'
'=ONLI'.
perform bdc_field using 'P_ID'
I_ID.
perform bdc_field using 'P_STATUS'
I_STATUS.
perform bdc_dynpro using 'ZABAP_BSP' '1000'.
perform bdc_field using 'BDC_OKCODE'
'/EE'.
perform bdc_field using 'BDC_CURSOR'
'P_ID'.
perform bdc_transaction.
ENDFUNCTION.

DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.

FORM BDC_FIELD USING FNAM FVAL.
IF FVAL IS NOT INITIAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM.

FORM bdc_transaction.
CALL TRANSACTION 'ZABAP_BSP' USING BDCDATA
MODE 'N'
UPDATE 'L'.(最主要是這一句話實現了這一個BAPI呼叫T_code的功能)

ENDFORM.
5.建立BSP program, 程式名:ZK_BSP_TEST同樣實現根據對應的ID號更新資料庫表中的資料功能,
1),建立page1,命名為:first.htm.在Page Attribute tab 裡定義兩個attribute ,S_ID type ZKBSP-ID;S_STUTAS type ZKBSP-STATUS.記得將auto打上勾.
2),在layout tab裡寫上如下程式碼:

<html>
<head>
<title>First Pagetitle>
head>
<body>
<
form method="post" action="first.htm">
ID: <input name="S_ID"/><br>
STATUS: <input name="S_STATUS"/><br>
<input value="submit" type="submit" name=
"OnInputProcessing"/>
form>
body>
html>
3)在event handler中OnInputProcessing事件中,進行call BAPI 實現功能的操作,程式碼如下
IF S_ID IS NOT INITIAL.
CALL FUNCTION 'Z_CALL_BSP'
EXPORTING
i_id = S_ID
i_status = S_STATUS
IMPORTING
OUTPUT = OUTPUT
.
ENDIF.

if output = 0.
MESSAGE 'sucessful!' type 'S'.
ENDIF.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10339634/viewspace-923787/,如需轉載,請註明出處,否則將追究法律責任。

相關文章