简体   繁体   English

在Alfresco需要有关工作流程的帮助

[英]Need help with workflow in Alfresco

Hello SO community, 你好SO社区,

I haven't had any luck getting help in the Alfresco forums, and I'm hoping for more here. 我在Alfresco论坛上得到帮助没有任何运气,我希望在这里有更多。 We are building an application based on Alfresco and jBPM and I have defined a workflow, but I have either defined it wrong or am missing something or there are bugs in Alfresco integration with jBPM and I need help figuring out which and fixing it. 我们正在构建一个基于Alfresco和jBPM的应用程序,我已经定义了一个工作流程,但是我已经定义了错误或者遗漏了某些东西,或者Alfresco与jBPM的集成中存在错误,我需要帮助找出哪些并修复它。 Here is the problem: 这是问题所在:

I have an advanced workflow and I am trying to launch it from JavaScript. 我有一个高级工作流程,我试图从JavaScript启动它。 Here is the code I'm using to start the workflow: 这是我用来启动工作流程的代码:

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

This runs fine and e-mail sent from the start node's default transition fires just fine. 运行正常,从开始节点的默认转换发送的电子邮件就可以了。 However, when I go looking for the workflow in my task list it is not there, but it is in my completed task list. 但是,当我在任务列表中查找工作流程时,它不存在,但它位于我已完成的任务列表中。 The default transition (the only transition) from the start node points at a task node which has four transitions. 来自起始节点的默认转换(唯一转换)指向具有四个转换的任务节点。

There are 8 tasks and 22 transitions in the workflow. 工作流程中有8个任务和22个转换。 When I use the workflow console to start the workflow and end the start task, it properly follows the default start node transition to the next task. 当我使用工作流控制台启动工作流并结束启动任务时,它正确地遵循默认的开始节点转换到下一个任务。 The new task shows up in "show tasks" but does not show up in "show my tasks" (apparently because the task was marked completed for some reason, though it is not in the "end" node). 新任务显示在“显示任务”中但未显示在“显示我的任务”中(显然是因为任务因某种原因被标记为已完成,但它不在“结束”节点中)。 The task is: 任务是:

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

If I do "show transitions" it looks just as I would expect: 如果我“显示转换”,它看起来就像我期望的那样:

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

I don't want to post the entire workflow as it's large, but here are the first two nodes: 我不想发布整个工作流,因为它很大,但这里是前两个节点:

First the swimlanes: 首先是泳道:

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

Now the nodes: 现在节点:

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

Here is the model for these two nodes: 以下是这两个节点的模型:

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

Here is a pseudo-log of running the workflow in the workflow console: 以下是在工作流控制台中运行工作流的伪日志:

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

I have been making the assumption that the bpm:assignees that I am setting before starting the workflow initially are getting passed to the first task node "In Editing". 我一直在假设我在开始工作流程之前设置的bpm:assignees最初被传递到第一个任务节点“In Editing”。 Clearly the assignees are on the task object and not on the workflow object. 显然,受让人是在任务对象上,而不在工作流对象上。 I added the assignees aspect to the start-state task so that it could hold them (after I had a problem; initially they were not there) and possibly they are still sitting there, but the start-state has ended before I even get control back from the web script (not that it would help if it wasn't ended, I need it to be in "In Editing" as the start-state is only used to log that the workflow was started). 我将assignees方面添加到启动状态任务中,以便它可以保存它们(在我遇到问题之后;最初它们不存在)并且可能它们仍然坐在那里,但启动状态已经在我获得控制之前结束从Web脚本返回(如果它没有结束则不会有帮助,我需要它在“In Editing”中,因为start-state仅用于记录工作流程已启动)。

It has always confused me that the properties that I need to set on each task need to be requested before the task is entered (when you choose a transition you must provide the data for the next task before you can actually move to the next task as you have to validate that you have all of the required data first and then signal the transition). 它总是让我感到困惑的是,在输入任务之前需要在每个任务上设置我需要设置的属性(当您选择转换时,必须先为下一个任务提供数据,然后才能真正转移到下一个任务你必须确认你拥有所有必要的数据然后再信号的转换)。 However, the code to start the workflow is asynchronous and therefore does not return either the started workflow or the current task (which in my case would be "In Editing"). 但是,启动工作流的代码是异步的,因此不返回已启动的工作流或当前任务(在我的情况下将是“在编辑中”)。 So, either way you cannot set variables such as bpm:assignees and bpm:dueDate. 因此,无论哪种方式,您都无法设置变量,如bpm:assignees和bpm:dueDate。

I wonder if this is the problem with the user task list. 我想知道这是否是用户任务列表的问题。 I'm setting the assignees in the property list, but maybe those assignees are going to the start-state task and are not getting passed to the "In Editing" task? 我正在设置属性列表中的受理人,但也许那些受理人将进入启动状态任务并且没有被传递到“编辑中”任务?

Note that this is my first jBPM workflow, so please don't assume I know what I'm doing. 请注意,这我的第一个jBPM工作流程,所以请不要认为我知道我在做什么。 If you see something that looks off, it probably is and I just don't know it. 如果你看到的东西看起来很像,它可能是,我只是不知道它。

Thanks in advance for any advice or help, 在此先感谢任何建议或帮助,

So, it turned out that my problem was misunderstanding how to do multiple assignees while allowing the workflow to transition with any one of those assignees. 因此,事实证明,我的问题是误解了如何做多个受让人,同时允许工作流程与任何一个受让人一起过渡。 It turns out that jBPM doesn't support this in a simple model, you have to do a lot more work than just assigning multiple assignees.I had followed a bad example that I found on the Internet and had made an incorrect assumption about how this works. 事实证明,jBPM在一个简单的模型中不支持这一点,你必须做更多的工作,而不仅仅是分配多个受让人。我曾经在一个糟糕的例子中找到了我在互联网上发现并做出了错误的假设作品。

jBPM does have a concept of parallel tasks (using forks), but the normal action requires all assignees to complete their tasks before the workflow will transition. jBPM确实具有并行任务(使用分支)的概念,但正常操作要求所有受让人在工作流转换之前完成其任务。 It turns out that the right way to solve this is to fork the task to all of the assignees, but when any of the assignees completes their task we patch up the variable that stores how many assignees must complete their tasks (node.nOutOfM) to fool jBPM into finishing the task before all assignees have completed it (this can also allow only x out of y assignees to have to complete the task). 事实证明,解决这个问题的正确方法是将任务分配给所有受让人,但是当任何受让人完成任务时,我们会修补存储有多少受让人必须完成任务的变量(node.nOutOfM)在所有受让人完成任务之前,愚弄jBPM完成任务(这也可以让只有x个y受让人必须完成任务)。

Rather than posting updated code, here are the articles that I used to solve this problem: 而不是发布更新的代码,这里是我用来解决这个问题的文章:

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

http://forums.alfresco.com/en/viewtopic.php?f=34&t=5189 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://dev.alfresco.com/resource/docs/java/repository/org/alfresco/repo/workflow/jbpm/ForEachFork.html

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

I'm not sure, but I think that you want <pooledactors> here instead of <actor> . 我不确定,但我认为你想要<pooledactors>而不是<actor>

Maybe this is why your wf doesn't work as expected. 也许这就是为什么你的wf没有按预期工作的原因。

<actor>#{bpm_assignees}</actor>

Also, I believe that the task should be in your Pooled tasks, not your My Tasks, as it is a pooled task (because you're trying to set multiple assignees). 此外,我认为任务应该在您的池任务中,而不是您的我的任务,因为它是一个池化任务(因为您正在尝试设置多个受理人)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM