从ProcessEventListener的ProcessStarted API获取流程参数

时间:2015-02-23 12:41:54

标签: jbpm

我有一个代码,我在进程中插入一些参数(Jbpm),然后启动进程,我还添加一个EventListener(它将DefaultProcessEventListener扩展到知识会话)

KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); 

Map<String, Object> input = new HashMap<String, Object>();
input.put("payload", payloadObject);
input.put("caseNo", caseNoString);

EventListner listner = new EventListner();
ksession.addEventListener(listner);
ksession.startProcess(strategyName,input);

现在我想要Listner类中的输入映射

public class EventListner extends DefaultProcessEventListener{

@Override
public void afterProcessStarted(ProcessStartedEvent startEvent) {
    //NEEDED HERE
}

@Override
public void afterProcessCompleted(ProcessCompletedEvent arg0) {
    //NEEDED HERE
}

...如何???需要帮助

1 个答案:

答案 0 :(得分:0)

我刚刚碰巧正在研究同样的问题。这是我工作的代码

public void afterNodeLeft(ProcessNodeLeftEvent event) {
    RuleFlowProcessInstance rfpi = (RuleFlowProcessInstance)event.getProcessInstance();
    RuleFlowProcess rfp = rfpi.getRuleFlowProcess();
    VariableScope scope = rfp.getVariableScope();
    for(Variable var : scope.getVariables()) {
        Object obj = rfpi.getVariable(var.getName());
        String value = null;
        if (obj != null) {
            value = obj.toString();
        }
        System.out.printf("\tVariable name: %s, Value: %s%n",var.getName(),value);
    }
}

我发现如果您尝试直接通过进程访问变量,结果始终为null。通过ProcessInstance访问流程变量似乎有效。