简介
.Net Connector 3.0,简称 Nco3.0。Nco3.0 是 SAP 针对 .net 平台提供的编程接口,由 Nco1.0/Nco2.0 演变而来。如果使用 .net 平台编程,推荐使用 NCo3.0。3.0 版与之前1.0/2.0 版本比较,不管是 API 还是架构,都重新设计过,也借鉴了 Jco3.0 的设计,所以相对来说更为成熟,也为程序员提供更好的控制性和方便性。
.Net connector 3.0 下载和安装
下载地址:NCO 3.0
安装无非就是放了几个DLL, 选择安装目录,安装后,可以看到目录下有这几个文件,如下图所示:
新建一个WinForm程序,引用两个DLL:sapnco.dll 和 sapnco_utils.dll,如下图所示:
根据下图中SAP的配置,配置C#代码:
首先修改App.config文件中的代码,在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="15970" PASSWD="369369" CLIENT="410" SYSNR="00" ASHOST="192.168.1.221" LANG="ZH" GROUP="PUBLIC" MAX_POOL_SIZE="10"></add></destinations></DestinationConfiguration></ClientSettings></SAP.Middleware.Connector>
然后在测试的Form中增加如下图的代码:
public partial class Form1 : Form{private RfcDestination _rfcDestination = null;public DataTable dtr = new DataTable();public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){ RegisterDestination();MyInvokeRFCFunctionGetCompanyID();}public void RegisterDestination() //注册客户端{try{if (_rfcDestination == null){_rfcDestination = RfcDestinationManager.GetDestination("Conn");}}catch (Exception ex){MessageBox.Show(ex.Message);}}public string MyInvokeRFCFunctionGetCompanyID(){IRfcFunction function = null;string str = string.Empty;try{function = _rfcDestination.Repository.CreateFunction("Z_MES_MATQTY_LIST");//调用服务器函数function.SetValue("E_BUKRS","1001");//传入参数function.SetParameterActive(0, true);function.Invoke(_rfcDestination);//执行服务器调用的函数IRfcTable myrfcTable = function.GetTable("ET_ITEM");//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;}}
点击查询按钮即可得出结果。