2013-10-31 5 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

아니라, 내가 주를 사용하지 않는,하지만 난 잘 이해한다면 당신은 reviewtask2 "그래서 여기

"를 지점으로 "첫 승인"userTask 아이디 = "reviewtask을해야합니다

<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> 

어쩌면 여기 저기에 약간의 조정이 필요 하겠지만 논리는 괜찮을 것입니다 .. 괜찮 으면 알려주세요.

관련 문제