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。

 


本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2010/12/19/1910540.html,如需转载请自行联系原作者

目录
相关文章
|
8月前
|
存储 SQL 运维
Hologres OLAP场景核心能力介绍-2024实时数仓Hologres线上公开课02
本次分享由Hologres产品经理赵红梅(梅酱)介绍Hologres在OLAP场景中的核心能力。内容涵盖OLAP场景的痛点、Hologres的核心优势及其解决方法,包括实时数仓分析、湖仓一体加速、丰富的索引和查询性能优化等。此外,还介绍了Hologres在兼容PG生态、支持多种BI工具以及高级企业级功能如计算组隔离和serverless computing等方面的优势。最后通过小红书和乐元素两个典型客户案例,展示了Hologres在实际应用中的显著效益,如运维成本降低、查询性能提升及成本节省等。
233 7
|
12月前
|
Python
python获取字符串()里面的字符
在Python中,如果你想获取字符串中括号(比如圆括号`()`、方括号`[]`或花括号`{}`)内的字符,你可以使用正则表达式(通过`re`模块)或者手动编写代码来遍历字符串并检查字符。 这里,我将给出使用正则表达式的一个例子,因为它提供了一种灵活且强大的方式来匹配复杂的字符串模式。 ### 使用正则表达式 正则表达式允许你指定一个模式,Python的`re`模块可以搜索字符串以查找匹配该模式的所有实例。 #### 示例:获取圆括号`()`内的内容 ```python import re def get_content_in_parentheses(s): # 使用正则表达
264 36
|
运维 Kubernetes jenkins
基于Jira的运维发布平台的设计与实现
基于Jira的运维发布平台的设计与实现
基于Jira的运维发布平台的设计与实现
|
JavaScript Ubuntu jenkins
Jenkins详细安装配置部署
Jenkins是一款流行的开源持续集成/持续交付(CI/CD)工具,可以实现自动化构建、测试和部署软件。下面是Jenkins的详细安装、配置和部署过程。
1236 0
|
11月前
|
存储 安全 网络安全
云计算时代的网络安全挑战与对策
【9月更文挑战第36天】随着云计算技术的飞速发展,企业和用户越来越倾向于将数据和应用程序迁移到云端。这种转变虽然带来了便利和效率的提升,但同时也引发了新的网络安全问题。本文旨在探讨云计算环境下的网络安全挑战,并提出相应的解决策略。我们将从云服务的基本概念入手,深入分析当前面临的主要安全威胁,并结合最新的技术进展,讨论如何构建一个更加安全的云环境。
|
传感器 数据采集 安全
LabVIEW编程控制ABB机械臂
LabVIEW编程控制ABB机械臂
216 0
|
XML JavaScript 前端开发
【一种关于flowable 的工作流设计器】workflow-bpmn-modeler-antdv的使用
【一种关于flowable 的工作流设计器】workflow-bpmn-modeler-antdv的使用
2373 0
|
存储 算法 关系型数据库
PostgreSQL 垃圾回收参数优化之 - maintenance_work_mem , autovacuum_work_mem
PostgreSQL 垃圾回收参数优化之 - maintenance_work_mem , autovacuum_work_mem
3694 1
|
前端开发 Java 数据挖掘
基于 Jira 的产品需求全生命周期管理实践
在整个需求全生命周期的反馈回路中,如何对需求、项目、任务、缺陷、线上质量和功能优化进行有效组织和管理的呢?
2650 1