最近做一个专案用到的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. SpringMVC学习笔记:表单提交 参数的接收

    SpringMVC可以接收原生form表单和json格式数据 有一个名为Book的model,其中的属性如下: 字符串类型的name,数字类型的price,数组类型的cover,集合类型的author ...

  2. 使用delphi 10.2 开发linux 上的Daemon

    delphi 10.2 支持linux, 而且官方只是支持命令行编程,目地就是做linux 服务器端的开发. 既然是做linux服务器端的开发,那么普通的命令行运行程序,然后等待开一个黑窗口的方式就 ...

  3. TCP/IP协议(7):应用层

    应用层上协议有DNS.DHCP.HTTP.SSL/TLS.FTP.Telnet等. 1.DNS域名解析 DNS服务器用来解析域名从而获得对应IP地址,我们在对网络进行设置的时候如果DNS服务器没有设置 ...

  4. oracle compile 编译无效对象

    原博主:http://blog.csdn.net/tianlesoftware/article/details/4843600 Applies to: Oracle Server - Enterpri ...

  5. SQL语句之奇形怪状的冷门函数

    lag() over() ) OVER(ORDER BY C.column) FROM Table C; 第一条记录已经无法再取前一条记录,所以LAG()函数返回空. SQL为意思如下. LAG(C. ...

  6. 第06章:MongoDB-CRUD操作--集合

    ①显示现有的集合 命令:show collections 或者show tables; ②创建集合 隐示 在MongoDB中,你不需要创建集合.当你插入一些文档时,MongoDB 会自动创建集合. d ...

  7. Verilog中的阻塞与非阻塞

    这篇文档值得阅读 按说阻塞与非阻塞是Verilog中最基本的东西,也是老生常谈.但是最近看到很多程序里用到阻塞语句竟然不是很明白,说到底是从来没有自己仔细分析过.当然一般情况程序中也是推荐用非阻塞的. ...

  8. 关于写css文件需要注意的事项

    通常在项目中,我们尽量不要把style样式写在html中,而是使用外部.css文件的形式添加样式.在编写.css文件时,一定一定一定要注意,不要在一个css语句中写同级class名字,否则会出错,找不 ...

  9. referraluserid推广ID号跟踪JS处理A标签

    网站推广ID号跟踪 xxx.html?referraluserid=123 referraluserid.js JS源文件 referraluserid的参数会自动绑定页面A标签 有时是Post 表单 ...

  10. jquery取消事件冒泡的三种方法展示

    jquery取消事件冒泡的三种方法展示 html代码 <!doctype html> <html> <head> <meta charset="ut ...