kcontext.getKnowledgeRuntime().insert(kcontext.getProcessInstance());
import mypackage.MyCustomObject;
import org.kie.api.runtime.process.WorkflowProcessInstance;
rule "generate object"
ruleflow-group "testgroup"
when
//some stuff applies
then
insert(new MyCustomObject());
end
rule "modify variable"
ruleflow-group "testgroup"
when
$process: WorkflowProcessInstance()
$obj: MyCustomObject()
then
WorkflowProcessInstance $p = (WorkflowProcessInstance)kcontext.getKieRuntime().getProcessInstance($process.getId());
$p.setVariable( "var", $obj);
System.out.println("Value of object in memory: "+$obj);
System.out.println("Value of object in variable:+$p.getVariable("var"));
retract($process);
end
在业务规则任务之后,我放置了一个简单的脚本任务:
if(var != null) {
System.out.println("var: "+var);
} else{
System.out.println("var is null!");
}
我现在得到的输出是(注意:MyCustomObject不重写toString):
内存中对象的值:MyCustomObject@XYZ
欢迎提出任何建议。
在业务规则任务的onEntry脚本中:
// Add the process instance into working memory so we can access it from rules!!!
insert(kcontext.getProcessInstance());
// get the current process context (the running process) where I have already
// defined a variable named qrr as a type Object.
org.jbpm.workflow.instance.WorkflowProcessInstance pi = (org.jbpm.workflow.instance.WorkflowProcessInstance)kcontext.getProcessInstance();
// create a new array list
qrr = new java.util.ArrayList();
// to be able to access qrr from the business process I set the new qrr
// instance to the BP variable named qrr
pi.setVariable("qrr", qrr);
// log to log file
System.out.println("=======> qrr inserted ");
rule "check states"
ruleflow-group "build-results"
dialect "java"
when
/* when there is an object of type PatientState with an attribute named trasferrable(boolean) equals to true in the working memory */
$s : PatientState(trasferrable==true)
then
String str = "We found our PatientState in working memory and it has transferable==true!";
/* get the process context we inserted into the working memory before we ran our business rule task with ruleflow: build-results */
Object o = drools.getContext(org.kie.api.runtime.process.ProcessContext.class);
if (o != null) {
// we found the ProcessContext in working memory so cast it and than get our variable named qrr and cast it as well
List qrr = (List)drools.getContext(org.kie.api.runtime.process.ProcessContext.class).getVariable("qrr");
// add the string object to the list
qrr.add(str);
}
else {
LoggerUtil.info("Context not found in working memory");
}
end
现在,在onExit脚本
中,只需编写如下内容:
System.out.println("######## qrr contains: " + qrr.size() + " rule results ########");
我试图将我的流程变量放入业务规则任务中,并在该任务中更改该变量,但值保持不变。我做错了什么?流程是在kie工作台中开发的,不使用Eclipse。 在触发规则之前,我的变量在脚本任务中初始化,如 谢谢你的帮助!
主类:
借助脚本任务和kcontext实例,我可以成功地从流程内检索全局变量(如NodeInstance、ProcessInstance等);但如果我需要在WorkItem中检索这些全局变量呢?当然,我可以将脚本任务放在进程中我的工作项之前,然后将一个全局变量分配给其中一个变量定义,以便在带有getParameter()方法的工作项中使用它; 但我们确实明白,这是双重的,不是吗?那么,在没有额外脚本任务的
我目前与JBpm Kie合作。我们有带有自定义工作项(和自定义工作项处理程序代码)的进程。我们发现调试代码非常困难,因为我们的工作项处理程序主要是异步的,并且是通过RESTAPI完成的。我了解到,可以通过maven存储库向KIE引擎提供workItem处理程序(我对maven很陌生)。我很想知道我是否可以将我的PC配置为Maven存储库,并根据jBpm进程的请求调试代码。有可能吗?
如何使同一进程的多个实例在不相互干扰的情况下并排运行? 我有一个业务流程模型,其中一个基本工作流需要决定需要启动哪个其他工作流。这个基流将在被评估时发送一些信号,这些信号将启动其他子进程。在这些子进程的执行过程中,有些子进程需要等待其他子进程完成。因此,我目前使用中间抛出和捕捉信号来实现某种同步机制。问题是,每当某个信号被发送时,侦听该信号的所有进程都将继续独立于它们运行的实例。我希望只有当这些子
问题内容: 我有主GUI线程,其中有一个JprogressBar,并且正在实现ProprtyChangeListener。 当按下按钮时,扩展SwingWorker的其他类将开始执行并执行一系列可能很长的计算。我需要A类中的进度条以根据B类中的变量来呈现进度。 我的代码在下面(我所有失败的尝试都可能有点混乱…) 将不胜感激。 GUI类别: 计算类: 编辑 原始问题仍然存在。出于某种原因,进度条仍然