zoukankan      html  css  js  c++  java
  • SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming

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

    字数545 阅读52 评论0 

    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)));
        }
    }
  • 相关阅读:
    shuffle过程分析
    自定义分组
    自定义排序及Hadoop序列化
    MapReduce常见算法
    Partitioner
    Combiner
    自定义Counter使用
    WordCount_命令行运行时指定参数
    老的API实现WordCount
    Hadoop自定义类型处理手机上网日志
  • 原文地址:https://www.cnblogs.com/zfswff/p/5670217.html
Copyright © 2011-2022 走看看