利用BSP call ABAP程式更新資料庫表
需求及解決方案:
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.
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.
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.
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何對 ABAP 資料庫表透過 ABAP 程式碼進行更新和刪除操作試讀版資料庫
- ABAP資料庫表的後設資料資料庫
- 利用ABAP除錯模式修改SE16裡資料庫表的內容除錯模式資料庫
- 如何建立最簡單的 ABAP 資料庫表,以及編碼從資料庫表中讀取資料 (上)資料庫
- SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測資料庫
- SAP ABAP資料表的操作
- 【TcaplusDB知識庫】PB表 C++ 示例程式碼-更新資料C++
- ABAP 資料庫表 Size Category 欄位的準確含義資料庫Go
- SAP ABAP裡資料庫表的Storage Parameters從哪裡來的資料庫
- 利用MySQL原資料資訊批量轉換指定庫資料表生成Hive建表語句MySqlHive
- 資料庫-批次更新資料庫
- 資料庫-批量更新資料庫
- 當資料庫表無主鍵ID時,ORM這樣更新資料資料庫ORM
- postgresql資料庫利用方式SQL資料庫
- 利用反射讀取資料庫資料反射資料庫
- openGauss 更新表中資料
- 在ABAP裡取得一個資料庫表記錄數的兩種方法資料庫
- [ChatGPT 勘誤]:SAP ABAP 系統裡資料庫表 dlv_systc 的用途ChatGPT資料庫
- 如何有效利用資料庫中間表這把雙刃劍資料庫
- flask如何更新資料庫Flask資料庫
- 如何使用 ST05 事物碼,快速找到訪問指定資料庫表的 ABAP 程式碼試讀版資料庫
- Ibatis批量更新資料(mysql資料庫)BATMySql資料庫
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- 48 行程式碼給 ABAP ALV 報表的資料行增添顏色效果行程
- 建立資料庫表資料庫
- deepsql資料庫工具1.2更新SQL資料庫
- 如何檢視型別為LRAW的SAP ABAP資料庫表欄位的內容型別資料庫
- 利用RMAN備份重建資料庫資料庫
- MongoDB資料庫中更新與刪除資料MongoDB資料庫
- 如何自行查詢出 SAP ABAP 標準的 OData 服務返回資料的後臺資料庫表和表欄位名稱資料庫
- PostgreSQL:表空間-->資料庫-->表SQL資料庫
- 如何找到某個 ABAP structure 某欄位的源頭來自哪個資料庫表Struct資料庫
- phpMyAdmin管理資料庫和資料表PHP資料庫
- 資料庫 建立 3表資料庫
- 利用Oracle資料庫傳送郵件Oracle資料庫
- 利用wordpress的資料庫操作函式資料庫函式
- .NET 資料庫大資料 方案(插入、更新、刪除、查詢 、插入或更新)資料庫大資料
- 使用 FOR ALL ENTRIES 將 ABAP 內表內容作為資料庫表的讀取條件之一試讀版資料庫
- SAP ABAP 系統進行資料庫表查詢的幾種常用方法的試讀版資料庫