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

在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. mysql /etc/my.cnf

    [client] port=3306 socket = /tmp/mysql.sock default-character-set=utf8 [mysqld] # 1 general config p ...

  2. 如何在mssql中获取最新自增ID的值

    @@IDENTITY 返回最后一个插入 IDENTITY 的值,这些操作包括:INSERT, SELECT INTO,或者 bulk copy.如果在给没有 IDENTITY 列的其他表插入记录,系统 ...

  3. Hive 基本语法操练(三):分区操作和桶操作

    (一)分区操作 Hive 的分区通过在创建表时启动 PARTITION BY 实现,用来分区的维度并不是实际数据的某一列,具体分区的标志是由插入内容时给定的.当要查询某一分区的内容时可以采用 WHER ...

  4. 小程序的switch组件

    小程序的switch开关组件,总结下大概有三种使用场景. 其一: 纯展示场景, 用来展示某个开关值是打开还是关闭的,这个场景比较简单,给个disabled属性就ok了: 其二: 用户点击后立即切换开关 ...

  5. asp.net 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction

    1.带有Render的方法返回值是void,在方法内部进行输出:不带的返回值类型为MvcHtmlString,所以只能这样使用: @Html.Partial 对应 @{Html.RenderParti ...

  6. windows下使用VM虚拟机安装linux

    转载地址:http://blog.csdn.net/u013142781/article/details/50529030 安装过程中发现与下面的顺序有点不同,遇到的问题是: 在选择中文进行安装时,一 ...

  7. JSPt的Base标签

    <base href="${pageContext.request.contextPath}/"/> 注意:base标签得到的内容是: /projectName/ 这种 ...

  8. magento新增商品属性以及将属性加入Flat table

    magento的EAV模型非常强大且灵活,但是如果不做优化的话,性能会非常低,因为attributes都存放在附表里,要获取一个entity的attribute,需要表联结一次,如果需要获取多条att ...

  9. The sventh day

    call it a day 是个相当古老的习惯用语,沿用至今已经有一百五十多年了,但是人民仍然常常用到她. call it a day 可不是“叫一天”的意思哦, 这里是收工的,下班的意思 I thi ...

  10. bootstrapValidator 如何重新启用提交按钮

    bootstrapValidator 使用中,由于字段检查等原因,致使提交按钮失效.如何重新启用提交按钮呢? 下面一句代码可以实现启用提交按钮: $('#loginForm').bootstrapVa ...