SAP接口的调用
最近做一个专案用到的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接口的调用的更多相关文章
- (二)通过JAVA调用SAP接口 (增加一二级参数)
(二)通过JAVA调用SAP接口 (增加一二级参数) 一.建立sap连接 请参考我的上一篇博客 JAVA连接SAP 二.测试项目环境准备 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可 三. ...
- Java(JCo3)与SAP系统相互调用
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- SAP接口编程 之 JCo3.0系列(04) : 会话管理
在SAP接口编程之 NCo3.0系列(06) : 会话管理 这篇文章中,对会话管理的相关知识点已经说得很详细了,请参考.现在用JCo3.0来实现. 1. JCoContext 如果SAP中多个函数需要 ...
- SAP接口编程 之 JCo3.0系列(01):JCoDestination
SAP接口编程 之 JCo3.0系列(01):JCoDestination 字数2101 阅读103 评论0 喜欢0 JCo3.0是Java语言与ABAP语言双向通讯的中间件.与之前1.0/2.0相比 ...
- SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming
SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming 字数545 阅读52 评论0 喜欢1 JCo3.0调用SAP函数的过程 大致可以总结为以下步骤: 连接至 ...
- 【转】java通用URL接口地址调用方式GET和POST方式
java通用URL接口地址调用方式GET和POST方式,包括建立请求和设置请求头部信息等等......... import java.io.ByteArrayOutputStream; import ...
- 如何让Java和C++接口互相调用:JNI使用指南
如何让Java和C++接口互相调用:JNI使用指南 转自:http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos ...
- 如何记录selenium自动化测试过程中接口的调用信息
上一篇博客,我写了python自动化框架的一些知识和粗浅的看法,在上一篇中我也给自己提出一个需求:如果记录在测试过程中接口的调用情况?提出这个需求,我觉得是有意义的.你在测试过程中肯定会遇到一些莫名其 ...
- 在Winform混合式框架中整合外部API接口的调用
在我们常规的业务处理中,一般内部处理的接口多数都是以数据库相关的,基于混合式开发的Winform开发框架,虽然在客户端调用的时候,一般选择也是基于Web API的调用,不过后端我们可能不仅仅是针对我们 ...
随机推荐
- Linux 在文档中查找满足条件的行并输出到文件:
Linux 在文档中查找满足条件的行并输出到文件: 文件名称: dlog.log 输出文件: out.log 1.满足一个条件(包含 “TJ” )的语句: grep “TJ” dlog. ...
- Hadoop3集群搭建之——hive安装
Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hbase安装及简单操作 现在到 ...
- substr()和substring()函数
区别:主要是两者的参数不同 功能:相似. substr :返回一个从指定位置开始的指定长度的子字符串 substring :返回位于 String 对象中指定位置的子字符串. 用法: stringva ...
- Python学习杂记
Python中关键字yield有什么作用? 首先得理解generators,而理解generators前还要理解iterables: 你可以用在for...in...语句中的都是可迭代的:比如list ...
- 2019.01.24 NOIP训练 旅行(轮廓线dp)
传送门 题意简述: 给一个n∗mn*mn∗m的有障碍的网格图,问你从左上角走到左下角并覆盖所有可行格子的路径条数. 思路: 路径不是很好算. 将图改造一下,在最前面添两列,第一列全部能通过,第二列只有 ...
- 2019.01.02 bzoj5300: [Cqoi2018]九连环(fft优化高精+快速幂)
传送门 题意不好描述(自己看样例解释) 首先可以推出一个递推式:fn=fn−1+2fn−2+1f_n=f_{n-1}+2f_{n-2}+1fn=fn−1+2fn−2+1 然后可以构造两个等式: ...
- 2018.11.08 NOIP模拟 班车(倍增+dfs+bit)
传送门 对于每个点离线处理出向上走2i2^i2i班车到的最上面的点. 然后每个询问(u,v)(u,v)(u,v)先把(u,v)(u,v)(u,v)倍增到刚好走不到lcalcalca的情况(有一个点如果 ...
- Codeforces Round #523 (Div. 2) E. Politics(最小费+思维建图)
https://codeforces.com/contest/1061/problem/E 题意 有n个点(<=500),标记第i个点的代价a[i],然后分别在这n个点建两棵树,对于每颗树的每个 ...
- 解决python代码中含有中文报错
python中写入中文时报错如下图所示: 依照网上解决方法:在py文件中加入:#encoding=utf-8 然后继续报错如下图所示: 解决方法: 在py文件中加入: import sysreload ...
- Javascript、Jquery获取浏览器和屏幕各种高度宽度(单位都为px)
Javascript.Jquery获取浏览器和屏幕各种高度宽度 另外参见 http://www.cnblogs.com/top5/archive/2009/05/07/1452135.html ...