2010-11-15 4 views
5

J'ai la règle Drools suivante à laquelle j'envoie une carte remplie d'élément, mais quand elle est exécutée j'ai un élément. Pourquoi est-ce que je reçois null quand il devrait être "Y" pour la valeur? Quand je mets le point d'arrêt dans la méthode ACDebug.debug() et inspecte la carte après $ map.put() a été exécuté, ça a l'air bon, il a "Y" pour la valeur, mais après que mes règles soient exécutées j'ai null? Quelqu'un at-il un problème similaire?Cartes et chaînes dans les règles 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 

Répondre

7

Après avoir apporté les modifications à la carte, vous devez effectuer une mise à jour. Cela permet à la mémoire de travail de savoir que vous avez modifié la carte.

Ajoutez la ligne suivante:

update($map); 
+0

Merci, cela a vraiment aidé. J'ai vu des exemples sans appel de mise à jour() et j'ai pensé que ça marchera toujours. – Zec

Questions connexes