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

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  所属类别:软件开发
相关内容
洛阳软件开发需要多少钱? 2019/12/6
10种不同类型的软件开发 2019/11/5
如何更好的完成软件开发的项目 2018/9/18
伟创技术-婷婷:身为.NET程序员的断想 2017/2/18
【洛阳网络公司技术分享】身为.NET程序员的断想 2016/1/28
猜你喜欢
网站建设前后言行一致方能收获信誉与利益 2015/6/11
做网站谁跟风失败 2012/11/22
三步决定企业网站是否具备可推广性 2013/7/30
一个企业网站制作的成与败 2015/4/23
如何保证企业网站的访问速度 2012/11/16
你知道一个网站多面手需要哪些基本技能吗? 2013/7/8
说下像伟创这样中小型网络公司的假期服务 2015/3/12
正规企业网站的排名可能会受到影响 2012/11/12
设计牛人如何处理网站上的图片的 2013/6/20
回顾伟创宣言篇“杜绝模板网站,还原绿色网络市场”再续 2015/1/29
伟创热点
关于我们
公司简介
我们的优势
企业文化
公司愿景
加入伟创
伟创官方博客
金牌项目
网站建设
网站优化
软件开发
整合设计
网站运营
网站套餐
基础型网站
展示型网站
商务型网站
购物、商店型网站
FLASH动画型网站
行业、门户型网站
帮助中心
客户中心
公司SEO培训
seo顾问服务
支付方式
联系我们
我们的位置
关注我们
新浪微博
腾讯微博
人人小站
QQ空间推荐
花瓣网
建站百科全书
Copyright 2007-2012 LYWHY.Inc Sitemap 豫ICP备12012069号-1
Links
洛阳百科
建站百科