1、?
從宿主程序啟動(dòng)
Workflow
實(shí)例(不帶參數(shù)):
Type
type = typeof(WorkflowClass);
WorkflowInstance
workflow = wfRuntime.CreateWorkflow(type).Start();
?
?
2、?
從宿主程序啟動(dòng)
Workflow
實(shí)例(帶有參數(shù)):
Dictionary
<string, object> parms = newDictionary<string, object>();
parms.Add("Para1Name", Para1Value);?? //Para1Name
對(duì)應(yīng)于WorkflowClass同類型的屬性
parms.Add("Para2Name", Para2Value); ? //Para2Name
對(duì)應(yīng)于WorkflowClass同類型的屬性
?
Type
type = typeof(WorkflowClass);
WorkflowInstance
workflow = wfRuntime.CreateWorkflow(type, parms).Start();
?
?
3、?
Workflow
調(diào)用外部方法(多為宿主程序的方法):
A、??
定義一個(gè)注明
[ExternalDataExchange]
的接口,申明調(diào)用的方法(
Local Service
實(shí)現(xiàn))
[ExternalDataExchange]
public
interface
IApproveService
{
string
GetApprover(LVInfo obj);
}
B、??
定義一個(gè)實(shí)現(xiàn)了
A
之接口的類(即
Local Service
)
public
class
ApproveService : IApproveService
{
public string
? GetApprover(LVInfo obj)
{
???? //
具體業(yè)務(wù)邏輯的實(shí)現(xiàn)
}
}
C、
Workflow
中的調(diào)用實(shí)現(xiàn)
==>
具體的參數(shù)決定了對(duì)應(yīng)的屬性
a
.在
WorkflowClass
中定義屬性“
string Approver
,
LVInfo ObjLVInfo
”
b
.使用
CallExternalMethodAcitivity
,其屬性中
InterfaceType
為
IApproveService
,
MethodName
為
GetApprover
,其對(duì)應(yīng)的
Parameter ReturnValue
為
Approver
,
Parameter
為
ObjLVInfo
。
?
?
4、?
Workflow
響應(yīng)外部事件(可單獨(dú)響應(yīng),亦可用
Listen
偵聽(tīng))
==>
與
3
可并于一起實(shí)現(xiàn):
A、
定義一個(gè)繼承
System.Workflow.Activities. ExternalDataEventArgs
類的事件參數(shù)類
public
class
ApproveEventArgs : ExternalDataEventArgs
{
?????????????
public ApproveEventArgs(Guid instanceId,
……
) : base(instanceId)
{
//
構(gòu)造函數(shù)業(yè)務(wù)邏輯
}
//
其他業(yè)務(wù)邏輯的屬性
}
B、??
定義一個(gè)注明
[ExternalDataExchange]
的接口,申明響應(yīng)的
event
(
Local Service
實(shí)現(xiàn))
[ExternalDataExchange]
public
interface
IApproveService//
具體種類根據(jù)業(yè)務(wù)邏輯需要而定
{
event EventHandler<ApproveEventArgs> Approved;
event EventHandler<ApproveEventArgs> Rejected;
}
C、
定義一個(gè)實(shí)現(xiàn)了
B
之接口的類,并實(shí)現(xiàn)各個(gè)具體的事件響應(yīng)(即
Local Service
)
???????
public
void Approve()??? // Called by the host to approve an order
??????? {
???????????
ThreadPool.QueueUserWorkItem(CallBackForApproval);?? //
此處是為了線程的優(yōu)化
??????? }
???????
private
void CallBackForApproval(object o)
??????? {
????????
???
EventHandler<ApproveEventArgs> orderApproved = this.Approved;
???????????
if (orderApproved != null)
??????????????? orderApproved(null, newApproveEventArgs(instanceId.InstanceId,
……));
??????? }
?
???????
public
void Reject()???? // Called by the host to reject an order
??????? {
???????????
ThreadPool.QueueUserWorkItem(CallBackForRejection); //
此處是為了線程的優(yōu)化
??????? }
???????
private
void CallBackForRejection(object o)
??????? {
???????????
EventHandler<ApproveEventArgs> orderRejected = this.Rejected;
???????????
if (orderRejected != null)
??????????????? orderRejected(null, newApproveEventArgs(instanceId.InstanceId,
……));
??????? }
?
// Events that handled within a workflow by HandleExternalEventActivity activities
public
event
EventHandler<ApproveEventArgs> Approved;
public
event
EventHandler<ApproveEventArgs> Rejected;
D、
Workflow
中的調(diào)用實(shí)現(xiàn)
使用
HandleExternalEventAcitivity
,其屬性中
InterfaceType
為
IApproveService
,
EventName
為其對(duì)應(yīng)的事件名稱(如
Approved
或
Rejected
)。
?
?
5、?
關(guān)于
Listen
的使用說(shuō)明:
A、
MS
對(duì)
Listen
的說(shuō)明:
Makes the workflow wait for any one of several possible events before the activity proceeds.
B、
Wait For
:
Listen
對(duì)于事件的處理,僅僅起到
wait
的作用。其要求
Local Service
暴露所有的事件處理方法,如
Approve()
、
Reject
;并且要求外界調(diào)用者知道每個(gè)方法具體對(duì)應(yīng)的事件。
C、
偵聽(tīng):
Listen
對(duì)于事件的偵聽(tīng),其實(shí)就是通過(guò)
Local Service
對(duì)象的方法觸發(fā)。但
Listen
只能偵聽(tīng)
WorkflowRuntime
的
Services
集合元素(類型為
ExternalDataExchangeService
)中
Service
實(shí)例觸發(fā)的事件。對(duì)于非其中
Local Service
實(shí)例,則不能觸發(fā)
Listen
子
Acitivity HandleExternalEventAcitivity
的
Invoked
中指定的方法,即
Local Service
實(shí)例的
event
委托為
null
。
D、
添加偵聽(tīng)服務(wù)的代碼實(shí)現(xiàn):
static
OrderServiceImpl orderService;
static
void
Main()
??????? {
orderService = newOrderServiceImpl();
?
WorkflowRuntime
workflowRuntime = newWorkflowRuntime();
ExternalDataExchangeService
dataService = newExternalDataExchangeService();
workflowRuntime.AddService(dataService);
dataService.AddService(orderService);
?
//
針對(duì)C的說(shuō)明,只有此orderService實(shí)例調(diào)用Approve或Reject方法,才能觸發(fā)相應(yīng)事件;而如果其他的實(shí)例,則只能調(diào)用Approve或Reject方法,但其event委托為null
}
?
6、?
聲明:
WFF
學(xué)習(xí)的初步階段,有可能本人對(duì)一些理解的概念存在偏頗甚至錯(cuò)誤;此文僅做學(xué)習(xí)探討之用,不負(fù)其他責(zé)任
。
posted on 2006-09-25 17:27
圣域飛俠 閱讀(196)
評(píng)論(0) 編輯 收藏 所屬分類:
轉(zhuǎn)載