BDC技術

I-IN發表於2007-07-01

BDC(Batch Data Conversion):在SAP系統裡,由於某種原因,可能需要重複輸入資料,(資料不同,但是操作是相同的,典型的情形就是切換系統的時候,舊系統的資料需要匯入SAP),大致過程不外乎是這樣: 輸入一個t-code,
進入一個某個螢幕,然後輸入一個值(有時還要加上一些附加的checkbox選項等),點執行或者確定按鈕,
進入另一個螢幕,在某些欄位輸入值(也可能是標註checkbox選中或者不選中)或者修改這些欄位裡的值。

[@more@]

BDC技術

BDC(Batch Data Conversion):在SAP系統裡,由於某種原因,可能需要重複輸入資料,(資料不同,但是操作是相同的,典型的情形就是切換系統的時候,舊系統的資料需要匯入SAP),大致過程不外乎是這樣: 輸入一個t-code,
進入一個某個螢幕,然後輸入一個值(有時還要加上一些附加的checkbox選項等),點執行或者確定按鈕,
進入另一個螢幕,在某些欄位輸入值(也可能是標註checkbox選中或者不選中)或者修改這些欄位裡的值。
然後按“Eneter”……
最後按“SAVE”……,
一條記錄完成了,繼續下一條,如此迴圈。

上面所述的情形,如果讓一個“人”來做的話,可能是真是受不了的。但是對於計算機來說,就很簡單了。

SAP透過一個特殊的程式(T-code:SHDB)把使用者的一次業務操作的所有過程記錄下來。

從使用者輸入transaction code(事務程式碼),點下“Start Recording”開始,對於使用者的來說是一次普通的業務操作,但是SAP卻在記錄:
1.游標放到哪個欄位,(在程式中不用改變)
2.填入了什麼值,(變數,迴圈中的Internal Table 某個欄位)
3.點選了什麼按鈕(在程式中不用改變)

本次操作的作為一個“代表”,是一個“模板”,告訴SAP系統以怎樣的方式來執行程式,也就是用計算機的語言來描述如果手工操作的話應該是怎樣的一個過程。


用BDC技術程式設計時,有以下幾個步驟:
1.把外部的資料來源(Txt,Excel等)用讀進internal table或者用do enddo迴圈。
2.在迴圈裡,把用SHDB記錄的步驟重複執行N次,(N = Dialog螢幕數量)這時實際上並沒行完成資料的入,系統只是在“填表”,填一個叫做“BDCData”的Internal Table。
填完bdcdata以後,用call transaction ‘XXXX’ using bdc……這個命令來真正的commit動作或者call function 'BDC_Insert'在建立一個session。並把執行的結果返回給messtab這個Internal Table

現在假想一種情境,來做一個演示的BDC程式。
由於業務上的需要,某公司打算將某些物料的描述都在後面加上指定的文字Group X,所以需要修改已經存在的物料資料,用T-code:MM02,

外部資料是TXT文字,記錄有N條,如下:

Material NO. Description
6000-00001 XXXXXXX(Group A)
2098-00001 fdfladsfladfl(Group B )
2059-00009 dfdsfreddfalfasfa(Group A)
2003-00003 iadfdafdf,adfasf(Group D)
……
……
下面是“錄”操作的過程,在命令欄裡輸入T-code :SHDB,進入如下螢幕:

點New Recodring,出現如下螢幕:

其中Recording 的名字是任意給的。MM02是需要錄的事務程式碼。

按下“Start Recording”,就會進入“Change Material”,這時,以下的操作對於使用者來說是一次普通修改物料描述操作,儘管系統在記錄所有的操作。

輸入一個物料後,點選“Select View(s)”

假設我們只選“Basic Data 1”和“Basic Data 1”
然後點選綠色的小勾“Enter”

我們在該物料後面新增一個“Group A”,描述改為:
……

然後點“SAVE”,儲存這次修改。

現在SAP回到了SHDB,

先點“SAVE”,儲存Recording :Ztest,然後點”Back”,返回SHDB的第一屏。

選中“Ztest”,然後點選“Program”,由SAP自動生成一個程式。
在上面的對話方塊中輸入程式的名字(注意SAP的命名規範,Y或者Z開頭),確認輸入

再輸入一些程式的屬性資訊如下:

點選“Source Code”,指定“Develop Class”等後,就可以進入ABAP Editor,產生如下程式碼:

report ZBDCTEST
no standard page heading line-size 255.

include bdcrecx1.

parameters: dataset(132) lower case.
*** DO NOT CHANGE - the generated data section - DO NOT CHANGE ***
*
* If it is nessesary to change the data section use the rules:
* 1.) Each definition of a field exists of two lines
* 2.) The first line shows exactly the comment
* '* data element: ' followed with the data element
* which describes the field.
* If you don't have a data element use the
* comment without a data element name
* 3.) The second line shows the fieldname of the
* structure, the fieldname must consist of
* a fieldname and optional the character '_' and
* three numbers and the field length in brackets
* 4.) Each field must be type C.
*
*** Generated data section with specific formatting - DO NOT CHANGE ***
data: begin of record,
* data element: MATNR
MATNR_001(018),
* data element: XFELD
KZSEL_01_002(001),
* data element: XFELD
KZSEL_02_003(001),
* data element: MAKTX
MAKTX_004(040),
* data element: MEINS
MEINS_005(003),
* data element: MTPOS_MARA
MTPOS_MARA_006(004),
* data element: GEWEI
GEWEI_007(003),
end of record.

*** End generated data section ***

start-of-selection.

perform open_dataset using dataset.
perform open_group.

do.

read dataset dataset into record.
if sy-subrc <> 0. exit. endif.

perform bdc_dynpro using 'SAPLMGMM' '0060'.
perform bdc_field using 'BDC_CURSOR'
'RMMG1-MATNR'.
perform bdc_field using 'BDC_OKCODE'
'=AUSW'.
perform

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

相關文章