1、
从宿主程序启动
Workflow
实例(不带参数):
Type
type = typeof(WorkflowClass);
WorkflowInstance
workflow = wfRuntime.CreateWorkflow(type).Start();
2、
从宿主程序启动
Workflow
实例(带有参数):
Dictionary
<string, object> parms = newDictionary<string, object>();
parms.Add("Para1Name", Para1Value); //Para1Name
对应于WorkflowClass同类型的属性
parms.Add("Para2Name", Para2Value); //Para2Name
对应于WorkflowClass同类型的属性
Type
type = typeof(WorkflowClass);
WorkflowInstance
workflow = wfRuntime.CreateWorkflow(type, parms).Start();
3、
Workflow
调用外部方法(多为宿主程序的方法):
A、
定义一个注明
[ExternalDataExchange]
的接口,申明调用的方法(
Local Service
实现)
[ExternalDataExchange]
public
interface
IApproveService
{
string
GetApprover(LVInfo obj);
}
B、
定义一个实现了
A
之接口的类(即
Local Service
)
public
class
ApproveService : IApproveService
{
public string
GetApprover(LVInfo obj)
{
//
具体业务逻辑的实现
}
}
C、
Workflow
中的调用实现
==>
具体的参数决定了对应的属性
a
.在
WorkflowClass
中定义属性“
string Approver
,
LVInfo ObjLVInfo
”
b
.使用
CallExternalMethodAcitivity
,其属性中
InterfaceType
为
IApproveService
,
MethodName
为
GetApprover
,其对应的
Parameter ReturnValue
为
Approver
,
Parameter
为
ObjLVInfo
。
4、
Workflow
响应外部事件(可单独响应,亦可用
Listen
侦听)
==>
与
3
可并于一起实现:
A、
定义一个继承
System.Workflow.Activities. ExternalDataEventArgs
类的事件参数类
public
class
ApproveEventArgs : ExternalDataEventArgs
{
public ApproveEventArgs(Guid instanceId,
……
) : base(instanceId)
{
//
构造函数业务逻辑
}
//
其他业务逻辑的属性
}
B、
定义一个注明
[ExternalDataExchange]
的接口,申明响应的
event
(
Local Service
实现)
[ExternalDataExchange]
public
interface
IApproveService//
具体种类根据业务逻辑需要而定
{
event EventHandler<ApproveEventArgs> Approved;
event EventHandler<ApproveEventArgs> Rejected;
}
C、
定义一个实现了
B
之接口的类,并实现各个具体的事件响应(即
Local Service
)
public
void Approve() // Called by the host to approve an order
{
ThreadPool.QueueUserWorkItem(CallBackForApproval); //
此处是为了线程的优化
}
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); //
此处是为了线程的优化
}
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
中的调用实现
使用
HandleExternalEventAcitivity
,其属性中
InterfaceType
为
IApproveService
,
EventName
为其对应的事件名称(如
Approved
或
Rejected
)。
5、
关于
Listen
的使用说明:
A、
MS
对
Listen
的说明:
Makes the workflow wait for any one of several possible events before the activity proceeds.
B、
Wait For
:
Listen
对于事件的处理,仅仅起到
wait
的作用。其要求
Local Service
暴露所有的事件处理方法,如
Approve()
、
Reject
;并且要求外界调用者知道每个方法具体对应的事件。
C、
侦听:
Listen
对于事件的侦听,其实就是通过
Local Service
对象的方法触发。但
Listen
只能侦听
WorkflowRuntime
的
Services
集合元素(类型为
ExternalDataExchangeService
)中
Service
实例触发的事件。对于非其中
Local Service
实例,则不能触发
Listen
子
Acitivity HandleExternalEventAcitivity
的
Invoked
中指定的方法,即
Local Service
实例的
event
委托为
null
。
D、
添加侦听服务的代码实现:
static
OrderServiceImpl orderService;
static
void
Main()
{
orderService = newOrderServiceImpl();
WorkflowRuntime
workflowRuntime = newWorkflowRuntime();
ExternalDataExchangeService
dataService = newExternalDataExchangeService();
workflowRuntime.AddService(dataService);
dataService.AddService(orderService);
//
针对C的说明,只有此orderService实例调用Approve或Reject方法,才能触发相应事件;而如果其他的实例,则只能调用Approve或Reject方法,但其event委托为null
}
6、
声明:
WFF
学习的初步阶段,有可能本人对一些理解的概念存在偏颇甚至错误;此文仅做学习探讨之用,不负其他责任
。
posted on 2006-09-25 17:27
圣域飞侠 阅读(185)
评论(0) 编辑 收藏 所属分类:
转载