2013-06-13 4 views
0

Я бы хотел, чтобы процесс перехода задачи (activiti sequenceFlow) был возможен только в том случае, если содержание пакета в рабочем процессе соответствует определенным требованиям. Основной сценарий заключается в том, что я хочу, чтобы пользователи вручную устанавливали дату счета-фактуры для всех элементов пакета, прежде чем мы разрешили переход («назначить даты») на переход (и процесс завершения). Следовательно, мне нужно проверить, были ли обработаны все элементы. Alfresco Share служит в качестве пользовательского интерфейса.Как реализовать процесс, зависящий от состояния контента?

На первый взгляд кажется, что я хочу, это conditionExpression на последовательности Flow. Я совершенно уверен, когда это оценивается, но я думаю, что это будет после взаимодействия с пользователем, которое было бы поздно.

Если это невозможно с использованием механики по умолчанию, возможно, это требование должно быть устранено путем реализации настраиваемой формы формы задачи или формы репозитория.

Какое разумное техническое решение?

ответ

0

Вы должны опубликовать свой код рабочего процесса, чтобы мы могли предоставить лучшее решение. Во всяком случае, лучший способ - реализовать часть javascript внутри вашей Activiti (надеюсь, вы используете задачу Activiti BPMN), которая изменяет настраиваемое свойство, связанное с пакетом bpm (node), а затем использует выражение условия для проверки значения свойства и выполнить переход. пример:

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

Или что-то похожее на это.

+0

Я думаю, что это не сработает, потому что состояние контента все равно может измениться после того, как слушатели activiti (task-) прослушали и установили значение в зависимости от состояния контента в это время. Предположите, что пользователь меняет метаданные контента после выполнения прослушивателя. Установка переменной процесса по завершению кажется логичной и поздней, а не логически логической, вы не хотите, чтобы задача завершилась, если контент не удовлетворяет определенным требованиям. –

+0

Ну, вы можете изменить событие на «полный», чтобы быть в «старте» или «изменении», не совсем уверены, что все значения, допустимые для тега события ... Во всяком случае .. Вы должны скрыть свойство, которое используется по рабочему процессу от пользователя. Поэтому он не должен его менять. И состояние контента никогда не изменится. Я просто показывал разумное техническое решение. Мы используем тот же код, и он работает как шарм. У нас есть выбор свойства штата «отключен» в нашей форме рабочего процесса, и пользователь не может его изменить .. – Teqnology

+0

На самом деле мне нужно, чтобы состояние содержимого изменилось до того, как пользовательская задача («Назначить даты счета» в моем сценарии) завершается. Следовательно, я бы хотел запретить последовательность Flow на уровне процесса, если требования не выполняются. –

Смежные вопросы