关于伟创 伟创新闻 伟创案例 网站套餐 联系方式
只做吸引客户的精品站!

ASP.Net 连接SAP通用类(来自智遥工作流软件)

洛阳软件开发 / 2013/3/9 7:56:39
[核心提示] 智遥工作流软件中自带有一个连接SAP RFC的类,调用起来非常方便,以下是源代码:注:.Net 要连接SAP,需要网上下载一个 NCO3.0。
ASP.Net 连接SAP通用类(来自智遥工作流软件)

智遥工作流软件中自带有一个连接SAP RFC的类,调用起来非常方便,以下是源代码: 


注:.Net 要连接SAP,需要网上下载一个 NCO3.0 


然后引用命名空间 using SAP.Middleware.Connector; 


 public class SapRFCHelper


    {

        /// <summary>

        /// 获取登录SAP参数

        /// </summary>

        /// <returns></returns>

        public RfcConfigParameters GetRfcLoginParameters(string conn)

        {

            //1.获取连接参数

            Z_SAP sap = new Z_SAP();

            sap.GetModel(conn);

            

            RfcConfigParameters parameters = new RfcConfigParameters();

            parameters[RfcConfigParameters.Name] = sap.sap_system;

            parameters[RfcConfigParameters.User] = sap.sap_user;

            parameters[RfcConfigParameters.Password] = sap.sap_psd;

            parameters[RfcConfigParameters.Client] = sap.sap_client;

            parameters[RfcConfigParameters.Language] = sap.sap_language;

            parameters[RfcConfigParameters.AppServerHost] = sap.sap_server;

            parameters[RfcConfigParameters.SystemNumber] = sap.sap_systemnumber;

            parameters[RfcConfigParameters.IdleTimeout] = "6000";


            return parameters;

        }



        /// <summary>

        /// 调用RFC,返回一个表;注:RFC必须返回一个内表,无论是否有数据,否则出问题

        /// </summary>

        /// <param name="param">需要传入的字符串参数 例:{"P1|value1","P2|value2"}</param>

        /// <param name="RfcName">调用的Rfc名称</param>

        /// <param name="IT_tableName">Rfc执行后返回的内表名称</param>

        /// <returns></returns>

        public DataTable GetSapData(string conn,string[] param, string RfcName, string IT_tableName)

        {

            //1.登录SAP

            RfcConfigParameters parameters = GetRfcLoginParameters(conn);//获取登录参数

            RfcDestination rd = RfcDestinationManager.GetDestination(parameters);


            RfcRepository repo = rd.Repository;

            IRfcFunction f = repo.CreateFunction(RfcName);   //调用函数名


            foreach (string value in param)

            {

                string[] keyvalue = value.Split('|');

                f.SetValue(keyvalue[0], keyvalue[1].Trim());//传递入参数

            }

            f.Invoke(rd); //执行函数


            IRfcTable itb = f.GetTable(IT_tableName);       //获取执行RFC后返回的内表


            DataTable dt = new DataTable();

            //建立表结构

            for (int col = 0; col < itb.ElementCount; col++)

            {

                RfcElementMetadata rfcCol = itb.GetElementMetadata(col);

                string columnName = rfcCol.Name;

                dt.Columns.Add(columnName);

            }



            for (int rx = 0; rx < itb.RowCount; rx++)

            {

                object[] dr = new object[itb.ElementCount];



                for (int cx = 0; cx < dt.Columns.Count; cx++)

                {

                    dr[cx] = itb[rx][dt.Columns[cx].ColumnName].GetValue();

                }

                dt.Rows.Add(dr);

            }

            return dt;

        }



        /// <summary>

        /// 直接调用RFC,不返回任何东西

        /// </summary>

        /// <param name="param">需要传入的字符串参数 例:{"P1|value1","P2|value2"}</param>

        /// <param name="RfcName">Rfc名称</param>

        public void ExecuteRFC(string conn,string[] param, string RfcName)

        {

            //1.登录SAP

            RfcConfigParameters parameters = GetRfcLoginParameters(conn);//获取登录参数

            RfcDestination rd = RfcDestinationManager.GetDestination(parameters);


            RfcRepository repo = rd.Repository;

            IRfcFunction f = repo.CreateFunction(RfcName);   //调用函数名


            foreach (string value in param)

            {

                string[] keyvalue = value.Split('|');

                f.SetValue(keyvalue[0], keyvalue[1].Trim());//传递入参数

            }

            f.Invoke(rd); //执行函数

        }



        /// <summary>

        /// 直接调用RFC,返回字符串

        /// </summary>

        /// <param name="param"></param>

        /// <param name="RfcName"></param>

        /// <param name="OutName">RFC中返回的参数名称,没有就""</param>

        public string GetSAPString(string conn,string[] param, string RfcName, string OutName)

        {

            //1.登录SAP

            RfcConfigParameters parameters = GetRfcLoginParameters(conn);//获取登录参数

            RfcDestination rd = RfcDestinationManager.GetDestination(parameters);



            RfcRepository repo = rd.Repository;

            IRfcFunction f = repo.CreateFunction(RfcName);   //调用函数名



            foreach (string value in param)

            {

                string[] keyvalue = value.Split('|');

                f.SetValue(keyvalue[0], keyvalue[1].Trim());//传递入参数

            }

            f.Invoke(rd); //执行函数


            return f.GetString("").ToString();      //获取执行RFC后返回的内表

        }



        /// <summary>

        /// 执行RFC,返回一个内表

        /// </summary>

        /// <param name="conn"></param>

        /// <param name="param"></param>

        /// <param name="RfcName"></param>

        /// <param name="IT_tableName"></param>

        /// <returns></returns>

        public IRfcTable GetSAPRfcTable(string conn, string[] param, string RfcName, string IT_tableName) 

        {

            //1.登录SAP

            RfcConfigParameters parameters = GetRfcLoginParameters(conn);//获取登录参数

            RfcDestination rd = RfcDestinationManager.GetDestination(parameters);



            RfcRepository repo = rd.Repository;

            IRfcFunction f = repo.CreateFunction(RfcName);   //调用函数名



            foreach (string value in param)

            {

                string[] keyvalue = value.Split('|');

                f.SetValue(keyvalue[0], keyvalue[1].Trim());//传递入参数

            }

            f.Invoke(rd); //执行函数



            IRfcTable itb = f.GetTable(IT_tableName);       //获取执行RFC后返回的内表

            return itb;

        }



        /// <summary>

        /// 将内表转换成DataTable

        /// </summary>

        /// <param name="rfcTable">内表名称</param>

        /// <returns>返回一个DataTable</returns>

        public DataTable ConvertToTable(IRfcTable rfcTable) 

        {

            DataTable dt = new DataTable();



            //建立表结构

            for (int col = 0; col < rfcTable.ElementCount; col++)

            {

                RfcElementMetadata rfcCol = rfcTable.GetElementMetadata(col);

                string columnName = rfcCol.Name;

                dt.Columns.Add(columnName);

            }


            for (int rx = 0; rx < rfcTable.RowCount; rx++)

            {

                object[] dr = new object[rfcTable.ElementCount];

                for (int cx = 0; cx < dt.Columns.Count; cx++)

                {

                    dr[cx] = rfcTable[rx][dt.Columns[cx].ColumnName].GetValue();

                }

                dt.Rows.Add(dr);

            }

            return dt; 


        }


    }

 


 

尊重作者原创 除非特别声明,伟创科技所有均为伟创原创报道,转载请注明原文链接。
原文地址:http://www.lywhy.com/SoftWare/View.asp?id=374  所属类别:软件开发
相关内容
伟创技术-婷婷:身为.NET程序员的断想 2017/2/18
【洛阳网络公司技术分享】身为.NET程序员的断想 2016/1/28
再好的硬件产品也要软件来支撑 2015/1/26
windows消息之PostMessage和SendMessage的内部实现 2013/4/17
如何仅通过CSS实现多行文本超长自动省略号 2013/4/3
猜你喜欢
过于宽泛和过于主观的网站关键词并不好 2013/3/25
企业建设网站不可或缺的事项 完善完好漏 2018/1/29
产生软件危机的原因 2012/9/28
刚毕业的网页设计师如何面对应聘难题? 2014/3/24
网站如何针对客户的意见来改版 2013/2/21
网站建设的灵丹妙药,让你轻松搞定网站建设 2016/5/2
技术,内容 一个都不能少 2013/12/25
病毒营销方案设计 2013/1/7
伟创科技成功签约dowell3d打印机官网定制项目 2015/9/30
哪里的服务器托管比较好? 2013/10/10
伟创热点
关于我们
公司简介
我们的优势
企业文化
公司愿景
加入伟创
伟创官方博客
金牌项目
网站建设
网站优化
软件开发
整合设计
网站运营
网站套餐
基础型网站
展示型网站
商务型网站
购物、商店型网站
FLASH动画型网站
行业、门户型网站
帮助中心
客户中心
公司SEO培训
seo顾问服务
支付方式
联系我们
我们的位置
关注我们
新浪微博
腾讯微博
人人小站
QQ空间推荐
花瓣网
建站百科全书
Copyright 2007-2012 LYWHY.Inc Sitemap 豫ICP备12012069号-1
Links
洛阳百科
建站百科