最近使用C#調用SAP RFC函數,SAP提供了NCO3.0組件。服務器
下載組件安裝,以後引用「sapnco.dll」和「sapnco_utils.dll」兩個文件。app
在程序中 using SAP.Middleware.Connector;函數
具體看下面代碼this
使用app.config文件配置註冊客戶端鏈接spa
<?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");