BAPI和BDC使用小结
在項(xiàng)目上遇到了要同時(shí)用BAPI和BDC更新數(shù)據(jù)的情況。開(kāi)發(fā)的需求如下:
ME22N中
修改采購(gòu)訂單中物料條目的凈價(jià)和每,然后在物料數(shù)據(jù)頁(yè)的供應(yīng)商物料號(hào)中記錄舊價(jià)格和舊每,同時(shí)在EAN/UPC中寫(xiě)入'ZSJ'。
大部分的更新都可以由BAPI完成,但是EAN/UPC在BAPI中找不到對(duì)應(yīng)的字段,而且客戶(hù)不愿意改字段。一開(kāi)始看到ME22N這種多條目的事務(wù)代碼,覺(jué)得BDC錄屏沒(méi)法做,但是其實(shí)是可以做的,只是比較麻煩。
下面一點(diǎn)點(diǎn)總結(jié)分享。
BDC部分:
BDC錄屏后,得到的結(jié)果基本是沒(méi)法直接用的,我是通過(guò)錄了很多次屏,然后東拼西湊、修修改改得出來(lái)的。
錄屏的操作流程:其他采購(gòu)訂單->輸入采購(gòu)訂單號(hào)->確定->項(xiàng)目點(diǎn)擊下拉列表選擇行項(xiàng)目->修改EAN/UPC->保存,得到的錄屏結(jié)果如下 :
直接錄屏的結(jié)果是沒(méi)法用的,必須把紅色下劃線(xiàn)的部分去掉,保留反而會(huì)出錯(cuò)。這些是錄屏的時(shí)候記錄下來(lái)的屏幕上一些字段的值,但在程序操作調(diào)用BDC的過(guò)程中,你無(wú)法知道這些字段的具體值是多少,填不對(duì)的話(huà)反而會(huì)出錯(cuò),所以要去掉。
而且在填寫(xiě)B(tài)DC_FIELD的時(shí)候,帶BDC_SUBSCR的部分都可以不填寫(xiě),只要填寫(xiě)一些關(guān)于操作和字段賦值的部分就可以了。
BDC調(diào)試:
BDC需要調(diào)試的話(huà)就設(shè)置模式MODE為A,這樣就可以觀(guān)看前臺(tái)是怎么樣一步一步執(zhí)行的,便于發(fā)現(xiàn)錯(cuò)誤。MODE為E是只有發(fā)生錯(cuò)誤才轉(zhuǎn)到前臺(tái),而MODE為N是完全的后臺(tái)操作。一般先用A或E確認(rèn)能執(zhí)行成功后再換成N來(lái)執(zhí)行。
BDC代碼:
總結(jié)下BDC的適用范圍:
BDC適用于錄制較為單一的操作,并且一般情況下不適用于多條行項(xiàng)目,但是也有例外。在一些特殊的事物代碼中,對(duì)于行項(xiàng)目的修改也能是一組比較單一的操作,比如ME22N就是每次選擇下拉列表,然后修改相應(yīng)的字段。所以有時(shí)候BDC錄屏是一件需要業(yè)務(wù)顧問(wèn)、技術(shù)顧問(wèn)一起做、互相配合的事。
BAPI部分:
由于SAP各個(gè)表之間的關(guān)聯(lián)關(guān)系非常復(fù)雜,一個(gè)前臺(tái)操作可能同時(shí)更新了N張表,所以ABAP中嚴(yán)禁直接更新標(biāo)準(zhǔn)表,這會(huì)導(dǎo)致不一致性。而為了保持一致性,需要更新和修改的時(shí)候則需要使用BAPI。
BAPI與BDC相比,執(zhí)行速度會(huì)快些、效率會(huì)高些,而且比較適合用來(lái)更新修改多條行項(xiàng)目的數(shù)據(jù)。
BAPI中值得一提的是它的X參數(shù),參數(shù)明后代X后綴的參數(shù)標(biāo)示了需要更新哪些相應(yīng)的字段,所以必須對(duì)X參數(shù)中需要更新的字段賦值為 X ,否則BAPI并不會(huì)更新任何字段。
X參數(shù):
對(duì)需要更新的字段賦值:
另外ABAP中能夠支持多個(gè)BAPI連續(xù)調(diào)用,然后同時(shí)COMMIT或是ROLLBACK,以此來(lái)保證一致性。只需要再調(diào)用完BAPI后再調(diào)用BAPI_TRANSACTION_COMMIT或是BAPI_TRANSACTION_ROLLBACK。
值得一提的是BAPI_TRANSACTION_COMMIT的WAIT參數(shù)。注意:BAPI是異步更新的,所以如果不使用WAIT參數(shù)的話(huà),那么它無(wú)法保證在執(zhí)行下條語(yǔ)句時(shí)BAPI已經(jīng)更新成功,這樣如果連續(xù)兩條語(yǔ)句都是寫(xiě)操作,有很大可能會(huì)造成讀寫(xiě)沖突,比如:我在BAPI執(zhí)行完后調(diào)用BDC,如果不WAIT的話(huà),那么就會(huì)有讀寫(xiě)沖突,BAPI鎖住了一些表或是資源導(dǎo)致BDC無(wú)法更新。
總結(jié)
以上是生活随笔為你收集整理的BAPI和BDC使用小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java api 测试工具_Java 实
- 下一篇: java arp 攻击_用JAVA代码实