★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 圣域飛俠 閱讀(187) 評論(0)  編輯  收藏 所屬分類: 轉載
          主站蜘蛛池模板: 南阳市| 河北省| 游戏| 疏附县| 夏河县| 通化市| 杭州市| 九台市| 玉树县| 吴旗县| 中江县| 闸北区| 呼图壁县| 上思县| 阳城县| 桐柏县| 新竹市| 丽水市| 财经| 固镇县| 栾城县| 彭泽县| 萨嘎县| 外汇| 合肥市| 洛阳市| 格尔木市| 观塘区| 昔阳县| 瑞安市| 建昌县| 张家港市| 宿州市| 弋阳县| 龙州县| 江达县| 新密市| 乌兰浩特市| 南平市| 宝应县| 富平县|