簡體   English   中英

Activiti> bpmn:無法使用變量動態分配候選組

[英]Activiti > bpmn : not able to assign candidate group dynamically using variables

我正在從liferay進行活動。 我正在嘗試為用戶任務動態設置候選組,為此我嘗試了以下不起作用的解決方案。 這是針對liferay 6.2 CE GA6和activiti版本5.18.0的。如果我錯過了任何內容,或者您​​有更好的解決方案,請告訴我。

解決方案1:關於使用過程變量為用戶任務設置候選組。 以下是bpmn代碼:

<userTask id="Review" name="Review"  activiti:candidateGroups=${assignee}>
  <extensionElements>
    <activiti:formProperty id="outputTransition" name="output Transition" type="enum">
      <activiti:value id="Approve" name="Approve"></activiti:value>
      <activiti:value id="Reject" name="Reject"></activiti:value>
    </activiti:formProperty>
  </extensionElements>
</userTask>

在此,受理人是已經設置的過程變量。

在執行工作流程時,出現以下異常:

13:42:01,326 INFO  [http-bio-8080-exec-10][LiferayGroupsUtil:54] Convert    groups : [ ${assignee} ]
13:42:01,329 WARN  [http-bio-8080-exec-10][LiferayGroupsUtil:94] Cannot assign task to role ${assignee} com.liferay.portal.NoSuchRoleException: No Role exists with the key {companyId=20155, name=${assignee}}

解決方案2:

我也嘗試了下面的xml代碼,但仍然遇到相同的異常:在這里,我有multiInstanceLoopCharacteristics。

<userTask id="Review" name="Review"  activiti:candidateGroups=${assignee}>
    <multiInstanceLoopCharacteristics isSequential="false" 
     activiti:collection="candidateGrp" activiti:elementVariable="assignee" >
    <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.6 }</completionCondition>
  </multiInstanceLoopCharacteristics>
  <extensionElements>
    <activiti:formProperty id="outputTransition" name="output Transition" type="enum">
      <activiti:value id="Approve" name="Approve"></activiti:value>
      <activiti:value id="Reject" name="Reject"></activiti:value>
    </activiti:formProperty>
  </extensionElements>
</userTask>

解決方案3:

我還嘗試使用DynamicBpmnService動態設置候選組,請檢查以下代碼:對於這種方法,我使用了activiti版本5.19.0,我從liferay> tomcat> webapp> activiti-web> web-inf>中替換了activiti引擎jar。 LIB

@Override
public void notify(DelegateExecution execution) {
    try {
    EngineServices engineServices = execution.getEngineServices();
    DynamicBpmnService dynamicBpmnService = engineServices.getDynamicBpmnService();
    ObjectNode infoNode = dynamicBpmnService.changeUserTaskCandidateGroup(
              "Review", "Power User", false);
    dynamicBpmnService.saveProcessDefinitionInfo("procDefId", infoNode);
    System.out.println("------saveProcessDefinitionInfo------=saved");

    } catch (Exception e) {
        System.out.println("------error");
        e.printStackTrace();
    }
    List<String> list = new ArrayList<String>();
    list.add("Power User");
    execution.setVariable("candidateGrp",list);
}

執行此代碼時出現以下異常:

WARN  [http-bio-8080-exec-10][ProxyMessageListener:81] org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause:  com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:  Cannot add or update a child row: a foreign key constraint fails (`lportal`.`act_procdef_info`, CONSTRAINT `ACT_FK_INFO_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`))
### The error may involve org.activiti.engine.impl.persistence.entity.ProcessDefinitionInfoEntity.insertProcessDefinitionInfo-Inline
### The error occurred while setting parameters
### SQL: insert into ACT_PROCDEF_INFO(ID_, PROC_DEF_ID_, REV_, INFO_JSON_ID_)     values(?,             ?,            1,            ?)
### Cause:  com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:  Cannot add or update a child row: a foreign key constraint fails  (`lportal`.`act_procdef_info`, CONSTRAINT `ACT_FK_INFO_PROCDEF` FOREIGN KEY  (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`))
org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`lportal`.`act_procdef_info`, CONSTRAINT `ACT_FK_INFO_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`))
### The error may involve org.activiti.engine.impl.persistence.entity.ProcessDefinitionInfoEntity.insertProcessDefinitionInfo-Inline
### The error occurred while setting parameters
### SQL: insert into ACT_PROCDEF_INFO(ID_, PROC_DEF_ID_, REV_, INFO_JSON_ID_)     values(?,             ?,            1,            ?)
### Cause:  com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`lportal`.`act_procdef_info`, CONSTRAINT `ACT_FK_INFO_PROCDEF` FOREIGN KEY (`PROC_DEF_ID_`) REFERENCES `act_re_procdef` (`ID_`))

我真的無法繼續。 您的快速幫助將不勝感激。

謝謝。

嘗試這個:

處理:

<userTask id="review" name="Review" >
  <extensionElements>
    <activiti:taskListener event="create" class="org.activiti.MyDynamicGroupHandler" />
  </extensionElements>
</userTask>

監聽器:

public class MyDynamicGroupHandler implements TaskListener {

  public void notify(DelegateTask delegateTask) {

    String assigneeGroup = 'Reviewer'
    ...
    // business logic to set correct assigneeGroup
    ...
    // set candidate group dynamically 
    delegateTask.addCandidateGroup(assigneeGroup); // 
    ...
  }

}

Spring框架示例:

myListener是在Spring bean上下文中定義的。

<bean id="myListener" class="org.activiti.MyDynamicGroupHandler"/>

處理:

<userTask id="review" name="Review">
  <extensionElements>
    <activiti:taskListener event="create" expression="${myListener.setCandidateGroup(task, assigneeGroup)}" />
  </extensionElements>
</userTask>

監聽器:

public class MyDynamicGroupHandler {

  public void setCandidateGroup(DelegateTask delegateTask, String assigneeGroup) {
    // set candidate group dynamically 
    delegateTask.addCandidateGroup(assigneeGroup); // 
    ...
  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM