如何实现内容状态驱动的流程?

时间:2013-06-13 12:47:33

标签: alfresco activiti

我希望强制执行任务转换(activiti sequenceFlow),只有在工作流程中的包的内容满足特定要求时才能实现。基本方案是我希望用户在允许任务(“分配日期”)转换(以及终止进程)之前,在包的所有项目上手动设置自定义发票日期。因此,我需要检查是否所有项目都已处理完毕。 Alfresco Share作为用户界面。

乍一看,似乎我想要的是sequenceFlow上的conditionExpression。我非常确定何时会对此进行评估,但我想这将是在用户交互之后,这将是迟到的。

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

什么是合理的技术解决方案?

1 个答案:

答案 0 :(得分:0)

您应该发布工作流程代码,以便我们提供更好的解决方案。无论如何,最好的方法是在你的Activiti中实现一段javascript(希望你使用Activiti BPMN)任务,改变与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>

或类似的东西。