2017-03-07 5 views
0

다른 사람이 작업 속성 값을 변경할 때 코드를 실행하려고합니다.워크 플로우의 태스크가 일부 특성을 변경할 때 트리거하는 정책은 어떻게 만들 수 있습니까?

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 somes 쿼리에서 다음과 같은 쿼리를 시도했습니다.

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

결과가 없습니다. 그리고 나는 많은 작업을 만들었습니다. 내가 프레스코 4.1을 사용하고

내가 그 워크 플로에 정책을 결합 할 수 없습니다 발견

+0

흥미 롭 변경되었을 때 트리거 얻을 작업 리스너가 없다, 나는 내가 사람이 워크 플로 작업으로 동작을 사용하려고 본 적이 생각하지 않는다 내가 ' 그것이 작동할지 모르겠다. 왜 작업 리스너를 작업 흐름에 추가 할 수 없습니까? –

+0

작업 리스너를 시도했지만 작업 속성 변경을 트리거 할 수있는 방법이 없습니다. 하지만 대체 방법을 찾았습니다. – Troncador

답변

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 
    ... 
    } 
} 

작업 속성이