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