2010-11-15 11 views
5

Tengo la siguiente regla de Drools a la que envío un mapa lleno de elementos, pero cuando se ejecuta tengo un elemento. ¿Por qué obtengo nulo cuando debería ser "Y" para el valor? Cuando puse breakpoint en el método ACDebug.debug() e inspeccioné el mapa después de ejecutar $ map.put(), se ve bien, tiene "Y" para el valor, pero después de que se ejecutan mis reglas, ¿tengo nulo? ¿Alguien tiene un problema similar?Mapas y cadenas en las reglas de Drools

import java.util.Map; 
import java.util.HashMap; 
import edu.abc.ACDebug; 

rule "POSTPROCESSOR 8" 
    ruleflow-group "supress-processor" 
    when 
     $map:Map(keySet contains "STANDARD_ADDRESS:STREET_NAME") 
    then 
     ACDebug.debug($map, "Map before PUT: "); 
     $map.put("/locationList/sourceAddress/fullStreet",new String("Y")); 
     ACDebug.debug($map, "Map after PUT: "); 
     $map.remove("STANDARD_ADDRESS:STREET_NAME"); 
end 

Respuesta

7

Después de realizar los cambios en el mapa, debe hacer una actualización. Esto le permite a la memoria de trabajo saber que ha modificado el mapa.

Añadir la siguiente línea:

update($map); 
+0

Gracias, esto realmente ayudó. Vi ejemplos sin llamada de actualización() y pensé que siempre funcionaría. – Zec

Cuestiones relacionadas