SAP&RFC接口與C#調用(一)


因項目中用到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會報錯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM