[rules-users] use rule assign actor

HONG DENG denghongster at gmail.com
Wed May 19 20:25:49 EDT 2010


*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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100520/5daccf14/attachment.html 


More information about the rules-users mailing list