[rules-users] use rule assign actor

Esteban Aliverti esteban.aliverti at gmail.com
Thu May 20 13:58:41 EDT 2010


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 at 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-processes-5.0.xsd"
>         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 at 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 at 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 at lists.jboss.org
> >> https://lists.jboss.org/mailman/listinfo/rules-users
> >
> >
> >
> > --
> > XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
> >
> > Esteban Aliverti
> >
> > _______________________________________________
> > rules-users mailing list
> > rules-users at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/rules-users
> >
> >
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Esteban Aliverti
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100520/7b0b3a01/attachment.html 


More information about the rules-users mailing list