许多BAPI都会有一个excension的结构,这些结构都对应的是一些增强字段。
BAPI_ACC_DOCUMENT_POST 的扩展字段
银行现金流科目要添加原因代码
实施方法里面的写法可以参考 示例实施类。
步骤1、创建增强结构
步骤2、创建新的BADI 实现 SE18
步骤3、SE19编辑实施方法
method IF_EX_ACC_DOCUMENT~CHANGE.
DATA: WA_EXTENSION TYPE BAPIPAREX,
EXT_VALUE(960) TYPE C,
WA_ACCIT TYPE ACCIT,
L_REF TYPE REF TO DATA.
DATA: WA_ZEXTEN TYPE ZEXTEN.
FIELD-SYMBOLS: <ACCIT> TYPE ACCIT.
FIELD-SYMBOLS: <L_STRUC> TYPE ANY,
<L_FIELD> TYPE ANY.
FIELD-SYMBOLS : <FS_ACCIT> TYPE ACCIT.
SORT C_EXTENSION2 BY STRUCTURE.
LOOP AT C_EXTENSION2 INTO WA_EXTENSION
WHERE STRUCTURE = 'ZEXTEN'. "对应于SE11创建的结构
WA_ZEXTEN = WA_EXTENSION-VALUEPART1.
READ TABLE C_ACCIT ASSIGNING <ACCIT>
WITH KEY POSNR = WA_ZEXTEN-ITEMNO_ACC.
IF SY-SUBRC = 0.
<ACCIT>-RSTGR = WA_ZEXTEN-RSTGR.
<ACCIT>-BSCHL = WA_ZEXTEN-BSCHL.
<ACCIT>-UMSKZ = WA_ZEXTEN-UMSKZ.
<ACCIT>-ANBWA = WA_ZEXTEN-ANBWA.
<ACCIT>-XNEGP = WA_ZEXTEN-XNEGP.
ENDIF.
ENDLOOP.
LOOP AT C_EXTENSION2 INTO WA_EXTENSION.
AT NEW STRUCTURE.
CREATE DATA L_REF TYPE (WA_EXTENSION-STRUCTURE).
ASSIGN L_REF->* TO <L_STRUC>.
ENDAT.
CONCATENATE WA_EXTENSION-VALUEPART1
WA_EXTENSION-VALUEPART2
WA_EXTENSION-VALUEPART3
WA_EXTENSION-VALUEPART4
INTO EXT_VALUE.
MOVE EXT_VALUE TO <L_STRUC>.
"判断是否是EPIC过账传输的增强结构
IF WA_EXTENSION-STRUCTURE = 'ZTMS_EPIC_EXTENSION'.
ASSIGN COMPONENT 'POSNR' OF STRUCTURE <L_STRUC> TO <L_FIELD>.
"得到凭证行
READ TABLE C_ACCIT ASSIGNING <FS_ACCIT> WITH KEY POSNR = <L_FIELD>.
IF SY-SUBRC = 0.
"凭证状态
<FS_ACCIT>-BSTAT = 'S'.
"特别总帐科目的分配号=流动项目
ASSIGN COMPONENT 'ZFITM' OF STRUCTURE <L_STRUC> TO <L_FIELD>.
<FS_ACCIT>-HZUON = <L_FIELD>.
"目标特别总帐标志
ASSIGN COMPONENT 'ZUMSK' OF STRUCTURE <L_STRUC> TO <L_FIELD>.
<FS_ACCIT>-ZUMSK = <L_FIELD>.
"过账事务代码
ASSIGN COMPONENT 'TCODE' OF STRUCTURE <L_STRUC> TO <L_FIELD>.
<FS_ACCIT>-XREF2 = <L_FIELD>.
ENDIF.
"业务事务
C_ACCHD-GLVOR = 'RFST'.
"过账事务代码
ASSIGN COMPONENT 'TCODE' OF STRUCTURE <L_STRUC> TO <L_FIELD>.
C_ACCHD-TCODE = <L_FIELD>.
ENDIF.
ENDLOOP.
endmethod.
这里可以写成动态的,也可以写上上面那种写死的。
4、过滤器
BAPI_SALESORDER_CREATEFROMDAT2 增强字段
1、需要通过append或者include的形式对标准结构进行增强
如果增强字段在销售订单抬头(vbak)上,则要将增强字段一并append到如下四个表/结构中:
- VBAKKOZ
- VBAKKOZX
- BAPE_VBAK
- BAPE_VBAKX
在行项目(vbap)上:
- VBAPKOZ
- VBAPKOZX
- BAPE_VBAP
- BAPE_VBAPX
在运货计划行(VBEP)上:
- VBEPKOZ
- BEPKOZX
- BAPE_VBEP
- BAPE_VBEPX
要注意的是vbapkozx中增强字段类型要使用char1或char01 ,不要使用BAPIUPDATE,订单修改的bapi中写死了只识别char1和char01
DATA: lwa_bape_vbap TYPE bape_vbap. "BAPI Interface for Customer Enhancements to Table VBAP
DATA: lwa_bape_vbapx TYPE bape_vbapx. "BAPI Checkbox for Customer Enhancments to Table VBAP
DATA: lwa_extensionin TYPE bapiparex. "Customer Enhancement for VBAK, VBAP, VBEP
"Fill item level self-defined fields
* extension BAPE_VBAP
CLEAR: lwa_bape_vbap,
lwa_bape_vbapx.
* 订单号可以不填,只填行项目号就可以,然后给自定义字段赋值
lwa_bape_vbap-posnr = lwa_order_items_in-itm_number.
lwa_bape_vbap-yymv_mvgr1 = lwa_items-yymv_mvgr1.
lwa_bape_vbap-yymv_mvgr2 = lwa_items-yymv_mvgr2.
lwa_bape_vbap-yymv_mvgr3 = lwa_items-yymv_mvgr3.
lwa_bape_vbap-yymv_mvgr4 = lwa_items-yymv_mvgr4.
lwa_bape_vbap-yymv_mvgr5 = lwa_items-yymv_mvgr5.
lwa_bape_vbapx-yymv_mvgr1 = 'X'.
lwa_bape_vbapx-yymv_mvgr2 = 'X'.
lwa_bape_vbapx-yymv_mvgr3 = 'X'.
lwa_bape_vbapx-yymv_mvgr4 = 'X'.
lwa_bape_vbapx-yymv_mvgr5 = 'X'.
lwa_bape_vbapx-posnr = lwa_order_items_in-itm_number.
MOVE 'BAPE_VBAP' TO lwa_extensionin-structure.
CALL METHOD cl_abap_container_utilities=>fill_container_c
EXPORTING
im_value = lwa_bape_vbap
IMPORTING
ex_container = lwa_extensionin-valuepart1.
APPEND lwa_extensionin TO m_it_extensionin.
CLEAR lwa_extensionin.
MOVE 'BAPE_VBAPX' TO lwa_extensionin-structure.
MOVE lwa_bape_vbapx TO lwa_extensionin-valuepart1.
APPEND lwa_extensionin TO m_it_extensionin.
BAPI_PO_CREATE1 增强字段
采购订单增强屏幕扩展是通过include结构增强的,所以不需要像SO那样对其他额外的结构增强。
CLEAR :ls_header_ext ,ls_header_extx.
ls_header_ext-contract_id = ls_ekko-contract_id.
ls_header_extx-contract_id = 'X'.
ls_header_ext-contract_name = lv_name.
ls_header_extx-contract_name = 'X'.
CLEAR: lt_extensionin.
lt_extensionin-structure = 'BAPI_TE_MEPOHEADER'.
lt_extensionin-valuepart1 = ls_header_ext.
APPEND lt_extensionin.
CLEAR: lt_extensionin.
lt_extensionin-structure = 'BAPI_TE_MEPOHEADERX'.
lt_extensionin-valuepart1 = ls_header_extx.
APPEND lt_extensionin.