如何制定在工作流程的任务更改某些属性时触发的策略?

时间:2017-03-07 01:18:56

标签: java lucene workflow alfresco

当有人更改任务属性的值时,我正在尝试执行代码。

这是我的代码:

public void init() {
  JavaBehaviour updateBehaviour = new JavaBehaviour(this,
      OnUpdatePropertiesPolicy.QNAME.getLocalName(),
    NotificationFrequency.TRANSACTION_COMMIT);

  policyComponent.bindClassBehaviour(OnUpdatePropertiesPolicy.QNAME,
    WorkflowModel.TYPE_TASK, updateBehaviour);

  policyComponent.bindClassBehaviour(OnUpdatePropertiesPolicy.QNAME,
    WorkflowModel.TYPE_START_TASK, updateBehaviour);

  policyComponent.bindClassBehaviour(OnUpdatePropertiesPolicy.QNAME,
    WorkflowModel.TYPE_ACTIVTI_TASK, updateBehaviour);

  policyComponent.bindClassBehaviour(OnUpdatePropertiesPolicy.QNAME,
    WorkflowModel.TYPE_ACTIVTI_START_TASK, updateBehaviour);

  policyComponent.bindClassBehaviour(OnUpdatePropertiesPolicy.QNAME,
    WorkflowModel.TYPE_WORKFLOW_TASK, updateBehaviour);

  logger.debug("Initialised"); // the program prints this line
}

public void onUpdateProperties(NodeRef nodeRef, Map<QName, Serializable> 
    before, Map<QName, Serializable> after) {
  String msg = String.format("NodeRef: %s", nodeRef.toString());
  logger.info(msg);    // this line is never printed 
}

我为几乎所有与任务相关的类型创建了一个策略。但是,如果我手动更改任务中某些属性的值,则永远不会触发策略。

也许是相关的。我试图在Lucene中查询一些查询:

@bpm\:priority:1
TYPE:"bpm:task"

没有任何结果。我创造了许多任务。

我正在使用Alfresco 4.1(我无法更改版本)

1 个答案:

答案 0 :(得分:0)

我发现无法将策略绑定到工作流程,但我找到了另一种方法。

使用AbstractFilter,我们可以在每次有人使用表单更改任务属性时附加行为。

public class TaskFormFilter extends AbstractFilter<WorkflowTask, WorkflowTask>  {
  public void init() {
    if (this.isActive()) {
      this.register();
    }
  }
  ...
  @Override
  public void afterPersist(WorkflowTask item, FormData data,  
     WorkflowTask persistedObject) {
     Map<QName, Serializable> newProperties = item.getProperties();
     Map<QName, Serializable> oldProperties = persistedObject.getProperties();
     // here I can see if some properties has changed
     ...
  }
}

当任务属性发生更改时,没有任务侦听器被触发