java后台调用 SAP RFC的配置和调用
来源:互联网 发布:形容不出门知天下事 编辑:程序博客网 时间:2024/05/29 02:47
RFC 刚刚听到这个名称的时候只有一种感觉: 什么鬼? 后来百度了一下 ,来看看官方的解释:
RFC是SAP系统和其他(SAP或非SAP)系统间的一个重要而常用的双向接口技术,也被视为SAP与外部通信的基本协议。简单地说,RFC过程就是系统调用当前系统外的程序模块!
RFC 是英文缩写,全称:Remote Function Call ,远程功能调用 ! anyway , 不管他,现在来看看如何配置:
我是从其他项目中整合到 现有的项目中去,所以基本只是复制黏贴:
1,复制 依赖包 把一下两个 依赖包 放到lib 文件夹下,相应的添加到路径中 去
2. 复制配置文件 ,这个配置文件用来配置 sap 地址等信息
这个文件里面的内容如下:
3.复制工具类,这两个非常重要,有了这两个就可以直接在代码里面调用SAP了
以上都配置好之后,基本就搞定了,已经可以在代码中使用了! 接下来看看如何调用RFC , 遇到两种情况 ,接下来一 一 介绍:
1. 简单的RFC调用 ,这种情况参数比较简单,入参传入几个,出参是一个表,只要根据表结构就可以取值 :
JCoFunction function = RfcManager.getFunction("ZRFC_ISR_GET_CCAPP"); //RFC 名称
// 设置import 参数
JCoParameterList importParam = function.getImportParameterList(); //获得入参
//以下这些是调用该RFC所需要的参数
importParam.setValue("I_ZAREA","ALL"); //区域 ALL 代表全部的公司
importParam.setValue("I_ZTMON",""); //月份
//importParam.setValue("I_ZWEEKS","");//周数
importParam.setValue("I_DATUM","");//日期
// 执行RFC
RfcManager.execute(function);
// 获取RFC返回的字段值
JCoParameterList exportParam = function.getExportParameterList();
JCoParameterList exportTable= function.getTableParameterList();
JCoTable getTable1 = exportTable.getTable("ET_ZDIELG");// 这是调用后 RFC 返回的表名
boolean loopFlag1 = !getTable1.isEmpty(); //判断 这张表中有木有数据
while(loopFlag1){ //循环获取数据
getAreaNum = getTable1.getString("ZAREA"); //根据表字段来获取值
getAreaName = getTable1.getString("ZQYMS");
//areaSize = getTable1.getString("ZCCMJ");
//areaPeoNum = getTable1.getString("ZCCRY");
HashMap<String,String> hm= new HashMap<String,String>();
hm.put("areanum", getAreaNum);
hm.put("areaname", getAreaName);
list.add(hm);
loopFlag1 = getTable1.nextRow(); // 移动到下一行
}
就是这么简单粗暴,入参的值设置一下就好了,返回一张表,根据字段取数就好了! 接下来说一下难的 !
2. 难点在于,参数比较复杂! 第一感觉就是,这是什么SHIT ! 直接上代码:
JCoFunction function = RfcManager.getFunction("ZRFC_HR_READ_TABLE"); //人力资源报表
// 设置import 参数
JCoParameterList importParam = function.getImportParameterList();
importParam.setValue("QUERY_TABLE","ZTHR_R004"); //区域 ALL 代表全部的公司
importParam.setValue("ROWSKIPS","0"); //
importParam.setValue("ROWCOUNT","0"); //
importParam.setValue("USERNAME","00002359"); //
importParam.setValue("ORDER_BY",""); //
//以上和第一种情况一样,只是普通的设置入参
// importParam.setValue("SELECTION","BUKRS 3100"); //
JCoParameterList inTableParam = function.getTableParameterList(); // 这里又需要数据一张表作为参数
//以下是入参的表
JCoTable tableInD = inTableParam.getTable("DATA");
JCoTable tableInF = inTableParam.getTable("FIELDS");
JCoTable tableInO = inTableParam.getTable("OPTIONS");
JCoTable tableInS = inTableParam.getTable("SELECTION");
// JCoTable tableInop = inTableParam.getTable("SELECTION");//得到SAP函数中的条件参数
tableInS.appendRow();//添加一行,要给这个表设置参数的时候,需要先添加一行,然后才设置参数,而且参数如下
tableInS.setValue("FIELDNAME","BUKRS"); //前面是 这个表的字段名,后面是值
tableInS.setValue("OPTION","EQ");
tableInS.setValue("ANDOR","AND");
tableInS.setValue("LOW",burkNum);
if(!areaNum.equals("") || areaNum != null){ //如果有两个参数,还要再添加一行,和上面一样
log.info("有两个参数");
tableInS.appendRow();//添加一行
tableInS.setValue("FIELDNAME","SOBJID");
tableInS.setValue("OPTION","EQ");
tableInS.setValue("ANDOR","AND");
tableInS.setValue("LOW",areaNum);
}
// 执行RFC
RfcManager.execute(function);
// 获取RFC返回的字段值
JCoParameterList exportParam = function.getExportParameterList();
JCoParameterList exportTable= function.getTableParameterList();
//获取返回的表,然而不能像上面一样根据表结构取值,因为表结构和值他又是分开放的,所以十分奇葩 ,
JCoTable getTable1 = exportTable.getTable("DATA");
boolean loopFlag1 = !getTable1.isEmpty();
while(loopFlag1){ //
HashMap<String,String> dataMap = new HashMap<String,String>(); //新数据里面的 Map
String WA=getTable1.getString("WA"); //返回的只有一个字段 ,所有的值都放在这个里面,所以要去截取
。。。
dataMap.put("店铺类型",WA.substring(248, 258).trim());//店铺类型 用截取的办法,获取对应字段的值
dataMap.put("核定编制",WA.substring(258, 266).trim());//核定编制
newlist.add(dataMap);
loopFlag1 = getTable1.nextRow(); //移动到下一行
}
好了,以上就是遇到的两种调用RFC的情况! 第二种就是多了输入参数的表,也要懂得写 ! that's all thank you !
RFC是SAP系统和其他(SAP或非SAP)系统间的一个重要而常用的双向接口技术,也被视为SAP与外部通信的基本协议。简单地说,RFC过程就是系统调用当前系统外的程序模块!
RFC 是英文缩写,全称:Remote Function Call ,远程功能调用 ! anyway , 不管他,现在来看看如何配置:
我是从其他项目中整合到 现有的项目中去,所以基本只是复制黏贴:
1,复制 依赖包 把一下两个 依赖包 放到lib 文件夹下,相应的添加到路径中 去
2. 复制配置文件 ,这个配置文件用来配置 sap 地址等信息
这个文件里面的内容如下:
3.复制工具类,这两个非常重要,有了这两个就可以直接在代码里面调用SAP了
以上都配置好之后,基本就搞定了,已经可以在代码中使用了! 接下来看看如何调用RFC , 遇到两种情况 ,接下来一 一 介绍:
1. 简单的RFC调用 ,这种情况参数比较简单,入参传入几个,出参是一个表,只要根据表结构就可以取值 :
JCoFunction function = RfcManager.getFunction("ZRFC_ISR_GET_CCAPP"); //RFC 名称
// 设置import 参数
JCoParameterList importParam = function.getImportParameterList(); //获得入参
//以下这些是调用该RFC所需要的参数
importParam.setValue("I_ZAREA","ALL"); //区域 ALL 代表全部的公司
importParam.setValue("I_ZTMON",""); //月份
//importParam.setValue("I_ZWEEKS","");//周数
importParam.setValue("I_DATUM","");//日期
// 执行RFC
RfcManager.execute(function);
// 获取RFC返回的字段值
JCoParameterList exportParam = function.getExportParameterList();
JCoParameterList exportTable= function.getTableParameterList();
JCoTable getTable1 = exportTable.getTable("ET_ZDIELG");// 这是调用后 RFC 返回的表名
boolean loopFlag1 = !getTable1.isEmpty(); //判断 这张表中有木有数据
while(loopFlag1){ //循环获取数据
getAreaNum = getTable1.getString("ZAREA"); //根据表字段来获取值
getAreaName = getTable1.getString("ZQYMS");
//areaSize = getTable1.getString("ZCCMJ");
//areaPeoNum = getTable1.getString("ZCCRY");
HashMap<String,String> hm= new HashMap<String,String>();
hm.put("areanum", getAreaNum);
hm.put("areaname", getAreaName);
list.add(hm);
loopFlag1 = getTable1.nextRow(); // 移动到下一行
}
就是这么简单粗暴,入参的值设置一下就好了,返回一张表,根据字段取数就好了! 接下来说一下难的 !
2. 难点在于,参数比较复杂! 第一感觉就是,这是什么SHIT ! 直接上代码:
JCoFunction function = RfcManager.getFunction("ZRFC_HR_READ_TABLE"); //人力资源报表
// 设置import 参数
JCoParameterList importParam = function.getImportParameterList();
importParam.setValue("QUERY_TABLE","ZTHR_R004"); //区域 ALL 代表全部的公司
importParam.setValue("ROWSKIPS","0"); //
importParam.setValue("ROWCOUNT","0"); //
importParam.setValue("USERNAME","00002359"); //
importParam.setValue("ORDER_BY",""); //
//以上和第一种情况一样,只是普通的设置入参
// importParam.setValue("SELECTION","BUKRS 3100"); //
JCoParameterList inTableParam = function.getTableParameterList(); // 这里又需要数据一张表作为参数
//以下是入参的表
JCoTable tableInD = inTableParam.getTable("DATA");
JCoTable tableInF = inTableParam.getTable("FIELDS");
JCoTable tableInO = inTableParam.getTable("OPTIONS");
JCoTable tableInS = inTableParam.getTable("SELECTION");
// JCoTable tableInop = inTableParam.getTable("SELECTION");//得到SAP函数中的条件参数
tableInS.appendRow();//添加一行,要给这个表设置参数的时候,需要先添加一行,然后才设置参数,而且参数如下
tableInS.setValue("FIELDNAME","BUKRS"); //前面是 这个表的字段名,后面是值
tableInS.setValue("OPTION","EQ");
tableInS.setValue("ANDOR","AND");
tableInS.setValue("LOW",burkNum);
if(!areaNum.equals("") || areaNum != null){ //如果有两个参数,还要再添加一行,和上面一样
log.info("有两个参数");
tableInS.appendRow();//添加一行
tableInS.setValue("FIELDNAME","SOBJID");
tableInS.setValue("OPTION","EQ");
tableInS.setValue("ANDOR","AND");
tableInS.setValue("LOW",areaNum);
}
// 执行RFC
RfcManager.execute(function);
// 获取RFC返回的字段值
JCoParameterList exportParam = function.getExportParameterList();
JCoParameterList exportTable= function.getTableParameterList();
//获取返回的表,然而不能像上面一样根据表结构取值,因为表结构和值他又是分开放的,所以十分奇葩 ,
JCoTable getTable1 = exportTable.getTable("DATA");
boolean loopFlag1 = !getTable1.isEmpty();
while(loopFlag1){ //
HashMap<String,String> dataMap = new HashMap<String,String>(); //新数据里面的 Map
String WA=getTable1.getString("WA"); //返回的只有一个字段 ,所有的值都放在这个里面,所以要去截取
。。。
dataMap.put("店铺类型",WA.substring(248, 258).trim());//店铺类型 用截取的办法,获取对应字段的值
dataMap.put("核定编制",WA.substring(258, 266).trim());//核定编制
newlist.add(dataMap);
loopFlag1 = getTable1.nextRow(); //移动到下一行
}
好了,以上就是遇到的两种调用RFC的情况! 第二种就是多了输入参数的表,也要懂得写 ! that's all thank you !
0 0
- java后台调用 SAP RFC的配置和调用
- java调用sap的RFC接口
- java后台调用 SAP RFC 第二种方法
- java调用SAP RFC函数
- Java 调用SAP RFC函数
- java调用SAP RFC函数
- VB调用SAP的RFC
- sap的rfc接口调用
- SAP的RFC接口的发布与JAVA调用
- JAVA调用SAP的函数RFC--个人小结
- RFC调用sap接口
- VBA调用SAP RFC
- java 调用SAP RFC函数错误信息集锦
- java调用SAP RFC函数 2
- Java中连接SAP进行RFC调用
- JAVA调用SAP端RFC接口
- java 调用SAP RFC函数错误信息集锦
- Java 调用SAP RFC函数错误信息集锦
- java枚举
- log4j配置
- 根据后序与中序遍历建树层序遍历输出
- android 内存进程管理分析
- Java服务器热部署的实现原理
- java后台调用 SAP RFC的配置和调用
- 不用算术运算符实现两个数的加法(按位异或)
- 区块链需要迈过的几道坎
- 【记录】输入捕获
- java 获取昨天的日期
- centor 6.5上yum安装mysql 5.7
- 155. Min Stack
- 七个细节解决公众号运营中的问题 欣赏与转化是两回事
- js一些关于获取日期的操作