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

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  所属类别:软件开发
相关内容
如何更好的完成软件开发的项目 2018/9/18
伟创技术-婷婷:身为.NET程序员的断想 2017/2/18
【洛阳网络公司技术分享】身为.NET程序员的断想 2016/1/28
再好的硬件产品也要软件来支撑 2015/1/26
windows消息之PostMessage和SendMessage的内部实现 2013/4/17
猜你喜欢
洛阳网络公司届平安夜活动之做网站套餐,Let'Me See! 2015/12/24
网站设计之爱美之心 2012/12/8
如果一定要引用其他网站上的资料 2013/8/14
揭秘洛阳网络公司企业赢在起跑线的秘诀 2015/3/5
伟创观察:OLPC“每童一机”普及网络教育的失败 2012/10/24
不懂技术怎么运作网站 2013/4/1
贺伟创科技成功携手洛阳李奇家居维修美容中心网站制作项目 2014/5/8
对于任何服务行业来说,客户是上帝是必然的勿顶撞! 2016/7/23
洛阳网络公司伟创科技主编自今日起回家休养2天,其他工作照常进行! 2013/1/12
行业网站大型门户网站该如何挖掘长尾关键词? 2013/10/21
伟创热点
关于我们
公司简介
我们的优势
企业文化
公司愿景
加入伟创
伟创官方博客
金牌项目
网站建设
网站优化
软件开发
整合设计
网站运营
网站套餐
基础型网站
展示型网站
商务型网站
购物、商店型网站
FLASH动画型网站
行业、门户型网站
帮助中心
客户中心
公司SEO培训
seo顾问服务
支付方式
联系我们
我们的位置
关注我们
新浪微博
腾讯微博
人人小站
QQ空间推荐
花瓣网
建站百科全书
Copyright 2007-2012 LYWHY.Inc Sitemap 豫ICP备12012069号-1
Links
洛阳百科
建站百科