惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

博客园 - navyliu

高成长公司诚聘Web平台开发工程师(Leader) 高成长公司诚聘.Net 互联网架构师 如何在SharePoint中Debug SharePoint开发小窍门,没事就IISReset Custom Field Type Deployment SharePoint的时间怎么和指定的时间不一样了? SharePoint中的参数nCLID Project Server 2007中项目组成员无法看到我的项目的问题解决 SharePoint 2007 SP1 Upgrade Error MOSS 2007中解决用户没有关联电子邮件的一种方法 不良的UI是对资源的极大浪费 Application Platform Infrastructure Optimization Model WF中的自定义Activity(Custom Activities)(1) Local Communication Events Workflow and the Outside world Rule Engine of Biztalk (Biztalk的规则引擎) OBA应用案例(1)--在Word 2007中填写表单(客户需求) Promoting in Biztalk Server 2006 对倪光南院士关于文档格式国际标准之争观点的不同看法
Windows Workflow Foundation中的基本活动(Basic Activities)
navyliu · 2008-02-01 · via 博客园 - navyliu

CodeActivity

The Code Activity's only interesting feature is its ExecuteCode event.We can write some code in the event. When the Code Activity is activitied, the code will be executed.

It might seem useful to execute arbitrary code in a workflow, but in reality the Code activity should appear relatively infrequently and as a special case. Instead of using Code activities, we should look to package code into custom activities.

IfElseActivity

Inside an IfElse activity are one or more IfElseBranch activities. Each branch activity has a Condition property. We are required to o set the Condition property on all branches, except for the last branch.

分支的执行

IfElseActivity有多个分支,分支按从左向右执行,那个分支符合条件,就执行,如果没有分支满足条件,则跳出IfElseActivity,如果最后一个分支没有条件,则最后一个分支会执行(除非其他的分支不满足条件)。这个和程序语言的if类似。

添加分支

在IfElseActivity上点击右键,选择"Add Branch“可以添加分支。

条件设置

条件分为Code Condition和Declare Rule Condition两种。

WhileActivity

WhileActivity也有一个Condition,WhileActivity里面还可以包含一个其他的Activity,它包含的Activity会执行,直到Condition为True。 注意,While里面只能有一个Activity,如果想在WhileActivity中执行多个Activity,则可以把这些Activity放在下面的SequenceActivity中。

SequenceActivity

是一个复合的Activity(Composite Activity),里面可以包含至活动(Child Activity)。

SuspendActivity挂起活动

当一个工作流的流转过程中出现问题,需要人工干预的时候,可以将工作流挂起,这个时候Host应用程序可以订阅WFInstance的WorkflowSuspended事件,并通过查询WorkflowSuspendedEventArgs事件参数中的Error属性来获取工作流的异常信息,这个事件参数还包含有一个WorkflowInstance属性,Host可以通过补充相应的数据后重启工作流实例(利用WorkflowInstance的Resume方法),也可以调用Terminate方法终止一个WorkflowInstance。

TerminateActivity

和SuspendActivity类似,TerminateActivity也会停止工作流的运行,不过和SuspendActivity不同的是,一个Workflow被Terminate后,不能恢复。同样的,Host应用程序也可以订阅WorkflowInstance的WorkflowTerminated事件,通过WorkflowTerminatedEventArgs的Error属性获取工作流运行失败的信息,并可以把Error信息包装为WorkflowTerminatedException抛出。

TerminateActivity和ThrowActivity的区别:如果你想在WorkflowTerminated处理器中制定是那种异常,那么你需要用ThrowActivity,ThrowActivity让你有机会捕获一个抛出的异常,并继续,但TerminateActivity始终会抛出异常,并终止Workflow。

ThrowActivity

ThrowActivity的用法上面已经说了,当执行一个ThrowActivity后,Host可以通过订阅WorkflowTerminated事件来获取Throw的Exception。但是ThrowActivity抛出异常后,WorkflowInstance会继续执行。抛出的异常可以在ThrowActivity的Fault属性中指定。

InvokeWorkflowActivity

InvokeWorkflowActivity会一步的执行另外一个Workflow。执行是异步的,部门不能检索其他Workflow的输出参数。可以通过其他的与Host的通讯机制来获取输出参数。

我们可以把自己的工作流的属性或者字段作为参数与Target Workflow的Public属性绑定。在启动Target Workflow之前,当前的Workflow会触发一个Invoking的事件,我们可以在Invoking事件的处理器中组织和初始化相应的参数。

InvokeWorkflowActivity非常有用,它在很大程度上增强了流程的可重用性。

ParallelActivity

并行活动,顾名思义,它可以让ParallelActivity中的多个活动独立的执行,(但并不是不同的分支在多个线程中运行,实际上不同的分支还是在同一个线程里面运行)。可以用投票系统来解释ParallelActivity。多个投票分支,投票无先后约束,哪一个投票到了,Workflow就会处理,并继续侦听其他的投票,直到所有的投票都完成。(ParallelActivity要求所有的分支都完成,Activity才算完成)。(这个和Biztalk里面的是一样的)。

DelayActivity

等待一段时间。

ListenActivity

ListenActivity也有多个分支,和并行活动所不同的是,ListenActivity的分支中,只要有一个分支完成了,ListenActivity就算完成了。ListenActivity中常常有一个分支是DelayActivity,让Workflow等待一段时间,如果侦听的事件还没有触发,则结束侦听。

EventHandlingScopeActivity

事件处理范围活动也有多个分支并行的侦听和处理外部事件,但是和Listen和Parallel活动不同的是,它又一个main child activity,在main child activity执行前,所有的分支可以并行的处理,当main child activity执行后,EventHandlingScopeActivity就执行完毕。一个典型的例子是在规定的时间内统计投票,这里面main child activity是一个DelayActivity,设定为等待的时间。

SynchronizationScopeActivity

和.NET程序中的线程同步类似,SynchronizationScope Activity可以使得共享资源的访问串行化(甚至可以在workflow instances之间串行化)。如果在我们的workflow definition中有一个static的字段(在VB中是shared field),SynchronizationScopeActivity可以确保在此活动的持续期间,只有一个实例有该字段的读或者写权限。

ReplicatorActivity

如何使用ReplicatorActivity呢?ReplicatorActivity有点类似WhileActivity,但是比它更复杂。