因項目中用到RFC調用,之前又從未弄過,過程中找的文章或者帖子又零零散散,所以做下記錄
本文記錄的是基礎調用類
public void Execute() { IDestinationConfiguration ID = new MyBackendConfig(); RfcDestinationManager.RegisterDestinationConfiguration(ID); //登錄 RfcDestination prd = RfcDestinationManager.GetDestination("PA0_000"); Execute(prd); //退出登錄 RfcDestinationManager.UnregisterDestinationConfiguration(ID); return dt; }
/// <summary> /// 調用SAP方法,目前是將獲取到的數據轉化為datatable,后面轉換為list /// </summary> /// <param name="prd"></param> private DataTable Execute(RfcDestination prd, string[] columns, string tableName, string functionName, Dictionary<string, object> requestParam) { RfcRepository repo = prd.Repository; IRfcFunction companyBapi = repo.CreateFunction(functionName); //調用函數名 foreach (var item in requestParam) { companyBapi.SetValue(item.Key, item.Value); } //companyBapi.SetValue("BUKRS", "G000"); //設置Import的參數 //companyBapi.SetValue("ZTYPE", "S"); //設置Import的參數 companyBapi.Invoke(prd); //執行函數 IRfcTable table = companyBapi.GetTable(tableName); DataTable dt = new DataTable(); //新建表格 foreach (string clmn in columns) { dt.Columns.Add(clmn); } for (int i = 0; i < table.RowCount; i++) { DataRow dr = dt.NewRow(); foreach (string clmn in columns) { dr[clmn] = table[i].GetString(clmn); } dt.Rows.Add(dr); //填充該表格的值 } prd = null; repo = null; return dt; }
調用的方法准備好了,現在缺一個配置類,這里配置的是主機地址
public class MyBackendConfig : IDestinationConfiguration { public RfcConfigParameters GetParameters(String destinationName) { if ("PA0_000".Equals(destinationName)) { RfcConfigParameters parms = new RfcConfigParameters(); parms.Add(RfcConfigParameters.AppServerHost, "192.168.0.1"); //SAP主機IP parms.Add(RfcConfigParameters.SystemNumber, "00"); //SAP實例 parms.Add(RfcConfigParameters.User, "userName"); //用戶名 parms.Add(RfcConfigParameters.Password, "password"); //密碼 parms.Add(RfcConfigParameters.Client, "300"); // Client parms.Add(RfcConfigParameters.Language, "ZH"); //登陸語言 parms.Add(RfcConfigParameters.PoolSize, "1000"); parms.Add("max_get_client_time", "100"); parms.Add("peak_limit", "1000"); //parms.Add(RfcConfigParameters.MaxPoolSize, "10"); //parms.Add(RfcConfigParameters.IdleTimeout, "60"); return parms; } else return null; } public bool ChangeEventsSupported() { return false; } public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged; }
這個只是基礎類和調用方法,還需要引用類庫
https://files.cnblogs.com/files/wjr408/SAP%26rfc.rar
這個是我使用的,有32位和64位的,因為配置需要將編譯環境指定32位或64位,any CPU會報錯