?processdefinition.xml
文件內(nèi)容為:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
process-definition
xmlns
=
""
name
=
"NodeEvent"
>
???
???
<
start-state
name
=
"start-state1"
>
???????
<
transition
to
=
"task-node1"
></
transition
>
???????
<
event
type
=
"node-leave"
>
???????????
<
action
class
=
"cn.itcast.cc.jbpm.node.event.NodeEventTest"
???????????????
name
=
"printNodeEventType"
></
action
>
???????
</
event
>
???
</
start-state
>
???
???
<
task-node
name
=
"task-node1"
>
???
???????
<
task
name
=
"
下訂單
"
>
???????????
<
assignment
actor-id
=
"
客戶
"
></
assignment
>
???????????
???????????
<
event
type
=
"task-create"
>
???????????????
<
action
ref-name
=
"printNodeEventType"
/>
???????????
</
event
>
???????????
<
event
type
=
"task-assign"
>
???????????????
<
action
ref-name
=
"printNodeEventType"
/>
???????????
</
event
>
???????????
<
event
type
=
"task-start"
>
???????????????
<
action
ref-name
=
"printNodeEventType"
/>
???????????
</
event
>
???????????
<
event
type
=
"task-end"
>
???????????????
<
action
ref-name
=
"printNodeEventType"
/>
???????????
</
event
>
???
???????
</
task
>
???????
???????
<
event
type
=
"node-enter"
>
???????????
<
action
ref-name
=
"printNodeEventType"
></
action
>
???????
</
event
>
???????
???????
<
transition
to
=
"end-state1"
></
transition
>
???
</
task-node
>
???
<
end-state
name
=
"end-state1"
>
???????
<
event
type
=
""
></
event
>
???
</
end-state
>
</
process-definition
>
|
????????
如果
task-node
中包含多個
task
。將
event
放在
task
外部,
task-node
的內(nèi)部,所有的
task
將共用同一個事件處理類。如果將
event
放在
task
內(nèi)部,
task
將使用各自內(nèi)部的事件處理類。
?
????????
將流程發(fā)布到
JBOSSWEB
容器中(注意將類“
NodeEventTest
”一同發(fā)布),一步步執(zhí)行查看控制臺的輸出。
?
五、任務(wù)分配
1.
個人任務(wù)
(推模型)
???????
個人任務(wù)屬于個人,只有個人能看到,必須由個人完成。個人任務(wù)的分配方式:
1)
????????
手動添加,通過設(shè)計器設(shè)置
task
的
Actor
屬性值。
2)
????????
Actor
:通過設(shè)計器使用表達(dá)式將
Actor
設(shè)置為
#{customer}
,在事件處理函數(shù)中通過“
executionContext.getContextInstance().setTransientVariable(name, value)
”設(shè)置變量值,動態(tài)更改
actor
。
3)
????????
為
Task
的“
Assignment->Handler
”添加一個實(shí)現(xiàn)了
AssignmentHandler
接口的類,在“
assign
”方法中調(diào)用“
assignable.setActorId(actor);
”方法設(shè)置
Actor
屬性值。
4)
????????
可以在程序的任何位置使用“
TaskInstance.setActorId(actor)
”設(shè)置
Actor
的值。
?
2.
組任務(wù)
(拉
/
競爭模型)
組任務(wù)屬于小組,只有小組成員可以查看,但必須僅有一個人來完成。組任務(wù)的分配試:
1)
????????
手動添加,通過設(shè)計器設(shè)置
task
的
PooledActors
屬性值,使用“
,
”分隔。
2)
????????
PooledActors
:通過設(shè)計器使用表達(dá)式將
PooledActors
屬性設(shè)置為
#{actors}
,在事件處理函數(shù)中通過“
executionContext.getContextInstance().setTransientVariable(name, value)
”設(shè)置變量值,動態(tài)更改
actor
。
3)
????????
為
Task
的“
Assignment->Handler
”添加一個實(shí)現(xiàn)了
AssignmentHandler
接口的類,在“
assign
”方法中調(diào)用“
assignable. setPooleActors (actors);
”方法設(shè)置
PooleActors
屬性值。
4)
????????
可以在程序的任何位置使用“
taskInstance.setPooledActors(actors)
”,設(shè)置
PooledActors
的值。
?
3.
查詢
1)
????????
個人任務(wù):
jbpmContext.getTaskMgmtSession().findTaskInstances (actorId)
。
2)
????????
組任務(wù):
jbpmContext.getTaskMgmtSession().findPooledTaskInstances(actorId)
。
actorId
可以屏蔽
pooledActors
4.Swimlane
(泳道)
??????????????????
湯兄弟今天只是簡單介紹了一下泳道,這個功能并不常用。
????????
泳道圖:
?
????????
OK
,今天的內(nèi)容到此結(jié)束。明天就開始我們的
OA
系統(tǒng)了,主要使用
struts+hibernate+jbpm
開發(fā)!
?
????????
哈哈,加油!
轉(zhuǎn):傳智播客—jbpm與OA項(xiàng)目(二) 續(xù)