2012-02-17 35 views
1

請告訴我有人在那裏做了這個。我正嘗試通過.NET Connector 3.0與SAP進行接口。我可以通過遠程函數調用讀取數據,但我無法弄清楚如何編寫任何內容,例如創建或編輯材料。通過一些研究,我已經確定BAPI_MATERIAL_SAVEDATA是我需要使用的rfc,但不能爲我的生活弄清楚如何。這是我想要的:創建一個材質的.NET連接器SAP

function = destination.Repository.CreateFunction("BAPI_MATERIAL_SAVEDATA"); 
IRfcStructure structure = function.GetStructure("HEADDATA"); 
structure.SetValue("material", "000000000000000888"); 
structure.SetValue("ind_sector", "U"); 
structure.SetValue("matl_type", "ERSA"); 
structure.SetValue("basic_view", "X"); 

structure = function.GetStructure("CLIENTDATA"); 
structure.SetValue("matl_group", "01"); 
structure.SetValue("base_uom", "EA"); 

structure = function.GetStructure("CLIENTDATAX"); 
structure.SetValue("matl_group", "X"); 
structure.SetValue("base_uom", "X"); 
function.Invoke(destination); 

我基於各種VB和ABAP示例拼湊在一起。問題是它什麼也沒做。當調用function.Invoke()時,它不會創建一個材質,它不會引發異常,它什麼也不做。很明顯,我沒有做正確的事情,因爲我沒有絲毫的想法。有人請幫忙!

回答

2

我目前無法訪問SAP系統,但據我所知,您必須在事務範圍內調用bapi,例如,創建材質後調用BAPI_TRANSACTION_COMMIT。但也許.net連接器有另一種方法...

希望這會有所幫助。

+0

是的,如果BAPI_MATERIAL_SAVEDATA成功返回,則嘗試調用BAPI_TRANSACTION_COMMIT。 – Esti 2012-02-18 03:54:24

+0

謝謝你的迴應。顯然我在這裏誤解了這個問題。如果失敗,我期待函數拋出異常,但我意識到情況並非如此。我檢查了函數的返回值,實際上它失敗了,並告訴我爲什麼。它說「沒有描述已被轉移」,但我不知道我想把它放在哪裏。 MATERIALDESCRIPTION表?如果是這樣,它不會讓我修改這張表。有什麼想法嗎? – Nick 2012-02-21 18:42:30

+0

您必須使用 訪問表MATERIALDESCRIPTION,是的,IRfcTable matdescr = function.GetTable(「MATERIALDESCRIPTION」); 然後添加一個新行,輸入數據(不要忘記包含語言!)並像通常那樣調用該函數。 – chrisdennig 2012-02-22 12:25:51

0

您需要根據輸出類型從函數中獲取值。下面是輸出類型的例子。 (表)

function.Invoke(rfcDest); 

    IRfcTable TableResult = function.GetTable("TAG_NAME_OR_METADATA_NAME");