最近做一个专案用到的SAO接口的调用,用到的上传参数获取回传的IRfcTable,以及以IRfcTable作为参数上传SAP,通过查阅很多资料,发现资料说明的也多是鱼龙混杂,许多没有实现就直接贴在上面,有的还是值得借鉴的,专案完成后,记录下,好记性不如烂笔头,也分享给大伙借阅。

1.SAP连接

这里先设置SAP连接

  public static RfcDestination GetRfcDest()
{
RfcConfigParameters configParams = GetConfigParams();
RfcDestination dest = RfcDestinationManager.GetDestination(configParams);
return dest;
}
private static RfcConfigParameters GetConfigParams()
{
RfcConfigParameters configParams = new RfcConfigParameters();
//正式服务器
configParams.Add(RfcConfigParameters.Name, "SAP_CONN");
configParams.Add(RfcConfigParameters.AppServerHost, "xxx.xxx.xxx.xxx");//正式机
configParams.Add(RfcConfigParameters.SystemNumber, "00");
configParams.Add(RfcConfigParameters.User, "B2BACL");
configParams.Add(RfcConfigParameters.Password, "ACLACL");
configParams.Add(RfcConfigParameters.Client, "168");
configParams.Add(RfcConfigParameters.Language, "EN");
configParams.Add(RfcConfigParameters.PoolSize, "5");
configParams.Add(RfcConfigParameters.MaxPoolSize, "10");
configParams.Add(RfcConfigParameters.IdleTimeout, "600");
return configParams;
}

2.通过参数获取对应的IRfcTable

 /// <summary>
/// 通过参数获取SAP中Table返回值(Table)
/// </summary>
/// <param name="ASN"></param>
/// <returns></returns>
public static DataTable method(string ASN)
{ DataTable result = null;
IRfcTable value = null;
try
{
RfcDestination rfcdes = SapConn.GetRfcDest();
RfcRepository repos = rfcdes.Repository;
IRfcFunction func = repos.CreateFunction("方法名"); //RFC函数名
func.SetValue("参数名", ASN); //测量点
func.Invoke(rfcdes);
value = func.GetTable("需要获取的表明"); //输出参数
DataTable dt = new DataTable();
//新建列
dt.Columns.Add("VBELN");
dt.Columns.Add("POSNR");
dt.Columns.Add("VGBEL");
dt.Columns.Add("VGPOS");
for (int i = 0; i < value.Count; i++)
{
value.CurrentIndex = i;
DataRow dr = dt.NewRow();//新建行
dr["VBELN"] = value.GetString("VBELN");
dr["POSNR"] = value.GetString("POSNR");
dr["VGBEL"] = value.GetString("VGBEL");
dr["VGPOS"] = value.GetString("VGPOS");
dt.Rows.Add(dr);
}
System.Threading.Thread.Sleep(100);
dt.DefaultView.Sort = "LFIMG ASC";//按Id倒序
dt = dt.DefaultView.ToTable();//返回一个新的DataTable
result = dt;
}
catch (Exception ex)
{ }
return result;
}

3.将参数以IRfcTable形式上传SAP

  public static void PostTableToASap(string StaffNO)
{ RfcDestination rfcdes = SapConn.GetRfcDest();
RfcRepository repos = rfcdes.Repository;
IRfcFunction func = null;
string ASN = null;
func= repos.CreateFunction("RFC函数名"); //RFC函数名
try
{
//表头部分
IRfcStructure GOODSMVT_HEADER = func.GetStructure("GOODSMVT_HEADER");
string time = DateTime.Now.ToString("yyyyMMdd");
GOODSMVT_HEADER.SetValue("参数1", time); //测量点
GOODSMVT_HEADER.SetValue("参数2", time); //测量点
GOODSMVT_HEADER.SetValue("参数3", ""); //测量点
func.SetValue("GOODSMVT_HEADER", GOODSMVT_HEADER);
//Get需要操作的表T_PURORDER_IN
IRfcTable itb = func.GetTable("表名");
for (int i = ; i < DT.Rows.Count-; i++)
{
itb.Insert();
itb.CurrentRow.SetValue("列1", DT.Rows[i]["VGBEL"].ToString());
itb.CurrentRow.SetValue("列2", DT.Rows[i]["VGPOS"].ToString());
itb.CurrentRow.SetValue("列3", DT.Rows[i]["MATNR"].ToString());
itb.CurrentRow.SetValue("列4", DT.Rows[i]["LFIMG"].ToString()); }
func.SetValue("表名", itb);
func.Invoke(rfcdes);
}
catch (Exception ex)
{ LogHelper.WriteLog(typeof(SapConn), ex); }
}

SAP接口的调用的更多相关文章

  1. (二)通过JAVA调用SAP接口 (增加一二级参数)

    (二)通过JAVA调用SAP接口 (增加一二级参数) 一.建立sap连接 请参考我的上一篇博客 JAVA连接SAP 二.测试项目环境准备 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可 三. ...

  2. Java(JCo3)与SAP系统相互调用

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. SAP接口编程 之 JCo3.0系列(04) : 会话管理

    在SAP接口编程之 NCo3.0系列(06) : 会话管理 这篇文章中,对会话管理的相关知识点已经说得很详细了,请参考.现在用JCo3.0来实现. 1. JCoContext 如果SAP中多个函数需要 ...

  4. SAP接口编程 之 JCo3.0系列(01):JCoDestination

    SAP接口编程 之 JCo3.0系列(01):JCoDestination 字数2101 阅读103 评论0 喜欢0 JCo3.0是Java语言与ABAP语言双向通讯的中间件.与之前1.0/2.0相比 ...

  5. SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming

    SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming 字数545 阅读52 评论0 喜欢1 JCo3.0调用SAP函数的过程 大致可以总结为以下步骤: 连接至 ...

  6. 【转】java通用URL接口地址调用方式GET和POST方式

    java通用URL接口地址调用方式GET和POST方式,包括建立请求和设置请求头部信息等等......... import java.io.ByteArrayOutputStream; import ...

  7. 如何让Java和C++接口互相调用:JNI使用指南

    如何让Java和C++接口互相调用:JNI使用指南 转自:http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos ...

  8. 如何记录selenium自动化测试过程中接口的调用信息

    上一篇博客,我写了python自动化框架的一些知识和粗浅的看法,在上一篇中我也给自己提出一个需求:如果记录在测试过程中接口的调用情况?提出这个需求,我觉得是有意义的.你在测试过程中肯定会遇到一些莫名其 ...

  9. 在Winform混合式框架中整合外部API接口的调用

    在我们常规的业务处理中,一般内部处理的接口多数都是以数据库相关的,基于混合式开发的Winform开发框架,虽然在客户端调用的时候,一般选择也是基于Web API的调用,不过后端我们可能不仅仅是针对我们 ...

随机推荐

  1. windows + php7.1 + redis3.1.4

    首先确定PHP版本(MSVC14 x64 NTS) 下载redis扩展 拷贝php ext目录,修改php.ini配置,添加 extension=php_redis.dll 重启apache,确认re ...

  2. JQuery中after() append() appendTo()的区别

    首先 after() 是追加在元素外边而append() appendTo()是追加在元素里面. $(selector).after(content) $("span").afte ...

  3. [SQL]查询最新的数据

    在设计数据库的时候,把数据的跟新,删除都是软操作,就是都是变成了增加,也是会需要读取最新的那条数据 ' 获取最新时间的数据 Select a.* FROM SortInfo a,(SELECT SnS ...

  4. 【轻松前端之旅】<!DOCTYPE>标签

    前端学习,先学习HTML,CSS,Javascript HTML - HyperText Markup Language HTML-超文本标记语言,提供了一种标记网页内容的方法. 浏览器怎么知道如何显 ...

  5. JS高级-Date- Error-***Function:

    1. Date: API: 1. 8个单位: FullYear   Month   Date   Day Hours     Minutes   Seconds   Milliseconds 2. 每 ...

  6. ACM-ICPC 2018 徐州赛区网络预赛 C Cacti Lottery(暴力+期望)

    链接https://nanti.jisuanke.com/t/31455 思路 首先先枚举把剩下的数填入星号的情况(其实就是枚举星号的排列),这是对方所能知道的所有信息,然后对方将取八种决策中最优的情 ...

  7. sprintf()与sscanf()

    1.sprintf() sprintf()用于向字符串中写入格式化的数据,eg: int dSrc1 = 1; int dSrc2 = 2; char str[] = "hello" ...

  8. .Net 导出Excel时设置单元格的格式为文本类型

    <td style= 'vnd.ms-excel.numberformat:@ ' align='right'>" & Format(Val(rowTitle.Item( ...

  9. BZOJ 1029 [JSOI2007]建筑抢修 (贪心 + 优先队列)

    1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 5452  Solved: 2422[Submit][Statu ...

  10. 好文推荐系列--------(2)GruntJS——重复乏味的工作总会有人做(反正我不做)

    GruntJS 是基于JavaScript的命令行构建工具,它可以帮助开发者们自动化重复性的工作.你可以把它看成是JavaScript下的Make或者Ant.它可以完成诸如精简.编译.单元测试.lin ...