[rules-users] use rule assign actor

HONG DENG denghongster at gmail.com
Thu May 20 21:30:28 EDT 2010


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 at 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 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
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100521/000cfc08/attachment.html 


More information about the rules-users mailing list