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功能控件相关推荐

  1. Android动画效果 translate、scale、alpha、rotate 切换Activity动画 控件位置调整

    2011.10.28注:如果需要控件停在动画后的位置,需要设置android:fillAfter属性为true,在set节点中.默认在动画结束后回到动画前位置.设置android:fillAfter后 ...

  2. 【delphi】各大平台短信功能控件实现(含源代码、演示程序、帮助)

    阿里云.腾讯云.百度云.京东云等各大平台Delphi开发短信功能开发介绍 当下,无论是注册账户还是发送业务通知,短信功能已经是必不可少,能够提供发送短信功能的平台也非常多,各个平台短信功能大同小异,开 ...

  3. android 获取父容器的背景,Android笔记--Fragment获取父Activity的控件并修改内容demo...

    1.首先在Activity里动态加载Fragment, BlankFragment blankFragment = new BlankFragment(); FragmentManager fragm ...

  4. Qt实现验证码功能控件

    效果图: 原理 随机挑选数字或者字母,随机选取颜色,通过绘制实现数字和字母验证码以及背景噪点 核心代码 //随机获取验证码数字和字母 QString Verification::getVerifica ...

  5. 葡萄城ComponentOne全功能开发控件套包发布2017V3 新版本

    日前,全球最大的控件提供商葡萄城宣布,ComponentOne 全功能控件套包发布2017年度最后一次重大更新(2017V3版本),除了对图表.性能持续优化外,还新增表达式编辑器,能与FlexGrid ...

  6. 物联网HMI的关键驱动力—SCADA级功能库和控件库

    一.前言 在这个数字化时代,物联网HMI已成为连接人与设备之间的关键纽带,为用户提供直观.智能的交互体验,背后强大的关键驱动力扮演着至关重要的角色,其中SCADA级功能库和控件库的引入成为了物联网HM ...

  7. android 获取控件在屏幕中的坐标

    今天,简单讲讲android如何获取控件在屏幕中的坐标. 这个其实也很简单,但是昨天做一个功能时,需要功能控件的坐标做一些逻辑操作时,居然不知道怎么做.所以在网上查找了资料后,解决了这个问题.这里记录 ...

  8. android 应用内悬浮,Andorid 应用内悬浮控件实践方案总结

    推荐使用 FloatWindow 库实现悬浮窗,功能全面,链式调用,简洁清爽. 地址 : https://github.com/yhaolpz/FloatWindow 2017/12/30 更新: F ...

  9. Android 应用内悬浮控件实践总结

    推荐使用 FloatWindow 库实现悬浮窗,功能全面,链式调用,简洁清爽. 地址 : https://github.com/yhaolpz/FloatWindow 2017/12/30 更新: F ...

最新文章

  1. 软工实践原型设计——PaperRepositories
  2. smack连接openfire
  3. MATLAB从入门到精通系列之matlab常见问题集锦-(一)
  4. ASP.NET开源框架之HIPPO技术内幕(四)--多语言的实现
  5. 系统制成docker镜像_docker镜像原理 镜像制作 dockerfile
  6. go语言扫描四位数可用域名
  7. 什么是Ext(ExtJs)【转载】
  8. python标准库——sys模块
  9. 如何制作网页教程:如何制作网页最简单的方法
  10. 【论文】开放域段落检索的句子感知对比学习
  11. iDRAC 7 Enterp license
  12. 共享服务中心建设原则-《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》
  13. matlab 图片RGB颜色提取
  14. PPP点对点协议中 异步链路中0x7d用作转义字符时的过程
  15. Quectel_EC200xEC600xEG912Y系列_HTTP(S)_POST请求
  16. 易语言制作提示类对话框
  17. insmod: error inserting '***.ko': -1 Invalid parameters 真正原因以及解决方法
  18. Unity 3D中OnTriggerEnter实现靠近物体就显示 远离就消失
  19. 一篇文章带你了解云计算
  20. 从0到10亿,微信后台架构及基础设施设计与实践!

热门文章

  1. C++实现计数排序(附完整源码)
  2. C++是不是类型安全的?
  3. 经典C语言程序100例之二二
  4. 二维数组离散程度matlab,(十八)数据分析中的一些概念
  5. android 帐户管理,Android开发之帐户管理
  6. python交互式编程入门先学什么_为什么 Python 对于编程入门学习来说,是一门很棒的语言...
  7. ElasticSearch集群安装,Kibana安装,Logstash安装,Logstash-input-plugin-jdbc的配置使用
  8. Python基础,基本类型(整型,浮点数等)数据结构(List,dic(Map),Set,Tuple),控制语句(if,for,while,continue or break):来自学习资料
  9. Spark-on-YARN (来自学习笔记)
  10. 第十二天:规划成本管理,成本类型, 资产折旧;和 估算成本,估算成本知识点提示