3

SO コミュニティの皆様、こんにちは。

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

これは正常に実行され、開始ノードのデフォルト トランジションから送信された電子メールは正常に起動します。ただし、タスク リストでワークフローを探しに行くと、そこにはありませんが、完了したタスク リストにはあります。開始ノードからのデフォルト トランジション (唯一のトランジション) は、4 つのトランジションを持つタスク ノードを指します。

ワークフローには 8 つのタスクと 22 のトランジションがあります。ワークフロー コンソールを使用してワークフローを開始し、開始タスクを終了すると、デフォルトの開始ノード遷移に従って次のタスクに適切に移行します。新しいタスクは「show tasks」に表示されますが、「show my tasks」には表示されません (明らかに、「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

ワークフロー全体は大きいので掲載したくありませんが、最初の 2 つのノードを次に示します。

まずスイムレーン:

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

これら 2 つのノードのモデルは次のとおりです。

 <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:assignees が最初のタスク ノード "編集中" に渡されると想定しています。明らかに、担当者はワークフロー オブジェクトではなく、タスク オブジェクトにいます。担当者のアスペクトを開始状態タスクに追加して、(問題が発生した後、最初はそこにいなかった) 彼らを保持できるようにし、おそらくまだそこに座っている可能性がありますが、制御を取得する前に開始状態が終了しましたWeb スクリプトから戻します (終了していなくても役立つわけではありません。開始状態はワークフローが開始されたことを記録するためにのみ使用されるため、「編集中」である必要があります)。

各タスクに設定する必要があるプロパティは、タスクに入る前に要求する必要があることにいつも戸惑いました (トランジションを選択するときは、次のタスクに実際に移動する前に、次のタスクのデータを提供する必要があります)。最初に必要なデータがすべて揃っていることを確認してから、移行を通知する必要があります)。ただし、ワークフローを開始するコードは非同期であるため、開始されたワークフローまたは現在のタスク (私の場合は「編集中」) を返しません。したがって、どちらの方法でも、bpm:assignees や bpm:dueDate などの変数を設定することはできません。

これはユーザー タスク リストの問題でしょうか。プロパティ リストで担当者を設定していますが、担当者が開始状態タスクに移動し、「編集中」タスクに渡されない可能性があります。

これ私の最初の jBPM ワークフローであることに注意してください。見た目がおかしいと感じた場合は、おそらくそうであり、私にはわかりません。

アドバイスやヘルプを事前にありがとう、

4

2 に答える 2

3

そのため、私の問題は、ワークフローがそれらの担当者のいずれかと移行できるようにしながら、複数の担当者を行う方法を誤解していることであることが判明しました。jBPM は単純なモデルでこれをサポートしていないことが判明しました。複数の担当者を割り当てるだけでなく、さらに多くの作業を行う必要があります。動作します。

jBPM には並列タスク (フォークを使用) の概念がありますが、通常のアクションでは、ワークフローが移行する前にすべての担当者がタスクを完了する必要があります。これを解決する正しい方法は、タスクをすべての担当者にフォークすることですが、いずれかの担当者がタスクを完了すると、何人の担当者がタスクを完了しなければならないかを格納する変数 (node.nOutOfM) をパッチします。すべての担当者がタスクを完了する前に jBPM をだましてタスクを終了させます (これにより、y 人中 x 人の担当者だけがタスクを完了する必要があります)。

更新されたコードを投稿するのではなく、この問題を解決するために使用した記事を次に示します。

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

于 2011-10-25T20:26:28.217 に答える
0

よくわかりませんが、<pooledactors>の代わりにここが欲しいと思います<actor>

おそらくこれが、wf が期待どおりに機能しない理由です。

<actor>#{bpm_assignees}</actor>

また、タスクはプールされたタスクであるため(複数の担当者を設定しようとしているため)、マイタスクではなくプールされたタスクにある必要があると思います。

于 2010-05-07T11:44:50.563 に答える