★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 圣域飛俠 閱讀(193) 評論(0)  編輯  收藏 所屬分類: 轉載
          主站蜘蛛池模板: 泰和县| 衢州市| 海南省| 胶南市| 桦甸市| 肥东县| 奉贤区| 静海县| 浦县| 长治县| 枣庄市| 镇原县| 唐海县| 建瓯市| 德化县| 邓州市| 濉溪县| 剑阁县| 彝良县| 武山县| 都匀市| 乐至县| 中牟县| 侯马市| 皮山县| 阿克苏市| 河西区| 宁南县| 竹溪县| 顺平县| 新化县| 馆陶县| 绍兴市| 剑川县| 龙江县| 福鼎市| 汨罗市| 日土县| 翼城县| 余姚市| 青神县|