如果确定了用某个bapi函数,则就在se37中打开这个函数,那么要定义的结构或表当然要参照这里的import里的结构、或tables中的表,return是用来返回消息的,可以是结构或内表吧(这个还不太确定),下面以BAPI_MATERIAL_SAVEDATA(这个函数可以创建或更改物料主数据)为例吧:
根据需求我们要用到的字段都有:
matnr LIKE mara-matnr, "物料号 mbrsh LIKE mara-mbrsh, "行业领域 mtart LIKE mara-mtart, "物料类型 maktx LIKE makt-maktx, "物料描述 meins LIKE mara-meins, "基本单位 bismt LIKE mara-bismt," 旧物料编码 matkl LIKE mara-matkl,"物料组 ***组织级别 werks LIKE marc-werks, "工厂 lgort LIKE mard-lgort, "库存地点 vkorg LIKE mvke-vkorg, "销售组织 vtweg LIKE mvke-vtweg, "分销渠道 ***销售组织1以视图 dwerk LIKE mvke-dwerk, "交货工厂 spart LIKE mara-spart, "产品组 taxkm LIKE mlan-taxm1, "税分类 ***销售组织2以视图 ktgrm LIKE mvke-ktgrm, "科目设置组 ***一般/工厂视图 mtvfp LIKE marc-mtvfp, "可用性检查 tragr LIKE mara-tragr, "运输组 ladgr LIKE marc-ladgr, "装载组 *** 采购视图,要扩展的字段 ekgrp LIKE marc-ekgrp, "采购组 mfrgr LIKE marc-mfrgr,"物料运输组
那么这些字段在bapi的这个函数中对应在哪里呢,分别找出来就是了
例如:在wa_header中就包含了物料号、物料领域、物料类型及各基本视图
在wa_mara中就包含了物料组、计量单位、旧物料号、产品组、运输组
在wa_marc中就包含了工厂、可用性检查、装载组、采购组、物料运输组
同理找到自己需要的字段对应的结构
找到了这些当然在程序中要定义相应的结构和内表了要不然程序就识别不了
DATA: wa_header LIKE bapimathead,"带有控制信息的表头段,也就是各视图 wa_mara LIKE bapi_mara,"客户端层次物料数据 wa_marax LIKE bapi_marax,"BAPI_MARA 的复选框结构 wa_marc LIKE bapi_marc,"工厂级别的物料数据 wa_marcx LIKE bapi_marcx,"BAPI_MARC 的复选框结构 wa_mard LIKE bapi_mard,"存储位置级别的物料数据 wa_mardx LIKE bapi_mardx,"BAPI_MARD 的复选框结构 wa_mvke LIKE bapi_mvke,"销售数据 wa_mvkex LIKE bapi_mvkex,"BAPI_MVKE 复选框结构 it_makt LIKE bapi_makt OCCURS 0 WITH HEADER LINE,"物料描述 it_marm LIKE bapi_marm OCCURS 0 WITH HEADER LINE,"计量单位 it_marmx LIKE bapi_marmx OCCURS 0 WITH HEADER LINE, it_mlan LIKE bapi_mlan OCCURS 0 WITH HEADER LINE,"税分类 wa_return like bapiret2."用来判断返回情况
注意:如果在bapi中有成对出现的,比方bapi_mara,bapi_marax,在这里也要成对定义,赋值时也要都赋值,一般像bapi_marax的给他一个标志就行了可以为\'X\'也可以自己设个标志,不过有时候bapi_marax赋的也是具体字段,这是因为他的短文本限定了是个字段,如
相应的字段赋值完就可以调用bapi了
CALL FUNCTION \'BAPI_MATERIAL_SAVEDATA\' EXPORTING headdata = wa_header clientdata = wa_mara clientdatax = wa_marax plantdata = wa_marc plantdatax = wa_marcx storagelocationdata = wa_mard storagelocationdatax = wa_mardx salesdata = wa_mvke salesdatax = wa_mvkex IMPORTING return = wa_return TABLES materialdescription = it_makt unitsofmeasure = it_marm unitsofmeasurex = it_marmx taxclassifications = it_mlan.
然后在alv上显示执行是否成功,就是定义的一个message内表
DATA:BEGIN OF it_message OCCURS 0, flag, index LIKE sy-tabix, matnr LIKE mara-matnr, maktx LIKE makt-maktx, msgtp TYPE bapi_mtype,"消息类型: S 成功,E 错误,W 警告,I 信息,A 中断 id TYPE symsgid,"消息, 消息类 num TYPE symsgno,"消息, 消息编号 text(220),"消息文本 END OF it_message.
这个内表里除了消息相关的也要定义一些和取数内表有关的,如这里的物料号及物料描述,便于测试时用
其他步骤就参照alv就行了。
注:这里要进行单位转化,meins如果不转化,你导入的是pc,在系统中的就是st,转化表在t006a中,还有就是税分类这块也要注意一下发货国,这个可以在mlan中看,税分类在不同的国家是不同的,所以根据国家选择。
几个有用的事物代码mm01:创建物料 mm03:显示物料初始屏幕 se39:同时打开两个程序在一个窗口显示 se37:打开bapi module。
添加一个有用的字段: ICON TYPE ICON_D, "红绿灯标志