SAP所提供的 外部接口包括 程序通信接口(communication interface)、 文件I/O接口(file I/O interface)以及 数据接口(data interface)。数据接口用于在系统内部对程序运行时数据和数据库数据进行传递,其实现技术包括 批输入(batch input)、 SAP SQL等。程序通信接口和文件I/O接口则是与其他系统进行数据交换的通路。文件I/O实现文件中数据和运行时数据间的交换(即将数据从文件上载到程序中。或将运行时数据下载至文件)。RFC位于程序通信接口中,以实现外部程序对SAP系统内部数据的访问。
以下是.C# 调用MD_STOCK_REQUIREMENTS_LIST_API的例子(可以到我的资源下载)。
测试环境: VS2008,XP
//设置登录连接的类
DataSet dset = new DataSet();
SAPLogonCtrl.SAPLogonControlClass logon = new SAPLogonCtrl.SAPLogonControlClass();
//连接参数设置
logon.ApplicationServer = "139.169.6.180";
logon.Client = "800";
logon.Language = "ZH";
logon.User = "yincm";
logon.Password = "8262879";
logon.SystemNumber = 0;
//实例化连接对象
SAPLogonCtrl.Connection Conn;
Conn = (SAPLogonCtrl.Connection)logon.NewConnection();
//Conn.CodePage = "8400";
//调用登录方法
if (Conn.Logon(0, true))
{
label1.Text = "登录成功!";
}
else
{
label1.Text = "登录失败!";
}
if (label1.Text == "登录成功!")
{
//实例SAPFunction对象
SAPFunctionsOCX.SAPFunctionsClass func = new SAPFunctionsClass();
//设置连接
func.Connection = Conn;
SAPFunctionsOCX.IFunction ifunc = (SAPFunctionsOCX.IFunction)func.Add("MD_STOCK_REQUIREMENTS_LIST_API");
//设置输入参数
SAPFunctionsOCX.IParameter PLSCN = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("PLSCN");
PLSCN.Value = "000";
SAPFunctionsOCX.IParameter MATNR = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("MATNR");
MATNR.Value = textBox2.Text.Trim();
SAPFunctionsOCX.IParameter WERKS = (SAPFunctionsOCX.IParameter)ifunc.get_Exports("WERKS");
WERKS.Value = "2110";
//调用RFC方法
ifunc.Call();
SAPTableFactoryCtrl.Tables ENQs = (SAPTableFactoryCtrl.Tables)ifunc.Tables;
//SAPTableFactoryCtrl.Table ENQ = (SAPTableFactoryCtrl.Table)ENQs.get_Item("IT_MARA");
SAPTableFactoryCtrl.Table ENQ = (SAPTableFactoryCtrl.Table)ENQs.get_Item("MDEZX");
//int j = ENQ.RowCount;
DataTable dt = new DataTable();
for (int i = 1; i <= ENQ.RowCount; i++)
{
DataRow dr = dt.NewRow();
if (i == 1)
{
dt.Columns.Add("INDEX");
dt.Columns.Add("MNG02");
dt.Columns.Add("DAT00");
}
dr["INDEX"] = i.ToString();
dr["MNG02"] = ENQ.get_Cell(i, "MNG02").ToString();
dr["DAT00"] = ENQ.get_Cell(i, "DAT00").ToString();
dt.Rows.Add(dr);
}
dataGridView1.DataSource = dt.DefaultView;
Conn.Logoff();
}