点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,我是abap的新手,目前正在学习巴迪语。
我在Method的Z Badi接口中插入了简单的逻辑
IV_MATNR导入类型MARA-MATNR LS_MARA更改类型MARA GT_MARA更改类型MARA 选择matnr mtart INTO gt_mara FROM mara matnr eq iv_matnr在哪里。 如果sy-subrc <> 0。 清除gt_mara。 其他。 写入:/,/ls_mara-matnr,ls_mara-mtart。 万一。 ENDSELECT。
我正在尝试在程序中调用经典badi。 在参数中选择材料并执行后,输出为空。
如果有任何错误,请纠正我,谢谢
程序代码:
数据o_badi类型参考到ZIF_EX_ABAP_BADI。 ""经典BADi接口名称 数据:带有标题行的gt_mara类型zmara_ttyp。 数据:gs_mara与gt_mara类似。 参数:p_matnr类似于gs_mara-matnr。 选择开始。 调用方法CL_EXITHANDLER => GET_INSTANCE""调用此方法为Classic BADI定义创建实例 出口 EXIT_NAME ='ZABAP_BADI'""经典BADi定义 * NULL_INSTANCE_ACCEPTED = SEEX_FALSE *重要 * ACT_IMP_EXISTING = 改变 实例= o_badi *例外情况 * NO_REFERENCE = 1 * NO_INTERFACE_REFERENCE = 2 * NO_EXIT_INTERFACE = 3 * CLASS_NOT_IMPLEMENT_INTERFACE = 4 * SINGLE_EXIT_MULTIPLY_ACTIVE = 5 * CAST_ERROR = 6 * EXIT_NOT_EXISTING = 7 * DATA_INCONS_IN_EXIT_MANAGEM = 8 *其他= 9 。 *如果SY-SUBRC <> 0。 **在此处实施适当的错误处理 *万一。 呼叫方法O_BADI-> MAT_DETAILS 出口 IV_MATNR = p_matnr 改变 LS_MARA = gs_mara GT_MARA = gt_mara。 将gt_mara循环到gs_mara。 写:gs_mara-matnr, gs_mara-mtart。 ENDLOOP。
我看到了几种"改善"编码的方法,但是主要问题是badi实现的内容以及如何处理带有标题行的表。 有关更好的解决方案,请参见答案的结尾。 首先,这里是"出错"的地方
1。 您使用SELECT ... ENDSELECT,一次只能提取一条记录并将该记录写入结构(而不是表中,请参见有关ENDSELECT的ABAP文档):
这样,变量GT_MARA []的表永远不会被填充,但是变量GT_MARA的结构却被填充。 在大多数情况下,ABAP将根据上下文选择带有标题行的表的正确"部分"(表或结构)。 在某些情况下,这可能是"错误的"或不可能的。 有关更多信息,请参见内部表带有标题行的ABAP文档。
2。 找到记录后,您可以在一个空变量上使用WRITE(以显示输出)语句:
从未通过您的报告或badi方法设置变量LS_MARA。 但是您仍在尝试阅读。 甚至更糟糕的是,您试图写入屏幕输出,除非您只是尝试测试编码,否则在大多数情况下使用Badi都是不合适的。
3。