SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming
SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming
JCo3.0调用SAP函数的过程
大致可以总结为以下步骤:
- 连接至SAP系统
- 创建JcoFunction接口的实例(这个实例代表SAP系统中相关函数)
- 设置importing参数
- 调用函数
- 从exporting参数或者table参数获取数据
代码:
package jco3.demo4;
import org.junit.Test;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.JCoField;
import com.sap.conn.jco.JCoFunction;
import com.sap.conn.jco.JCoRepository;
import com.sap.conn.jco.JCoStructure;
public class RFC
{
public void getCompanyCodeDetail(String cocd) throws JCoException
{
// JCoDestination instance represents the backend SAP system
JCoDestination dest = JCoDestinationManager.getDestination("ECC");
// JCoFunction instance is the FM in SAP we will use
JCoRepository repository = dest.getRepository();
JCoFunction fm = repository.getFunction("BAPI_COMPANYCODE_GETDETAIL");
if (fm == null){
throw new RuntimeException("Function does not exists in SAP system.");
}
// set import parameter(s)
fm.getImportParameterList().setValue("COMPANYCODEID", cocd);
// call function
fm.execute(dest);
// get company code detail from exporting parameter 'COMPANYCODE_DETAIL'
JCoStructure cocdDetail = fm.getExportParameterList()
.getStructure("COMPANYCODE_DETAIL");
this.printStructure(cocdDetail);
}
private void printStructure(JCoStructure jcoStru)
{
for(JCoField field : jcoStru){
System.out.println(String.format("%s\\t%s",
field.getName(),
field.getString()));
}
}
@Test
public void test() throws JCoException
{
this.getCompanyCodeDetail("Z900");
}
}
JCoFunction接口说明
JCoFunction是一个接口,代表SAP系统的函数
JCoFunction包含importing参数,exporting参数,changing参数,table参数。分别使用getImportParameterList方法,getExportParameterList方法,getChangingParameterList方法和getTableParameterList获得。这些方法的返回值都是JCoParameter类型
JCoFunction.execute方法实际执行函数
如何创建JCoFunction对象
上面的代码是第一种创建JCoFunction实例的方法:
JCoRepository repository = dest.getRepository();
JCoFunction fm = dest.getRepository().getFunction("BAPI_COMPANYCODE_GETDETAIL");
如果我们不关心JCoRepository,也可以这样写:
JCoFunction fm = dest.getRepository().getFunction("BAPI_COMPANYCODE_GETDETAIL");
第三种方法是使用JCoFunctionTemplate.getFunction方法,JCoFunctionTemplate也是一个接口,代表SAP函数的meta-data。
JCoFunctionTemplate fmTemplate
= dest.getRepository().getFunctionTemplate("BAPI_COMPANYCODE_GETDETAIL");
JCoFunction fm = fmTemplate.getFunction();
JCoStructure接口
BAPI_COMPANY_CODE_GETDETAIL函数的COMPANYCODE_DETAIL参数是一个结构,刚才我们看到遍历结构所有字段的方式:
private void printStructure(JCoStructure jcoStru)
{
for(JCoField field : jcoStru){
System.out.println(String.format("%s\\t%s",
field.getName(),
field.getString()));
}
}
因为JCoStructure实现了Iterable接口,所以可以采取上面的办法进行迭代。另外一种方法进行遍历:
private void printStructure2(JCoStructure jcoStructure)
{
for (int i = 0; i < jcoStructure.getMetaData().getFieldCount(); i++){
System.out.println(String.format("%s\\t%s",
jcoStructure.getMetaData().getName(i),
jcoStructure.getString(i)));
}
}
SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming的更多相关文章
- 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系列(04) : 会话管理
在SAP接口编程之 NCo3.0系列(06) : 会话管理 这篇文章中,对会话管理的相关知识点已经说得很详细了,请参考.现在用JCo3.0来实现. 1. JCoContext 如果SAP中多个函数需要 ...
- SAP接口编程 之 JCo3.0系列(05) : Exception Handling
JCO3.0的Exception,常用的Exception如下: JCoException 继承自java.lang.Exception,是JCo3中Exception的基类. JCoRuntimeE ...
- SAP接口编程 之 JCo3.0系列(03) : Table参数
Table参数作为export parameter BAPI_COMPANYCODE_GETDETAIL是一个适合演示的函数,没有import paramter参数,调用后COMPANYCODE_GE ...
- Python--网络编程学习笔记系列02 附:tcp服务端,tcp客户端
Python--网络编程学习笔记系列02 TCP和UDP的概述: udp通信模型类似于写信,不需要建立相关链接,只需要发送数据即可(现在几乎不用:不稳定,不安全) tcp通信模型类似于打电话,一定要建 ...
- Aoite 系列(02) - 超动感的 Ioc 容器
Aoite 系列(02) - 超动感的 Ioc 容器 Aoite 是一个适于任何 .Net Framework 4.0+ 项目的快速开发整体解决方案.Aoite.Ioc 是一套解决依赖的最佳实践. 说 ...
- Linux NIO 系列(02) 阻塞式 IO
目录 一.环境准备 1.1 代码演示 二.Socket 是什么 2.1 socket 套接字 2.2 套接字描述符 2.3 文件描述符和文件指针的区别 三.基本的 SOCKET 接口函数 3.1 so ...
- LXD 2.0 系列(四):资源控制
LXD 提供了各种资源限制.其中一些与容器本身相关,如内存配额.CPU 限制和 I/O 优先级.而另外一些则与特定设备相关,如 I/O 带宽或磁盘用量限制.-- Stéphane Graber 本文导 ...
- Java 集合系列 02 Collection架构
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
随机推荐
- tr DEMO
测试数据: [weblogic@etp-mall-dev7][/tmp]$ cat msn.txt aaa bbb bbb ccc ccc ddd bbb eee aaa ccc bbb sss 转换 ...
- iOS 开发 证书总结 开发证书和生产证书的区别
IOS开发 证书总结 开发者证书 ------>> 开发证书是你在真机推送时 用得, 生产证书是app 上架之后 推送给用户用的 首先你必须获得apple开发者证书,上图这个文件就是 ...
- C#:绘制Winform窗体
Winform窗体缺少左上角效果: public void SetWindowRegion() { System.Drawing.Drawing2D.GraphicsPath FormPath; Fo ...
- python两个dataframe的合并
见http://pandas.pydata.org/pandas-docs/stable/merging.html
- PHP去除连续空格
<?php $note = strip_tags($value['Content']); $note = trim($note); $note = str_replace(" &quo ...
- DataSet 关系
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 在C#中怎么调用带参数的存储过程啊??
1)执行一个没有参数的存储过程的代码如下:SqlConnection conn=new SqlConnection(“connectionString”);SqlDataAdapter da = ne ...
- 使用js实现移动设备访问跳转到指定目录
最近最项目的时候总会同时做pc站点跟手机站点,当手机访问的时候默认是看到pc站点的,需要在url上加上/mobile才能正常访问,这段代码是我同事分享给我的,还是蛮实用的. CODE function ...
- mysql DATE_ADD DATE_SUB
一.DATE_ADD() 函数向日期添加指定的时间间隔. DATE_ADD(date,INTERVAL expr type)date 参数是合法的日期表达式.expr 参数是您希望添加的时间间隔. t ...
- HTML基础 整理
HTML:超文本传输协议 (Hyper Markup Language) CSS:网页美化 (Cascading Style Sheets) JS:java-scipt 脚本语言 Dreamweave ...