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

推荐订阅源

GbyAI
GbyAI
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
D
Docker
Blog — PlanetScale
Blog — PlanetScale
罗磊的独立博客
美团技术团队
V
V2EX
Last Week in AI
Last Week in AI
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Microsoft Security Blog
Microsoft Security Blog
Microsoft Azure Blog
Microsoft Azure Blog
人人都是产品经理
人人都是产品经理
M
MIT News - Artificial intelligence
P
Proofpoint News Feed
B
Blog RSS Feed
博客园_首页
B
Blog
博客园 - 叶小钗
I
InfoQ
WordPress大学
WordPress大学
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
Latest news
Latest news
W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
Cyberwarzone
Cyberwarzone
Scott Helme
Scott Helme
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
C
CXSECURITY Database RSS Feed - CXSecurity.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
N
News and Events Feed by Topic
S
Secure Thoughts
The Hacker News
The Hacker News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News

博客园 - bobmazelin

Microsoft Robotics Developer Studio基础(一):前言 Microsoft Robotics Developer Studio beta4的大bug Microsoft Robotics Developer Studio4 Beta随想 最近动态记录 走入Microsoft Robotics Developer Studio世界 【工作流】工作流结构模式整理 【工作流】PE中的资源模式的实现方式 【讨论】【工作流】由资源模式中的“权限分配”想到资源结构 【讨论】WF中的异常(错误)处理 【讨论】基于WF的流程结构 建立基于WF工作流模式库的设想 2008:再战Business Process Management System(BPMs) bobmazelin的流程管理系统介绍和概念性设计(三) bobmazelin的流程管理系统介绍和概念性设计(二) bobmazelin的流程管理系统介绍和概念性设计(一) AspectNet功能介绍(二) AspectNet功能介绍(一) 在(开发)流程系统之前 在Sequence模式中思考流程资源(数据)问题
【PE】流程图对象以及事件驱动机制的介绍
bobmazelin · 2008-05-21 · via 博客园 - bobmazelin

    本文是PE系统的第一个开发者文档,首先对PE本身做个简单介绍吧!PE是一个面向开发者的基于WF的流程引擎,她还很“小”,功能有限,请大家原谅。目前PE的版本是0.1版,所以请大家不要试图在商业项目中使用,由此造成的后果本人概不复杂。^_^当前版本下PE能完成的主要任务是:构造流程并使流程运行起来。虽然有部分功能实际可以发布,但我还是想等PE稳定一点再公布出来。PE的简单之处再次请大家原谅。从这篇随笔开始,我会陆续介绍PE中支持的流程元素并给出相应的Demo代码,有不正确和无知之处也请原谅,并欢迎指出。PE目前的基本流程元素以及属性主要参考了Business Process Model Notation(BPMN),对这个标准有兴趣的,可以到www.bpmn.org/下载文档。

(一)流程图
    既然我们的首要目的使创建流程,那么我们就需要一个容器来容纳流程,这就是流程图(Process Diagram)。在PE中,每个流程图都可以容纳一个或多个流程。在WF中没有流程图,我自己构造了流程图对象:

ProcessDiagram processDiagram = new ProcessDiagram() { Name = "FirstDiagram" };
你可以通过上述代码来创建。
    在PE中我还加入了泳道的概念,流程不是直接放置在流程图中,而是放置在流程池(Pool)中,它们的关系如下:
每个流程可以包含一个或多个流程池,每个流程池仅可以包含一个流程。
processDiagram.AddPool(new Pool("FirstPool"));
通过上述代码你可以创建一个名字为FirstPool的流程池,并把它加入到流程图中,你可以加入多个流程池。
注:在PE中同一个流程图中的所有流程对象的名称不能重复,否则重名的对象会被忽略。
    当AddPool方法中,不仅仅会把流程池对象加入到流程图中,还会自动创建一个流程(BusinessProcessActivity)对象,它的名字和Pool的名字相同,并与当前流程池关联。
    你可以通过流程图中的GetBusinessProcessByPoolName(string poolName)方法来得到自动创建的流程对象并修改其名字。

上图是流程图对象的结构,其中大部分方法都提供了图中元素的增、删、查功能,都用到时我具体再介绍。
(二)事件驱动
    当建立了流程图和流程后,流程的启动是最为关键的事情。在PE中,流程的启动,继续执行以及结束都使用事件的形式来驱动。根据事件被触发的时机不同,分为开始事件(StartEvent),结束事件(EndEvent)和中间事件(IntermediateEvents)。
    开始事件用于启动流程的事件;结束事件是当流程结束时执行的动作;而中间事件有两大作用:一是继续流程的执行,二是处理错误或事务取消补偿执行。开始事件根据触发流程启动的原因不同分为:NoneStartEvent、LinkStartEvent、MessageStartEvent、TimerStartEvent以及MultipleStartEvent。
    a、NoneStartEvent表明流程是由人工的方式来触发的,这里的人工是指流程引擎以外的程序,比如:引擎的使用代码。
    b、LinkStartEvent表明流程是由另外一个流程的LinkEndEvent事件触发启动的;
    c、MessageStartEvent表明流程是由其他流程发送消息(Message)触发启动的;
    d、TimerStartEvent表明流程由时间因素触发启动;
    e、MultipleStartEvent表明流程可以多个原因中的某个触发启动,即MultipleStartEvent可以包含多个上述开始事件中的多个,其中一个被触发,则MultipleStartEvent就被触发。
processDiagram.GetBusinessProcessByPoolName("FirstPool").AddActivity(new NoneStartEvent() { Name = "NoneStartEvent" });
上述代码在名为"FirstPool"的流程中加入了一个NoneStartEvent。
    结束事件根据流程结束时执行的任务不同分为:NoneEndEvent、TerminateEndEvent、CancelEndEvent、CompensationEndEvent、ErrorEndEvent、LinkEndEvent、MessageEndEvent、MultipleEndEvent。
    a、NoneEndEvent表明流程结束时不执行任何代码,正常结束。
    b、TerminateEndEvent表明流程需要在此终止一切活动。
    c、CancelEndEvent表明流程相关事务将执行取消操作,如果流程中设置了取消中间事件,则会引发取消处理活动的执行。
    d、CompensationEndEvent表明流程结束时需要执行额外的补偿任务,如果流程中设置了补偿中间事件,则会引发补偿活动的执行。
    e、ErrorEndEvent表明流程以发生错误结束,如果流程中设置了错误中间事件,则会引发错误处理活动的执行。
    f、LinkEndEvent表明流程结束时会引发另一流程的开始。
    g、MessageEndEvent表明流程结束时会发送一条消息给其他流程。
    h、MultipleEndEvent表明流程结束时执行多个上述结束事件,即在MultipleEndEvent可以加入多个上述结束事件,并同时执行。
processDiagram.GetBusinessProcessByPoolName("FirstPool").AddActivity(new NoneEndEvent() { Name = "NoneStartEvent" });
上述代码在名为"FirstPool"的流程中加入了一个NoneEndEvent

中间事件我会在之后的随笔中再作说明,有关开始事件和结束事件的Demo会在这几天的随笔中发布下载。
欢迎大家指教。