创建BAPI程序的步骤
1.定义BAPI Structure (Structure不能在BAPI中重复使用,因为一旦BAPI被释放,其Structure被冻结)(T-CODE:SE11)
2.创建FUNCTION MODULE(T-CODE:SE37)
每个BAPI必须有自己的Function Group,Function Group属性必须为RFC
3.创建Business Object(T-CODE:SWO1)
4.使用BAPI WIZARD创建API Method (T-CODE:SWO1:Utilities--API methods--methods)
这样BAPI可以被外部程序调用
5.Function Module符合BOR Method
4.释放BAPI Function Module,释放Business Object Type,(先释放对象类型在释放对象类型下的组件)
释放BAPI作为BOR的一种Method
Path:CODE:SWO1àEditàchange release statusàObject typeàTo modeled、、、、
创建BAPI注意事项
1. 要注意 Function Module 要释放了之后, 在SWO1中才可以把 method设为 reaslse. 到se37中, Function Module ---> release ---> release.
2. 添加方法: swo1中, 把鼠标选中在Method上,然后点Create,输入Function的名字, Function加入到了Method中之后,双击这个method,进入method的属性,然后在"ABAP"选项卡中选择API. 然后释放Object和组件.
3. 改变 Object 和 component的状态: edit ----> change release status --->
4. 然后 "产生" 就可以了.
5. SOW1中创建对象的时候,必须要用package才可以,不然对象是不可传送的.
实例程序:
TABLES BAPI_PP_TIMETICKET.
TABLES BAPI2017_GM_ITEM_CREATE.
TABLES BAPI_LINK_CONF_GOODSMOV.
TABLES BAPIRET1.
DATA: wa_pdHeader TYPE BAPI_PP_TIMETICKET.
DATA: i_pdHeader LIKE TABLE OF BAPI_PP_TIMETICKET.
DATA: wa_pdDetail LIKE BAPI2017_GM_ITEM_CREATE.
DATA: i_pdDetail LIKE TABLE OF BAPI2017_GM_ITEM_CREATE.
DATA: itab_return LIKE TABLE OF BAPI_CORU_RETURN.
DATA: wa_return TYPE BAPIRET1.
DATA: wa_pdLink LIKE BAPI_LINK_CONF_GOODSMOV.
DATA: i_pdLink LIKE TABLE OF BAPI_LINK_CONF_GOODSMOV.
wa_pdHeader-ORDERID = AUFNR.
wa_pdHeader-CONF_NO = 2710.
wa_pdHeader-OPERATION = VORNR.
wa_pdHeader-POSTG_DATE = SY-DATUM.
wa_pdHeader-PLANT = WERKS.
wa_pdHeader-WORK_CNTR = ARBPL.
wa_pdHeader-CONF_QUAN_UNIT = MEINH.
wa_pdHeader-YIELD = LMNGA.
wa_pdHeader-SCRAP = XMNGA.
wa_pdHeader-REWORK = RMNGA.
wa_pdHeader-CONF_ACTI_UNIT1 = ILE01.
wa_pdHeader-CONF_ACTIVITY1 = ISM01.
wa_pdHeader-CONF_ACTI_UNIT2 = ILE02.
wa_pdHeader-CONF_ACTIVITY2 = ISM02.
wa_pdHeader-CONF_ACTI_UNIT3 = ILE03.
wa_pdHeader-CONF_ACTIVITY3 = ISM03.
wa_pdHeader-PERS_NO = PERNR.
APPEND wa_pdHeader TO i_pdHeader.
wa_pdDetail-MATERIAL = '20200122'.
wa_pdDetail-PLANT = '2000'.
wa_pdDetail-STGE_LOC = '2021'.
wa_pdDetail-MOVE_TYPE = '261'.
wa_pdDetail-ENTRY_QNT = '20'.
wa_pdDetail-NO_TRANSFER_REQ = ''.
wa_pdDetail-MOVE_MAT = '20200122'.
wa_pdDetail-MOVE_PLANT = '2000'.
wa_pdDetail-MOVE_STLOC = '2021'.
APPEND wa_pdDetail TO I_pdDetail.
wa_pdDetail-MATERIAL = '20200124'.
wa_pdDetail-PLANT = '2000'.
wa_pdDetail-STGE_LOC = '2021'.
wa_pdDetail-MOVE_TYPE = '261'.
wa_pdDetail-ENTRY_QNT = '20'.
wa_pdDetail-MOVE_MAT = '20200124'.
wa_pdDetail-MOVE_PLANT = '2000'.
wa_pdDetail-MOVE_STLOC = '2021'.
wa_pdDetail-NO_TRANSFER_REQ = 'x'.
APPEND wa_pdDetail TO I_pdDetail.
wa_pdLink-INDEX_CONFIRM = 1.
wa_pdLink-INDEX_GOODSMOV = 1.
APPEND wa_pdLink TO I_pdLink.
wa_pdLink-INDEX_CONFIRM = 1.
wa_pdLink-INDEX_GOODSMOV = 2.
APPEND wa_pdLink TO I_pdLink.
CALL FUNCTION 'BAPI_PRODORDCONF_CREATE_TT'
TABLES
LINK_CONF_GOODSMOV = I_pdLink
TIMETICKETS = i_pdHeader
GOODSMOVEMENTS = I_pdDetail.
DATA: error_log TYPE c.
LOOP AT itab_return INTO wa_return.
IF wa_return-type = 'E'.
error_log = 'X'.
EXIT.
ENDIF.
CLEAR wa_return.
ENDLOOP.
IF error_log = 'X'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
WRITE '有错误存在,不能生成PO'.
LOOP AT itab_return INTO wa_return.
WRITE: / wa_return-type,wa_return-message.
CLEAR wa_return.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
LOOP AT itab_return INTO wa_return.
WRITE: / wa_return-type,wa_return-message.
CLEAR wa_return.
ENDLOOP.
ENDIF. |