日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Activity功能控件

發布時間:2024/9/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Activity功能控件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CodeActivity

CodeActivity提供了一個ExecuteCode事件,可綁定一個(ByVal sender As System.Object, ByVal e As System.EventArgs)格式的Sub方法,每當流程運行到該結點時行綁定到該事件的方法

ExecuteCode事件

流程到該結點時要執行的代碼

Private Sub code_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs)

End Sub

如果綁定不上,或要改變綁定時報錯,可在Workflow1.designer.vb中的手寫綁定代碼

提供了一個延時的結點,Delay結點就能使實例進入idle狀態,并觸發引擎的WorkflowIdled事件

已被SqlWorkflowPersistenceService持久化的,Delay狀態的實例,在到時后會被刷回引擎,其他狀態的實例不會被刷回引擎

SqlWorkflowPersistenceService會不停的刷InstanceState表,發現有狀態為Delay的實例,且nextTimer小于當前時間,就執行他。

SqlWorkflowPersistenceService類的一個構造函數,可設置引如何對待進入idle狀態的實例,為真時,當工作流進入到一個idle狀態時自動unload它

更多的見自定義持久化類的Delay與idle部分

TimeoutDuration 屬性

要等待的時間值

格式1: 23:59:59

格式2: 500.23.59.59

InitializeTimeoutDuration 事件

開始進入等待狀態前發生該事件

(object sender, EventArgs e)

CallExternalMethodActivity

在工作流內部調用外部方法

1.InterfaceType要綁定到標記為[System.Workflow.Activities.ExternalDataExchange()]的一個接口上

2.MethodName 要綁定到該接口聲明的一個方法

3.引擎中要加載ExternalDataExchange服務

4.ExternalDataExchange服務,要加載實現[1]所綁定接口類的實例

5.運行到CallExternalMethodActivity結點后自動調用實例中的方法。用參數映射中的設定傳參,得到返回值

6.參數映射見

MethodInvoking事件

開始調用外部方法時發生該事件

?private void callExternalMethodActivity1_MethodInvoking(object sender, EventArgs e)

?{//方法調用時?? }

WorkflowRuntime實例

方法:AddService(obj)

ExternalDataExchangeService實例

方法:AddService(obj)

實?? 例

[System.Workflow.Activities.ExternalDataExchange()]

public interface 外部方法映射接口

{string? 一個外部方法(string? wxd, string lzm);}

?public class 功能類_外部方法 : 外部方法映射接口

{? public string?? 一個外部方法(string? wxd, string lzm)

??????? { return wxd + lzm;}???

}

HandleExternalEventActivity

綁定外部事件(指工作流內部事件在宿主中觸發)

1.InterfaceType要綁定到標記為[System.Workflow.Activities.ExternalDataExchange()]的一個接口上

2.EventName 要綁定到該接口聲明的一個事件,事件格式最好與Invoked的事件簽名一至

(object sender, ExternalDataEventArgs e)

e參數可以通過重寫ExternalDataEventArgs類進行括充,下例就重寫了

(事件用的是2.0的寫法,也可以使用傳統寫法)

3.引擎中要加載ExternalDataExchange服務

4.ExternalDataExchange服務,要加載實現[1]所綁定接口類的實例

5.運行到HandleExternalEventActivity結點后,會進入idle狀態,蘇酲時間為9999-12-31

6.只有當宿主中觸發綁定的事件后才會繼續向下運行。

7.下例中如果所傳的“InstanceId”與當前實例的[InstanceId]不一至時會報錯

8.觸發事件時的兩個參數值會傳入HandleExternalEventActivity的Invoked事件對應的參數,也會賦給參數映射中的設定

9.觸發事件時 對象.觸發事件("發送對象", 當前操作的實例.InstanceId ??) ????將要觸發該事件的工作流實例的GUID號傳入是非常重要的,因為引擎中可能有多個實例在等待該事件,發送工作流實例的GUID號可以告訴引擎是要觸發那一個實例事件

10.在實例掛起或沒到HandleExternalEventActivity結點時,也可以在外部觸發事件,這時當實例運行到該結點時HandleExternalEventActivity就可直接過去,而不用再觸發了

Invoked事件

外部事件發生后發生該事件

private void handleExternalEvent_Invoked(object sender, ExternalDataEventArgs e)

e.InstanceId

e.Identity

e.WaitForIdle

e.WorkHandler

e.WorkItem

該事件中的兩個參數與參數映射中的設定是一樣的

可進行類型轉換以得到自定義的擴充:? (事件標志)e).自定義存值

public class 功能類_外部事件: 外部事件映射接口? {

public event EventHandler<事件標志> 一個外部事件;

public string 自定義存值;

public void 觸發事件(object sender ,Guid id)

?? {? 事件標志 e = new 事件標志(id);

e.自定義存值 = 自定義存值;

???? ??一個外部事件(sender, e);}?????????????? }

[System.Workflow.Activities.ExternalDataExchange()]

public interface 外部事件映射接口

{event System.EventHandler<事件標志> 一個外部事件;}

宿主

[Serializable()]

public class 事件標志:Workflow.Activities.ExternalDataEventArgs? {

private Guid 實例GUID_存值;

public 事件標志(Guid instanceId):base(instanceId)

{this.實例GUID_存值=instanceId; }

public? Guid 實例GUID

{get{return this.實例GUID_存值;} set{this.實例GUID_存值 = value;}}

public string 自定義存值;???????????????????????????????????????? }

//可以重寫ExternalDataEventArgs,以實與在事件參數中傳遞自定義信息

WorkflowRuntime實例

方法:AddService(obj)

ExternalDataExchangeService實例

方法:AddService(obj)

對象

?'觸發外部事件的一個方法

???? 對象.自定義存值= "wxd"

?'[發送對象]:不能將[當前操作的實例.WorkflowRuntime]發回去

對象.觸發事件("發送對象", 當前操作的實例.InstanceId)

結束外部事件的等待狀態

1.設計工作流時,使用一個listen監聽,其中一個分支是HandleExternalEventActivity,另一個分支是Delay,在Delay中設定一個等待超時

2.在引擎中直接將實例終止

3.對事件隊列發送終止信息

??????? Dim 隊列集合As ReadOnlyCollection(Of WorkflowQueueInfo) = 當前操作的實例.GetWorkflowQueueData()

??????? For Each 隊列As WorkflowQueueInfo In 隊列集合

??????????? Dim 事件隊例As EventQueueName = TryCast(隊列.QueueName, EventQueueName)

??????????? If 事件隊例IsNot Nothing Then

??????????????? 'handleExternalEventActivity1控件為假時,不會執行到該單元

??????????????? 'get activity that is waiting for event

??????????????? '獲得到activity以等侍事件

??????????????? Dim 阻塞的Activity As ReadOnlyCollection(Of String) = 隊列.SubscribedActivityNames

??????????????? '等待事件的控件名

??????????????? Console.WriteLine(阻塞的Activity.Item(0).ToString())

??????????????? ' this event is never going to arrive eg. employee left the company

??????????????? ' lets send an exception to this queue

??????????????? ' it will either be handled by exception handler that was modeled in workflow

??????????????? ' or the runtime will unwind running compensation handlers and exit the workflow

??????????????? '這個事件從來不會到達eg ,

??????????????? '讓我們發送一個錯誤到這個隊列

??????????????? '它將綁定到exception handler,這是workFlow的一種模式

??????????????? '或者運行時將unwind[解開,打開]運行補償綁定,并且退出工作流

??????????????? Console.WriteLine(事件隊例.MethodName)

??????????????? Console.WriteLine(事件隊例.InterfaceType.Name)

??????????????? Dim ec As New Exception("wxd添加的自定義錯誤信息")

??????????????? 當前操作的實例.EnqueueItem(隊列.QueueName, ec, Nothing, Nothing)

????????? End If

??????? Next

SuspendActivity

一個掛起流程的結點,與在宿主中使用[實例.Suspend("參數")]效果一樣

該結點與[實例.Suspend("參數")]一樣會觸發引擎的WorkflowSuspended事件

引擎的WorkflowSuspended事件的 e.Error就是Error屬性設置的值

Error屬性

就是[實例.Suspend("參數")]中的參數值,該”參數值”可以被WorkflowSuspended事件與跟蹤服務接收

引擎的WorkflowSuspended事件的 e.Error就是Error屬性設置的值

terminateActivity

一個終止流程的結點,,與在宿主中使用[實例.Terminate("該實例已被宿主Terminate")]效果一樣

該結點與[實例.Terminate("該實例已被宿主Terminate")]一樣會觸發引擎的OnWorkflowTerminated事件,

引擎的OnWorkflowTerminated事件的e.Exception.Message就是Error屬性設置的值

Error屬性

就是[實例.Terminate("參數")]中的參數值,該”參數值”可以被OnWorkflowTerminated事件與跟蹤服務接收

引擎的OnWorkflowTerminated事件的e.Exception.Message就是Error屬性設置的值

ThrowActivity

1.一個拋出異常的結點

2.該結點將一個自定義的異常對象拋給引擎,會觸發引擎的OnWorkflowTerminated事件

3.引擎OnWorkflowTerminated事件的e.Exception可得到

4.使用該結點,與在代碼中使用[throw 異常] 的不同之處是[throw 異常] 在調試狀態會使編譯器停屏

[Serializable]

? public? class 異常A : System.Exception

??? {

??????? public 異常A(string s)? : base(s)

??????? {

??????? }

}

public 異常A Fault1 = new 工作流模板.異常A("一個自定義的異常");

InvokeWebServiceActivity

調用WebService方法

屬性

ProxyClass

SoapHttpClientProcotol 類對實要調用的Webservice的實現

當添加該控件時,會出現一個添加Web引用的向導,可在向導中完成對SoapHttpClientProcotol的實現

URL

要調用的Web Service的URL

MethodName

調用Web Services的方法名

設計器會跟據該方法參數出現對應的[參數映射向導]

事件

Invoked

執行完成后

Invoking

要執行時

SessionId

WF 支持在一個Workflow中通過cookie 支持多個InvokeWebServiceActivity的調用在一個Session中

這時候,你需要設置InvokeWebServiceActivity的SessionId屬性,如果你將一個Workflow中的多個InvokeWebServiceActivity的SessionId 設置成相同的,那么WF在調用和執行完第一個InvokeWebServiceActivity 之后,也會以相同的cookie 傳回給Web Service的服務器端,以確保服務器端能夠跟蹤到客戶端的情況。SessionId 是一個字符串,如果是空字符串,則表示會啟用一個新的Session。

總結

以上是生活随笔為你收集整理的Activity功能控件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。