0

sequenceFlow如果工作流中的包内容满足某些要求,我想强制执行任务转换(activiti )。基本情况是,我希望用户在我们允许任务(“分配日期”)转换(以及流程终止)之前手动设置包的所有项目的自定义发票日期。因此,我需要检查是否所有项目都已处理。Alfresco Share 用作 UI。

乍一看,我想要的似乎是conditionExpression在 sequenceFlow 上。我很确定何时对此进行评估,但我想这将是在用户交互之后为时已晚。

如果使用默认机制无法做到这一点,也许应该通过实现自定义任务表单或存储库表单处理器调整来解决此要求。

什么是合理的技术方案?

4

1 回答 1

0

您应该发布您的工作流程代码,以便我们提供更好的解决方案。无论如何,最好的方法是在您的 Activiti(希望您使用的是 Activiti BPMN)任务中实现一段 javascript,该任务更改与 bpm 包(节点)关联的自定义属性,然后使用条件表达式检查属性值和执行过渡。例子:

        <userTask id="activitiApprove" name="Document approve" activiti:assignee="${bpm_assignee.properties.userName}" activiti:formKey="wfstu:activitiApprove">
          <extensionElements>
            <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
              <activiti:field name="script">
                <activiti:string>if (typeof bpm_workflowDueDate != 'undefined') task.setVariableLocal('bpm_dueDate', bpm_workflowDueDate);
                            if (typeof bpm_workflowPriority != 'undefined') task.priority = bpm_workflowPriority;
    for (var i = 0; i &amp;lt; bpm_package.children.length; i++) {
        var doc = bpm_package.children[i];
        doc.properties['stu:customProperty']= "UPLOADED";
        doc.save();
    }
    logger.log("My Workflow - Transition from start to activitiApprove");</activiti:string>
              </activiti:field>
            </activiti:taskListener>
            <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
              <activiti:field name="script">
                <activiti:string>execution.setVariable('wfstu_approveReject', task.getVariable('wfstu_approveReject'))
wfstu_approveReject = "OK";</activiti:string>
              </activiti:field>
            </activiti:taskListener>
          </extensionElements>
        </userTask>
        <sequenceFlow id="flow2" sourceRef="activitiApprove" targetRef="decisionApprove"></sequenceFlow>
        <exclusiveGateway id="decisionApprove" name="Approve decision"></exclusiveGateway>
        <sequenceFlow id="flow3" sourceRef="decisionApprove" targetRef="approve">
          <conditionExpression xsi:type="tFormalExpression"><![CDATA[${wfstu_approveReject == 'OK'}]]></conditionExpression>
        </sequenceFlow>
        <sequenceFlow id="flow4" sourceRef="decisioneApprovazione" targetRef="reject">
          <conditionExpression xsi:type="tFormalExpression"><![CDATA[${wfstu_approveReject == 'KO'}]]></conditionExpression>
        </sequenceFlow>

或类似的东西。

于 2013-06-13T15:58:41.620 回答