★33°空间‰


                       ----★七彩服饰  【最潮拜☆日单精品】【Esprit】【Hotwind】满150包邮-女装-流行女装    www.7color.hb.cn

                       ----智力比知识重要,素质比智力重要,觉悟比素质更重要
posts - 110,comments - 35,trackbacks - 0

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实例调用ApproveReject方法,才能触发相应事件;而如果其他的实例,则只能调用ApproveReject方法,但其event委托为null

}

 

6、  声明: WFF 学习的初步阶段,有可能本人对一些理解的概念存在偏颇甚至错误;此文仅做学习探讨之用,不负其他责任

posted on 2006-09-25 17:27 圣域飞侠 阅读(185) 评论(0)  编辑  收藏 所属分类: 转载

只有注册用户登录后才能发表评论。


网站导航: