예: DataObject 유형 데이터에서 양방향 변환 사용

양방향 언어 스크립트의 정보를 사용하는 경우, 데이터 형식을 변환할 필요가 있습니다. 다음은 DataObject 유형 데이터의 변환을 수행하는 단계적인 코드의 예입니다.

이 단계를 수행하는 이유 및 시점

모듈은 DataObject 유형 정보가 한 양방향 형식에서 다른 양방향 형식으로 변환될 것을 요구합니다.

주: 형식에 익숙하지 않다면 양방향 형식 문자열에 대한 값을 참조하십시오.

이 타스크에 대한 단계

  1. 양방향 엔진 구현을 포함하는 모든 양방향 클래스를 포함합니다.
    import com.ibm.bidiTools.bdlayout.*;
  2. DataObject 유형 오브젝트를 처리하는 데 필요한 모든 클래스를 포함합니다.
    import commonj.sdo.DataObject;
    import commonj.sdo.Type;
    import commonj.sdo.Property;
  3. DataObject 유형 오브젝트가 포함하는 여러 문자열 유형을 포함하는 문자열 변수를 정의합니다. 이 단계를 사용하면 DataObject를 반복적으로 사용하는 동안 type String 속성을 쉽게 필터링할 수 있습니다.
    String STRING_STR_TYPE = "String"; 
    String NORM_STRING_STR_TYPE = "normalizedString";
    String TOKEN_STR_TYPE = "token"; 
    String LANG_STR_TYPE = "language"; 
    String NAME_STR_TYPE = "Name"; 
    String NMTOKEN_STR_TYPE = "NMTOKEN"; 
    String NCNANE_STR_TYPE = "NCName"; 
    String ID_STR_TYPE = "ID"; 
    String IDREF_STR_TYPE = "IDREF"; 
    String IDREFS_STR_TYPE = "IDREFS"; 
    String ENTITY_STR_TYPE = "ENTITY"; 
    String ENTITIES_STR_TYPE = "ENTITIES";
  4. 특성 유형이 String인지 확인하는 함수를 정의합니다.
    private static boolean isStringFamilyType (Property property) { 
        boolean rc = false; 
        if ((property.getType().getName().equalsIgnoreCase(STRING_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(NORM_STRING_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(TOKEN_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(LANG_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(NAME_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(NMTOKEN_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(NCNANE_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(ID_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(IDREF_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(IDREFS_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(ENTITY_STR_TYPE)) ||
        (property.getType().getName().equalsIgnoreCase(ENTITIES_STR_TYPE))) 
           rc = true; 
         return rc; 
    }
  5. 전체 DataObject에 양방향 변환을 적용하는 반복 함수를 정의합니다.
    주: 다음은 코드 로직이 수행하는 기본 시도를 설명합니다.
    • 양방향 변환은 문자열 유형의 특성에만 적용됩니다.
    • DataObject에서 문자열 유형의 특성은 하나의 양방향 형식으로 저장됩니다.
    DataObject BiDiDataObjTransformationBO(DataObject boIn, String formatIn, String formatOut){ 
    
       Type type; 
       Property property; 
    
       if (boIn == null) return null; 
    
       type = boIn.getType(); 
       List propertyList = type.getProperties(); 
       for (int propertyNumber = 0; propertyNumber < propertyList.size(); propertyNumber++){ 
             property = (Property) propertyList.get(propertyNumber); 
             String propertyName = property.getName();
    1. 비문자열 특성은 모두 건너뜁니다.
             if (!isStringFamilyType(property)) 
                                           continue;
      
             if (property.isContainment()) { 
                  if (property.isMany()) { 
                        List childsList = boIn.getList(property); 
    2. 하위 오브젝트를 처리하는 변환을 반복적으로 호출합니다.
       
                        for (int childNumber = 0; childNumber < childsList.size(); 
      		   childNumber++){                   BiDiDataObjTransformationBO(connectionContext, 
      											 ((DataObject)childsList.get(childNumber)),formatIn, formatOut); 
                    } 
                        } else {
    3. 포함된 비즈니스 오브젝트의 하위 오브젝트를 처리하는 변환을 반복적으로 호출합니다.
                    BiDiDataObjTransformationBO(connectionContext, 
      			            ((DataObject)boIn.get(property)),formatIn, formatOut); 
               } 
                   } else {
    4. 단순한 문자열 속성을 변환합니다.
               String str = BiDiStringTransformation(
                   (boIn.getString(propertyName),formatIn, formatOut); 
               boIn.setString(propertyName, str); 
           } 
         } 
         return boIn; 
      }

ⓒ Copyright IBM Corporation 2005, 2006.
이 Information Center는 Eclipse 기술을 기반으로 합니다. (http://www.eclipse.org)