zoukankan      html  css  js  c++  java
  • .NET利用RFC连接SAP,查询、读取SAP数据

    为黄朴整理!!!!!!!!!!!!!!!!!

    在NuGet 添加 sapnco

    一个简单的SAPCommand,方法 GetDataTableFromRFCTable 复制于 https://www.cnblogs.com/jamin/p/3374139.html

    using System;
    using System.Collections.Generic;
    using System.Text;
    using SAP.Middleware.Connector;
    using System.Data;
    using System.Linq;
    namespace Blog.Core.Business.RFC
    {
        /// <summary>
        /// SAPCommand
        /// </summary>
        public static class SAPCommand
        {
            /// <summary>
            /// 获取连接SAP参数
            /// </summary>
            /// <returns></returns>
            private static RfcConfigParameters GetRfcConfigParameters()
            {
                RfcConfigParameters pairs = new RfcConfigParameters();
                pairs.Add(RfcConfigParameters.Name, "SAP连接名");
                pairs.Add(RfcConfigParameters.AppServerHost, "SAP服务器地址");
                pairs.Add(RfcConfigParameters.SystemNumber, "00");
                pairs.Add(RfcConfigParameters.SystemID, "D01");
                pairs.Add(RfcConfigParameters.User, "SAP账号");
                pairs.Add(RfcConfigParameters.Password, "SAP密码");
                pairs.Add(RfcConfigParameters.Client, "客户端");
                pairs.Add(RfcConfigParameters.Language, "en");
                pairs.Add(RfcConfigParameters.PoolSize, "5");
                pairs.Add(RfcConfigParameters.MaxPoolSize, "10");
                pairs.Add(RfcConfigParameters.IdleTimeout, "30");
                return pairs;
            }
    
            /// <summary>
            /// 获取SAP连接
            /// </summary>
            /// <returns></returns>
            private static RfcDestination GetRfcDestination()
            {
                RfcDestination destination = RfcDestinationManager.GetDestination(GetRfcConfigParameters());
                return destination;
            }
    
            /// <summary>
            /// Get SAP Datatable Info
            /// </summary>
            /// <param name="rfcFuctionName">SAP Function Module</param>
            /// <param name="rfcTableName">SAP Function Group</param>
            /// <param name="keyValues">SAP所需参数</param>
            /// <returns>DataTable</returns>
            public static DataTable GetDatatableFromSAP(string rfcFuctionName, string rfcTableName, Dictionary<string, object> keyValues = null) =>
                GetDataSetFromSAP(rfcFuctionName, new List<string> { rfcTableName }, keyValues)[rfcTableName];
    
            /// <summary>
            /// Get SAP DataSet Info(SAP返回多个表)
            /// </summary>
            /// <param name="rfcFuctionName">SAP Function Module</param>
            /// <param name="rfcTableNameList">SAP Function Groups</param>
            /// <param name="keyValues">SAP所需参数</param>
            /// <returns>Dictionary<string ,DataTable></returns>
            public static Dictionary<string ,DataTable> GetDataSetFromSAP(string rfcFuctionName, List<string> rfcTableNameList, Dictionary<string, object> keyValues = null)
            {
                if (string.IsNullOrEmpty(rfcFuctionName) || rfcTableNameList == null || rfcTableNameList.Count <= 0)
                    return null;
                List<string> rfcTableNames = rfcTableNameList.Distinct().ToList();
                try
                {
                    Dictionary<string, DataTable> result = new Dictionary<string, DataTable>();
                    Dictionary<string, IRfcTable> rfcTableDic = new Dictionary<string, IRfcTable>();
                    RfcDestination destination = GetRfcDestination();
                    IRfcFunction func = destination.Repository.CreateFunction(rfcFuctionName);
                    if (keyValues != null && keyValues.Count > 0)
                    {
                        foreach (var item in keyValues)
                        {
                            func.SetValue(item.Key, item.Value);
                        }
                    }
                    rfcTableNames.ForEach(item =>
                    {
                        IRfcTable rfcTable = func.GetTable(item);
                        rfcTableDic.Add(item, rfcTable);
                    });
                    func.Invoke(destination);
                    rfcTableNames.ForEach(item =>
                    {
                        result.Add(item, GetDataTableFromRFCTable(rfcTableDic[item]));
                    });
                    return result;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
            /// <summary>
            /// 转换IRfcTable为Datatable
            /// </summary>
            /// <param name="myrfcTable"></param>
            /// <returns></returns>
            private static DataTable GetDataTableFromRFCTable(IRfcTable myrfcTable)
            {
    
                DataTable loTable = new DataTable();
                int liElement = 0;
                for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
                {
                    RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
                    loTable.Columns.Add(metadata.Name);
                }
                foreach (IRfcStructure Row in myrfcTable)
                {
                    DataRow ldr = loTable.NewRow();
                    for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
                    {
                        RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
                        ldr[metadata.Name] = Row.GetString(metadata.Name);
                    }
                    loTable.Rows.Add(ldr);
                }
                return loTable;
            }
        }
    }
    螃蟹在剥我的壳,笔记本在写我。 漫天的我落在枫叶雪花上。 而你在想我。
  • 相关阅读:
    解决CentOS java环境不生效的问题
    大数据学习 概念篇
    java实用技能 上传文件 等等
    ubuntu hadoop伪分布式部署
    list去重
    fastjson生成JSON字符串的时候出现$ref
    《Swift by Tutorials》学习笔记(第二章)
    《Swift by Tutorials》学习笔记(第一章)
    《JavaScript高级程序设计》学习笔记(第七章)
    《JavaScript高级程序设计》学习笔记(第五章)- 下
  • 原文地址:https://www.cnblogs.com/skytitan/p/9817224.html
Copyright © 2011-2022 走看看