? ? ? CALL?FUNCTION?'CONVERSION_EXIT_ALPHA_INPUT'
Pendo筆記,????????EXPORTING
??????????input??=?poheader-vendor
????????IMPORTING
??????????output?=?poheader-vendor.
??????poheaderx-vendor?=?abap_true.
??????poitem-po_item???????=?lv_ebelp."行項目
??????poitemx-po_item??????=?lv_ebelp.
批判性思維讀書筆記。???"抬頭增強字段
????ls_te_head-zpslx?=?ls_head-zpslx.
????ls_te_head-zzekkoyl0?=?ls_head-zwxsh."無需送貨標識
????ls_te_headx-zpslx?=?abap_true.
????ls_te_headx-zzekkoyl0?=?abap_true.
????lt_extensionin-structure?=?'BAPI_TE_MEPOHEADER'.
????lt_extensionin-valuepart1?=?ls_te_head.
????APPEND?lt_extensionin.
????CLEAR:ls_te_head,lt_extensionin.
????lt_extensionin-structure?=?'BAPI_TE_MEPOHEADERX'.
????lt_extensionin-valuepart1?=?ls_te_headx.
????APPEND?lt_extensionin.
????CLEAR:ls_te_headx,lt_extensionin.
??????"行項目增強字段
??????ls_te_item-po_item?=?lv_ebelp.
??????ls_te_item-zzeanme?=?lt_data-zzeanme?.
??????ls_te_item-zzcd????=?lt_data-zzcd.
??????ls_te_item-zzjsean?=?lt_data-ean11.
??????ls_te_item-zzjssl??=?lt_data-zzeanme.
??????ls_te_item-zzjsdw??=?lt_data-meins.
??????ls_te_item-zzdgean?=?lt_data-zzdgean.
??????ls_te_item-zzeanme?=?lt_data-zzdgsl.
??????ls_te_item-zzdgdw??=?lt_data-zzdgdw.
??????ls_te_item-zmd?=?lt_data-zmd.
??????ls_te_item-zzekpoyl6?=?lt_data-zzekpoyl6."城市代碼
??????CLEAR:lt_data,poaccount,poaccountx.
??????lt_extensionin-structure?=?'BAPI_TE_MEPOITEM'.
??????CALL?METHOD?cl_abap_container_utilities=>fill_container_c
????????EXPORTING
??????????im_value???????????????=?ls_te_item
????????IMPORTING
??????????ex_container???????????=?lt_extensionin-valuepart1
????????EXCEPTIONS
??????????illegal_parameter_type?=?1
??????????OTHERS?????????????????=?2.
??????IF?sy-subrc?<>?0.
*?????????????????????????????????????Implement?suitable?error?handling?here
??????ENDIF.
??????APPEND?lt_extensionin.
??????CLEAR?lt_extensionin.
??????ls_te_itemx-po_item?=?lv_ebelp.
??????ls_te_itemx-zzeanme?=?abap_true.
??????ls_te_itemx-zzcd????=?abap_true.
??????ls_te_itemx-zzjsean?=?abap_true.
??????ls_te_itemx-zzjssl??=?abap_true.
??????ls_te_itemx-zzjsdw??=?abap_true.
??????ls_te_itemx-zzdgean?=?abap_true.
??????ls_te_itemx-zzeanme?=?abap_true.
??????ls_te_itemx-zzdgdw?=?abap_true.
??????ls_te_itemx-zmd?????=?abap_true.
??????ls_te_itemx-zzekpoyl6?????=?abap_true.
??????lt_extensionin-structure?=?'BAPI_TE_MEPOITEMX'.
??????lt_extensionin-valuepart1?=?ls_te_itemx.
??????APPEND?lt_extensionin.
??????CLEAR?lt_extensionin.
批創思維導論。
BAPI的結構,BAPI里的代碼可以分為這樣兩部分:
1、一部分是數據校核,檢查傳入的數據是否滿足創建相關業務對象的條件,并且把錯誤消息反饋出來;
2、另一部分是更新數據庫,即UPDATE/INSERT/DELETE dbtab這樣的操作。
1 BAPI的優點
bapi是面向對象的設計;
bapi是固定的,一般不能修改;
bapi可以被sap內部部件和非sap程序使用;
bapi的成功和錯誤信息始終通過RETURN返回;
bapi可以被許多開發平臺使用;
2 何時該考慮使用BAPI設計程序
用VB/JAVA?C++等語言編寫非SAPGUI程序訪問和處理sap數據;
SAP不同部件之間通訊;
與非sap程序或者老系統交換數據:
使用異步通信分發數據如:ALE
可以通過SAP Business Connector or Internet Application Components 與因特網程序集成;
3 關于RETURN
RETURN用于BAPI返回錯誤和成功的消息,它可以是BAPIRETURN,BAPIRETURN,BAPIRET1,BAPIRET2和BAPIRET2_FIX中的一種類型.這些結構一般都包括以下字段:
SORT return BY type number row.
LOOP AT return WHERE type = 'E' OR type = 'A'.
?ENDLOOP.
如果sy-subrc = 0,CALL?FUNCTION?'BAPI_TRANSACTION_ROLLBACK'.
否則
?CALL?FUNCTION?'BAPI_TRANSACTION_COMMIT'
??????EXPORTING
????????wait???=?'X'? "參數wait賦值'X',提交完之后才回進行后面的代碼
??????IMPORTING
????????return?=?ls_commit_return.
TYPE | CHAR 1 | S= success message E?= error message W = warning message I = information message A = termination message (abort)終止消息(中止) |
ID | CHAR 20 | Message ID The structure BAPIRET2 takes into account the name space extension for the message class as of Release 4.0. If you want messages to be compatible with earlier R/3 Releases, use the message classes before Release 4.0. |
NUMBER | NUMC 3 | Message number |
MESSAGE | CHAR 220 | Full message text from the message table. All variables (in fields Message_V1 to Message_V4) have been replaced with text. |
MESSAGE_V1 MESSAGE_V2 MESSAGE_V3 MESSAGE_V4 | CHAR 50 | Fields for the variable texts of the message |
我們調用bapi做了相關的業務操作后,通常都要在后面調用 BAPI_TRANSACTION_COMMIT來提交所做得更改,然而,有時候,在程序中需要調用多個不同的BAPI實現不同的功能,那么這個時候就容易出現問題了。
最先調用的BAPI成功執行了,可是后續的BAPI就無法成功執行,當我們調試的時候,卻沒有錯誤,一切都能正常操作。那么這個時候,我們就要考慮是 BAPI_TRANSACTION_COMMIT參數的問題了!
因為在一個bapi成功執行后,需要調用 BAPI_TRANSACTION_COMMIT來提交所做得更改,那么這個提交操作要等待一定的時間,我們調用的時候,通常 BAPI_TRANSACTION_COMMIT的WAIT參數是空的,那么就會導致commit work and wait不會執行,而是簡單的commit work操作,這樣后續的BAPI可能需要上一個bapi所作操作的數據,而恰巧這些數據還沒有提交完成,就會導致以后的bapi都無法正常順利的執行。所以我們只需要將 BAPI_TRANSACTION_COMMIT中的參數wait賦值'X'。就可以保證后續的操作正常進行了。
BAPI_PO_CREATE1樣例:
CALL FUNCTION 'BAPI_PO_CREATE1'EXPORTINGpoheader = ls_poheaderpoheaderx = ls_poheaderx
* testrun = testrunIMPORTINGexppurchaseorder = lv_ebelnTABLESreturn = lt_return[]poitem = lt_poitem[]poitemx = lt_poitemx[]poschedule = lt_poschedule[]poschedulex = lt_poschedulex[]pocond = lt_pocond[]pocondx = lt_pocondx[]
* poaccount = poaccount[]
* poaccountx = poaccountx[]
* potextheader = potextheader[]
* pocomponents = pocomponents[]
* pocomponentsx = pocomponentsx[]extensionin = lt_extensionin[].SORT lt_return BY type number row.CLEAR lv_msg.LOOP AT lt_return WHERE type = 'E' OR type = 'A'.IF lt_return-type = 'E' AND lt_return-id = 'MEPO'.CONTINUE.ENDIF.IF lt_return-type = 'E' AND lt_return-id = 'BAPI' AND lt_return-number = '1'.CONTINUE.ENDIF.PERFORM frm_out_msg USING o_return-zmsg lt_return-message ';' CHANGING o_return-zmsg.lv_msg = lv_msg && o_return-zmsg . "add start by Jeremy 22.05.2020 19:04:24AT NEW row.READ TABLE lt_poitem INTO DATA(ls_itme) INDEX lt_return-row .o_return-zhxm2 = |{ ls_itme-po_item ALPHA = IN }|.o_return-zhxm = |{ ls_itme-po_item ALPHA = IN }|.
* CONDENSE O_RETURN-ZHXM NO-GAPS .o_return-zmsg = '項目:' && o_return-zhxm && o_return-zmsg.APPEND o_return TO ot_return.CLEAR o_return.ENDAT.ENDLOOP.IF lv_ebeln IS INITIAL.o_return-zmty = 'E'.CONDENSE lv_msg NO-GAPS .o_return-zmsg = lv_msg.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.
??IF?o_return-zmty?=?'E'.
????CALL?FUNCTION?'BAPI_TRANSACTION_ROLLBACK'.
??ELSE.
????CLEAR?ls_commit_return.
????CALL?FUNCTION?'BAPI_TRANSACTION_COMMIT'
??????EXPORTING
????????wait???=?'X'??????IMPORTING
????????return?=?ls_commit_return.
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态