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 ,用韩国人 一个组建啊啊 --------------------编程问答--------------------
哪个组件? --------------------编程问答-------------------- 我 也遇见了,有没有人解决过啊?
不写那一句赋值的代码倒是可以运行,但是程序会弹出一个框来让用户输入密码,纠结啊。。 --------------------编程问答-------------------- 用NCO3.0可以解决。 --------------------编程问答-------------------- 用VS2003写个DLL,然后再调用RFC也很方便啊
补充:企业软件 , ERP/CRM