thank you for your answer.I look at the source code of Drools ,if want the
"assignment rule" to take effect, must add the following code in drools
configuration file :
*drools.advancedProcessRuleIntegration = true*
2010/5/21 Esteban Aliverti <esteban.aliverti(a)gmail.com>
I don't really know whether your rule will be activated or not,
but you are
missing the ksession.fireAllRules() call. Try to add a Logger to your
session to see if the rule gets activated or not.
Best,
2010/5/19 HONG DENG <denghongster(a)gmail.com>
*I paste all information here :
>
> HelloWorldSample.rf * :
>
> <?xml version="1.0" encoding="UTF-8"?>
> <process
xmlns="http://drools.org/drools-5.0/process"
>
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
>
xs:schemaLocation="http://drools.org/drools-5.0/processdrools-proces...
> type="RuleFlow" name="flow"
id="com.sample.evaluation"
> package-name="org.drools.bpmn2" >
>
> <header>
> </header>
>
> <nodes>
> <start id="1" name="Start" x="44"
y="139" width="48" height="48" />
> <humanTask id="2" name="thefirstone" x="156"
y="140" width="80"
> height="40" >
> <work name="Human Task" >
> <parameter name="ActorId" >
> <type
> name="org.drools.process.core.datatype.impl.type.StringDataType" />
> <value></value>
> </parameter>
> <parameter name="Comment" >
> <type
> name="org.drools.process.core.datatype.impl.type.StringDataType" />
> <value>You need to perform a self-evaluation</value>
> </parameter>
> <parameter name="Content" >
> <type
> name="org.drools.process.core.datatype.impl.type.StringDataType" />
> </parameter>
> <parameter name="Priority" >
> <type
> name="org.drools.process.core.datatype.impl.type.StringDataType" />
> </parameter>
> <parameter name="Skippable" >
> <type
> name="org.drools.process.core.datatype.impl.type.StringDataType" />
> <value>false</value>
> </parameter>
> <parameter name="TaskName" >
> <type
> name="org.drools.process.core.datatype.impl.type.StringDataType" />
> <value>firstHumanTask</value>
> </parameter>
> </work>
> </humanTask>
> <end id="3" name="End" x="290" y="140"
width="80" height="40" />
> </nodes>
>
> <connections>
> <connection from="1" to="2" />
> <connection from="2" to="3" />
> </connections>
>
> </process>
>
> *assignment.dslr:*
> package org.drools.examples.process.order
>
> import org.drools.process.instance.impl.WorkItemImpl
> import org.drools.workflow.instance.node.WorkItemNodeInstance
>
> expander assignment.dsl
>
> /********** Generic assignment rules **********/
>
> rule "Assign actor" salience 30
> when
> There is a human task
> then
> Set actor id "mary"
> end
>
>
> *assignment.dsl:*
> ***
> [condition][HumanTaskWorkItem]- with actor id
> "{actorId}"=parameters['ActorId'] == "{actorId}"
> [condition][HumanTaskWorkItem]- without actor id=parameters['ActorId'] ==
> null
> [condition][HumanTaskWorkItem]- with task name
> "{taskName}"=parameters['TaskName'] == "{taskName}"
> [condition][HumanTaskWorkItem]There is a human task=workItemNodeInstance:
> WorkItemNodeInstance( ) workItem: WorkItemImpl( name == "Human Task" )
from
> workItemNodeInstance.workItem
> [consequence][]Set actor id
"{actorId}"=workItem.setParameter("ActorId",
> "{actorId}"); update(workItemNodeInstance);
> [condition][HumanTaskWorkItem]- with priority
> {priority}=parameters['Priority'] == {priority}
> [condition][HumanTaskWorkItem]Process "{processId}" contains a human
> task=workItemNodeInstance: WorkItemNodeInstance( processInstance.processId
> == "{processId}" ) workItem: WorkItemImpl( name == "Human Task" )
from
> workItemNodeInstance.workItem
> *
>
> *and have following code to start a process instance:*
> *
> package com.sample;
> /**
> * This is a sample file to launch a process.
> */
> public class ProcessTest {
>
> public static final void main(String[] args) {
> try {
> //start humantask component
> startHumanTaskComponent();
> // load up the knowledge base
> KnowledgeBase kbase = readKnowledgeBase();
> StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
> KnowledgeRuntimeLogger logger =
> KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
> ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new
> WSHumanTaskHandler());
> // start a new process instance
> Map<String, Object> params = new HashMap<String, Object>();
> params.put("employee", "Administrator");
> ksession.startProcess("com.sample.evaluation", params);
> } catch (Throwable t) {
> t.printStackTrace();
> }
> }
>
> private static KnowledgeBase readKnowledgeBase() throws Exception {
> KnowledgeBuilderConfiguration conf =
> KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
> // ((PackageBuilderConfiguration) conf).initSemanticModules();
> // ((PackageBuilderConfiguration)
> conf).loadSemanticModule("BPMN2SemanticModule.conf");
> KnowledgeBuilder kbuilder =
> KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
> // kbuilder.add(ResourceFactory.newClassPathResource("hellowWorld.bpmn"),
> ResourceType.DRF);
>
kbuilder.add(ResourceFactory.newClassPathResource("HelloWorldSample.rf"),
> ResourceType.DRF);
> kbuilder.add(ResourceFactory.newClassPathResource("assignment.dsl"),
> ResourceType.DSL);
> kbuilder.add(ResourceFactory.newClassPathResource("assignment.dslr"),
> ResourceType.DSLR);
> KnowledgeBuilderErrors errors = kbuilder.getErrors();
> if (errors.size() > 0) {
> for (KnowledgeBuilderError error: errors) {
> System.err.println(error);
> }
> throw new IllegalArgumentException("Could not parse knowledge.");
> }
> KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
> kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
> return kbase;
> }
> private static void startHumanTaskComponent(){
> EntityManagerFactory emf =
> Persistence.createEntityManagerFactory("org.drools.task");
> TaskService taskService = new
> TaskService(emf,SystemEventListenerFactory.getSystemEventListener());
> User a = new User("john");
> User b = new User("mary");
> TaskServiceSession taskSession = taskService.createSession();
> taskSession.addUser(new User("Administrator"));
> taskSession.addUser(a);
> taskSession.addUser(b);
> MinaTaskServer server = new MinaTaskServer( taskService );
> Thread thread = new Thread( server );
> thread.start();
> }
>
> }
> *
>
>
> 2010/5/19 Esteban Aliverti <esteban.aliverti(a)gmail.com>:
>
> > A good start could be to give us more info, like your rules, your flow
> and
> > how are you executing them. ;)
> > Best,
> >
> > On Wed, May 19, 2010 at 6:39 AM, HONG DENG <denghongster(a)gmail.com>
> wrote:
> >>
> >> hi , i am a drools flow newbie.I want to using "assignment rule"
> >> assign a actor to a HumanTask. I have write a dsl and dslr files and
> >> following code :
> >>
> >>
> >>
> kbuilder.add(ResourceFactory.newClassPathResource("HelloWorldSample.rf"),
> >> ResourceType.DRF);
> >>
kbuilder.add(ResourceFactory.newClassPathResource("assignment.dsl"),
> >> ResourceType.DSL);
> >>
kbuilder.add(ResourceFactory.newClassPathResource("assignment.dslr"),
> >> ResourceType.DSLR);
> >>
> >> but when i start a process instance and the token arrive at a
> >> humantask,the "assignment rule" couldn't be firing.
> >> who can tell me how can i do it?
> >> _______________________________________________
> >> rules-users mailing list
> >> rules-users(a)lists.jboss.org
> >>
https://lists.jboss.org/mailman/listinfo/rules-users
> >
> >
> >
> > --
> > XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
> >
> > Esteban Aliverti
> >
> > _______________________________________________
> > rules-users mailing list
> > rules-users(a)lists.jboss.org
> >
https://lists.jboss.org/mailman/listinfo/rules-users
> >
> >
>
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Esteban Aliverti
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users