Este tema sólo se aplica a la configuración de IBM Business Process Manager Advanced.

Correlación con comodines XSD

Puede utilizar el editor de correlaciones de objetos de negocio para correlacionar comodines XSD (xsd:any, xsd:anyType, xsd:anyAttribute y xsd:anySimpleType).

Acerca de esta tarea

Para crear una correlación de objetos de negocio utilizando comodines XSD, siga estos pasos:

Procedimiento

  1. Seleccione el campo comodín en el origen.
  2. Establezca una conexión con el destino.

Resultados

En la tabla siguiente se describe qué tipos de elementos se pueden correlacionar utilizando las transformaciones Mover o personalizada:
Tabla 1. Soporte para las transformaciones Mover o personalizada
Source El destino es xsd:any El destino es xsd:anyType El destino es xsd:anySimpleType El destino es un tipo complejo regular El destino es un tipo simple regular
xsd:any (tipo complejo en la instancia de tiempo de ejecución) Soportado Soportado   Soportado  
xsd:any (tipo simple en la instancia de tiempo de ejecución) Soportado Soportado Soportado   Soportado
xsd:anyType (tipo complejo en la instancia de tiempo de ejecución) Soportado Soportado   Soportado  
xsd:anyType (tipo simple en la instancia de tiempo de ejecución) Soportado Soportado Soportado   Soportado
xsd:anySimpleType Soportado Soportado Soportado   Soportado
Tipo complejo regular Soportado Soportado   Soportado  
Tipo simple regular Soportado Soportado Soportado   Soportado
Nota: Sólo las transformaciones personalizadas reciben soporte para los atributos de tipo xsd:anyAttribute. El editor de correlaciones de objetos de negocio permite las conexiones directas de las transformaciones Mover que implican comodines XSD; sin embargo, debe evitar que los datos se correlacionen con comodines XSD. Se producirán excepciones de tiempo de ejecución de servidor si los datos de origen son incompatibles con los datos de destino.
A continuación se adjuntan ejemplos de código Java™ que se utiliza al escribir transformaciones personalizadas utilizando el editor Java:
Ejemplo de código para la transformación personalizada entre el parámetro de entrada xsd:any y un parámetro de salida de tipo simple regular
Después de crear una transformación personalizada entre el parámetro de entrada xsd:any input y un parámetro de salida de tipo simple regular, abra las Propiedades y pulse la pestaña Detalles. Cambie al editor Java y escriba el código Java (a continuación se adjunta un ejemplo del código):
if (<<variable del parámetro de entrada>> instanceof Integer)
{
	Integer intObject = (Integer)<<variable del parámetro de entrada>>;
	int intValue = intObject.intValue();
	
	int newValue = intValue + 100;
	
	<<variable del parámetro de salida>> = newValue;
}
Ejemplo de código para la transformación personalizada entre el parámetro de entrada xsd:any y un parámetro de salida de tipo complejo regular
if (<<variable del parámetro de entrada>> instanceof DataObject)
{
	DataObject dObject = (DataObject) <<variable del parámetro de entrada>>;
	String value = (String)dObject.get("field");
	
	ServiceManager serviceManager = new ServiceManager();
	BOFactory bofactory = (BOFactory)serviceManager.locateService("com/ibm/websphere/bo/BOFactory");
	DataObject outObject = (DataObject)bofactory.create("http://anytest", "ComplexAny");
	outObject.set("field", value.substring(0, 2));
	
	
	<<variable del parámetro de salida>> = outObject;
}
Ejemplo de código sobre cómo recuperar el valor del elemento xsd:any desde el objeto de negocio de nivel superior de entrada
commonj.sdo.Sequence seq = <<variable BO de entrada>>.getSequence();
for (int i=0; i < seq.size(); i++)
{
	commonj.sdo.Property prop = seq.getProperty(i);
	if (prop.isOpenContent())
	{
		Object xsdAnyValue = seq.getValue(i);
}
}
Ejemplo de código sobre cómo establecer el elemento xsd:any en el objeto de negocio de nivel superior de salida
commonj.sdo.Sequence seq = <<variable de BO de salida>>.getSequence();
com.ibm.websphere.bo.BOXSDHelper boXSDHelper = (BOXSDHelper) ServiceManager.INSTANCE.locateService("com/ibm/websphere/bo/BOXSDHelper");
commonj.sdo.Property property = boXSDHelper.getGlobalProperty("http://anytest", "IntegerAny", true);
seq.add(property, new Integer(123));
Ejemplo de código para la transformación personalizada entre un parámetro de entrada de tipo simple regular y un parámetro de salida xsd:any
String newString = ((String)<<variable del parámetro de entrada>> ).substring(0,2);
<<variable del parámetro de salida>> = newString;
Ejemplo de código para la transformación personalizada entre un parámetro de entrada de tipo simple regular y un parámetro de salida xsd:anyType
String newString = ((String)<<variable del parámetro de entrada>> ).substring(0,2);

com.ibm.websphere.bo.BOType boType = (com.ibm.websphere.bo.BOType)serviceManager.locateService("com/ibm/websphere/bo/BOType");

Type stringType = boType.getType("http://www.w3.org/2001/XMLSchema", "string");
DataObject stringWrapper = bofactory.createDataTypeWrapper(stringType,newString);
<<variable del parámetro de salida>> = stringWrapper;
Ejemplo de código para la transformación personalizada entre un parámetro de entrada de tipo complejo regular y un parámetro de salida xsd:anyType
<<variable del parámetro de salida>> = (commonj.sdo.DataObject)<<variable del parámetro de entrada>>;
Ejemplo de código sobre cómo recuperar el valor del elemento xsd:anyType desde la variable del parámetro de entrada
ServiceManager serviceManager = new ServiceManager();

DataObject anyTypeValue = (DataObject)<<variable del parámetro de entrada>>;
Object simpleValue = null;
Object complexValue = null;
com.ibm.websphere.bo.BOType boType = (com.ibm.websphere.bo.BOType)serviceManager.locateService("com/ibm/websphere/bo/BOType");
if (boType.isDataTypeWrapper(anyTypeValue))
	simpleValue = anyTypeValue.get("value");
else
	complexValue = anyTypeValue;
Ejemplo de código sobre cómo establecer el elemento xsd:anyType en el objeto de negocio de nivel superior de salida
ServiceManager sm = ServiceManager.INSTANCE;
BOFactory bf = (BOFactory) sm.locateService("com/ibm/websphere/bo/BOFactory"); 				
com.ibm.websphere.bo.BOType boType = (com.ibm.websphere.bo.BOType)sm.locateService("com/ibm/websphere/bo/BOType");

Type objectType = boType.getType("http://www.w3.org/2001/XMLSchema", "string");
DataObject wrapper = bf.createDataTypeWrapper(objectType, new String("abc"));
<<variable de BO de salida>>.set("anyTypeElement", wrapper);
Ejemplo de código para la transformación personalizada entre el objeto xsd:anyAttribute de entrada y el objeto xsd:anyAttribute de salida
List inputAnyAttributes = (List)<<variable del parámetro de entrada>>;
// iterar a través de la lista o elegir la que desee
Property myProp = (Property)inputAnyAttributes.get(0);
			
Sequence seq = <<variable de BO de salida>>.getSequence();
seq.add(myProp, "abc");
Ejemplo de código sobre cómo establecer el elemento xsd:anyAttribute en el objeto de negocio de nivel superior de salida
ServiceManager sm = ServiceManager.INSTANCE;
BOFactory bf = (BOFactory) sm.locateService("com/ibm/websphere/bo/BOFactory"); 
		
BOXSDHelper boXSDHelper = (BOXSDHelper) ServiceManager.INSTANCE.locateService("com/ibm/websphere/bo/BOXSDHelper");
		
Property property = boXSDHelper.getGlobalProperty("http://anytest", "StringAnyAttr", false); // falso indica que es un atributo global
<<variable de BO de salida>>.setString(property, "abc");
Nota: xsd:any[] se puede llenar con una lista de tipos complejos que pertenecen a la misma propiedad global. Para añadir varios elementos a la propiedad, recupere la secuencia del objeto de negocio en la que esté definida la propiedad global y añada cada elemento a la propiedad global. Para recuperar todos los elementos establecidos en el elemento xsd:any[], el método 'get' en el objeto de negocio con el nombre de propiedad devolverá una lista que incluya todos los elementos definidos.
Ejemplo de código para establecer varios elementos xsd:any[] en un objeto de negocio de entrada
commonj.sdo.Sequence seq = <<variable BO de entrada>>.getSequence();
com.ibm.websphere.bo.BOXSDHelper boXSDHelper = (BOXSDHelper) ServiceManager.INSTANCE.locateService("com/ibm/websphere/bo/BOXSDHelper");

Property prop = helper.getGlobalProperty("http://www.ibm.com/bo/SubMapAnyAnyType","myany",true);

// Añadir dos tipos complejos a la lista any en la propiedad global
DataObject Branch1 = boFactory.create(boTNS, "Branch");
Branch1.set("fName","wilshire");
seq.add(prop, Branch1);
DataObject Branch2 = boFactory.create(boTNS, "Branch");
Branch2.set("fName","poplar");
seq.add(prop, Branch2);
Ejemplo de código para establecer los objetos de negocio de salida en uno de los elementos de entrada xsd:any[]
<<variable del parámetro de salida>> = (List)<<variable del parámetro de entrada>>.getList.(0);
Ejemplo de código para recuperar la lista de todos los elementos xsd:any[]
commonj.sdo.Sequence seq = <<variable BO de entrada>>.getSequence();
com.ibm.websphere.bo.BOXSDHelper boXSDHelper = (BOXSDHelper) ServiceManager.INSTANCE.locateService("com/ibm/websphere/bo/BOXSDHelper");

Property prop = helper.getGlobalProperty("http://www.ibm.com/bo/SubMapAnyAnyType","myany",true);

// Añadir dos tipos complejos a la lista any en la propiedad global
DataObject Branch1 = boFactory.create(boTNS, "Branch");
Branch1.set("fName","wilshire");
seq.add(prop, Branch1);
DataObject Branch2 = boFactory.create(boTNS, "Branch");
Branch2.set("fName","poplar");
seq.add(prop, Branch2);

List properties = <<variable de BO de entrada>>.getProperty(prop);


// utilizar esta lista de propiedades si es necesario. 
Ejemplo de código para establecer un elemento en un elemento AnyType[] del objeto de negocio de origen
<<variable de BO de entrada>>;

List anyTypeList = <<variable de BO de entrada>>.getList("anAnyType");
        
DataObject Address1 = boFactory.create(boTNS, "Address");
Address1.set("address1", "hillsboro");
anyTypeList.add(Address1);

DataObject Address2 = boFactory.create(boTNS, "Address");
Address2.set("address1", "sandiego");
anyTypeList.add(Address2);
Ejemplo de código para establecer un elemento AnyType[] en la salida
<<variable de parámetro de salida>> = (List)<<variable de parámetro de salida>>.getList.("anAnyType").get(0);