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

在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, "");
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, "");
pairs.Add(RfcConfigParameters.MaxPoolSize, "");
pairs.Add(RfcConfigParameters.IdleTimeout, "");
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 <= )
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 > )
{
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 = ;
for (liElement = ; liElement <= myrfcTable.ElementCount - ; liElement++)
{
RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
loTable.Columns.Add(metadata.Name);
}
foreach (IRfcStructure Row in myrfcTable)
{
DataRow ldr = loTable.NewRow();
for (liElement = ; liElement <= myrfcTable.ElementCount - ; liElement++)
{
RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
ldr[metadata.Name] = Row.GetString(metadata.Name);
}
loTable.Rows.Add(ldr);
}
return loTable;
}
}
}

.NET利用RFC连接SAP,查询、读取SAP数据的更多相关文章

  1. 利用Angular.js从PHP读取后台数据

    之前已经有非常多方法能够通过angular进行本地数据的读取.曾经的样例中,大多数情况都是将数据存放到模块的$scope变量中,或者直接利用ng-init定义初始化的数据. 可是这些方法都仅仅为了演示 ...

  2. Jquery Mobile实例--利用优酷JSON接口读取视频数据

    本文将介绍,如何利用JqueryMobile调用优酷API JSON接口显示视频数据. (1)注册用户接口. 首页,到 http://open.youku.com 注册一个账户,并通过验证.然后找到A ...

  3. 30. PL/SQL Developer连接服务器查询时,数据乱码处理

    在windows中创 建一个名为“NLS_LANG”的系统环境变量,设置其值为"AMERICAN_AMERICA.ZHS16GBK",   NLS_LANG的值为:select u ...

  4. 在ASP.NET MVC中利用Aspose.cells 将查询出的数据导出为excel,并在浏览器中下载。

    正题前的唠叨 本人是才出来工作不久的小白菜一颗,技术很一般,总是会有遇到一些很简单的问题却不知道怎么做,这些问题可能是之前解决过的.发现这个问题,想着提升一下自己的技术水平,将一些学的新的'好'东西记 ...

  5. 利用Aspose.cells 将查询出的数据导出为excel,并在浏览器中下载。

    正题前的唠叨 本人是才出来工作不久的小白菜一颗,技术很一般,总是会有遇到一些很简单的问题却不知道怎么做,这些问题可能是之前解决过的.发现这个问题,想着提升一下自己的技术水平,将一些学的新的‘好’东西记 ...

  6. [PHP]socket的连接超时 与 读取/写入超时

    socket处理时有两种超时 , 分为连接超时 和 读取/写入数据超时 1. stream_socket_client 函数中的超时时间是连接超时 , 默认是php.ini中的default_sock ...

  7. STM32读取Guidance数据——Guidance SDK

    更新记录:2019/11/14    更新STM32(F407VET6)读取Guidance数据 Github地址. 背景:想要将祖传的Guidance用于DJI A3/新固件的N3飞控.DJI已经停 ...

  8. .NET通过RFC读取SAP数据

    本篇文章中我主要讲的是.NET如何通过RFC从SAP中读取数据.为了功能的可复用性,我将调用RFC的代码从业务层中分离出来单独建立在一个namespace中. 当然除了需要我们自己编写代码以外,还需要 ...

  9. C#如何通过NCO3.0来连接SAP并调用SAP中的RFC

    ,这是SAP针对.Net开发的专用组件,安装完成之后在C:\Program Files\SAP\SAP_DotNetConnector3_x86目录下面会有sapnco_utils.dll sapnc ...

随机推荐

  1. 如何理解javascript中的同步和异步

    javascript语言是一门“单线程”的语言,不像java语言,类继承Thread再来个thread.start就可以开辟一个线程,所以,javascript就像一条流水线,仅仅是一条流水线而已,要 ...

  2. FTP服务器windows配置

    1.配置IIS Web的FTP站点 1.1 打开iis管理器(方法很多,这里我们用命令) Win+r中输入:inetmgr 1.2 新建FTP站点 1.2.1 新建FTP服务器根目录文件夹 1.2.2 ...

  3. spring学习(四)spring的jdbcTemplate(增删改查封装)

    Spring的jdbcTemplate操作 1.Spring框架一站式框架 (1)针对javaee三层,每一层都有解决技术 (2)到dao 层,使用 jdbcTemplate 2.Spring对不同的 ...

  4. 如何创建width与height比例固定的元素

    面试题,刚在github上看到的,说说这里面的知识点吧~~ padding-bottom的值,其百分比是根据元素自身的width来算的. padding,在标准盒模型中,width+padding+b ...

  5. Python2.7编程基础(博主推荐)

    不多说,直接上干货! 见 http://www.runoob.com/python/python-tutorial.html

  6. 【Java】国内maven私服

    <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...

  7. 【C#】C#委托使用详解(Delegates)

    摘要 委托是C#编程一个非常重要的概念,也是一个难点.本文将系统详细讲解委托. 1. 委托是什么? 其实,我一直思考如何讲解委托,才能把委托说得更透彻.说实话,每个人都委托都有不同的见解,因为看问题的 ...

  8. HDU 5445——Food Problem——————【多重背包】

    Food Problem Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  9. <邮件的反垃圾反病毒>

    本章——发送接收邮件的工具为雷鸟 安装 # yum install dovecot-mysql.x86_64 dovecot.x86_64 -y 编辑文件 vim 10-mail.conf mail_ ...

  10. weex 项目开发 weexpack 项目 打包、签名、发布

    一. weexpack build android  和  weexpack run android 的 区别. (1)单纯打包 weexpack build android (2)打包并运行 wee ...