none
C# 連接SAP問題? RRS feed

  • 問題

  • 各位好,這兩天嘗試連到 SAP RFC方法當中,但一直有問題。是使用的元件不相容嗎?目前卡在這邊在網路上找其他的解決方法,花了快兩天的時間,可惜我對這個還不太懂,所以不知道如何解決,如果知道的人可以幫我解答嗎?謝謝(目前是想嘗試用web service 連SAP RFC)

    作業環境:windows server 2008R2 

    開發版本: vs2015 community

    我昰參考這個網站的

    http://www.blogbus.com/qiqeloveyou-logs/75375860.html

    platform target已經更改為x86,SAPLogonCtrl等元件Enbed Interop Types 設為 False

    當程式跑到這一行的時候 func.Connection = conn;

    跳出錯誤訊息

    An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll

    Additional information: Bad variant type

    using SAPBAPIControlLib; using SAPLogonCtrl; using SAPTableFactoryCtrl; using SAPFunctionsOCX; public void test() { SAPLogonCtrl.SAPLogonControlClass login = new SAPLogonCtrl.SAPLogonControlClass();

    login.ApplicationServer = "XXX.XXX.XXX.XXX"; login.Client = "888"; login.Language = ""; login.User = "admin"; login.Password = "password"; login.SystemNumber = 00; SAPLogonCtrl.Connection conn = (SAPLogonCtrl.Connection)login.NewConnection(); if (conn.Logon(0, true)) { //lblLogonStatus.Text = "SAP ok"; MessageBox.Show("ok"); SAPFunctionsOCX.SAPFunctionsClass func = new SAPFunctionsOCX.SAPFunctionsClass(); func.Connection = conn; SAPFunctionsOCX.IFunction ifunc = (SAPFunctionsOCX.IFunction)func.Add("ZFMM_INQMAT"); } }


    2016年10月7日 上午 06:17

解答

  • 這幾天有找到這個資料,我用NCO 的元件就可以取得RFC的方法了,原本的方法寫到工作執行緒後錯誤訊息仍然一樣,剛好找到這個教學來嘗試看看就成功了。 

    http://www.slideshare.net/ltcrd/dot-net-sap

    • 已標示為解答 Randice_d 2016年10月13日 上午 02:01
    2016年10月13日 上午 02:00

所有回覆

  • SAPFunctionsOCX 5.0.0.0

    SAPBAPIControlLib 1.2.0.0

    SAPLogonCtrl 1.1.0.0

    SAPTableFactoryCtrl 1.1.0.0

    實測以上版本搭配您的Code可連接RFC

    2016年10月7日 上午 09:28
  • 謝謝你的回答,程式到這行確實可以連的到, 但是為甚麼func.Connection= conn; 會出現錯誤呢?

    我這邊 SAP GUI 是7.30

     if (conn.Logon(0, true))


    • 已編輯 Randice_d 2016年10月7日 上午 10:24
    2016年10月7日 上午 10:23
  • Call SAP connector 前 必須設置Thread

    System.Threading.Thread th = new System.Threading.Thread(new System.Threading.ThreadStart(YourSAPRFCFunctionHere));
    th.SetApartmentState(System.Threading.ApartmentState.STA);
    th.Start();
    th.Join();


    2016年10月7日 下午 01:00
  • 不好意思,回覆有點晚了,我增加一個Button的物件,增加下列的程式碼 錯誤訊息也是一樣
    private void button1_Click(object sender, EventArgs e)
            {
                System.Threading.Thread s = new System.Threading.Thread(new System.Threading.ThreadStart(test)); //Create a new thread and set the method test() run in this thread
                s.SetApartmentState(System.Threading.ApartmentState.STA);                                        //Set the run mode 'STA'
                s.Start();                                                                                       //Start the thread
                s.Join();
            }

    2016年10月10日 下午 03:25
  • Hi Randice,

    你可以參考這篇部落格自行除錯看看

    遺忘技術的角落-DotNet Call SAP/RFC

    2016年10月10日 下午 06:00
  • 這幾天有找到這個資料,我用NCO 的元件就可以取得RFC的方法了,原本的方法寫到工作執行緒後錯誤訊息仍然一樣,剛好找到這個教學來嘗試看看就成功了。 

    http://www.slideshare.net/ltcrd/dot-net-sap

    • 已標示為解答 Randice_d 2016年10月13日 上午 02:01
    2016年10月13日 上午 02:00