2012-02-24 14 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