当前位置:软件学习 > 其它软件 >>

VS2005中asp.net用C#怎么调用SAP的rfc函数,请高手指教!

用SAPGUI里的COM连接成功了,但是调用时设定连接会出现Bad variant type的错误,不知是何原因,请高手指教啊!
       SAPLogonCtrl.SAPLogonControlClass logon = new SAPLogonCtrl.SAPLogonControlClass();
        logon.ApplicationServer = "10.1.147.2";
        logon.Client = "200";
        logon.Language = "ZH";
        logon.User = "test";
        logon.Password = "test";
        logon.SystemNumber = 00;
        SAPLogonCtrl.Connection conn = (SAPLogonCtrl.Connection)logon.NewConnection();
        
        if (conn.Logon(0, true))
        {
            SAPFunctionsOCX.SAPFunctionsClass func = new SAPFunctionsOCX.SAPFunctionsClass();
            func.Connection = conn; //在这里会出现Bad variant type的错误            SAPFunctionsOCX.IFunction ifunc = (SAPFunctionsOCX.IFunction)func.Add("Z_OA_002"); 
            ifunc.Call();
        } --------------------编程问答-------------------- 没有高手搞过这个么?帮帮偶啊! --------------------编程问答-------------------- 我所知道的,有两种方法实现SAP与VS2005互操作问题
但却不是楼主提到的这种方法

1、用SAP Connector for .Net 版本是2.0,但目前还只支持VS2003,所以你可以把它在2003下做成DLL文件再在VS2005中调用,我做过测试,可行~~

2、不知你用的是什么版本的SAP,我在ECC5,ECC6下都可以发布Web Service,然后在VS2005中消费它,很好用~~ --------------------编程问答-------------------- 发表于:2008-02-21 00:35:392楼 得分:0 
我所知道的,有两种方法实现SAP与VS2005互操作问题 
但却不是楼主提到的这种方法 

1、用SAP   Connector   for   .Net   版本是2.0,但目前还只支持VS2003,所以你可以把它在2003下做成DLL文件再在VS2005中调用,我做过测试,可行~~  


這個可行,但是比較麻煩!~VS2005好像不能直接調用
而且用戶名和密易做图必須改成大寫的才行 --------------------编程问答-------------------- 2003做成dll再给2005用倒是用过,就是不太好用,WebService的方式可以调用BAPI么?传table类型的参数怎么传呢?
有没有例子,给一个,谢啦!!! --------------------编程问答-------------------- 什么呀 --------------------编程问答-------------------- 我也想知道,正在找這方面的資料~~~~~ --------------------编程问答-------------------- 我也是遇到了这个问题,死活不行啊,都这个年代了,还哪里去找vs2003啊,电脑空间都不够了。
后来用 SQL2005 NET Data Provider for mySAP Business Suite 解决问题了。 --------------------编程问答-------------------- 我写了一篇文章,你看看,应该是可以解决你的问题了。
请看链接
http://www.cnblogs.com/jirigala/archive/2008/11/26/1341345.html
SAP RFC Connector Bad variant type --------------------编程问答-------------------- up --------------------编程问答-------------------- 楼主,SAPFunctionsOCX如何引用?是否需要装sap.net.setup_2.0. --------------------编程问答-------------------- SAPFunctionsOCX已经添加!我使用VS2005+ECC6.0客户端调用下面的程序没有出现楼主说的问题!            
    SAPFunctionsOCX.SAPFunctionsClass func = new SAPFunctionsOCX.SAPFunctionsClass();
    func.Connection = conn;
    SAPFunctionsOCX.IFunction ifunc = (SAPFunctionsOCX.IFunction)func.Add("ENQUEUE_READ");
    ifunc.Call(); --------------------编程问答--------------------  一,添加对Interop.SAPFunctionsOCX.dll以及Interop.SAPLogonCtrl.dll和Interop.SAPTableFactoryCtrl.dllcom组件的引用。

      二,新开一个线程,并将该线程的运行模式设置为STA. 并将登录SAP系统以及调用Function module的方法运行在该线程下!代码如下:

    protected 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();                                                                                        //Wait until thread run OK.
        GridView1.DataSource = dt;
        GridView1.DataBind();
        msg.Text = "Get Data from 'ENQUEUE_READ' OK!";
    }

    private void test()
    {
        SAPLogonCtrl.SAPLogonControlClass login = new SAPLogonCtrl.SAPLogonControlClass();
        login.ApplicationServer = "";
        login.Client = "";
        login.Language = "EN";
        login.User = username.Text;
        login.Password = Psw.Text;
        login.SystemNumber = 00;
        SAPLogonCtrl.Connection conn = (SAPLogonCtrl.Connection)login.NewConnection();

        if (conn.Logon(0, true))
        {
            SAPFunctionsOCX.SAPFunctionsClass func = new SAPFunctionsOCX.SAPFunctionsClass();
            func.Connection = conn;
            SAPFunctionsOCX.IFunction ifunc = (SAPFunctionsOCX.IFunction)func.Add("ENQUEUE_READ");
            SAPFunctionsOCX.IParameter gclient = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("GCLIENT");
            gclient.Value = "301";
            SAPFunctionsOCX.IParameter GUNAME = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("GUNAME");
            GUNAME.Value = "";
            SAPFunctionsOCX.IParameter LOCAL = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("LOCAL");
            LOCAL.Value = "0";
            ifunc.Call();
            SAPTableFactoryCtrl.Tables tables = (SAPTableFactoryCtrl.Tables)ifunc.Tables;
            SAPTableFactoryCtrl.Table ENQ = (SAPTableFactoryCtrl.Table)tables.get_Item("ENQ");
            int n = ENQ.RowCount;
            dt = GetTable();
            for (int i = 1; i <= n; i++)
            {
                DataRow dr = dt.NewRow();
                dr["GNAME"] = ENQ.get_Cell(i, "GNAME").ToString();
                dr["GUNAME"] = ENQ.get_Cell(i, "GUNAME").ToString();
                dr["GARG"] = ENQ.get_Cell(i, "GARG").ToString();
                dr["GOBJ"] = ENQ.get_Cell(i, "GOBJ").ToString();
                dr["GTDATE"] = ENQ.get_Cell(i, "GTDATE").ToString();
                dt.Rows.Add(dr);
            }
        }
    }



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wren2004/archive/2009/01/22/3849688.aspx --------------------编程问答-------------------- 这里的SAP论坛,SAP的帖子都好老啊。。N年都没人留下脚步!好久好久了。。高手都不喜欢留言! --------------------编程问答-------------------- http://www.cnblogs.com/mengxin523/

这里面有很多关于.NET调用SAP的例子!! --------------------编程问答-------------------- ASDFFFFGG  的办法是对的  Bad variant type的解决办法  把县城模式写好就能通过了 --------------------编程问答-------------------- SAP学习材料分享,有想了解SAP的或者想学习SAP的朋友加QQ793665637 --------------------编程问答-------------------- up,刚好最近也在看这个 --------------------编程问答-------------------- 哥前几年看到这个帖子,到现在还没结?

写RFC ,用韩国人 一个组建啊啊 --------------------编程问答--------------------
引用 18 楼  的回复:
哥前几年看到这个帖子,到现在还没结?

写RFC ,用韩国人 一个组建啊啊

哪个组件? --------------------编程问答-------------------- 我 也遇见了,有没有人解决过啊?
不写那一句赋值的代码倒是可以运行,但是程序会弹出一个框来让用户输入密码,纠结啊。。 --------------------编程问答-------------------- 用NCO3.0可以解决。 --------------------编程问答-------------------- 用VS2003写个DLL,然后再调用RFC也很方便啊
补充:企业软件 ,  ERP/CRM
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,