最近做一个专案用到的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. putty中查询乱码问题

    我们在putty连接Linux时候,有时候查询会出现乱码问题...如下图 这个是因为putty中设置编码字符集的原因..将此换为utf8格式的即可解决 解决后查询如下:

  2. SQL 存储过程调用存储过程

    研究一个别人做的项目代码看到数据库里有一段存储过程调用存储过程的代码,原来的代码比较复杂. 于是自己打算写一个简单的例子学习一下. 一.首先创建了被需要被调用的存储过程. USE [MSPetShop ...

  3. servlet 知识点 WebServlet("/")与WebServlet("/*")的区别

    (1)一个servlet的请求路径,如果配置成"/",那么它可以拦截除了.jsp之外的所有的请求. (2)一个servlet的请求路径,如果配置成"/*",那么 ...

  4. Java的GUI设计小技巧

    不可关闭窗口 setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

  5. 2018.11.07 hdu1465不容易系列之一(二项式反演)

    传送门 其实标签只是搞笑的. 没那么难. 二项式反演只是杀鸡用牛刀而已. 这道题也只是让你n≤20n\le20n≤20的错排数而已. 还记得那个O(n)O(n)O(n)的递推式吗? 没错那个方法比我今 ...

  6. Echarts的使用方法

    效果图: 1. 在echarts官网下载包,解压后,将文件Echarts\echarts-2.2.7\echarts-2.2.7\doc\example\www\js\echarts.js文件拷贝,放 ...

  7. 师弟推荐软件-/mathpix

    将公式扫描为latex:https://mathpix.com/api.html mathtype与latex转换:http://www.mathtype.cn/jiqiao/zhuanhua-gon ...

  8. EXCEL中R1C1样式引用

    主要引用http://club.excelhome.net/thread-759847-1-1.html Sub chengji() ' ' 宏1 宏 ' Dim Finalrow As Intege ...

  9. idea的maven项目不知道为啥下载不下来jar包,看本地仓库只是下载了一下xml文件,没有jar包问题

    确认了私服上的jar包能直接下载下来,而且jar包是正常的:但是就是不能通过idea下载,通过idea下载到本地仓库的只生成了.lastUpdated文件,检查了setting.xml文件.网络,私服 ...

  10. c3p0使用

    c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> ...