[rules-users] Problems with result mapping for custom workitems

PAYET, Manuel manuel.payet at capgemini.com
Wed Apr 21 13:22:48 EDT 2010


Hello everyone, I have a problem using result mapping in custom workitems when I try to set an attribute of an object as one of the result:
I make the following mapping in Result Mapping of my workitem:

Parameter     Variable
message       workmodel.message


and all I have is 

Could not find variable scope for variable workmodel.message
when trying to complete Work Item workitem_test
Continuing without setting variable.


I hope, someone can help me, I tried all that I could think about...
you will find below all my project, sorry for the long post...:



/forum/src/main/java/mpayet/test/forum/App.java
=======================================================================
package mpayet.test.forum;

import java.util.HashMap;
import java.util.Map;

import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;

import workDefinitions.WorkitemTest;
import workDefinitions.Workmodel;

/**
 * Hello world!
 * 
 */
public class App {
	public static void main(String[] args) throws Exception {
		System.out.println("Hello World!");
		KnowledgeBase kbase = readKnowledgeBase();
		StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
		final Map<String, Object> map = new HashMap<String, Object>();
		map.put("workmodel", new Workmodel());
		session.getWorkItemManager().registerWorkItemHandler("workitem_test", new WorkitemTest(session));
		session.startProcess("flow", map);
	}

	private static KnowledgeBase readKnowledgeBase() throws Exception {

		final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
				.newKnowledgeBuilder();
		kbuilder.add(ResourceFactory.newClassPathResource("flow.rf"),
				ResourceType.DRF);

		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;
	}
}
=======================================================================




/forum/src/main/java/workDefinitions/WorkitemTest.java
=======================================================================
package workDefinitions;

import java.util.HashMap;
import java.util.Map;

import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.process.WorkItem;
import org.drools.runtime.process.WorkItemHandler;
import org.drools.runtime.process.WorkItemManager;

public class WorkitemTest implements WorkItemHandler {

	final StatefulKnowledgeSession session;

	public WorkitemTest(final StatefulKnowledgeSession session) {
		this.session = session;
	}

	public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {

	}

	public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {

		final Map<String, Object> mapResult = new HashMap<String, Object>();
		mapResult.put("message", "message");
		mapResult.put("nombre", 1);
		manager.completeWorkItem(workItem.getId(), mapResult);
	}
}
=======================================================================





/forum/src/main/java/workDefinitions/Workmodel.java
=======================================================================
package workDefinitions;

public class Workmodel {
	private String message;

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

}
=======================================================================





/forum/src/main/java/META-INF/DefinitionsWorkitem.conf
=======================================================================
import org.drools.process.core.datatype.impl.type.StringDataType;
import org.drools.process.core.datatype.impl.type.IntegerDataType;

[
  // exemple de workitem
  [
    "name" : "workitem_test",
    "parameters" : [
      "typeObjet" : new StringDataType(),
      "nombre" : new IntegerDataType()
    ],
    "displayName" : "workitem test",
    "icon" : "icons/icone_service.gif"
  ]

]
=======================================================================





/forum/src/main/java/flow.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/process drools-processes-5.0.xsd"
         type="RuleFlow" name="flow" id="flow" package-name="com.mpayet.test" routerLayout="1" >

  <header>
    <imports>
      <import name="workDefinitions.Workmodel" />
    </imports>
    <variables>
      <variable name="workmodel" >
        <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="workDefinitions.Workmodel" />
      </variable>
    </variables>
  </header>

  <nodes>
    <actionNode id="13" name="affichage variable" x="16" y="176" width="161" height="48" >
        <action type="expression" dialect="mvel" >var model =(Workmodel)context.getVariable("workmodel")
System.out.println(model.message)</action>
    </actionNode>
    <end id="8" name="End" x="72" y="256" width="48" height="48" />
    <start id="1" name="Start" x="72" y="16" width="48" height="48" />
    <workItem id="20" name="workitem test" x="46" y="97" width="100" height="48" >
      <work name="workitem_test" >
        <parameter name="nombre" >
          <type name="org.drools.process.core.datatype.impl.type.IntegerDataType" />
        </parameter>
        <parameter name="typeObjet" >
          <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
        </parameter>
      </work>
      <mapping type="out" from="message" to="workmodel.message" />
    </workItem>
  </nodes>

  <connections>
    <connection from="20" to="13" />
    <connection from="13" to="8" />
    <connection from="1" to="20" />
  </connections>

</process>
=====================================================================



Thank you very much if you took the time to think about my problem,
Manuel PAYET






This message contains information that may be privileged or confidential and is the property of the Capgemini Group. It is 
intended only for the person to whom it is addressed. If you are not the intended recipient, you are not authorized to 
read, print, retain, copy, disseminate, distribute, or use this message or any part thereof. If you receive this message 
in error, please notify the sender immediately and delete all copies of this message.





More information about the rules-users mailing list