SAP接口编程 之 JCo3.0系列:Table参数
Table参数作为export parameter
BAPI_COMPANYCODE_GETDETAIL
是一个适合演示的函数,没有import paramter参数,调用后COMPANYCODE_GETDETAIL
表参数返回SAP系统中所有公司代码的清单。只包括公司代码ID和公司代码名称两个字段。
JCo中,与表参数相关的两个接口是JCoTable
和JCoRecordMetaDta
, JCoTable
就是RFM中tabl参数,而JCoRecordMetaDta
是JCoTable
或JCoStructure
的元数据。
在.net环境中,我喜欢将IRfcTable转换成DataTable,但Java没有类似的数据结构,所以决定直接在方法中传递JCoTable算了。但为了方便显示,可以考虑使用一个通用代码进行输出:
package jco3.utils;import com.sap.conn.jco.JCoField;
import com.sap.conn.jco.JCoRecordMetaData;
import com.sap.conn.jco.JCoTable;public class JCoUtils
{public static void printJCoTable(JCoTable jcoTable){// header// JCoRecordMeataData is the meta data of either a structure or a table.// Each element describes a field of the structure or table. JCoRecordMetaData tableMeta = jcoTable.getRecordMetaData(); for(int i = 0; i < tableMeta.getFieldCount(); i++){System.out.print(String.format("%s\t", tableMeta.getName(i))); }System.out.println(); // new line// line itemsfor(int i = 0; i < jcoTable.getNumRows(); i++){// Sets the row pointer to the specified position(beginning from zero)jcoTable.setRow(i);// Each line is of type JCoStructurefor(JCoField fld : jcoTable){System.out.print(String.format("%s\t", fld.getValue()));}System.out.println();}}
}
要点说明:
对JCoTable,输出表头和行项目。表头通过获取JCoTable
的meta-data,然后使用meta-data的getName
()方法。
JCoRecordMetaData tableMeta = jcoTable.getRecordMetaData();
for(int i = 0; i < tableMeta.getFieldCount(); i++){System.out.print(String.format("%s\t", tableMeta.getName(i)));
}
JCoTable每一行都是一个JCoStructure
,可以通过setRow()
设置指针的位置,然后再遍历各个field:
for(int i = 0; i < jcoTable.getNumRows(); i++){// Sets the row pointer to the specified position(beginning from zero)jcoTable.setRow(i);// Each line is of type JCoStructurefor(JCoField fld : jcoTable){System.out.print(String.format("%s\t", fld.getValue()));}System.out.println();}
完成输出之后,接下来就是RFM调用:
package jco3.demo5;import org.junit.Test;
import com.sap.conn.jco.*;
import jco3.utils.JCoUtils;public class JCoTableDemo
{public JCoTable getCocdList() throws JCoException{/*** Get company code list in SAP* using BAPI BAPI_COMPANYCODE_GETLIST.* * Since JCoTable is rather flexible, we simply use* this interface as return value*/JCoDestination dest = JCoDestinationManager.getDestination("ECC");JCoFunction fm = dest.getRepository().getFunction("BAPI_COMPANYCODE_GETLIST"); fm.execute(dest);JCoTable companies = fm.getTableParameterList().getTable("COMPANYCODE_LIST");return companies; }@Testpublic void printCompanies() throws JCoException{JCoTable companies = this.getCocdList();JCoUtils.printJCoTable(companies);}
}
Table参数作为import parameter
table作为输入参数,主要解决填充table的问题,基本模式如下:
someTable.appendRow();
someTable.setValue("FLDNAME", someValue);
以RFC_READ_TABLE为例,读取SAP USR04表。
package jco3.demo5;import org.junit.Test;
import com.sap.conn.jco.*;
import jco3.utils.JCoUtils;public class JCoTableAsImport
{ public JCoTable readTable() throws JCoException{/*** Shows how to process JCoTable (as importing)*/JCoDestination dest = JCoDestinationManager.getDestination("ECC");JCoFunction fm = dest.getRepository().getFunction("RFC_READ_TABLE");// table we want to query is USR04// which is user authorization table in SAPfm.getImportParameterList().setValue("QUERY_TABLE", "USR04");// output data will be delimited by commafm.getImportParameterList().setValue("DELIMITER", ",");// processing table parametersJCoTable options = fm.getTableParameterList().getTable("OPTIONS");// modification date >= 2012.01.01 and <= 2015.12.31options.appendRow();options.setValue("TEXT", "MODDA GE '20120101' ");options.appendRow();options.setValue("TEXT", "AND MODDA LE '20151231' ");// We only care about fields of [user id] and [modification date] String[] outputFields = new String[] {"BNAME", "MODDA"};JCoTable fields = fm.getTableParameterList().getTable("FIELDS");int count = outputFields.length;fields.appendRows(count);for (int i = 0; i < count; i++){fields.setRow(i);fields.setValue("FIELDNAME", outputFields[i]); }fm.execute(dest);JCoTable data = fm.getTableParameterList().getTable("DATA");return data;}@Testpublic void printUsers() throws JCoException{JCoTable users = this.readTable();JCoUtils.printJCoTable(users);}
}
在代码中我们使用了两种方法来插入table的行项目,第一种方法:
JCoTable options = fm.getTableParameterList().getTable("OPTIONS");
// modification date >= 2012.01.01 and <= 2015.12.31
options.appendRow();
options.setValue("TEXT", "MODDA GE '20120101' ");
options.appendRow();
options.setValue("TEXT", "AND MODDA LE '20151231' ");
第二种方法:
String[] outputFields = new String[] {"BNAME", "MODDA"};
JCoTable fields = fm.getTableParameterList().getTable("FIELDS");
int count = outputFields.length;
fields.appendRows(count);
for (int i = 0; i < count; i++){fields.setRow(i);fields.setValue("FIELDNAME", outputFields[i]);
}
JCoTable重要方法总结
jcoTable_methods.gif
SAP接口编程 之 JCo3.0系列:Table参数相关推荐
- 农行支付php,农行网上支付平-B2C接口编程指南-PHP_Edition-V1.0.doc
农行网上支付平-B2C接口编程指南-PHP_Edition-V1.0 中国农业银行网上支付平台 B2C PHP商户接口编程指南 Java Edition V1.0 修订历史纪录 日期版本说明作者200 ...
- java 网银支付收款接口_农行网上支付平台-商户接口编程指南-Java_Edition-V3.0.2.pdf...
农行网上支付平台-商户接口编程指南-Java_Edition-V3.0.2 中国农业银行网上支付平台 商户接口编程指南 Java Edition V3.0.2 农行网上支付平台 商户接口编程指南 –J ...
- UG数控编程:UG10.0移除参数的使用方法
UG数控编程:UG10.0移除参数的使用方法 今天和大家一起分享UG10.0去移除参数的使用技巧! 1.移除参数指令在菜单-编辑-特征下 2.打开移除参数命令后,其菜单如下显示 3.选中图形,然后点移 ...
- SAP接口编程案例 - VBA批量更新销售订单定价类型
碰到一个需求,需要对销售订单的定价类型进行批量更新,对这种临时批量处理,考虑到数据源一般放在 Excel 中,使用 VBA 来调用 BAPI 实现不失为一种快捷的方式. 了解 BAPI 如何使用 更改 ...
- 如何使用JCO3.0同时访问多个SAP系统
代码实现如下,从上到下依次调用,直到被获取连接为止. JCOProvider类似注册中心,注册连接信息. 如有问题请参考: 如何使用JCO3.0同时访问多个SAP系统 SAP接口编程 之 JCo3.0 ...
- arduino nano 蓝牙_掌控板IO接口编程入门 | 用Arduino玩转掌控板(ESP32)系列
众所周知,掌控板在创客教育中用的非常广泛,它是一块基于 ESP32 的学习开发板.大家对掌控板编程,用的比较多的都是图形化编程的方式,比如 mPython.Mind+ 等.但是,既然掌控板是基于 ES ...
- php调用sap端rfc接口,SAP 接口编程之 RFC 系列(15) : 调用自定义函数
从外部环境调用自定义函数 (FM, Function Module)与调用 SAP 内置的函数并没有不同,需要注意的是在 SAP 系统自定义 FM 的要点: 1)FM 必须是 Remote-enabl ...
- 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引
[源码下载] 积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引 作者:webabcd Flash 之 ActionScript 3.0 1.积少成 ...
- 初识Django —Python API接口编程入门
初识Django -Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言, ...
最新文章
- 监督分类空白处也被分类了_用于半监督短文本分类的异构图注意网络
- 95%粉丝失联,小编感觉像失恋?
- php实现的购物车类实例,PHP实现的购物车类实例_PHP
- 【Linux】一步一步学Linux——rmdir命令(22)
- 进程控制常用的一些操作
- 深度学习的实用层面 —— 1.7 理解Dropout
- 8-16 常见开发运维问题
- 毕业设计——第三章 开发方法及系统实现(6)(完结)
- java SE复习笔记54
- 什么是VMWare虚拟机
- 陈果“有空来坐坐...”
- 如何搭建和使用GNS3服务器
- 【AI视野·今日CV 计算机视觉论文速览 第174期】Tue, 7 Jan 2020
- idea使用lombok的时候无法找到log,编译时无法找到log
- 电脑重装Win10如何选择32位和64位的系统
- P1325 雷达安装
- 【金猿技术展】SSNG多源数据处理技术——运营商手机信令处理系统及平台
- subzm在c语言中的作用,数学和编程到底是什么关系?
- 双下方法(魔法方法)
- 快速排序算法具体步骤
热门文章
- 西南科技大学 SWUSTOJ #954
- mysql查询每次才返回1000_MySQL性能优化的最佳20+条经验
- 微信支付不同支付方式
- 机器学习中的数据是什么?
- 开发工程师的自我评价_配方工程师-简历范文,工作经历+项目经验+自我评价怎么写...
- Java-jdk8下载安装教程、Jmeter下载安装教程2021(环境变量配置)
- android10adb模式命令大全,史上最全ADB命令使用大全,一步教你成为玩机大神
- android voip通话音频数据流传输过程解析
- 搜书吧自动回复功能实现
- JS实现放大镜的效果 —— 仿京东详情页中的产品放大效果