最近公司导入PDA项目,要求使用浏览器来进行扫描,那么只能做网站服务器了。
由于要连接SAP那么PDA客户端就不能安装SAP客户端了。只是利用服务器连接SAP然后传出资料到客户端页面了
本人在网上上搜索了大量的资料,这个项目终于完成了,以下为源代码,仅供参考。
1.下载SAP的dll:http://files.cnblogs.com/mengxin523/SAP_DotNetConnector3.zip
2.导入dll到项目中,导入sapnco.dll和sapnco_utils.dll即可
3.源码为下:
using SAP.Middleware.Connector; //引入
public void nco(string WorkNo)
{
IDestinationConfiguration ID = new MyBackendConfig();
RfcDestinationManager.RegisterDestinationConfiguration(ID);
RfcDestination prd = RfcDestinationManager.GetDestination("PRD_000");
RfcDestinationManager.UnregisterDestinationConfiguration(ID);
nco(prd, WorkNo);
}
//登陆SAP前的准备工作
public class MyBackendConfig : IDestinationConfiguration
{
public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
public RfcConfigParameters GetParameters(String destinationName)
{
if ("PRD_000".Equals(destinationName))
{
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.AppServerHost, Constant.SAPIP); //SAP主机IP
parms.Add(RfcConfigParameters.SystemNumber, "00"); //SAP实例
parms.Add(RfcConfigParameters.User, Constant.SAPAcc); //用户名
parms.Add(RfcConfigParameters.Password, Constant.SAPPwd); //密码
parms.Add(RfcConfigParameters.Client, "888"); // Client
parms.Add(RfcConfigParameters.Language, "EN"); //登陆语言
parms.Add(RfcConfigParameters.PoolSize, "5");
parms.Add(RfcConfigParameters.MaxPoolSize, "10");
parms.Add(RfcConfigParameters.IdleTimeout, "60");
// parms.Add(RfcConfigParameters.UseSAPGui, "1");
return parms;
}
else return null;
}
public bool ChangeEventsSupported()
{
return false;
}
public void nco(RfcDestination prd, string WorkNo)
{
RfcRepository repo = prd.Repository;
IRfcFunction companyBapi = repo.CreateFunction("Z_SFC_WO_INRO"); //调用函数名
companyBapi.SetValue("P_WKNO", WorkNo); //设置Import的参数
companyBapi.Invoke(prd); //执行函数
IRfcTable table = companyBapi.GetTable("R_ITAB"); //获取相应的品号内表
string[,] array = new string[table.RowCount, 4];
for (int i = 0; i < table.RowCount; i++)
{
array[i, 0] = table[i]["MATNR"].GetString();
array[i, 1] = table[i]["BDMNG"].GetString();
array[i, 2] = table[i]["WERKS"].GetString();
array[i, 3] = table[i]["LGORT"].GetString();
}
result = Oralce.insertData(array, WorkNo); //得到的数组可以进行任意处理
}