2017-10-10 7 views
0

J'ai deux tables de décision guidées dans un projet. Mon exigence est d'exécuter seulement les règles qui appartiennent à une table de décision à un moment donné. J'ai essayé d'utiliser RuleNameEndsWithAgendaFilter ("certains suffixes") avec la classe FireAllRulesCommand mais le serveur Kie ne filtre pas les règles basées sur le filtre AgendaFilter passé. Il court toutes les règles à chaque fois.Drools Kie Server ignorant AgendaFilter

Drools Workbench version 7.2.0.Final et Drools Kie Serveur version 7.2.0.Final.

Ci-dessous est l'extrait de code pour le même:

KieServicesConfiguration configuration = KieServicesFactory.newRestConfiguration(serverUrl, user, password); 
Set<Class<?>> allClasses = new HashSet<Class<?>>(); 
allClasses.add(OrderItem.class); 
configuration.addExtraClasses(allClasses); 
configuration.setMarshallingFormat(MarshallingFormat.JAXB); 

OrderItem oi = new OrderItem("Mobile", 7000.00, 0.00, ""); 

KieServicesClient client = KieServicesFactory.newKieServicesClient(configuration); 

// work with rules 
List<ExecutableCommand<?>> commands = new ArrayList<ExecutableCommand<?>>(); 
BatchExecutionCommandImpl executionCommand = new BatchExecutionCommandImpl(commands, "defaultKieSession"); 

InsertObjectCommand insertObjectCommand = new InsertObjectCommand(); 
insertObjectCommand.setOutIdentifier("orderItem"); 
insertObjectCommand.setObject(oi); 

FireAllRulesCommand fireAllRulesCommand = new FireAllRulesCommand(); 
fireAllRulesCommand.setAgendaFilter(new RuleNameEndsWithAgendaFilter("MyRuleSuffix", true)); 

commands.add(insertObjectCommand); 
commands.add(fireAllRulesCommand); 

RuleServicesClient ruleClient = client.getServicesClient(RuleServicesClient.class); 

ServiceResponse<String> response = ruleClient.executeCommands(containerId, executionCommand); 
System.out.println(response.getResult()); 
+0

Comment peut-on dire si c'est correct ou non, sauf si vous fournissez le code du filtre d'agenda? En outre, les lignes supérieures de votre table de règles, peut-être en tant que texte CSV. – laune

+0

Il s'agit de l'implémentation par défaut fournie avec le binaire drools-core (version: 7.2.0.Final) –

Répondre

0

Vous ne pouvez pas utiliser la classe standard RuleNameEndsWithAgendaFilter pour filtrer les règles d'une table de décision parce que les règles d'une table ne sont pas fins égales. Essayez RuleNameStartsWithAgendaFilter, éventuellement après avoir renommé vos tables.

+0

Dans mon cas, RuleNameEndsWithAgendaFilter devrait fonctionner comme mes noms de règles sont, "Row 1 MyProject", "Row 2 MyProject", "Row 3 MyProject ".." Ligne n MyProject ". Donc, RuleNameEndsWithAgendaFilter ("MyProject") devrait fonctionner. –

+0

Eh bien, si vous savez tout mieux, pourquoi posez-vous des questions? - Avez-vous essayé d'imprimer les noms des règles dans une version modifiée de 'RuleNameEndsWithAgendaFilter'? - On ne sait pas à quoi ressemble le texte de cette table de règles et comment les noms de règles sont produits. – laune