先在app.config中增加配置信息
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<gcServer enabled="true"/>
</runtime>
<appSettings>
<add key="SAP_Login" value="SapId=登录名,SapPwd=密码"/>
<add key="SAP_Server" value="Type=AppServer,Name=NBD,Client=客户端如702,SystemID=NBD,SystemNumber=10,AppServerHost=地址IP"/>
</appSettings>
</configuration>
然后加入sapnco.dll和sapnco_utils.dll,下载地址:
https://download.csdn.net/download/weixin_38441570/15745865
工具类
public class SapHelper
{
#region 0.基础连接配置/参数等
//单例
private static RfcDestination dest;
private static IRfcFunction func;
/// <summary>
/// 启动SAP连接
/// </summary>
public static void StartSapConn()
{
if (dest == null)
{
//<add key="SAP_Login" value="SapId=SAPPROJECT2,SapPwd=init@120"/>
string[] SAP_Login = ConfigurationManager.AppSettings["SAP_Login"].Split(',');
string sapId = SAP_Login[0].Split('=')[1];
string sapPwd = SAP_Login[1].Split('=')[1];
string sapServer = ConfigurationManager.AppSettings["SAP_Server"];
dest = CreateRfcDestination(sapId, sapPwd, sapServer);
}
dest.Ping();
}
/// <summary>
/// 配置SAP连接参数
/// </summary>
/// <param name="sapId"></param>
/// <param name="sapPwd"></param>
/// <param name="sapServer"></param>
/// <returns></returns>
public static RfcDestination CreateRfcDestination(string sapId, string sapPwd, string sapServer)
{
RfcConfigParameters rfcPar = new RfcConfigParameters();
string[] sapServerPara = sapServer.Split(',');
string sapConnectType = sapServerPara[0].Split('=')[1];
rfcPar.Add(RfcConfigParameters.Name, sapServerPara[1].Split('=')[1]);
rfcPar.Add(RfcConfigParameters.Client, sapServerPara[2].Split('=')[1]);
rfcPar.Add(RfcConfigParameters.SystemID, sapServerPara[3].Split('=')[1]);
rfcPar.Add(RfcConfigParameters.SystemNumber, sapServerPara[4].Split('=')[1]);
rfcPar.Add(RfcConfigParameters.AppServerHost, sapServerPara[5].Split('=')[1]);
rfcPar.Add(RfcConfigParameters.User, sapId);
rfcPar.Add(RfcConfigParameters.Password, sapPwd);
rfcPar.Add(RfcConfigParameters.Language, "EN");
rfcPar.Add(RfcConfigParameters.PoolSize, "5");
rfcPar.Add(RfcConfigParameters.PeakConnectionsLimit, "10");
rfcPar.Add(RfcConfigParameters.ConnectionIdleTimeout, "3600");
RfcDestination dest = RfcDestinationManager.GetDestination(rfcPar);
return dest;
}
/// <summary>
/// 更换将要调用的RFC名称, 同时检查SAP连接的可用性
/// </summary>
/// <param name="rfcName"></param>
public static void ChangeIRfcFunction(string rfcName)
{
if (dest == null)
{
StartSapConn();
}
try
{
dest.Ping();
}
catch (Exception)
{
dest = null;
StartSapConn();
}
func = dest.Repository.CreateFunction(rfcName);
}
#endregion
//调用实例
public static IRfcTable Z_FSSC_DOCUMENT(DataTable dt, int billid)
{
IRfcTable RETURN = null;
try
{
//传入函数名称
ChangeIRfcFunction("Z_FSSC_DOCUMENT");
//传入表头
IRfcStructure docStr = func.GetStructure("DOCUMENTHEADER");
docStr.SetValue("BUS_ACT", ywsw);//业务事务
docStr.SetValue("USERNAME", username);//用户名
docStr.SetValue("HEADER_TXT", pztt);//凭证抬头文本
docStr.SetValue("COMP_CODE", gsdm);//公司代码
docStr.SetValue("DOC_DATE", pzzdpzrq);//凭证中的凭证日期
docStr.SetValue("PSTNG_DATE", pzzdgzrq);//凭证中的过账日期
docStr.SetValue("FISC_YEAR", kjnd);//会计年度
docStr.SetValue("FIS_PERIOD", kjqj);//会计期间
docStr.SetValue("DOC_TYPE", pzlx);//凭证类型
docStr.SetValue("REF_DOC_NO", billno);//参考凭证编号
func.Invoke(dest);
RETURN = func.GetTable("RETURN");
}
}
catch (Exception e)
{
LogHelper.Error("出错:" + e.Message);
}
finally
{
db.Close();
}
return RETURN;
}
}