Pendo筆記,BAPI 一些筆記

 2023-12-25 阅读 29 评论 0

摘要:vendor?供應商號:長度必須和系統一致,10位。如?2000025要寫成?0002000025傳遞給參數。 ? ? ? CALL?FUNCTION?'CONVERSION_EXIT_ALPHA_INPUT' Pendo筆記,????????EXPORTING ??????????input??=?poheader-vendor ????????IMPORTING ??????????outpu

  • vendor?供應商號:長度必須和系統一致,10位。如?2000025要寫成?0002000025傳遞給參數。

? ? ? CALL?FUNCTION?'CONVERSION_EXIT_ALPHA_INPUT'

Pendo筆記,????????EXPORTING
??????????input??=?poheader-vendor
????????IMPORTING
??????????output?=?poheader-vendor.

??????poheaderx-vendor?=?abap_true.

  • ?POITEM 中的?PO_ITEM?參數,在?POITEMX中對應的不是X,而是相同的?采購憑證的項目編號.

??????poitem-po_item???????=?lv_ebelp."行項目
??????poitemx-po_item??????=?lv_ebelp.

  • ?POHEADER中的參數在?POHEADERX一定要有對應的參數。POITEM也一樣。
  • 增強字段在extensionin里

批判性思維讀書筆記。???"抬頭增強字段
????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 = 0CALL?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.

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/196626.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息