Groovy 活动-将任务分配给组或用户

Groovy 活动-将任务分配给组或用户,groovy,activiti,bpmn,alfresco-enterprise,Groovy,Activiti,Bpmn,Alfresco Enterprise,我在计算如何根据组/人员选择器中选择的值将简单任务分配给人员或组时遇到了一些困难 因此,在我的UI中,用户可以使用相关的人员/组选择器控件选择人员或组 使用activiti assignment属性,我将受让人设置为${selectedPerson},将候选组设置为${selectedgroups}。这些变量与上述选择器控件的值有关: 总体目标是,用户应该能够将任务分配给一个人或一组人,但是上述设计存在以下问题: 当用户选择一个组时,任务将成功分配给一个组,假定Assignee值为空 但是

我在计算如何根据组/人员选择器中选择的值将简单任务分配给人员或组时遇到了一些困难

因此,在我的UI中,用户可以使用相关的人员/组选择器控件选择人员或组

使用activiti assignment属性,我将受让人设置为
${selectedPerson}
,将候选组设置为
${selectedgroups}
。这些变量与上述选择器控件的值有关:

总体目标是,用户应该能够将任务分配给一个人或一组人,但是上述设计存在以下问题:

  • 当用户选择一个组时,任务将成功分配给一个组,假定Assignee值为空
  • 但是,当用户选择一个人而不是一个组时,Activiti会抛出以下异常,因为它需要一个组
org.activiti.engine.ActivitiIllegalArgumentException:表达式没有 不解析为字符串或字符串集合

正确的方法是什么


全堆栈跟踪
这是因为Activiti接受候选组的ID作为字符串或字符串的逗号分隔值。但是form元素(如您所选择的)将所选组的组ID存储为Long,因此出现了
IllegalArgumentException
。在用户选择变量后,尝试将其存储为字符串,然后将此字符串作为候选组传递

只有当
${selectedPerson}
${selectedGroup}
都具有非空值时,您使用的方法才会满足

或者,您可以在要分配的任务上创建任务侦听器并执行逻辑

比如:

public class CustomTaskListener implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
    // get required variables
        String selectedPerson = (String) delegateTask.getVariable("selectedPerson");
        String selectedGroup = (String) delegateTask.getVariable("selectedGroup");
    // check for the condition
        if (null != selectedPerson && !selectedPerson.isEmpty()) {
    // set values
            delegateTask.setAssignee(selectedPerson);
        } else {
            delegateTask.addCandidateGroup(selectedGroup);
        }
    }
}

这是因为Activiti接受候选组的ID作为字符串或字符串的逗号分隔值。但是form元素(如您所选择的)将所选组的组ID存储为Long,因此出现了
IllegalArgumentException
。在用户选择变量后,尝试将其存储为字符串,然后将此字符串作为候选组传递

只有当
${selectedPerson}
${selectedGroup}
都具有非空值时,您使用的方法才会满足

或者,您可以在要分配的任务上创建任务侦听器并执行逻辑

比如:

public class CustomTaskListener implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
    // get required variables
        String selectedPerson = (String) delegateTask.getVariable("selectedPerson");
        String selectedGroup = (String) delegateTask.getVariable("selectedGroup");
    // check for the condition
        if (null != selectedPerson && !selectedPerson.isEmpty()) {
    // set values
            delegateTask.setAssignee(selectedPerson);
        } else {
            delegateTask.addCandidateGroup(selectedGroup);
        }
    }
}

如果要将任务分配给用户或组,则不能将两个被分配者同时指定为被分配者和候选组


然后使用候选用户作为接受用户数组的受让人,如果第一个条件需要为true,则将变量设置为数组,然后将该用户添加到数组,否则迭代组成员并将所有组成员添加到数组,并将该数组变量传递给候选用户作为受让人。

如果要将任务分配给用户或组,则不能将两个受让人同时作为受让人和候选组



然后使用候选用户作为接受用户数组的受让人,如果第一个条件需要为true,则将变量设置为数组,然后将该用户添加到数组,否则迭代组成员并将所有组成员添加到数组,并将该数组变量传递给候选用户作为受让人。

你能上传完整的stacktrace吗?@abbaskarawala当然可以,检查我的最新编辑:)你能上传完整的stacktrace吗?@abbaskarawala当然可以,检查我的最新编辑:)谢谢Abbas,我现在就试试我想这可能行得通,但是如果我不提供字符串,我还是会出错${selectedPerson}-
表达式中使用的未知属性:${selectedPerson}
。我的印象是“受让人”字段可以为空?您想要的是“受让人”还是“候选人”组?还是两者同时?我需要或。UI的问题是,它无法检查其中一个字段是否为空,即我们无法为动态赋值编写表达式。主要用例是我需要如果填充了组选择器,则将其分配给特定用户。现在,它迫使我为这两个用户设置结果,但当其中一个为空时失败感谢Abbas,我不熟悉任务侦听器,无法访问SpringBean定义等,这可以从中的流程实例中设置吗designer?谢谢Abbas,我现在就试试,我想这可能行得通,但是如果我没有为${selectedPerson}-
表达式中使用的未知属性${selectedPerson}提供字符串,我仍然会出错
。我的印象是“受让人”字段可以为空?您想要的是“受让人”还是“候选人”组?还是两者同时?我需要或。UI的问题是,它无法检查其中一个字段是否为空,即我们无法为动态赋值编写表达式。主要用例是我需要如果填充了组选择器,则将其分配给特定用户。现在,它迫使我为这两个用户设置结果,但当其中一个为空时失败感谢Abbas,我不熟悉任务侦听器,无法访问SpringBean定义等,这可以从中的流程实例中设置吗设计师?谢谢Vikash。我会给出一个答案。我可以使用什么方法返回指定组的所有成员?是的,您可以为单个任务提供受让人和候选组。受让人是可以完成任务的人,候选组可以看到任务,但无法完成。请参考此链接这将帮助您更多感谢Vikash。我会给出答案GO我可以使用什么方法返回说明符的所有成员