2012-02-24 78 views
1

最近我一直在使用SAP/ABAP,并且正在检查接口'IF_EX_IDOC_CREATION_CHECK'的实现,该接口有一个带有3个参数的'IDOC_DATA_CHECK'方法;IF_EX_IDOC_CREATION_CHECK的文档

  1. IDOC_CONTROL型EDIDC
  2. IDOC_DATA型EDIDD_TT
  3. CREATE_IDOC C型

而我的问题是,我无法找到与此相关的接口和实例文档互联网。我想特别知道参数'IDOC_DATA'在被调用时有什么值。它一次处理一种材料的IDOC,还是包含所有材料的所有IDOC。

破了我脑袋的代码就是这个;

loop at idoc_data assigning <it_data>. 
    case <it_data>-segnam. 
    when 'E1BPE1MATHEAD'. " Segment 
     clear: it_mat,zliser. 
     it_mathead = <it_data>-sdata. 
     ... 
     if sy-subrc eq 0. " -------> This 
     exit.   " -------> is my 
     endif.   " -------> headache 
... 

当涉及到exit.声明它超出循环,不处理接下来的IDOCs,但我完全不知道,如果它停止检查所有的材料都在未来的IDOCs或方法“IF_EX_IDOC_CREATION_CHECK〜IDOC_DATA_CHECK '再次被另一种材料的下一组IDOC调用。

不幸的是我不能用样本数据运行这个接口,因为它直接改变了其他系统的数据,所以我只能读取代码。

因此,如果有人在这个问题上的经验或参考,我会感谢您的帮助。

在此先感谢。

+1

尝试搜索“IDOC_CREATION_CHECK BAdI”。您可能会发现更多信息。 – 2012-02-24 09:06:01

回答

1

exit语句会导致程序退出循环,如果循环是方法中唯一的处理块,它也会退出该方法。

但是,应该为每个IDOC再次调用BADI /方法。

难道你没有一个开发或QA环境,你可以测试这只是为了确保?

+0

是的,我很幸运,这个实现直接连接到其他系统,所以,如果我测试它,我会写在另一个系统中,但你的答案是我怀疑的。这只是问题的一部分,因为它似乎保留了最后一个IDOC的信息,所以在下一次调用时,这些值将保留并污染当前信息。我想触摸代码并对写入其他系统的行进行评论并进行测试,但这是保修期内的代码,我只能阅读它。感谢回复。 – 2012-02-25 15:35:05

+0

你能找到类实例化的地方吗?这听起来像对象引用正在被重用,而不是正确实例化。或者也许有一些IDOC留下的流氓静态属性? – Esti 2012-02-25 21:48:19

+0

这个BAdi在一个内部调用这个实现的工作被激活时工作。我已经看到了SM37的工作,它有一个变种。星期六,我在DEV中做了我自己的实现,我可以运行它,并且按照你写的从一种材料中一次调用IDOC,然后传递给另一套。实施的代码也有内部变量,据我所知,它应该清除所有这些变量。我正在调试,因此找出发生的事情是时间问题。 – 2012-02-27 17:01:13