需要引入以下两个dll来访问SAP
以下是调用SAP的例子:
以下是SAP的工具类:
using SAP.Middleware.Connector;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
//using System.Threading.Tasks;
using System.Windows.Forms;
namespace WLCGSystem.Util
{
public class SapCon
{
//登陆SAP前的准备工作
public class MyBackendConfig : IDestinationConfiguration
{
public RfcConfigParameters GetParameters(String sapid)
{
int client = int.Parse(sapid);
if (client >= 300 && client < 700)
{
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.AppServerHost, "10.0.0.20"); //SAP主机IP
parms.Add(RfcConfigParameters.SystemNumber, "00"); //SAP实例
parms.Add(RfcConfigParameters.User, "sap*"); //用户名
parms.Add(RfcConfigParameters.Password, "2015zhidu"); //密码
//parms.Add(RfcConfigParameters.User, "itman06"); //用户名
//parms.Add(RfcConfigParameters.Password, "654321"); //密码
parms.Add(RfcConfigParameters.Client, sapid); // Client
parms.Add(RfcConfigParameters.Language, "ZH"); //登陆语言
parms.Add(RfcConfigParameters.PoolSize, "5");
parms.Add(RfcConfigParameters.MaxPoolSize, "10");
parms.Add(RfcConfigParameters.IdleTimeout, "60");
return parms;
}
if (client >= 700 && client < 800)
{
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.AppServerHost, "10.0.0.20"); //SAP主机IP
parms.Add(RfcConfigParameters.SystemNumber, "01"); //SAP实例
parms.Add(RfcConfigParameters.User, "ITMAN00");
parms.Add(RfcConfigParameters.Password, "2013itbsap");
//parms.Add(RfcConfigParameters.User, "sap*"); //用户名
//parms.Add(RfcConfigParameters.Password, "2015zhidu"); //密码
parms.Add(RfcConfigParameters.Client, sapid); // Client
parms.Add(RfcConfigParameters.Language, "ZH"); //登陆语言
parms.Add(RfcConfigParameters.PoolSize, "5");
parms.Add(RfcConfigParameters.MaxPoolSize, "10");
parms.Add(RfcConfigParameters.IdleTimeout, "60");
return parms;
}
if (client == 800)
{
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.AppServerHost, "10.0.0.24"); //SAP主机IP
parms.Add(RfcConfigParameters.SystemNumber, "00"); //SAP实例
parms.Add(RfcConfigParameters.User, "sap*"); //用户名
parms.Add(RfcConfigParameters.Password, "2015zhidu"); //密码
//parms.Add(RfcConfigParameters.User, "CWZX00"); //用户名
//parms.Add(RfcConfigParameters.Password, "cwzx00"); //密码
parms.Add(RfcConfigParameters.Client, sapid); // Client
parms.Add(RfcConfigParameters.Language, "ZH"); //登陆语言
parms.Add(RfcConfigParameters.PoolSize, "5");
parms.Add(RfcConfigParameters.MaxPoolSize, "10");
parms.Add(RfcConfigParameters.IdleTimeout, "60");
return parms;
}
else return null;
}
public bool ChangeEventsSupported()
{
return false;
}
public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
}
//Dictionary<string, string> RfcParIn是传入RFC的参数名及值
//RfcOutTableFields是RFC传出TABLE的列名数组
//sapid 是800,300,700等
public static DataTable GetDT(string sapid, string rfc, string rfctable, Dictionary<string, string> RfcParIn, string[] RfcOutTableFields)
{
try
{
IDestinationConfiguration ID = new MyBackendConfig();
RfcDestinationManager.RegisterDestinationConfiguration(ID);
RfcDestination prd = RfcDestinationManager.GetDestination(sapid);
RfcDestinationManager.UnregisterDestinationConfiguration(ID);
RfcRepository repo = prd.Repository;
IRfcFunction RfcFun = repo.CreateFunction(rfc); //调用函数名
DataTable dt = new DataTable();
for (int i = 0; i < RfcOutTableFields.Length; i++)
{
dt.Columns.Add(RfcOutTableFields[i]); //表格添加一列
}
foreach (KeyValuePair<strin