★33°空間‰


                                 ----★七彩服飾  【最潮拜☆日單精品】【Esprit】【Hotwind】滿150包郵-女裝-流行女裝    www.7color.hb.cn

                                 ----智力比知識(shí)重要,素質(zhì)比智力重要,覺悟比素質(zhì)更重要
          posts - 110,comments - 35,trackbacks - 0

          1、? 從宿主程序啟動(dòng) Workflow 實(shí)例(不帶參數(shù)):

          Type type = typeof(WorkflowClass);

          WorkflowInstance workflow = wfRuntime.CreateWorkflow(type).Start();

          ?

          ?

          2、? 從宿主程序啟動(dòng) Workflow 實(shí)例(帶有參數(shù)):

          Dictionary <string, object> parms = newDictionary<string, object>();

          parms.Add("Para1Name", Para1Value);?? //Para1Name 對(duì)應(yīng)于WorkflowClass同類型的屬性

          parms.Add("Para2Name", Para2Value); ? //Para2Name 對(duì)應(yīng)于WorkflowClass同類型的屬性

          ?

          Type type = typeof(WorkflowClass);

          WorkflowInstance workflow = wfRuntime.CreateWorkflow(type, parms).Start();

          ?

          ?

          3、? Workflow 調(diào)用外部方法(多為宿主程序的方法):

          A、?? 定義一個(gè)注明 [ExternalDataExchange] 的接口,申明調(diào)用的方法( Local Service 實(shí)現(xiàn))

          [ExternalDataExchange]

          public interface IApproveService

          {

          string GetApprover(LVInfo obj);

          }

          B、?? 定義一個(gè)實(shí)現(xiàn)了 A 之接口的類(即 Local Service

          public class ApproveService : IApproveService

          {

          public string ? GetApprover(LVInfo obj)

          {

          ???? // 具體業(yè)務(wù)邏輯的實(shí)現(xiàn)

          }

          }

          C、 Workflow 中的調(diào)用實(shí)現(xiàn) ==> 具體的參數(shù)決定了對(duì)應(yīng)的屬性

          a .在 WorkflowClass 中定義屬性“ string Approver LVInfo ObjLVInfo

          b .使用 CallExternalMethodAcitivity ,其屬性中 InterfaceType IApproveService MethodName GetApprover ,其對(duì)應(yīng)的 Parameter ReturnValue Approver Parameter ObjLVInfo

          ?

          ?

          4、? Workflow 響應(yīng)外部事件(可單獨(dú)響應(yīng),亦可用 Listen 偵聽) ==> 3 可并于一起實(shí)現(xiàn):

          A、 定義一個(gè)繼承 System.Workflow.Activities. ExternalDataEventArgs 類的事件參數(shù)類

          public class ApproveEventArgs : ExternalDataEventArgs

          {

          ????????????? public ApproveEventArgs(Guid instanceId, …… ) : base(instanceId)

          {

          // 構(gòu)造函數(shù)業(yè)務(wù)邏輯

          }

          // 其他業(yè)務(wù)邏輯的屬性

          }

          B、?? 定義一個(gè)注明 [ExternalDataExchange] 的接口,申明響應(yīng)的 event Local Service 實(shí)現(xiàn))

          [ExternalDataExchange]

          public interface IApproveService// 具體種類根據(jù)業(yè)務(wù)邏輯需要而定

          {

          event EventHandler<ApproveEventArgs> Approved;

          event EventHandler<ApproveEventArgs> Rejected;

          }

          C、 定義一個(gè)實(shí)現(xiàn)了 B 之接口的類,并實(shí)現(xiàn)各個(gè)具體的事件響應(yīng)(即 Local Service

          ??????? public void Approve()??? // Called by the host to approve an order

          ??????? {

          ??????????? ThreadPool.QueueUserWorkItem(CallBackForApproval);?? // 此處是為了線程的優(yōu)化

          ??????? }

          ??????? 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); // 此處是為了線程的優(yōu)化

          ??????? }

          ??????? 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 中的調(diào)用實(shí)現(xiàn)

          使用 HandleExternalEventAcitivity ,其屬性中 InterfaceType IApproveService EventName 為其對(duì)應(yīng)的事件名稱(如 Approved Rejected )。

          ?

          ?

          5、? 關(guān)于 Listen 的使用說(shuō)明:

          A、 MS 對(duì) Listen 的說(shuō)明:

          Makes the workflow wait for any one of several possible events before the activity proceeds.

          B、 Wait For

          Listen 對(duì)于事件的處理,僅僅起到 wait 的作用。其要求 Local Service 暴露所有的事件處理方法,如 Approve() Reject ;并且要求外界調(diào)用者知道每個(gè)方法具體對(duì)應(yīng)的事件。

          C、 偵聽:

          Listen 對(duì)于事件的偵聽,其實(shí)就是通過(guò) Local Service 對(duì)象的方法觸發(fā)。但 Listen 只能偵聽 WorkflowRuntime Services 集合元素(類型為 ExternalDataExchangeService )中 Service 實(shí)例觸發(fā)的事件。對(duì)于非其中 Local Service 實(shí)例,則不能觸發(fā) Listen Acitivity HandleExternalEventAcitivity Invoked 中指定的方法,即 Local Service 實(shí)例的 event 委托為 null

          D、 添加偵聽服務(wù)的代碼實(shí)現(xiàn):

          static OrderServiceImpl orderService;

          static void Main()

          ??????? {

          orderService = newOrderServiceImpl();

          ?

          WorkflowRuntime workflowRuntime = newWorkflowRuntime();

          ExternalDataExchangeService dataService = newExternalDataExchangeService();

          workflowRuntime.AddService(dataService);

          dataService.AddService(orderService);

          ?

          // 針對(duì)C的說(shuō)明,只有此orderService實(shí)例調(diào)用ApproveReject方法,才能觸發(fā)相應(yīng)事件;而如果其他的實(shí)例,則只能調(diào)用ApproveReject方法,但其event委托為null

          }

          ?

          6、? 聲明: WFF 學(xué)習(xí)的初步階段,有可能本人對(duì)一些理解的概念存在偏頗甚至錯(cuò)誤;此文僅做學(xué)習(xí)探討之用,不負(fù)其他責(zé)任

          posted on 2006-09-25 17:27 圣域飛俠 閱讀(193) 評(píng)論(0)  編輯  收藏 所屬分類: 轉(zhuǎn)載
          主站蜘蛛池模板: 运城市| 塔河县| 新兴县| 吴川市| 东辽县| 衡东县| 沧源| 广饶县| 镶黄旗| 正阳县| 岫岩| 保亭| 大连市| 柳河县| 芜湖县| 昌图县| 依安县| 保亭| 台江县| 措美县| 临桂县| 石台县| 岳普湖县| 两当县| 若尔盖县| 镇江市| 房山区| 茌平县| 瑞安市| 富源县| 漠河县| 鱼台县| 永春县| 洪江市| 台南市| 池州市| 永定县| 民权县| 合江县| 庄浪县| 大厂|