SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming

字数545 阅读52 评论0 喜欢1

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的更多相关文章

  1. SAP接口编程 之 JCo3.0系列(01):JCoDestination

    SAP接口编程 之 JCo3.0系列(01):JCoDestination 字数2101 阅读103 评论0 喜欢0 JCo3.0是Java语言与ABAP语言双向通讯的中间件.与之前1.0/2.0相比 ...

  2. SAP接口编程 之 JCo3.0系列(04) : 会话管理

    在SAP接口编程之 NCo3.0系列(06) : 会话管理 这篇文章中,对会话管理的相关知识点已经说得很详细了,请参考.现在用JCo3.0来实现. 1. JCoContext 如果SAP中多个函数需要 ...

  3. SAP接口编程 之 JCo3.0系列(05) : Exception Handling

    JCO3.0的Exception,常用的Exception如下: JCoException 继承自java.lang.Exception,是JCo3中Exception的基类. JCoRuntimeE ...

  4. SAP接口编程 之 JCo3.0系列(03) : Table参数

    Table参数作为export parameter BAPI_COMPANYCODE_GETDETAIL是一个适合演示的函数,没有import paramter参数,调用后COMPANYCODE_GE ...

  5. Python--网络编程学习笔记系列02 附:tcp服务端,tcp客户端

    Python--网络编程学习笔记系列02 TCP和UDP的概述: udp通信模型类似于写信,不需要建立相关链接,只需要发送数据即可(现在几乎不用:不稳定,不安全) tcp通信模型类似于打电话,一定要建 ...

  6. Aoite 系列(02) - 超动感的 Ioc 容器

    Aoite 系列(02) - 超动感的 Ioc 容器 Aoite 是一个适于任何 .Net Framework 4.0+ 项目的快速开发整体解决方案.Aoite.Ioc 是一套解决依赖的最佳实践. 说 ...

  7. Linux NIO 系列(02) 阻塞式 IO

    目录 一.环境准备 1.1 代码演示 二.Socket 是什么 2.1 socket 套接字 2.2 套接字描述符 2.3 文件描述符和文件指针的区别 三.基本的 SOCKET 接口函数 3.1 so ...

  8. LXD 2.0 系列(四):资源控制

    LXD 提供了各种资源限制.其中一些与容器本身相关,如内存配额.CPU 限制和 I/O 优先级.而另外一些则与特定设备相关,如 I/O 带宽或磁盘用量限制.-- Stéphane Graber 本文导 ...

  9. Java 集合系列 02 Collection架构

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

随机推荐

  1. DE1-SOC开发板上搭建NIOS II处理器运行UCOS II

    DE1-SOC开发板上搭建NIOS II处理器运行UCOS II   今天在DE1-SOC的开发板上搭建NIOS II软核运行了UCOS II,整个开发过程比较繁琐,稍微有一步做的不对,就会导致整个过 ...

  2. JavaEE基础(五)

    1.Java语言基础(数组概述和定义格式说明) A:为什么要有数组(容器) 为了存储同种数据类型的多个值 B:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基 ...

  3. CalParcess.php.

    <?php require_once "OperSerVice.class.php"; //接受三个数 //isset if(!isset($_REQUEST['NUM1'] ...

  4. 6.shap以及selector的使用

    功能:相当于自定义一个模板 首先,要新建一个drawble文件夹 然后,再新建一个XML文件 在<shap></shap>中写内容 <corners/>圆角 < ...

  5. 【转】java编译错误 程序包javax.servlet不存在javax.servlet.*

    转载地址:http://blog.163.com/gis_warrior/blog/static/1936171732012811071642/ 编译:javac Servlet.java 出现 软件 ...

  6. js中的各种获取日期

    JS中获取当前时间点前一天时间 var date=new Date(); var dat_year=date.getYear(); var dat_month=date.getMonth(); var ...

  7. Communication System(dp)

    Communication System Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25006 Accepted: 8925 ...

  8. JAVA基础知识之IO——IO流(Stream)的概念

    Java IO 流 Java将不同的设备或载体(键盘.文件.网络.管道等)的输入输出数据统称为"流"(Stream),即JAVA的IO都是基于流的. JAVA传统的所有流类型类都包 ...

  9. 2016年省赛G题, Parenthesis

    Problem G: Parenthesis Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 398  Solved: 75[Submit][Status ...

  10. 移动平台前端开发之WebApp代码技巧

    1.首先我们来看看webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用 <meta content="width=device-width ...