★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)  編輯  收藏 所屬分類: 轉載
          主站蜘蛛池模板: 大名县| 繁峙县| 湖州市| 呼伦贝尔市| 海城市| 陵水| 清水河县| 平山县| 桂东县| 光泽县| 石楼县| 靖宇县| 陇西县| 邓州市| 海林市| 海原县| 吴江市| 泾源县| 苍南县| 张掖市| 贵溪市| 白水县| 交城县| 寿光市| 攀枝花市| 惠安县| 广州市| 剑河县| 亚东县| 新闻| 读书| 北辰区| 阜新| 晋中市| 尚志市| 棋牌| 尖扎县| 田阳县| 乌海市| 剑阁县| 兴国县|