Нужна помощь с рабочим процессом в Alfresco - PullRequest
3 голосов
/ 24 апреля 2010

Привет ТАК сообщество,

Мне не повезло, что я получил помощь на форумах Alfresco, и я надеюсь, что здесь будет больше. Мы создаем приложение на основе Alfresco и jBPM, и я определил рабочий процесс, но я либо определил его неправильно, либо что-то упустил, либо есть ошибки в интеграции Alfresco с jBPM, и мне нужна помощь, чтобы выяснить, какой именно и исправить. Вот проблема:

У меня расширенный рабочий процесс, и я пытаюсь запустить его из JavaScript. Вот код, который я использую для запуска рабочего процесса:

var nodeId = args.nodeid;
var document = search.findNode("workspace://SpacesStore/" + nodeId);
var workflowAction = actions.create("start-workflow");
workflowAction.parameters.workflowName = "jbpm$nmwf:MyWorkflow";
workflowAction.parameters["bpm:workflowDescription"] = "Please edit: " + document.name;
workflowAction.parameters["bpm:assignees"] = [people.getPerson("admin"), people.getPerson("andyg")];
var futureDate = new Date();
futureDate.setDate(futureDate.getDate() + 7);
workflowAction.parameters["bpm:workflowDueDate"] = futureDate;
workflowAction.execute(document);

Это работает нормально, и электронная почта, отправленная с начального узла перехода, запускается просто отлично. Однако, когда я ищу рабочий процесс в моем списке задач, его там нет, но он находится в моем завершенном списке задач. Переход по умолчанию (единственный переход) из начального узла указывает на узел задачи, который имеет четыре перехода.

В рабочем процессе есть 8 задач и 22 перехода. Когда я использую консоль рабочего процесса, чтобы запустить рабочий процесс и завершить задачу запуска, она должным образом следует переходу начального узла по умолчанию к следующей задаче. Новая задача отображается в «Показать задачи», но не отображается в «Показать мои задачи» (очевидно, потому что задача была помечена как выполненная по какой-то причине, хотя ее нет в узле «Конец»). Задача:

task id: jbpm$111 , name: nmwf:submitInEditing , properties: 18

Если я "покажу переходы", это будет выглядеть так, как я ожидал:

path: jbpm$62-@ , node: In Editing , active: true
 task id: jbpm$111 , name: nmwf:submitInEditing, title: submitInEditing title , desc: submitInEditing description , properties: 18
 transition id: Submit for Approval , title: Submit for Approval
 transition id: Request Copyediting Review , title: Request Copyediting Review
 transition id: Request Legal Review , title: Request Legal Review
 transition id: Request Review , title: Request Review

Я не хочу публиковать весь рабочий процесс, поскольку он большой, но вот первые два узла:

Первые дорожки:

<swimlane name="initiator"></swimlane>
<swimlane name="Content Providers">
  <assignment actor-id="Content Providers"  class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
     <actor>#{bpm_assignees}</actor>
  </assignment>
</swimlane>

Теперь узлы:

<start-state name="start">
    <task name="nmwf:submitTask" swimlane="initiator"/>
    <transition name="" to="In Editing">
        <action>
            <runas>admin</runas>
            <script>
                /* Code to send e-mail that a new workflow was started.  I get this e-mail. */
            </script>
        </action>
    </transition>
</start-state>
<task-node name="In Editing">
    <task name="nmwf:submitInEditing" swimlane="Content Providers" />
    <!-- I put e-mail sending code in each of these transitions, but none are firing. -->
    <transition to="In Approval" name="Submit for Approval"></transition>
    <transition to="In Copyediting" name="Request Copyediting Review"></transition>
    <transition to="In Legal Review" name="Request Legal Review"></transition>
    <transition to="In Review" name="Request Review"></transition>
</task-node>

Вот модель для этих двух узлов:

 <type name="nmwf:submitTask">
    <parent>bpm:startTask</parent>


    <mandatory-aspects>
       <aspect>bpm:assignees</aspect>
    </mandatory-aspects>
 </type>


 <type name="nmwf:submitInEditing">
    <parent>bpm:workflowTask</parent>


    <mandatory-aspects>
       <aspect>bpm:assignees</aspect>
    </mandatory-aspects>
 </type>

Вот псевдожурнал запуска рабочего процесса в консоли рабочего процесса:

:: deploy alfresco/extension/workflow/processdefinition.xml

deployed definition id: jbpm$69 , name: jbpm$nmwf:MyWorkflow , title: nmwf:MyWorkflow , version: 28

:: var bpm:assignees* person admin,andyg

set var {http://www.alfresco.org/model/bpm/1.0}assignees = [workspace://SpacesStore/73cf1b28-21aa-40ca-9dde-1cff492d0268, workspace://SpacesStore/03297e91-0b89-4db6-b764-5ada2d167424]

:: var bpm:package package 1

set var {http://www.alfresco.org/model/bpm/1.0}package = workspace://SpacesStore/6e2bbbbd-b728-4403-be37-dfce55a83641

:: start bpm:assignees bpm:package

started workflow id: jbpm$63 , def: nmwf:MyWorkflow
path: jbpm$63-@ , node: start , active: true
 task id: jbpm$112 , name: nmwf:submitTask, title: submitTask title , desc: submitTask description , properties: 16
 transition id: [default] , title: Task Done

:: show transitions

path: jbpm$63-@ , node: start , active: true
 task id: jbpm$112 , name: nmwf:submitTask, title: submitTask title , desc: submitTask description , properties: 17
 transition id: [default] , title: Task Done

:: end task jbpm$112

signal sent - path id: jbpm$63-@
path: jbpm$63-@ , node: In Editing , active: true
 task id: jbpm$113 , name: nmwf:submitInEditing, title: submitInEditing title , desc: submitInEditing description , properties: 17
 transition id: Submit for Approval , title: Submit for Approval
 transition id: Request Copyediting Review , title: Request Copyediting Review
 transition id: Request Legal Review , title: Request Legal Review
 transition id: Request Review , title: Request Review

:: show tasks

task id: jbpm$113 , name: nmwf:submitInEditing , properties: 18

:: show my tasks

admin:
 [there is no output here]

Я исходил из того, что назначаемые мной bpm: перед началом рабочего процесса первоначально передаются первому узлу задачи «В редактировании». Очевидно, что уполномоченные находятся на объекте задачи, а не на объекте рабочего процесса. Я добавил аспект назначения в задачу начального состояния, чтобы он мог их удерживать (после того, как у меня возникла проблема; изначально их там не было) и, возможно, они все еще находятся там, но начальное состояние закончилось еще до того, как я получил контроль Вернемся из веб-скрипта (не то, чтобы он помог, если бы он не был завершен, мне нужно, чтобы он находился в режиме «В редактировании», поскольку начальное состояние используется только для регистрации того, что рабочий процесс запущен).

Меня всегда смущало, что свойства, которые мне нужно установить для каждой задачи, необходимо запрашивать до ее ввода (когда вы выбираете переход, вы должны предоставить данные для следующей задачи, прежде чем сможете на самом деле перейдите к следующему заданию, так как вам нужно проверить, что у вас есть все необходимые данные (сначала , а затем сигнализировать о переходе). Однако код для запуска рабочего процесса является асинхронным и, следовательно, не возвращает ни запущенный рабочий процесс, ни текущую задачу (которая в моем случае будет «В редактировании»). Так или иначе, вы не можете установить переменные, такие как bpm: assignees и bpm: dueDate.

Интересно, это проблема со списком задач пользователя. Я устанавливаю сотрудников в списке свойств, но, возможно, эти сотрудники переходят к задаче начального состояния и не переходят к задаче «В редактировании»?

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

Заранее спасибо за любой совет или помощь,

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

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

В jBPM есть концепция параллельных задач (с использованием вилок), но обычное действие требует, чтобы все исполнители выполнили свои задачи до перехода рабочего процесса.Оказывается, что правильный способ решить эту проблему состоит в том, чтобы выполнить задачу для всех назначенных лиц, но когда любой из назначенных лиц завершает свою задачу, мы исправляем переменную, в которой хранится количество назначенных лиц, которые должны выполнить свои задачи (node.nOutOfM), чтобыдурак jBPM в завершении задачи до того, как все исполнители завершили ее (это также может позволить только x из y уполномоченным выполнять задачу).

Вместо публикации обновленного кода, вот статьи, которые я использовалЧтобы решить эту проблему:

http://forums.alfresco.com/en/viewtopic.php?f=30&t=8691

http://forums.alfresco.com/en/viewtopic.php?f=34&t=5189

http://dev.alfresco.com/resource/docs/java/repository/org/alfresco/repo/workflow/jbpm/ForEachFork.html

http://wiki.alfresco.com/wiki/WorkflowAdministration#For_Each_Fork

0 голосов
/ 07 мая 2010

Я не уверен, но я думаю, что вы хотите <pooledactors> здесь вместо <actor>.

Может быть, поэтому ваш wf работает не так, как ожидалось.

<actor>#{bpm_assignees}</actor>

Кроме того, я считаю, что задача должна быть в ваших задачах в составе пула, а не в моих задачах, поскольку это задача в виде пула (потому что вы пытаетесь назначить несколько назначаемых лиц).

...