C# 使用 SAP NCO3.0 调用SAP RFC函数接口

时间:2022-09-29 11:20:16

最近使用C#调用SAP RFC函数,SAP提供了NCO3.0组件。

下载组件安装,之后引用“sapnco.dll”和“sapnco_utils.dll”两个文件。

在程序中 using SAP.Middleware.Connector;

具体看下面代码

使用app.config文件配置注册客户端连接

<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="SAP.Middleware.Connector">
<sectionGroup name="ClientSettings">
<section name="DestinationConfiguration" type="SAP.Middleware.Connector.RfcDestinationConfiguration,sapnco"/>
</sectionGroup>
</sectionGroup>
</configSections>
<SAP.Middleware.Connector>
<ClientSettings>
<DestinationConfiguration>
<destinations>
<add NAME="Conn" USER="KY_PG01" PASSWD="ky@123" CLIENT="002" SYSNR="10" ASHOST="192.168.0.22" LANG="ZH" GROUP="PUBLIC" MAX_POOL_SIZE="5"></add>
</destinations>
</DestinationConfiguration>
</ClientSettings>
</SAP.Middleware.Connector>
</configuration>
private RfcDestination _rfcDestination = null;
public DataTable dtr = new DataTable();

public void RegisterDestination() //注册客户端
{
try
{
if (_rfcDestination == null)
{
_rfcDestination
= RfcDestinationManager.GetDestination("Conn");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

public string InvokeRFCFunctionGetCompanyID(string dateBegin, string dateEnd)
{
IRfcFunction function
= null;
string str = string.Empty;
try
{
function
= _rfcDestination.Repository.CreateFunction("ZKY_FM_ZM005B");//调用服务器函数
function.SetValue("SO_FKDAT_B", dateBegin);//传入参数
function.SetValue("SO_FKDAT_E", dateEnd);//传入参数
function.SetParameterActive(0, true);
function.Invoke(_rfcDestination);
//执行服务器调用的函数
IRfcTable myrfcTable = function.GetTable("IT_ZM005B");//rfc server function 返回值table结构名称

int liElement = 0;
for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
{
RfcElementMetadata metadata
= myrfcTable.GetElementMetadata(liElement);
dtr.Columns.Add(metadata.Name);
//循环创建列
}
foreach (IRfcStructure dr in myrfcTable)//循环table结构表
{
DataRow row
= dtr.NewRow();//创建新行
for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
{
RfcElementMetadata metadata
= myrfcTable.GetElementMetadata(liElement);
row[metadata.Name]
= dr.GetString(metadata.Name).Trim();
}
dtr.Rows.Add(row);
}
this.dataGridView1.DataSource = dtr;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return str;
}

//在事件或方法中调用

this.RegisterDestination();
this.InvokeRFCFunctionGetCompanyID("20120401", "20120901");