Wenn Sie Informationen in einem Script mit bidirektionaler Sprache verwenden,
müssen Sie das Format der Daten unter Umständen umwandeln. Dieses Beispiel enthält eine schrittweise Anleitung zur Entwicklung von Code,
der Daten des Typs DataObject umwandelt.
Gründe und Szenarios für die Ausführung dieser Task
Für das Modul ist es
erforderlich, dass Informationen des Typs DataObject von einem bidirektionalen Format in
ein anderes umgewandelt werden.
Schritte für diese Task
- Schließen Sie alle bidirektionalen Klassen ein, die die Implementierung
der bidirektionalen Steuerkomponente enthalten.
import com.ibm.bidiTools.bdlayout.*;
- Schließen Sie alle Klassen ein, die zum Manipulieren des DataObject erforderlich sind.
import commonj.sdo.DataObject;
import commonj.sdo.Type;
import commonj.sdo.Property;
- Definieren Sie Zeichenfolgevariablen, die später die verschiedenen
Zeichenfolgentypen des DataObject-Objekts enthalten werden. Dieser Schritt ermöglicht eine Filterung der Attribute des Typs
String, während das DataObject rekursiv durchlaufen wird.
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";
- Definieren Sie eine Funktion, die prüft, ob ein Merkmal den
Typ "String" hat.
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;
}
- Definieren Sie eine rekursive Funktion, die die bidirektionale Transformation
auf das gesamte DataObject anwendet.
Anmerkung: Die Codierlogik beinhaltet die
im Folgenden beschriebenen grundsätzlichen Voraussetzungen.
- Die bidirektionale Transformation wird nur auf Merkmale des Typs String (Zeichenfolge) angewendet.
- Die Merkmale des Typs String im DataObject werden in einem einheitlichen bidirektionalen Format gespeichert.
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();
- Alle Merkmale, die keine Zeichenfolgen sind, werden übersprungen.
if (!isStringFamilyType(property))
continue;
if (property.isContainment()) {
if (property.isMany()) {
List childsList = boIn.getList(property);
- Rufen Sie die Transformation rekursiv für die untergeordneten Objekte auf.
for (int childNumber = 0; childNumber < childsList.size();
childNumber++){ BiDiDataObjTransformationBO(connectionContext,
((DataObject)childsList.get(childNumber)),formatIn, formatOut);
}
} else {
- Rufen Sie die Transformation rekursiv für die untergeordneten Objekte aller enthaltenen Business-Objekte
auf.
BiDiDataObjTransformationBO(connectionContext,
((DataObject)boIn.get(property)),formatIn, formatOut);
}
} else {
- Wandeln Sie die einfachen Zeichenfolgenattribute um.
String str = BiDiStringTransformation(
(boIn.getString(propertyName),formatIn, formatOut);
boIn.setString(propertyName, str);
}
}
return boIn;
}