• 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)));
        }
    }
  • 相关阅读:
    基于Metaweblog API 接口一键发布到国内外主流博客平台
    uva144 Student Grants
    Uva 10452
    Uva 439 Knight Moves
    Uva 352 The Seasonal War
    switch语句
    java——基础知识
    我的lua学习2
    codeforces 431 D. Random Task 组合数学
    codeforces 285 D. Permutation Sum 状压 dfs打表
  • 原文地址:https://www.cnblogs.com/zfswff/p/5670217.html
Copyright © 2020-2023  润新知