2013-10-31 91 views
1

我已根據所需的表單字段修改了當前生命週期工作流程,但該工作流程僅適用於批准的一步。所以,如果我開始工作流程並將其分配給某人,他/她只會批准/拒絕它並且回到我身邊。Alfresco添加兩步審批工作流程

我需要的是,如果第一人審批工作流程,它應該去的第二個批准並經批准/拒絕應該回到發起者(我在這種情況下)

我acitiviti定義文件是

<?xml version="1.0" encoding="UTF-8" ?> 

<definitions id="reimbur-definitions" 
      typeLanguage="http://www.w3.org/2001/XMLSchema" 
      expressionLanguage="http://www.w3.org/1999/XPath" 
      targetNamespace="http://activiti.org/bpmn20" 
      xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:activiti="http://activiti.org/bpmn"> 

    <process id="activitireimburApproval" name="Reimbursement Application Process"> 
     <extensionElements> 
      <!-- When process is deleted/cancelled, status should be set to draft --> 
      <activiti:executionListener event="end" class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener"> 
       <activiti:field name="script"> 
        <activiti:string> 
         if(cancelled || deleted) { 
          for (var i = 0; i &lt; bpm_package.children.length; i++) 
          { 
           if (!bpm_package.children[i].hasAspect("rei:status")) 
           { 
            bpm_package.children[i].properties["rei:status"] = "Draft"; 
            bpm_package.children[i].save(); 
           } 
          } 
         } 
        </activiti:string> 
        </activiti:field> 
      </activiti:executionListener> 
     </extensionElements> 
     <startEvent id="start" 
      activiti:formKey="rei:reimbursubmitReviewTask" name="Submit Application" /> 

     <sequenceFlow id='flow1' 
      sourceRef='start' 
      targetRef='reviewTask'> 
      <extensionElements> 
       <activiti:executionListener event="take" class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener"> 
        <activiti:field name="script"> 
         <activiti:string> 
          for (var i = 0; i &lt; bpm_package.children.length; i++) 
          { 
           if (!bpm_package.children[i].hasAspect("rei:status")) 
           { 
            bpm_package.children[i].addAspect("rei:status"); 
           } 
          } 
         </activiti:string> 
         </activiti:field> 
       </activiti:executionListener> 
      </extensionElements> 
     </sequenceFlow> 

     <userTask id="reviewTask" name="Review Reimbursement Application" 
      activiti:formKey="rei:reimburactivitiReviewTask"> 
      <extensionElements> 
       <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> 
        <activiti:field name="script"> 
        <activiti:string> 

         for (var i = 0; i &lt; bpm_package.children.length; i++) 
         { 
          if (bpm_package.children[0].hasAspect("rei:status")) { 
           bpm_package.children[i].properties["rei:status"] = "In Review"; 
           bpm_package.children[i].save(); 
          } 
         } 
        </activiti:string> 
        </activiti:field> 
       </activiti:taskListener> 
       <activiti:taskListener event="assignment" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> 
        <activiti:field name="script"> 
        <activiti:string> 
         execution.setVariable('wf_reviewOutcome', task.getVariable('wf_reviewOutcome')); 
        </activiti:string> 
        </activiti:field> 
       </activiti:taskListener> 
      </extensionElements> 
      <humanPerformer> 
       <resourceAssignmentExpression> 
        <formalExpression>${bpm_assignee.properties.userName}</formalExpression> 
       </resourceAssignmentExpression> 
      </humanPerformer> 
     </userTask> 

     <sequenceFlow id='flow2' 
     sourceRef='reviewTask' 
      targetRef='reviewDecision' /> 

     <userTask id="reviewTask2" name="Review Reimbursement Application" 
      activiti:formKey="rei:reimburactivitiReviewTask"> 
      <extensionElements> 
       <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> 
        <activiti:field name="script"> 
        <activiti:string> 

         for (var i = 0; i &lt; bpm_package.children.length; i++) 
         { 
          if (bpm_package.children[0].hasAspect("rei:status")) { 
           bpm_package.children[i].properties["rei:status"] = "In Review"; 
           bpm_package.children[i].save(); 
          } 
         } 
        </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('wf_reviewOutcome', task.getVariable('wf_reviewOutcome')); 
        </activiti:string> 
        </activiti:field> 
       </activiti:taskListener> 
      </extensionElements> 
      <humanPerformer> 
       <resourceAssignmentExpression> 
        <formalExpression>${bpm_assignee.properties.userName}</formalExpression> 
       </resourceAssignmentExpression> 
      </humanPerformer> 
     </userTask> 

     <sequenceFlow id='flow3' 
     sourceRef='reviewTask2' 
      targetRef='reviewDecision' /> 
     <exclusiveGateway id="reviewDecision" name="Review Reimbursement Application" /> 

     <sequenceFlow id='flow4' sourceRef='reviewDecision' targetRef='approved' > 
      <conditionExpression xsi:type="tFormalExpression">${wf_reviewOutcome == 'Approve'}</conditionExpression> 
     </sequenceFlow> 

     <sequenceFlow id='flow5' 
     sourceRef='reviewDecision' 
      targetRef='rejected' /> 

     <userTask id="approved" name="Reimbursement Approved" 
      activiti:formKey="wf:approvedTask" > 
      <documentation> 
       The document was reviewed and approved. 
      </documentation> 
      <extensionElements> 
       <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> 
        <activiti:field name="script"> 
        <activiti:string> 

         for (var i = 0; i &lt; bpm_package.children.length; i++) 
         { 
          if (bpm_package.children[0].hasAspect("rei:status")) { 
           bpm_package.children[i].properties["rei:status"] = "Approved"; 
           bpm_package.children[i].save(); 
          } 
         } 
        </activiti:string> 
        </activiti:field> 
       </activiti:taskListener> 
      </extensionElements> 
      <humanPerformer> 
       <resourceAssignmentExpression> 
        <formalExpression>${initiator.properties.userName}</formalExpression> 
       </resourceAssignmentExpression> 
      </humanPerformer> 
     </userTask> 

     <userTask id="rejected" name="Reimbursement Rejected" 
      activiti:formKey="wf:rejectedTask" > 
      <documentation> 
       The reimbursement was reviewed and rejected. 
      </documentation> 
      <extensionElements> 
       <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> 
        <activiti:field name="script"> 
        <activiti:string> 

         for (var i = 0; i &lt; bpm_package.children.length; i++) 
         { 
          if (bpm_package.children[0].hasAspect("rei:status")) 
          { 
           bpm_package.children[i].properties["rei:status"] = "Draft"; 
           bpm_package.children[i].save(); 
          } 
         } 
        </activiti:string> 
        </activiti:field> 
       </activiti:taskListener> 
      </extensionElements> 
      <humanPerformer> 
       <resourceAssignmentExpression> 
        <formalExpression>${initiator.properties.userName}</formalExpression> 
       </resourceAssignmentExpression> 
      </humanPerformer> 
     </userTask> 

     <sequenceFlow id='flow6' sourceRef='approved' 
      targetRef='end' /> 

     <sequenceFlow id='flow7' sourceRef='rejected' 
      targetRef='end' /> 

     <endEvent id="end" /> 



    </process> 

</definitions> 

我的模型文件

<?xml version="1.0" encoding="UTF-8"?> 

<model name="rei:workflowreimburmodel" xmlns="http://www.alfresco.org/model/dictionary/1.0"> 

    <!-- Optional meta-data about the model --> 
    <description>Workflow reimbur Model</description> 
    <author></author> 
    <version>1.0</version> 

    <imports> 
     <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" /> 
     <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm" /> 
     <import uri="http://www.alfresco.org/model/bpm/1.0" prefix="bpm" /> 
     <import uri="http://www.alfresco.org/model/user/1.0" prefix="usr" /> 
     <import uri="http://www.alfresco.org/model/workflow/1.0" prefix="wf" /> 
    </imports> 

    <namespaces> 
     <namespace uri="rei.model" prefix="rei" /> 
    </namespaces> 

    <constraints> 
     <constraint name="rei:status" type="LIST"> 
      <parameter name="allowedValues"> 
       <list> 
        <value>Draft</value> 
        <value>In Review</value> 
        <value>Approved</value> 
       </list> 
      </parameter> 
     </constraint> 
    </constraints> 

    <types> 
     <type name="rei:reimbursubmitReviewTask"> 
      <title>Submit Reimbursement Application</title> 
      <parent>wf:submitReviewTask</parent> 
      <mandatory-aspects> 
       <aspect>rei:myAspect</aspect> 
      </mandatory-aspects> 
     </type> 
     <type name="rei:reimburactivitiReviewTask"> 
      <parent>wf:activitiReviewTask</parent> 
      <mandatory-aspects> 
       <aspect>rei:myAspect</aspect> 
      </mandatory-aspects> 
     </type> 
    </types> 

    <aspects> 
     <!-- Status property is used to manage workflow approval --> 
     <aspect name="rei:status"> 
      <title>Status</title> 
      <properties> 
       <property name="rei:status"> 
        <title>Status</title> 
        <type>d:text</type> 
        <default>Draft</default> 
        <constraints> 
         <constraint ref="rei:status" /> 
        </constraints> 
       </property> 
      </properties> 
     </aspect> 
     <aspect name="rei:myAspect"> 
      <title>My Aspect</title> 
      <properties>    
       <property name="rei:workflowAmount"> 
        <type>d:float</type> 
        <mandatory>true</mandatory> 
       </property>      
      </properties> 
     </aspect> 

    </aspects> 



</model> 

和我共享congif形式的文件是

<config evaluator="string-compare" condition="activiti$activitireimburApproval"> 
     <forms> 
     <form> 
      <field-visibility> 
       <show id="bpm:workflowDescription" /> 
       <show id="rei:workflowAmount" /> 
       <show id="bpm:assignee" /> 
       <show id="bpm:sendEMailNotifications" /> 
      </field-visibility> 
      <appearance> 
       <set id="" appearance="title" label-id="workflow.set.general" /> 
       <set id="info" appearance="" template="/org/alfresco/components/form/3-column-set.ftl" /> 
       <set id="assignee" appearance="title" label-id="workflow.set.assignee" /> 
       <set id="other" appearance="title" label-id="workflow.set.other" /> 

       <field id="bpm:workflowDescription" label-id="Expenditure was for" mandatory="true"> 
        <control template="/org/alfresco/components/form/controls/textarea.ftl"> 
        <control-param name="style">width: 95%</control-param> 
        </control> 
       </field> 
       <field id="rei:workflowAmount" label-id="Amount ($)" set="info" mandatory="true"> 
        <control template="/org/alfresco/components/form/controls/textfield.ftl"> 
       </control> 
       </field> 
       <field id="bpm:assignee" label-id="workflow.field.reviewer" set="assignee" /> 
       <field id="bpm:sendEMailNotifications" set="other" read-only="true"> 
        <control template="/org/alfresco/components/form/controls/workflow/email-notification.ftl" /> 
       </field> 
      </appearance> 
     </form> 
     </forms> 
    </config> 


    <config evaluator="task-type" condition="rei:reimbursubmitReviewTask"> 
     <forms> 
     <form id="workflow-details"> 
      <field-visibility> 
       <show id="bpm:sendEMailNotifications" /> 
      </field-visibility> 
      <appearance> 
       <set id="" appearance="title" label-id="workflow.set.workflow.more_info" /> 
      </appearance> 
     </form> 

     <form> 
      <field-visibility> 
       <show id="message" /> 
       <show id="taskOwner" /> 
       <show id="bpm:taskId" /> 
       <show id="bpm:status" /> 
       <show id="rei:workflowAmount" /> 
       <show id="bpm:assignee" /> 
       <show id="bpm:sendEMailNotifications" /> 
      </field-visibility> 
      <appearance> 
       <set id="" appearance="title" label-id="workflow.set.task.info" /> 
       <set id="info" appearance="" template="/org/alfresco/components/form/3-column-set.ftl" /> 
       <set id="other" appearance="title" label-id="workflow.set.other" /> 

       <field id="message"> 
        <control template="/org/alfresco/components/form/controls/info.ftl" /> 
       </field> 
       <field id="taskOwner" set="info" /> 
       <field id="bpm:taskId" set="info"> 
        <control template="/org/alfresco/components/form/controls/info.ftl" /> 
       </field> 
       <field id="rei:workflowAmount" set="info" label-id="Amount ($)"> 
        <control template="/org/alfresco/components/form/controls/info.ftl" /> 
       </field> 

       <field id="bpm:assignee" label-id="workflow.field.assign_to" set="assignee" /> 
       <field id="bpm:status" set="progress" /> 
       <field id="bpm:sendEMailNotifications" set="other" /> 
      </appearance> 
     </form> 
     </forms> 
    </config> 

    <config evaluator="task-type" condition="rei:reimburactivitiReviewTask"> 
     <forms> 
     <form> 
      <field-visibility> 
       <show id="message" /> 
       <show id="taskOwner" /> 
       <show id="bpm:assignee" /> 
       <show id="rei:workflowAmount" /> 
       <show id="bpm:taskId" /> 
       <show id="bpm:status" /> 
       <show id="bpm:comment" /> 
       <show id="wf:reviewOutcome" /> 
      </field-visibility> 
      <appearance> 
       <set id="" appearance="title" label-id="workflow.set.task.info" /> 
       <set id="info" appearance="" template="/org/alfresco/components/form/3-column-set.ftl" /> 
       <set id="response" appearance="title" label-id="workflow.set.response" /> 

       <field id="message"> 
        <control template="/org/alfresco/components/form/controls/info.ftl" /> 
       </field> 
       <field id="taskOwner" set="info" /> 
       <field id="bpm:taskId" set="info"> 
        <control template="/org/alfresco/components/form/controls/info.ftl" /> 
       </field> 
       <field id="rei:workflowAmount" set="info" label-id="Amount ($)"> 
        <control template="/org/alfresco/components/form/controls/info.ftl" /> 
       </field> 
       <field id="bpm:status" set="progress" /> 
       <field id="bpm:assignee" label-id="workflow.field.assign_to" set="assignee" /> 
       <field id="bpm:comment" label-id="workflow.field.comment" set="response"> 
        <control template="/org/alfresco/components/form/controls/textarea.ftl" /> 
       </field> 
       <field id="wf:reviewOutcome" label-id="workflow.field.outcome" set="response"> 
        <control template="/org/alfresco/components/form/controls/workflow/activiti-transitions.ftl" /> 
       </field> 
      </appearance> 
     </form> 
     </forms> 
    </config> 

在上述文件中,我想讓受讓人字段出現在第一批准人表單中,以便他/她可以將其分配給第二批准人。但是我沒有在任務/工作流程描述窗口中看到,並且在批准/拒絕後,工作流程不會轉到第二個審批者,而是返回到發起者。

我在做什麼錯?請指導我。

在此先感謝。

回答

0

好了,我不使用份額,但如果我非常理解你應該先審批 「userTask ID =」 reviewtask」點到 「reviewtask2」

所以在這裏:

<sequenceFlow id='flow4' sourceRef='reviewDecision' targetRef='approved' > 
      <conditionExpression xsi:type="tFormalExpression">${wf_reviewOutcome == 'Approve'}</conditionExpression> 
     </sequenceFlow> 

應該是:

<sequenceFlow id='flow4' sourceRef='reviewDecision' targetRef='reviewTask2' > 
      <conditionExpression xsi:type="tFormalExpression">${wf_reviewOutcome == 'Approve'}</conditionExpression> 
     </sequenceFlow> 

而在reviewTask2結束:

<humanPerformer> 
      <resourceAssignmentExpression> 
       <formalExpression>${initiator.properties.userName}</formalExpression> 
      </resourceAssignmentExpression> 
     </humanPerformer> 

也許你會需要一些調整在這裏和那裏,但邏輯應該沒問題.. 讓我知道如果沒關係。

相關問題