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

在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. chrome安装文件点击没有反应(收藏用)

    备份Chrome浏览器用户数据 关闭Chrome浏览器,用Windows资源管理器打开%LOCALAPPDATA%\Google,复制Chrome文件夹到其它目录.   打开程序和功能管理功能 按下W ...

  2. jmeter csv中获取带引号的数据详情(转)

    最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...

  3. PIL图片格式转换

    PIL格式转换 原图: #!/usr/local/bin/python # -*- coding: utf8 -*- from PIL import Image, ImageFilter import ...

  4. spring boot——MockMvc的用法 (SpringBoot 1.5.18)下测试通过

    spring boot——MockMvc的用法   1.pom配置 <dependency> <groupId>org.springframework.boot</gro ...

  5. 牛客网练习赛26B(简单的dp)

    题目链接:https://www.nowcoder.com/acm/contest/180/B 链接:https://www.nowcoder.com/acm/contest/180/B来源:牛客网 ...

  6. how to keep impact-crusher in good condition

    how to keep impact-crusher in good condition Why we have to maintenance impact crusher? As we talked ...

  7. linux之sed的用法

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed ...

  8. java里如何实现循环打印出字符或字符数组里的内容

    不多说,直接上干货! java里如何实现循环打印出字符里的内容 没写,暂时不会 java里如何实现循环打印出字符数组里的内容 public class test { public static voi ...

  9. Solr7.x介绍安装和配置(单机版)

    之前学的是4.x,然后一看官网,奶奶的都7.x了.于是查了一番资料..... 1)下载和安装 wget http://mirror.bit.edu.cn/apache/lucene/solr/7.3. ...

  10. 性能测试学习第九天_脚本编写以及controller场景

    创建java脚本 环境配置: 安装jdk(lr11最高支持java1.6) 配置环境变量 在lr选择java Vuser协议 脚本结构: 一般在init中编写初始化脚本,在action中编写业务流程, ...