Hola,
muchos partners me han preguntando cómo desde una aplicación cliente se puede tener acceso al valor de una variable de un proceso en específico. Sea que el proceso ya haya terminado o esté en ejecución.
¿Esto para qué? Bien pues pudiera servir para monitorear algo que está sucediendo en el proceso, para tomar una decisión desde una aplicación cliente: JSP, Swing, etc.
Aquí el código necesario para realizar dicha tarea:
WhereCondition where = WhereConditionHelper.whereInstancesOpen();
WhereCondition whereProcessId = new WhereCondition( "process_id = 'SeguimientoDeProcesos'");
WhereCondition whereInstanceId = new WhereCondition("CIKEY = " + id );
where.append("AND").append(whereProcessId);
where.append("AND").append(whereInstanceId);
// Busca las intancias
IInstanceHandle[] instanceHandles = locator.listInstances( where );
//System.out.println(instanceHandles.length + "
");
String procesos[] = new String[instanceHandles.length];
for (int i = 0; i < instanceHandles.length; i++ ){
IInstanceHandle instanceHandle = instanceHandles[i];
HashMap poe = (HashMap) instanceHandle.getField("inputVariable");
Object obj = poe.get("payload");
//System.out.println(obj.getClass().toString());
XMLElement test = (XMLElement) obj;
Pozo po = new PozoImpl(test);
status = po.getIdEtapa();
}
A considerar es la siguiente línea:
WhereCondition whereInstanceId = new WhereCondition("CIKEY = " + id );
Este id es el ProcessID de tu proceso, siendo así, pudieras buscar directamente en esta instancia.
Si no lo tienes, entonces el FOR que pongo te servirá, pues buscarás en todas las instancias, sólo comenta la línea del WhereCondition.
Después en la línea:
HashMap poe = (HashMap) instanceHandle.getField("inputVariable");
Lo que hace es obtener el valor de la variable "inputVariable" de dicha instancia.
Espero les sea de utilidad.