BAPI和BDC使用小結

來源:互聯網
上載者:User

在項目上遇到了要同時用BAPI和BDC更新資料的情況。開發的需求如下:
ME22N中
修改採購訂單中物料條目的淨價和每,然後在物料資料頁的供應商物料號中記錄舊價格和舊每,同時在EAN/UPC中寫入'ZSJ'。

 
大部分的更新都可以由BAPI完成,但是EAN/UPC在BAPI中找不到對應的欄位,而且客戶不願意改欄位。一開始看到ME22N這種多條目的事務代碼,覺得BDC錄屏沒法做,但是其實是可以做的,只是比較麻煩。
下面一點點總結分享。

BDC部分:

BDC錄屏後,得到的結果基本是沒法直接用的,我是通過錄了很多次屏,然後東拼西湊、修修改改得出來的。

錄屏的操作流程:其他採購訂單->輸入採購訂單號->確定->項目點擊下拉式清單選擇行項目->修改EAN/UPC->儲存,得到的錄屏結果如下 :

 

 

直接錄屏的結果是沒法用的,必須把紅色底線的部分去掉,保留反而會出錯。這些是錄屏的時候記錄下來的螢幕上一些欄位的值,但在程式操作調用BDC的過程中,你無法知道這些欄位的具體值是多少,填不對的話反而會出錯,所以要去掉。

而且在填寫BDC_FIELD的時候,帶BDC_SUBSCR的部分都可以不填寫,只要填寫一些關於操作和欄位賦值的部分就可以了。

BDC調試:

BDC需要調試的話就設定模式MODE為A,這樣就可以觀看前台是怎麼樣一步一步執行的,便於發現錯誤。MODE為E是只有發生錯誤才轉到前台,而MODE為N是完全的後台操作。一般先用A或E確認能執行成功後再換成N來執行。

BDC代碼:

 

總結下BDC的適用範圍:

BDC適用於錄製較為單一的操作,並且一般情況下不適用於多條行項目,但是也有例外。在一些特殊的事物代碼中,對於行項目的修改也能是一組比較單一的操作,比如ME22N就是每次選擇下拉式清單,然後修改相應的欄位。所以有時候BDC錄屏是一件需要業務顧問、技術顧問一起做、互相配合的事。

BAPI部分:

由於SAP各個表之間的關聯關係非常複雜,一個前台操作可能同時更新了N張表,所以ABAP中嚴禁直接更新標準表,這會導致不一致性。而為了保持一致性,需要更新和修改的時候則需要使用BAPI。

BAPI與BDC相比,執行速度會快些、效率會高些,而且比較適合用來更新修改多條行項目的資料。

BAPI中值得一提的是它的X參數,參數明後代X尾碼的參數標示了需要更新哪些相應的欄位,所以必須對X參數中需要更新的欄位賦值為 X ,否則BAPI並不會更新任何欄位。

X參數:

 

對需要更新的欄位賦值:

 

另外ABAP中能夠支援多個BAPI連續調用,然後同時COMMIT或是ROLLBACK,以此來保證一致性。只需要再調用完BAPI後再調用BAPI_TRANSACTION_COMMIT或是BAPI_TRANSACTION_ROLLBACK。

 

值得一提的是BAPI_TRANSACTION_COMMIT的WAIT參數。注意:BAPI是非同步更新的,所以如果不使用WAIT參數的話,那麼它無法保證在執行下條語句時BAPI已經更新成功,這樣如果連續兩條語句都是寫操作,有很大可能會造成讀寫衝突,比如:我在BAPI執行完後調用BDC,如果不WAIT的話,那麼就會有讀寫衝突,BAPI鎖住了一些表或是資源導致BDC無法更新。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.