SAP 인터페이스 프로그래밍의 JCo3.0 시리즈(02): JCo Client Programming

4066 단어

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 함수의 COMPANYCODEDETAIL 매개 변수는 구조의 모든 필드를 누비는 방법을 방금 보았습니다.
    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)));
        }
    }
    

    좋은 웹페이지 즐겨찾기