C#如何通過NCO3.0來連接SAP並調用SAP中的RFC
首先安裝NCO3.0,這是SAP針對.Net開發的專用組件,安裝完成之后在C:\Program Files\SAP\SAP_DotNetConnector3_x86目錄下面會有sapnco_utils.dll sapnco.dll rscp4n.dll libicudecnumber.dll四個DLL文件,在項目里面添加引用,找到這個4個DLL文件,引用到項目里面,libicudecnumber.dll會提示無法引用,貌似要將項目的.NET目標平台改為4.0的才可以,這里我沒有親測。
下面開始編程了:
1 using SAP.Middleware.Connector; 5 public void GetSapData() 6 { 7 RfcConfigParameters rfcPar = new RfcConfigParameters(); 8 rfcPar.Add(RfcConfigParameters.Name, "CON"); 9 rfcPar.Add(RfcConfigParameters.AppServerHost, "IP"); 10 rfcPar.Add(RfcConfigParameters.Client, "800"); 11 rfcPar.Add(RfcConfigParameters.User, "UserID"); 12 rfcPar.Add(RfcConfigParameters.Password, "Password"); 13 rfcPar.Add(RfcConfigParameters.SystemNumber, "02"); 14 rfcPar.Add(RfcConfigParameters.Language, "EN"); 15 RfcDestination dest = RfcDestinationManager.GetDestination(rfcPar); 16 RfcRepository rfcrep = dest.Repository; 17 IRfcFunction myfun = null; 18 myfun = rfcrep.CreateFunction("SAP里面的函數名稱"); 19 myfun.SetValue("VTYPE", "0");//SAP里面的傳入參數 20 myfun.Invoke(dest); 21 IRfcTable IrfTable = myfun.GetTable("IT_ZMYTB2"); 22 //提前實例化一個空的表結構出來 23 DataTable dt = new DataTable(); 24 dt.Columns.Add("USERID"); 25 dt.Columns.Add("USERPWD"); 26 dt.Columns.Add("USERADDRESS"); 27 //循環把IRfcTable里面的數據放入Table里面,因為類型不同,不可直接使用。 28 for (int i = 0; i < IrfTable.Count; i++) 29 { 30 IrfTable.CurrentIndex = i; 31 DataRow dr = dt.NewRow(); 32 dr["USERID"] = IrfTable.GetString("USERID"); 33 dr["USERPWD"] = IrfTable.GetString("USERPWD"); 34 dr["USERADDRESS"] = IrfTable.GetString("USERADDRESS"); 35 dt.Rows.Add(dr); 36 } 37 //將重新生成的Table賦值給數據控件DataGridView。 38 dgv.DataSource = dt; 39 }