C# 使用 SAP NCO3.0 调用SAP RFC函数接口
最近使用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");