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

发布时间:2016-09-24 12:56:45

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

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

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

在程序中 using SAP.Middleware.Connector;

具体看下面代码

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

word/media/image1.gif

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>

word/media/image1.gif

word/media/image1.gif

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");

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

相关推荐