Table参数作为export parameter

BAPI_COMPANYCODE_GETDETAIL是一个适合演示的函数,没有import paramter参数,调用后COMPANYCODE_GETDETAIL 表参数返回SAP系统中所有公司代码的清单。只包括公司代码ID和公司代码名称两个字段。

JCo中,与表参数相关的两个接口是JCoTableJCoRecordMetaDtaJCoTable就是RFM中tabl参数,而JCoRecordMetaDtaJCoTableJCoStructure的元数据。

在.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参数相关推荐

  1. 农行支付php,农行网上支付平-B2C接口编程指南-PHP_Edition-V1.0.doc

    农行网上支付平-B2C接口编程指南-PHP_Edition-V1.0 中国农业银行网上支付平台 B2C PHP商户接口编程指南 Java Edition V1.0 修订历史纪录 日期版本说明作者200 ...

  2. java 网银支付收款接口_农行网上支付平台-商户接口编程指南-Java_Edition-V3.0.2.pdf...

    农行网上支付平台-商户接口编程指南-Java_Edition-V3.0.2 中国农业银行网上支付平台 商户接口编程指南 Java Edition V3.0.2 农行网上支付平台 商户接口编程指南 –J ...

  3. UG数控编程:UG10.0移除参数的使用方法

    UG数控编程:UG10.0移除参数的使用方法 今天和大家一起分享UG10.0去移除参数的使用技巧! 1.移除参数指令在菜单-编辑-特征下 2.打开移除参数命令后,其菜单如下显示 3.选中图形,然后点移 ...

  4. SAP接口编程案例 - VBA批量更新销售订单定价类型

    碰到一个需求,需要对销售订单的定价类型进行批量更新,对这种临时批量处理,考虑到数据源一般放在 Excel 中,使用 VBA 来调用 BAPI 实现不失为一种快捷的方式. 了解 BAPI 如何使用 更改 ...

  5. 如何使用JCO3.0同时访问多个SAP系统

    代码实现如下,从上到下依次调用,直到被获取连接为止. JCOProvider类似注册中心,注册连接信息. 如有问题请参考: 如何使用JCO3.0同时访问多个SAP系统 SAP接口编程 之 JCo3.0 ...

  6. arduino nano 蓝牙_掌控板IO接口编程入门 | 用Arduino玩转掌控板(ESP32)系列

    众所周知,掌控板在创客教育中用的非常广泛,它是一块基于 ESP32 的学习开发板.大家对掌控板编程,用的比较多的都是图形化编程的方式,比如 mPython.Mind+ 等.但是,既然掌控板是基于 ES ...

  7. php调用sap端rfc接口,SAP 接口编程之 RFC 系列(15) : 调用自定义函数

    从外部环境调用自定义函数 (FM, Function Module)与调用 SAP 内置的函数并没有不同,需要注意的是在 SAP 系统自定义 FM 的要点: 1)FM 必须是 Remote-enabl ...

  8. 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引

    [源码下载] 积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引 作者:webabcd Flash 之 ActionScript 3.0  1.积少成 ...

  9. 初识Django —Python API接口编程入门

    初识Django -Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言, ...

最新文章

  1. 监督分类空白处也被分类了_用于半监督短文本分类的异构图注意网络
  2. 95%粉丝失联,小编感觉像失恋?
  3. php实现的购物车类实例,PHP实现的购物车类实例_PHP
  4. 【Linux】一步一步学Linux——rmdir命令(22)
  5. 进程控制常用的一些操作
  6. 深度学习的实用层面 —— 1.7 理解Dropout
  7. 8-16 常见开发运维问题
  8. 毕业设计——第三章 开发方法及系统实现(6)(完结)
  9. java SE复习笔记54
  10. 什么是VMWare虚拟机
  11. 陈果“有空来坐坐...”
  12. 如何搭建和使用GNS3服务器
  13. 【AI视野·今日CV 计算机视觉论文速览 第174期】Tue, 7 Jan 2020
  14. idea使用lombok的时候无法找到log,编译时无法找到log
  15. 电脑重装Win10如何选择32位和64位的系统
  16. P1325 雷达安装
  17. 【金猿技术展】SSNG多源数据处理技术——运营商手机信令处理系统及平台
  18. subzm在c语言中的作用,数学和编程到底是什么关系?
  19. 双下方法(魔法方法)
  20. 快速排序算法具体步骤

热门文章

  1. 西南科技大学 SWUSTOJ #954
  2. mysql查询每次才返回1000_MySQL性能优化的最佳20+条经验
  3. 微信支付不同支付方式
  4. 机器学习中的数据是什么?
  5. 开发工程师的自我评价_配方工程师-简历范文,工作经历+项目经验+自我评价怎么写...
  6. Java-jdk8下载安装教程、Jmeter下载安装教程2021(环境变量配置)
  7. android10adb模式命令大全,史上最全ADB命令使用大全,一步教你成为玩机大神
  8. android voip通话音频数据流传输过程解析
  9. 搜书吧自动回复功能实现
  10. JS实现放大镜的效果 —— 仿京东详情页中的产品放大效果