Вопрос

Привет так сообщество,

Мне не повезло получать помощь на форумах 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 перехода. Когда я использую консоль рабочего процесса для запуска рабочего процесса и завершить начальную задачу, она правильно следит за переходом запуска по умолчанию для следующей задачи. Новая задача появляется в «Показать задачи», но не отображается в «Показать мои задания» (видимо, поскольку задача была помечена по какой-то причине, хотя она не находится в узле «End»). Задача:

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: ждетельными и BPM: Duedate.

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

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

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

Это было полезно?

Решение

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

JBPM имеет концепцию параллельных задач (используя вилки), но обычное действие требует от всех заданий для выполнения своих задач до того, как рабочий процесс будет переходить. Оказывается, правильный путь для решения этого - это вилить задачу всем задачам, но когда любой из цессий завершает свою задачу, мы исправим переменную, которая хранит, сколько назначений должны выполнить свои задачи (Node.noutofm) Дурайте JBPM в заканчивающую задачу, прежде чем все задачи завершили его (это также может позволить только Xured of Y ждем, чтобы завершить задачу).

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

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

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

http://dev.alfresco.com/resource/docs/java/reposity/org/alfresco/repo/workflow/jbpm/foreachfork.html.

http://wiki.alfresco.com/wiki/workflowadministration#for_each_fork.

Другие советы

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

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

<actor>#{bpm_assignees}</actor>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top