CN1766835A - 用于在设计和运行时间无缝制作和编辑工作流的框架 - Google Patents

用于在设计和运行时间无缝制作和编辑工作流的框架 Download PDF

Info

Publication number
CN1766835A
CN1766835A CN 200510099094 CN200510099094A CN1766835A CN 1766835 A CN1766835 A CN 1766835A CN 200510099094 CN200510099094 CN 200510099094 CN 200510099094 A CN200510099094 A CN 200510099094A CN 1766835 A CN1766835 A CN 1766835A
Authority
CN
China
Prior art keywords
workflow
action
compiling
program
computer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN 200510099094
Other languages
English (en)
Inventor
B·S·马利
D·K·舒克拉
K·P·瓦莱格瑞普拉
M·梅达
R·B·施密特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN1766835A publication Critical patent/CN1766835A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

在工作流的执行期间更改组件化的工作流模型。工作流的每个步骤被建模为具有描述工作流步骤的设计时间方面、编译时间方面、以及运行时间方面的元数据的动作。用户通过用户界面或应用程序编程接口来选择并安排动作以创建工作流。元数据与工作流中的每个动作相关联。在工作流的执行期间,用户更改元数据来影响工作流的执行而无需重新编译工作流。

Description

用于在设计和运行时间无缝制作和编辑工作流的框架
相关申请
本申请声明对申请号为60/615,547于2004年10月1日提交的美国临时专利申请的权利。
技术领域
本发明各实施例涉及工作流建模领域,尤其涉及组件化和可扩展的工作流模型。
背景技术
现有的系统尝试通过对事务问题建模来将事务问题映射成高级工作流。然而,真实世界的工作流可在各个方面上变化,诸如(a)执行和建模的复杂性,(b)设计时对流程的结构的知识,(c)静态定义或特定地/动态地定义,(d)在其生命期的各个点上制作和编辑该流程的简便性,以及(e)事务逻辑与核心工作流过程的弱或强关联。现有的模型不能适应所有这些因素。
此外,大多数现有工作流模型都基于以语言为基础的方法(例如BPEL4WS、XLANG/S、和WSFL)或以应用程序为基础的方法。以语言为基础的方法是带有一个封闭的预定义构造集的高级工作流语言帮助用户/编程人员建模工作流过程。工作流语言携带封闭构造集的所有语义信息以使用户能建立工作流模型。然而,语言不能由开发者扩展且表示了构建工作流模型的封闭本元集。语言限于工作流系统供应商所提供的语言编译器。只有工作流系统产品供应商可通过在新的产品版本中用新的构造集扩展语言来扩展该模型。这常常需要更新与语言相关联的编译器。
基于应用程序的方法是在应用程序内部具有工作流能力去解决领域特定问题。这些应用程序不能真正扩展,也不具有可编程模型。
使用现有方法,并不足以解决复杂性、预知性、动态工作流、制作简便性、事务逻辑与核心工作流的关联强度等的问题。没有一种可用来建立对不同类工作流建模的可视工作流设计程序的可扩展、可定制、以及可重新提供的工作流设计程序框架。现有系统缺乏一种快速应用程序开发(RAD)样式的工作流设计体验,从而使用户能用图形方式来设计工作流过程并使事务逻辑以开发者所选择的编程语言相关联。另外,没有启用墨水的工作流设计程序。
此外,现有的系统不能提供无缝的对执行工作流的特定或动态编辑。工作流过程在本质上是动态并易变的,且其形式在设计时无法完全预见。工作流过程以结构化方式开始,最终在其执行生命期的过程中演变和变化。需要一种工作流制作框架,该框架使工作流创建者能在设计时制作各类工作流模型,并以无缝方式对运行工作流作特定或动态改变。即使在工作流过程已展开并正在运行之后,事务需要的变化常常迫使改变或编辑当时正在运行的工作流过程。需要一种提供工作流过程的运行时间制作的系统。
此外,工作流过程处理交叉消隐正交以及跨越工作流过程模型的多个步骤的以及混乱的关系。例如,工作流过程的一部分设计成参与长期事务,而同一过程的其它部分设计成用于并发执行。同一工作流过程还有一些部分需要跟踪,而其它部分则处理事务或应用层的例外。
一些工作流建模方法是不实用的,因为它们需要包括所有例外和人工干预的对整个事务处理的基于流的完整描述。部分这些方法在产生例外时提供附加功能,而其它方法则只采用基于约束条件的方法而不采用基于流的方法来建模事务过程。现有的系统实现基于流的或基于约束条件的方法。这样的系统太灵活以致不能对许多普通事务情形建模。
因此,需要组件化和可扩展的工作流模型来解决一个或多个这些和其它缺点。
发明内容
本发明各实施例提供一种用于建立组件化工作流模型的可扩展框架。特别地,工作流过程的每个步骤具有一相关联的组件模型,该组件模型描述工作流步骤的设计时间方面、编译时间方面、以及运行时间方面。此外,任何开发者可通过制作这些组件来扩展核心工作流模型。本发明包括一个足够灵活和强大的工作流引擎来协调各类工作流的执行,这些工作流包括高度正式的机器-对-机器过程、基于约束条件的特定人工工作流、以及具有混合的基于流的和基于约束条件的方法的工作流。工作流引擎允许针对执行工作流的激活、执行、查询和控制能力。例如,本发明允许对执行工作流的特定和动态改变。工作流引擎可在包括服务器和客户机环境的各种宿主环境中重新提供或嵌入。每个特定的宿主环境将工作流引擎与一组服务提供者相结合。服务提供者的集聚能力确定可在特定宿主环境中执行的工作流类型。
本发明其它实施例提供用于串行化工作流模型的说明性格式,诸如可扩展控制标记语言(XOML)。该说明性格式使用户能通过编写一组组件来扩展工作流模型。对应于工作流过程的各个步骤的语义被封装在一活动验证器组件中,该组件在编译时间对规定组件验证并实施语义。本发明说明性格式的各个实施例还用工作流模型的各个元素来使能数据的声明和关联。说明性格式支持数据通过工作流的转换。例如,该格式说明性地表示工作流模型内的外部数据源,诸如数据库或文件、代码片断、以及事务规则等。
本发明一实施例提供一种可扩展的、可定制的、以及可重新提供的工作流设计程序框架,以建立对各类工作流建模的图形/可视工作流设计程序。本发明的另一实施例支持快速应用程序开发样式的工作流设计体验,以使用户能以图形方式来设计工作流过程并使事务逻辑以任一编程语言相关联。本发明各实施例还提供实用笔和书写板技术的墨水支持。本发明提供一种自由形式的绘制平面,其中用户绘制的工作流被转换成内部表示。本发明通过现有绘制平面上的墨水编辑(例如添加/删除动作)、以及现有工作流的墨水注解(例如设计平面上的注释、建议、或手绘提示)支持对工作流的创建和更改。
本发明其它实施例提供用于以说明性方式捕捉交叉消隐行为,并将这些行为应用于工作流模型的选定部分。本发明其它实施例在与之相关联行为的环境中执行工作流模型的选定部分。本发明各实施例提供一框架、各种可重用组件、以及一种语言来处理跨越工作流过程模型的多个步骤的交叉消隐正交的以及混乱的关系。
根据本发明一方面,计算机实现方法参照与工作流相关的用户代码来执行该工作流。计算机实现方法包括编译用户代码。该方法还包括用已编译代码来执行未经编译的工作流。该方法还包括允许用户在执行未经编译的工作流的同时动态地更改该未经编译工作流。
根据本发明另一方面,一个或多个计算机可读介质具有用于参照与工作流相关的用户代码执行工作流的计算机可执行组件。这些组件包括用于将用户代码翻译成可执行对象代码的编译程序组件。这些组件还包括用来自编译程序组件的可执行对象代码来执行未经编译的工作流的工作流组件。这些组件还包括允许用户在执行未经编译的工作流的同时由工作流组件动态地修改该未经编译工作流的设计程序组件。
根据本发明又一方面,系统参照与工作流相关的用户代码来执行该工作流。该系统包括存储未经编译工作流和用户代码的存储器区域。该系统还包括被配置成执行计算机可执行指令的处理器,这些计算机指令用于编译存储在存储器区域的用户代码、用已编译代码执行未经编译的工作流、以及允许用户在执行未经编译的工作流的同时动态地更改该未经编译工作流。
或者,本发明可包括各种其它方法和装置。
部分其它特征将在此后指出并变得显然。
附图说明
图1是包含任务和控制流合成动作的示例性流程图。
图2示出示例性动作继承树。
图3示出示例性组件模型。
图4示出示例性组件模型生命周期。
图5是用来依赖于工作流规范的向导制作工作流的高级应用程序用户界面。
图6示出示例性工作流设计程序。
图7示出包括接收动作及随后的发送动作的控制程序。
图8示出计划表(schedule)定义以及可视工作流、工作流的以XOML的串行化表示、以及工作流之外的代码之间的关系。
图9是示出其中可实现本发明的适当计算系统环境的一个示例的框图。
附录A描述示例性动作。
附图中相应标号表示相应部件。
具体实施方式
本发明各实施例建模工作流,表示诸如事务过程的过程。事务过程是导致可预测和可重复结果的从属和有序的任务、动作等。包括了结构的操作过程、体制工作知识和信息资源,事务过程被设计成以有效和及时的方式满足所定义的事务目的。在一有效环境中,可简单地表示、适应并使用过程的功能组件以解决与时俱进的合作要求。工作流是终端用户与事务过程中任务交互的体验。任务可被建模为动作、组件等,每个表示由人或机器执行的工作单元。在一实施例中,多个动作被呈现给用户。用户选择并组织动作以创建工作流。执行已创建的工作流以建模事务过程。参照图1,示例性工作流100包含任务和控制流组成动作。
在一示例中,控制引擎工作流模型支持建模、制作并执行不同类工作流。各示例包括根据以有序序列出现的结构化步骤集来建模一给定问题,或将该给定问题建模为一组异步事件。控制引擎协调各计划表的执行。计划表是在结构树中以层次结构安排的有组织的一组动作。执行动作的执行环境及其可见的共享数据由范畴提供。每个动作表示封装工作流过程中步骤的元数据的组件。该动作是工作流中执行的基本单元,并具有相关联的属性、处理器、约束条件和事件。每个动作可由用户代码以任一编程语言来配置。例如,用户代码可表示用公共语言运行时间(CLR)语言编写的事务或应用程序逻辑或规则。每个动作支持用户代码执行中的拦截前分支指令和拦截后分支指令。每个动作具有相关联的运行时间执行语义和行为(例如状态管理、事务处理、事件处理和例外处理)。动作可与其它动作共享状态。动作可以是元动作或分组为复合动作。元或基本动作没有子结构(例如子动作),因而是树结构中的叶节点。复合动作包含子结构(例如它是一个或多个子动作的父动作)。
在一实施例中,动作有三种类型:简单动作、容器动作和根动作。在该实施例中,模型中有一根动作,而根动作内没有或有任何数量的简单动作或容器动作。一个容器动作可包括简单或容器动作。整个工作流过程可被用作建立更高阶工作流过程的动作。此外,动作是可中断或不可中断的。不可中断的复合动作不包括可中断动作。不可中断动作缺乏可导致阻挡动作的服务。
控制引擎提供动作的示例集。参照图2,动作继承树示出示例性动作。在图2中示出的示例性动作在附录A中详细描述。此外,任何用户可编写一个或多个动作以扩展工作流模型。例如,用户可编写各动作用于特定的事务问题、领域、工作流标准(例如事务处理执行语言)、或目标平台。控制引擎可向用户提供用于编写动作的丰富的服务集,包括例如分析代码、类型解析和类型系统的服务、串行化服务以及提交。
在一实施例中,每个动作具有至少三个部分:元数据、实例数据、以及执行逻辑。动作的元数据定义可配置的数据属性。例如,某些动作可共享在动作抽象基类中定义的公共元数据集。每个动作根据其需要通过扩展该类来宣称它自己的附加元数据属性。
元数据属性值将由可配置动作的计划表实例上的所有动作实例共享。例如,如果用户创建计划表A并将一发送动作加入其中,则给予发送动作标识信息(例如“001”)作为其元数据的一部分。加入计划表的第二个发送动作将接收它自己的唯一标识信息(例如“002”)。一旦创建并执行了计划表A的多个实例,所有发送“001”的实例将共享元数据值。相反,动作的实例数据定义了专用于运行计划表实例中的动作实例的数据集。例如,延迟动作可对其实例数据提供一只读属性,它表示延迟动作的超时值的日期和时间值。一旦延迟动作已开始执行该值就可用,且对于延迟动作的每个实例它很可能是不相同的。不用“实例”来限定引用而引用计划表实例,特别是动作和任务的实例是普通的。
复合动作具有作为另一元素的其子动作的集。在一实施例中子动作被视为元数据。控制引擎模型显然允许在运行时间操纵计划表实例内的该元数据。将新的子动作加入是执行计划表实例一部分的复合动作,从而仅影响计划表实例的元数据(动作树)是可能的。
然后参看图3,每个动作具有形成动作的组件模型的相关联组件集。该相关联组件集包括动作执行程序、动作设计程序、动作串行化程序、动作验证程序(例如语义检查程序)、以及动作代码发生器。动作执行程序是实现动作的执行语义的无状态组件。动作执行程序用动作的元数据工作以实现该动作。核心调度程序像动作执行程序的服务提供者一样动作,以向动作执行程序提供服务。
动作设计程序可视地显示动作的设计时间可视表示。动作设计程序是设计程序分层结构中的一个节点,并可成为主题或外壳。动作设计程序在设计环境(例如应用程序)中提供并通过服务与主机设计环境交互。动作验证程序在编译时间和运行时间都实施动作语义。动作验证程序在工作流模型的环境上操作并使用由该环境提供的服务(例如编译程序、设计程序、或运行时间)。验证在工作流的生命周期的各个点上进行。当创建工作流的串行化表示、编译时间并响应用户的请求,可作结构一致性检查。在运行时间的语义检查力度比在编译时间执行的更强以确保运行时间操作的安全性,诸如添加或替换运行实例的动作树中的动作。本发明对关联于每个动作的语义与例如预定义的接口要求的依从性或一致性进行估计。
动作串行化程序是串行化动作的元数据的组件。动作串行化程序从各个模型/格式串行化程序中调用。整个工作流模型基于可扩展模式串行化成说明性标记语言,该标记语言可进一步翻译成所需的其它工作流语言。
在一实施例中,动作的组件模型存储为计算机可读介质上的数据结构。在该数据结构中,动作设计程序由存储数据的图像字段(例如图标)表示,用于在可视地表示该动作。此外,一个或多个制作时间字段存储与该动作相关联的属性、方法和事件。动作串行化程序由存储数据的串行化程序字段表示,用于将存储在制作时间字段中的元数据传送到该动作的说明性表示。动作发生器由事务逻辑字段表示,该字段存储与存储在制作时间字段中的元数据相关联的软件代码。动作执行程序由执行程序字段表示,该字段存储用于执行存储在事务逻辑字段中的软件代码的数据。
范畴和计划表
执行动作的执行环境及其可见的共享数据由范畴提供。范畴是核心动作之一。范畴是统一化的结构,用于将变量和长期服务的状态与事务语义、出错处理语义、补偿、事件处理器、以及数据状态管理集合在一起。范畴可具有相关联的例外和事件处理器。在一实施例中,范畴可以是事务性的、原子的、长期运行的、或同步的。当对用户变量产生读-写或写-写访问冲突时向用户提供并发控制。范畴还是事务边界、例外处理边界、以及补偿边界。因为范畴嵌套在计划表内,在不同范畴内(即使范畴嵌套)使用相同名字来声明变量、消息、信道和互相关系集合而不产生名字冲突也是可能的。
嵌套在计划表内的范畴仅可在该计划表的环境内执行。计划表可编译为应用程序(例如单机可执行实体)或库(例如用于从其它计划表调用)。编译为库的每个计划表有效地构成可从其它计划表内调用的新的动作类型。计划表的元数据包括参数的宣称。
一旦开发了计划表,就可执行已开发计划表的实例。激活并控制计划表实例的过程是其中嵌入控制引擎的主机环境的功能。控制引擎提供可用来测试计划表的不提供不必要服务的“简单宿主”。此外,控制引擎提供一激活服务以促进“服务提供程序”模型(例如应用程序编程接口)的标准化,该模型由引擎和外部应用程序使用来与服务环境(即宿主)交互。动作服务创建特定计划表类型的一个计划表实例,可有选择地传递参数。该计划表实例实质上是运行计划表实例的代理,并包括唯一表示该实例的标识符、对该计划表的元数据(动作树)的引用、以及要延缓、恢复、并终止该实例的方法。动作服务还支持基于给定的实例标识符来寻找计划表实例。
外代码(Code-Beside)
范畴动作可具有包括范畴动作的事务逻辑的相关联的外代码类。由于计划表本身是一范畴,计划表也可具有外代码类。任何嵌套于计划表内的范畴也可具有它们自己的外代码类。嵌套于范畴内的动作共享该范畴的外代码类,该类作为其共享数据状态和事务逻辑的容器。例如,编码动作的元数据包括对具有外代码中特定签名的方法的引用。在另一实例中,发送动作的元数据包括对特定签名的外代码方法的可任选引用,以及对消息宣称和信道宣称的强制性引用。
外代码的示例性使用包括如下:变量、消息、信道、以及互相关系集合的宣称;输入/输出/引用参数的宣称;附加定制属性的宣称;要发送消息的准备;已接收消息的处理;返回布尔值的在代码中表达的规则的实现;局部定义变量的处理;读取动作元数据和实例数据;写入动作实例数据(例如对将要执行的动作设置属性);生成一事件;产生一例外;在运行计划表实例的动作树中枚举并导航动作的分层结构,包括在嵌套范畴和计划表调用边界上;将新动作添加到运行计划表实例内的复合动作中;改变与运行计划表实例内动作相关联的说明性规则;以及获取其它运行计划表实例的引用并处理这些实例。
参看图4,框图中示出示例性组件模型的生命周期。用户与存储在一个或多个计算机可读介质上的计算机可执行组件交互,用于参照有关工作流的用户代码来执行该工作流。计算机可执行组件包括编译程序组件402、工作流组件404、设计程序组件406、以及接口组件408。接口组件408接收来自用户的用户代码。编译程序组件402编译或以其它方式将用户代码翻译成可执行对象代码。设计程序组件406允许用户动态修改未经编译的工作流。即工作流组件404在执行未经编译的工作流的同时允许用户修改未经编译的工作流。此外,本发明执行或实行已更改的工作流。执行未经编译的工作流和执行已更改的工作流包括不编译该工作流就执行。
在一实施例中,工作流包括多个动作,每个动作具有与其相关联的动作执行程序。在这样的实施例中,工作流组件404通过(例如参照已编译的用户代码)执行每个动作的动作执行程序来执行未经编译的工作流。在一实施例中,一个或多个计算机可读介质具有用于执行所述方法的计算机可执行指令。
诸如图4中所述的系统参照有关工作流的用户代码来执行工作流。特别地,该系统包括用于存储未经编译的工作流和用户代码的存储器区域。此外,系统包括一处理器,它被配置成执行用于编译存储在存储器区域的用户代码、用已编译代码执行未经编译的工作流、以及允许用户在执行未经编译的工作流时动态地更改该未经编译的工作流的计算机可执行指令。图4的硬件、软件和示例性系统构成了用于编译存储在存储器区域的用户代码的示例性装置、用于以已编译代码执行未经编译的工作流的示例性装置、以及允许用户在执行未经编译的工作流时动态地更改该未经编译的工作流的示例性装置。
工作流模板
工作流模板(例如工作流样板或动作包)包括一个根动作和一个动作集。模板可以是域或宿主特定的。前者的示例包括结构化工作流模板、人工工作流模板、以及非结构化的工作流模板。一些模板可被“封闭”为包括设计成可能在特定宿主环境中一起工作的一个或多个根动作的动作集。其它模板可以变化的程度“开放”。模板定义其可扩展点。例如,开发者编写一CustomRoot(定制根)和一新的抽象的CustomActivity(定制动作),并声明该包是CustomRoot加上从CustomActivity导出的任何动作。
示例性BPEL或XLANG/S模板包括具有以下特征的根动作:参与状态管理和事务处理、具有相关联的事件和例外处理器、支持先缩写模型、可进行分析并具有明确定义的激活和终止动作。示例性模板还包括一个消息传送特定动作集(例如发送和接收及其变体)和其它结构化动作,诸如范畴、回路、条件、聆听和发出。
示例性Halifax模板包括具有以下特征的根动作:隐式状态管理、相关联例外处理器(0-n)、支持基于事件的模型、具有明确定义的激活行为、并具有未定义的终止。该根动作包含0-n个事件驱动动作。每个事件驱动动作表示一个Halifax动作。每个事件驱动动作具有相关联的状态管理协议并在原子范畴内执行。
设计程序框架(用户界面)
控制引擎提供一个框架,用于以WYSWYG(所见即所得)方式设计各类工作流模型。例如,参看图5,用于制作工作流的高级应用程序用户界面依赖于工作流规范的向导。该框架包括使开发者能编写可视工作流设计程序的一个服务和行为集。这些服务提供用于呈现工作流过程的有效方式,支持绘制这些流的墨水/书写板,并支持设计程序的操作,诸如撤销/重复、拖/放、剪切/复制/粘贴、缩放、全景显示(pan)、查找/替换、书签、装饰、验证错误的智能标记、动作的有效丢失-目标指示符、自动套用格式、查看分页、导航标记、拖取指示符、带有页眉/页尾的打印和预览等。通过这样的用户界面,可构建包含任务和控制流复合动作(例如顺序、并行、以及有条件的)的简单工作流。对于规则规范(例如条件分支逻辑、while循环逻辑)或数据流规范(例如任务A的输出是任务B的输入)都不需要输入代码(或依赖于已有的经编译代码)。计划表(包括规则和数据流)的串行化表示是自包含的并在不需要外代码的某些情形中完成。
使用本发明的设计程序框架,本发明的控制引擎包括支持使软件代码以可视方式与工作流模型相关联的快速应用程序开发(RAD)样式的可视工作流设计程序。工作流中的每个动作都具有相关联的动作设计程序。每个动作设计程序都根据框架服务来编写。本发明的框架还包含可视设计程序模型。可视设计程序模型包括通过在工作流模型中描述的关系而彼此链接的一个动作设计程序集。图6示出一示例性工作流设计程序。本发明包括使代码与工作流模型相关联的各种模式,包括使用户代码能实时在工作流模型的“外代码”、“内代码”和“仅在代码上”往返。本发明还在用户建立工作流时提供实时语义出错。
在一实施例中,本发明向用户呈现在设计程序框架用户界面上标识多个动作的包。本发明还从用户处接收对呈现动作的选择和分层组织。本发明将接收动作串行化以创建工作流的持续表示。本发明还从用户处接收表示用于关联于工作流中多个动作之一的事务逻辑的软件代码。本发明还可接收具有与其相关联的一个或多个语义的用户定义动作。本发明包括用于估计语义与预定义接口要求的一致性的语义检查程序或验证程序。如果语义遵从预定义的接口要求,则本发明将用户定义动作呈现为多个动作之一。本发明还将编译软件代码以创建一个或多个二进制文件。例如,本发明将串行化的工作流表示和软件代码编译成包含工作流的可执行表示的单个组装件。本发明执行所创建的工作流。在一实施例中,一个或多个计算机可读介质具有用于执行该方法的计算机可执行指令。
控制引擎设计程序使用户能通过使用其它已创建计划表来递归地编写高阶计划表并使用它们。计划表的内联扩展使用户能查看内联的计划表内容并剪切或复制该内容。为了使能计划表的内联扩展并使该计划表只读,创建内联计划表的独立设计平面和设计程序宿主。此外,复合计划表设计程序具有它自己的分层结构。当设计程序由用户扩展时载入并显示所调用的计划表。在一实施例中,当动作停止或复制到设计平面上时设计程序被折叠。属性使调用动作设计程序与宿主计划表的根设计程序相链接。以下函数防止从设计程序中添加并移除动作:
internal static bool AreAllComponentsInWritableContext(ICollection components)
internal static bool IsContextReadOnly(IServiceProvider serviceProvider)
这些函数由基础结构调用以检查插入动作的环境是否可写。对于宿主设计程序这些函数返回假。此外,属性被防止进行更改。其它函数从适当组件提取动作设计程序:
internal static ServiceDesigner GetSafeRootDesigner(IServiceProvider serviceProvider)
internal static ICompositeActivityDesigner GetSafeParentDesigner(object obj)
internal static IActivityDesigner GetSafeDesigner(object obj)
在一示例中,用户创建一计划表并将其编译为动作。成功编译后,计划表出现在工具箱上。用户打开或创建其中需要使用已编译计划表的计划表。用户从工具箱中拖放已编译的计划表。折叠的计划表设计程序在设计平面上示出。当用户想要查看已放出的经编译的计划表的内容时,用户扩展计划表设计程序来以只读状态示出已调用的计划表内联内容。调用计划表的内联使用户能查看已调用的计划表而无需在不同计划表设计程序之间切换。该特征对开发者通过再使用现有计划表来编写高阶计划表是有用的。
支持使用主题/外壳定制设计程序框架
使用设计程序框架编写的工作流设计程序可使用工作流主题定制。这些可以是说明性地描述设计程序各方面的可扩展标记语言(XML)文件。工作流设计程序提供对合伙者的向导支持以扩展动作。由工作流设计程序支持的示例性用户界面特征包括,但不限于,撤销/重复、拖/放、剪切/复制/粘贴、缩放、全景显示、查找/替换、标签、装饰、验证错误的智能标记、动作的有效丢失-目标指示符、自动套用格式、查看分页、导航标记、拖取指示符、带有页眉/页尾的打印和预览、以及文档轮廓集成。工作流设计程序支持定制设计程序主题/外壳以使能使用XML元数据来定制设计程序的观感。工作流设计程序支持背景编译。在一示例中,在设计计划表时向智能标记和智能动作提供验证出错。工作流设计程序可主宿在任何容器中(例如应用程序、外壳程序等)。
示例性控制引擎程序包括接收动作和随后的发送动作。该过程接收消息并将其发送出去。用户创建称为“Hello World”(“向世界问好”)的项目并将一控制项加入该项目。然后用户将一范畴动作拖放到设计平面上。接着,用户将接收动作和发送动作放到范畴上。图7示出设计程序中的结果工作流700。每个动作设计程序提供对象模型上的用户界面表示。开发者能直接编程对象模型并对动作设置属性或使用该设计程序。控制引擎设计程序使开发者能从工具箱中选择动作并将其拖到设计平面上。如果动作已被置入计划表并需要移动,则开发者能选择它(通过单击它)并将其拖到它需要去的计划表区域。如果开发者在拖放时按住控制键,则选定动作复制。
活动放置将可能的放置点(目标)提供为设计平面上的可视指示符。自动卷页也在拖放环境中参与。当处理大计划表时,导航到当前不在视野内的设计程序区域通过将动作拖到要放置的计划表区域来进行。
可跨同一项目的各个计划表并跨同一方案的其它项目的计划表进行拖放。在将动作置入设计平面之后,开发者配置该动作。每个动作具有开发者配置的一个属性集以使计划表有效。这些属性可在属性浏览器中编辑。每个动作控制哪些属性在属性浏览器中可视。为帮助开发者配置各个动作,设计者提供各种对话框或“子设计程序”。对动作的各个属性调用每个对话框。
控制引擎能定制在工具箱中呈现的动作。当开发者创建一定制动作或计划表时,最后结果是一组装件。使用一个对话框,开发者能浏览到该组装件位置并选择使该组装件显现为控制引擎动作。或者,开发者可将该组装件置入控制引擎安装路径,并将其呈现为控制引擎动作。
应用程序编程接口(API)
在另一实施例中,本发明提供用于执行各种工作流操作的应用程序编程接口(API)。本发明包括用于制作工作流的设计应用程序编程接口。设计应用程序编程接口包括用于制作工作流的装置以及用于选择一个或多个创建工作流的动作的装置。本发明还包括用于编译通过设计应用程序编程接口制作的工作流的编译应用程序编程接口。编译应用程序编程接口包括用于串行化工作流的装置、用于定制工作流的可视显现的装置、用于编译通过设计应用程序编程接口制作的工作流的装置、以及用于验证工作流的装置。
本发明还包括用于使一类型与工作流中每个动作相关联的类型提供程序的应用程序编程接口。类型提供程序的应用程序编程接口包括用于使一类型与工作流中每个动作相关联的装置。
一个或多个应用程序编程接口构建用于制作工作流的示例性装置、用于选择一个或多个创建工作流的动作的示例性装置、用于串行化工作流的示例性装置、用于定制工作流的可视显现的示例性装置、用于验证工作流的示例性装置、用于编译工作流的示例性装置、以及用于使一类型与工作流中每个动作相关联的示例性装置。
动作执行框架
除计划表和范畴之外,引擎将动作视为抽象实体,并协调各动作的执行而无需知道特定数据或任一特定动作的语义。在一实施例中,4个实体在动作执行期间交互:动作本身、所执行动作的父动作、包括所执行动作的范畴、以及控制引擎。每个实体具有不同的功能。
如果动作的执行方法返回到其动作协调者但并未标记完成,则该动作被称为在逻辑等待状态中。这种动作可由控制引擎取消,或继续(例如一旦它等待的项或事件变得可用或发生,则由引擎通知该动作)。
从未加入逻辑等待状态的某些动作永远不会被取消。示例包括发送动作和编码动作,因为它们不需要任何外部事件或预订就可执行。一旦给予了一线程(即一旦其执行方法被控制引擎调用),这些动作就可进行直到完成。控制引擎不会有机会取消它们,因为它们在发出完成信号后才会返回该线程。
控制引擎运行时间使用规则来触发执行控制引擎动作的事件。控制引擎设计程序向用户提供将在运行时间要估计的规则关联于触发事件的能力。控制引擎设计程序通过提供可扩展体系结构来使用户能使用不同类型的规则技术。设计程序对使用的规则技术类型是不可知的。
在一实施例中,设计程序支持布尔表达式处理器作为使规则与动作相关联的一种方式。这意味着,在用户代码文件中用户基于哪个触发规则来编写返回真假值的方法。目前有多种可用来估计包括信息代理和事务规则引擎(BRE)的技术。为达此目的,设计程序包括使规则技术开发者能在设计程序中主宿定制用户界面的可扩展体系结构。设计程序向定制用户界面编写者提供一种以代码语句集合的形式串行化规则的方法。设计程序以用户代码文件给出布尔处理器,其中插入了代码语句集合。控制引擎包括可由规则编写者使用的缺省用户界面。通过创建定制规则声明、编写与定制规则声明相关联的用户界面类型编辑器、创建提供规则用户界面的定制用户界面、并产生代码语句进行存储,规则技术提供程序将规则加入控制引擎设计程序。
在一示例中,用户选择规则需要附在其上的动作设计程序、在属性浏览器中查找规则属性、并在下拉菜单中选择“RuleExpressionHandler”(使“Statements”(语句)属性显现在用户界面中的Rule(规则)属性下面)、在“Statements”属性中指定用户代码方法名称、调用用户界面类型的编辑器以调用将提供规则特定用户界面的对话框、并通过创建新的谓词行并将其组合在一起来在对话框中定义规则。用户界面以用户代码文件给出一方法。该方法的名字将与用户在属性浏览器中指定的相同。等效于创建规则的代码语句将被插入规则的用户代码方法中。
执行期间的信息传送
在运行工作流中,发送给计划表的消息是打算给特定计划表实例的。例如,订购单#123的发票必须送回给引起(例如发出)该订购单的同一计划表实例。为了使输入消息与适当的计划表实例相匹配,消息和计划表实例共享一互相关系集合。该互相关系集合可以是单值的互相关系集合,意思是消息中的标识符字段与计划表实例所持有的同类标识符相匹配。多属性的互相关系集合也是可能的,并与数据库表格中的多列主关键字相似。
计划表实例所持有的互相关系集合值在该计划表实例发出一消息(例如该值可取自输出订购单的标识符字段)或接收一消息时初始化。然后该互相关系集合的值是计划表实例状态的一部分。当随后的输入消息到达时,计划表实例状态中持有的互相关系集合的值与期望类型的输入消息所持有的标识符匹配。当发现匹配时,互相关系集合满足且消息被传递到计划表实例。
尽管互相关系集合的实现是控制引擎和宿主环境的功能,在一实施例中用户宣称互相关系集合以使计划表实例正确工作。在另一实施例中,某些动作(例如发送请求/接收响应动作和接收请求/发送响应动作)与用户无关地建立互相关系集合。广泛范围的验证检查由发送和接收动作执行,以确保互相关系集合初始化并得到适当地遵从。
执行工作流的动态编辑
控制引擎提供用于制作(以及随后的可视化并执行)各类工作流的框架。实例包括事件-条件-动作(ECA)样式的工作流或结构化流或规则驱动流。此外,不管建模工作流的方式如何,该框架使用户能在设计时间甚至在工作流过程运行时无需重新编译工作流过程以同一方式来制作或编辑工作流。该框架使用户能高保真地在运行时间和设计时间表示之间往返。特定改变是在运行时间对处理模型的改变。用户可向运行实例询问其计划表模型并对该模型作改变。例如,用户可成批添加、移动、或替换动作,然后提交或回退经批处理的改变。在一实施例中,模型在更新后得到验证。在本发明的许多工作流情形中,在“设计时间制作”和“运行时间执行”之间的区分有些模糊甚至得以消除。
计划表实例有效地与其它实例共享为那些实例的计划表类型而定义的动作类型(元数据)树。但是任何计划表实例一旦开始执行,就可通过添加新动作或处理说明性规则来飞速改变。取得这样的已更改计划表实例并“保存”为新的计划表类型,或更通常地仅从该实例恢复串行化表示是可能的。即,运行计划表实例可串行化并引入任何设计程序(例如制作环境)或运行时间可视工具。
此外,对于高级开发者而言将计划表整个制作为软件代码是可能的。为了直接制作计划表类型,开发者只在软件代码中包括计划表的外代码类的称为InitializeScheduleModel的静态方法,并用[ScheduleCreator]特性来标记该方法。在一实施例中,静态方法没有参数并返回Schedule对象。尽管计划表的串行化表示可从所创建的Schedule对象中恢复,但并没有相随的串行化文件。尽管这意味着计划表可使用单个软件代码文件来开发,但对该文件不可执行验证检查。控制引擎编译确保成为计划表类型的基础的动作树的结构化和语义验证。在另一实施例中,编译和验证在内部运行以产生所执行的实际类型,但不需要代码输入。计划表类型编译编程变成一个很轻量级的过程,因为没有从编译时间对象模型到运行时间对象模型的翻译。实质上,编译仅将计划表的对象模型表示与外代码组合以产生新的类型。在一实施例中,如果已编译的外代码匹配对象模型中动作所需,或者外代码已存在为已编译形式(组装件),则对特定计划表根本不需要提供任何的外代码。
当编译串行化计划表时,指向有效地作为计划表的外代码的现有已编译类型是可能的。该已编译类型的派生被创建,且该新类型作为外代码以确保创建唯一的类型来表示新的计划表。
串行化体系结构
串行化体系结构提供一模块化、中性格式并易于扩展的机制来串行化控制引擎动作树。特别地,调用程序(例如应用程序或用户)从串行化管理程序请求对象(或动作)A的串行化程序。对象A类型的元数据属性将对象A绑定到请求类型的串行化程序。然后调用者请求该串行化程序来串行化对象A。对象A的串行化程序然后串行化对象A。对于串行化时遇到的每个对象,该串行化程序从串行化管理程序请求其它串行化程序。串行化的结果被返回给调用程序。
控制引擎组件模型中的每个动作可参与串行化。在一实施例中该串行化程序组件不是动作类本身的一部分。相反,组件通过在与动作相关联的类中标注串行化程序特性来指定。该串行化程序特性指向用来串行化该动作类型的对象的类。在另一实施例中,动作类型的提供程序组件替换由该动作提供的缺省串行化程序。
设计程序串行化基于元数据、串行化程序和串行化管理程序。元数据特性被用来使类型相关于串行化程序。可使用“引导”特性来安装向串行化程序提供不具有主题的类型的对象。串行化程序是知道如何串行化特定类型或类型范围的对象。对每个数据格式都有一基本类。例如,可有知道如何将对象转换到XML的XmlSerializer基本类。本发明是独立于任何特定串行化格式的一般体系结构。串行化管理程序是提供用来串行化对象图的所有各种串行化程序的信息存储的对象。例如,50个对象的图可具有都产生自己输出的50个不同的串行化程序。串行化管理程序可被这些串行化程序用来在需要时彼此通信。
在一实施例中,与使用一般对象元数据的串行化程序耦合的串行化提供程序的使用提供了一种回调机制,其中对象有机会对给定类型提供串行化程序。通过诸如AddSerializationProovider的方法可给予串行化管理程序一串行化提供程序。通过将诸如DefaultSerializationProviderAttribute的特性加入串行化程序,可自动地将串行化提供程序添加到串行化管理程序。
在一实施例中,由以下规则来规定格式:对象被串行化为xml元素、对象的属性被分类为简单属性(例如串行化为xml特性)或复杂属性(串行化为字元素)、以及对象的字对象被串行化为子元素。一个对象的子对象定义可与另一个对象的不同。以下示例是while动作的串行化,该动作具有Send动作作为其子对象之一:
<While ID="while1">
   <ConditionRule>
       <CodeExpressionRuleDeclaration>
           <Expression Name="whileCondition"/>
       </CodeExpressionRuleDeclaration>
   </ConditionRule>
   <Send HasTypedChannel="True"ID="send1">
       <Message Name="msg1"Type="System.UInt32"/>
       <OnBeforeSend Name="onBeforeSend1"/>
       <TypedChannel Type="System.Collections.IList"Operation="AddIndex"
Name="Foo"/>
   </Send>
</While>
在用于串行化的语言是XOML的实施例中,每个XOML元素在编译计划表时被串行化到其相应对象。对象包括简单和复杂类型。以下描述每个动作的XOML表示之间的映射以及它们与制作中的对象模型的映射。XOML的串行化在元动作和复合动作之间变化。
元动作的简单类型被串行化为关于动作类型的特性。元动作的复杂类型被串行化为子元素。作为示例,以下是发送动作的XOML表示。
<Send ID="send1"HasTypedChannel="False">
      <Message Name="message1"Type="System.String"/>
      <UntypedChannel Name="c1"/>
</Send>
以与元类型串行化相似的方式,复合动作的简单类型被串行化为关于动作类型的特性。然而,通过定义,复合动作封装嵌套动作。每个嵌套动作被串行化为另一个子元素。作为示例,以下是While动作的XOML表示。
<While ID="whilel">
     <ConditionRule>
        <CodeExpressionRule>
           <Expression Name="test"/>
        </CodeExpressionRule>
     </ConditionRule>
</While>
在过程/工作流视图和串行化表示之间存在较强的关系。图8示出计划表定义和可视工作流、工作流的串行化表示(例如XOML)、以及工作流的外代码之间的关系。当在任一表示中制作时,另一个也会引起变化。因而,当开发者在两者之间切换时,更改动作(或复合动作情形中其构成部分)的XOML就直接反映在过程/工作流视图中,反之亦然,在过程/工作流视图中修改动作导致XOML中的适当修改。作为示例,过程/工作流视图中动作的删除导致XML元素从同一动作的XOML中移除。过程/工作流视图和外代码之间还出现往返。
在创建XOML代码期间,如果XOML定义不遵从预定义的接口要求,则犯规XML元素被加上下划线或以其它方式向开发者视觉标识。如果开发者切换到过程视图,就会变成XOML内出错且设计程序提供开发者可点击并导航到犯规元素的一个链接。同一出错在任务窗格中显现,并在该出错上双击之后将开发者导航至XOML中的犯规元素。
从XOML文件中创建动作树(解串行化)
在一实施例中,CreateEditorInstance()函数创建一DesignSurface对象,并然后对DesignSurface对象调用BeginLoad()函数从而将实际载入程序对象传递给它,这最终以对DesignerLoader()函数的BeginLoad()调用结束。PerformLoad()函数读取文本缓冲器对象并将其解串行化到控制引擎组件模型的分层结构。本发明遍历该分层结构,并将动作插入设计平面以将各组件载入可视工作区。
本发明还监听XOML文件的变化以跟踪分层结构和项的标识改变来更新可视工作区的高速缓冲器中的值。次要文档数据列表包括用户不可见的控制引擎设计程序在其上工作的次要文档的列表。例如,用户还未打开外代码文件但用户在控制引擎设计程序中作改变时可改变外代码文件是可能的。由于该文件对用户不可见,文件作为次要文档维护。在保存XOML文件的任何时候,次要文档自动保存。如果这些文件之一的名字改变或如果文件被删除,本发明相应地更新对应的次要文档。
对象树的示例性解串行化方针如下。xml元素首先被视为父对象的属性。如果父对象不具有带有元素的标记名的属性,则该元素被视为父对象的子对象。xml特性被视为父对象上的简单属性。
在使用以上串行化代码的一示例性解串行化中,<While>元素被视为使用xml名字空间信息创建的对象。<ConditionRule>元素被视为While动作的属性。<CodeExpressionRuleDeclaration>元素被视为其值将应用于ConditionRule属性的对象。<Send>元素首先尝试作为While动作的属性,但‘While’动作并不具有带有名字‘Send’的属性,因此<Send>元素被视为一对象并被添加为while动作的子动作。<Message>元素被视为Send动作的属性。因为Send上的Message属性是只读的,Message元素的内容被视为Message对象的内容。类似的规则应用于<OnBeforeSend>和<TypedChannel>元素的解串行化。
在以下条件下,XOML解串行化将面临失败:XOML代码未明确形成、XomlDocument不是XOML代码中的第一元素、且XOML代码中的第一动作不能被解串行化。将向开发者呈现出错消息,通过该消息可导航至从XOML视图切换至过程/工作流视图时的犯规XML元素。
主宿控制引擎设计程序
设计程序框架可被主宿在任何应用程序中。这对第三方应用程序而言是非常有用的用来在其相应环境中提交工作流的特征。它还将使第三方能通过重新提供并定制设计平面来开发围绕控制引擎设计程序的工具。本发明的框架期望宿主容器应用程序提供诸如编辑器和/或文本缓冲器的服务集。
重新提供设计程序中的一个步骤是创建载入程序和设计平面。载入程序负责载入XOML文件并构建维护动作的设计程序的主基础结构。设计平面维护其内的设计程序的主基础结构,向宿主提供服务并与设计平面交互。设计平面用作为服务容器以及服务提供者。在一示例中,以下代码被执行以载入XOML文档并构建在其中维护动作的设计程序宿主。
this.loader.XomlFile=filePath;
if(this.surface.IsLoaded==false)
         this.surface.BeginLoad(this.loader);
以下服务使能设计程序中的不同函数。ISelectionService函数维护选定对象。IToolboxService函数管理与工具箱的交互。IMenuCommandService函数管理与菜单的交互。ITypeProvider函数使能类型系统。此外,可有设计程序宿主环境提供的其它服务来使能高级的设计程序特征。
类型系统是本发明的组件模型框架中的组件。当设计程序被主宿在项目系统内时,TypeProvider对象在每个项目基础上创建。项目中的组装件引用被推入类型提供程序。此外,项目中的用户代码文件被解析,而单个代码的编译单元被创建并被推入类型提供程序。还有,本发明监听项目系统中的事件,这些事件可导致类型系统中的类型改变并对类型提供程序作适当调用,以响应于这些改变而重新载入类型。
撤消/重做
在创建并正确构建计划表之后,开发者可能想要回退一系列的已执行操作。本发明的撤消和重做功能提供示出已直接影响哪个动作的可视反馈。例如,当撤消对动作的属性改变时,选择受影响的动作。当撤消多个对象的删除时,当它们恢复到计划表时选择所有涉及的对象。撤消/重做是在其它领域内许多应用程序上通用的特性,且其意义是容易理解的。在控制引擎设计程序中,撤消/重作项未从保存中清除。此外,当开发者在各视图、外代码之间切换时,撤消/重做可在过程/工作流视图、XOML视图中执行。
撤消/重做对过程/工作流视图中的以下动作提供:动作拖放(例如将动作从工具箱拖到设计平面、将动作从计划表的一部分拖到另一部分、以及将动作从一个设计程序移到另一设计程序)、动作的配置(例如指定动作的属性)、以及剪切/复制/粘贴/删除。
在一实施例中,已串行化的视图(例如XOML视图)是提供文本编辑器的标准撤消/重做操作的一XML编辑器。本发明的设计程序向开发者提供指示过程/工作流视图中所作改变的反馈,然后在已串行化视图中撤消将导致已串行化代码的丢失。当开发者在过程/工作流视图中构建计划表的一部分、切换到已串行化视图、并决定执行撤消/重做操作时,将显现警报。
示例性操作环境
图9示出计算机130形式的通用计算装置的一个示例。在本发明一实施例中,诸如计算机130的计算机适用于在此示出和描述的其它附图。计算机130具有一个或多个处理器或处理单元132和系统存储器134。在所示实施例中,系统总线136将包括系统存储器134的各个系统组件耦合到处理器132。总线136表示若干总线结构类型中任一种的一种或多种,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各种总线架构的任一种的处理器或本地总线。作为示例,而非限制,这些架构包括工业标准架构(ISA)总线、微信道架构(MCA)总线、扩展ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线和也称为Mezzanine总线的外围部件互连(PCI)总线。
计算机130通常具有至少某些形式的计算机可读介质。包括易失性和非易失性介质、可移动和不可移动介质的计算机可读介质可以是能被计算机130访问的任何可用介质。作为示例,而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以任何方法或技术实现、用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的易失性和非易失性介质、可移动和不可移动介质。例如,计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能光盘(DVD)或其它光学存储技术、磁盒、磁带、磁盘存储或其它磁性存储装置、或任何其它可用于存储所需信息并可由计算机130访问的介质。通信介质通常包括诸如载波或其它传输机制的调制数据信号中的计算机可读指令、数据结构、程序模块、或其它数据,且包括任何信息输送介质。本领域技术人员都熟悉已调制数据信号,即在信号中以对信息编码的方式设置或改变其一个或多个特征的信号。诸如有线网络或直接连线的有线介质,和诸如声学、射频、红外线和其它无线介质的无线介质是通信介质的示例。以上任何介质的组合也可包括在计算机可读介质的范围中。
系统存储器134包括可移动和/或不可移动的、易失性和/或非易失性存储器形式的计算机存储介质。在所示实施例中,系统存储器134包括诸如只读存储器(ROM)138和随机存取存储器(RAM)140。包含帮助计算机130如在起动时在元件间传送信息的基本例程的基本输入/输出系统(BIOS)142通常存储在ROM138中。RAM140通常包含可被处理单元132立即访问和/或现时操作的数据和/或程序模块。作为示例,而非限制,图9示出了操作系统144、应用程序146、其它程序模块148、和程序数据150。
计算机130还可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。例如,图9示出了读取和写入不可移动、非易失性介质的硬盘驱动器154。图9还示出读取和写入可移动、非易失性磁盘158的磁盘驱动器156,读取和写入可移动、非易失性光盘162,诸如CD ROM或其它光学介质的光盘驱动器160。其它也可用在示例性计算环境中的可移动/不可移动、易失性/非易失性计算机存储介质包括,但不限于,如盒式磁带、闪存卡、数字多功能光盘、数字视频带、固态RAM、固态ROM等等。硬盘驱动器154、磁盘驱动器156和光盘驱动器160通常通过诸如接口166的非易失性存储器接口与系统总线136连接。
如上所述并如图9所示的盘驱动器或其它大容量存储装置及其相关联的计算机存储介质为计算机130提供计算机可读指令、数据结构、程序模块、和其它数据的存储。在图9中,例如,硬盘驱动器154被示为存储操作系统170、应用程序172、其它程序模块174、和程序数据176。注意这些组件可以与操作系统144、应用程序146、其它程序模块148、和程序数据150相同或不同。在此给予操作系统170、应用程序172、其它程序模块174、和程序数据176的不同序号至少说明他们是不同的副本。
用户可通过诸如键盘180和定位装置182(例如鼠标、跟踪球、笔或触摸板等)的输入装置或用户界面选择装置向计算机130输入命令和信息。其它输入装置(未示出)可包括话筒、游戏杆、游戏垫、卫星接收器、扫描仪等等。这些和其它输入装置常常通过与系统总线136耦合的用户输入接口184与处理单元132相连,但也可通过诸如并行端口、游戏端口或通用串行总线(USB)的其它接口和总线结构连接。监视器188或其它类型的显示装置也可通过诸如视频接口190的接口与系统总线136相连。除了监视器188,计算机还可包括诸如打印机和扬声器的其它输出装置(未示出),它们通过输出外围接口(未示出)相连。
计算机130可以在使用与一台或多台远程计算机,诸如远程计算机194的逻辑连接的网络化环境中运行。远程计算机194可以是个人计算机、服务器、路由器、网络PC、对等装置或其它公共网络节点,而且通常包括上述与计算机130相关的许多或全部组件。图9中所描绘的逻辑连接包括局域网(LAN)196和广域网(WAN)198,但也可包括其它网络。LAN196和WAN198可以是有线网络、无线网络及其组合等。这样的网络化环境在办公室、企业范围计算机网络、内联网和全球计算机网络(例如因特网)上是常见的。
当用于LAN网络化环境中时,计算机130通过网络接口或适配器186与局域网196连接。当用于WAN网络化环境中时,计算机130通常包括调制解调器178或其它用于在广域网198,诸如因特网中建立通信的装置。可以是内置式或外置式的调制解调器178与系统总线136通过用户输入接口184或其它适当机制连接。在网络化环境中,与计算机130相关的程序模块或其一部分可存储在远程存储器存储装置中。作为示例,而非限制,图9示出了驻留于存储装置中的远程应用程序192。应当理解,所示网络连接是示例性的,且也可以使用其它用于在计算机间建立通信连接的技术。
通常,计算机130的数据处理器通过不同时间在计算机的各种计算机可读存储介质中存储的指令来编程。程序和操作系统通常是分布式的,例如分布于软盘或CD-ROM。从那里,它们被安装或载入到计算机的次级存储器中。执行时,它们至少部分地被载入计算机的主电子存储器。在此所述的本发明包括这些和其它各类的计算机可读存储介质,其中这些介质包含用于结合微处理器或其它数据处理器实现所述步骤的指令或程序。本发明还包括根据所述方法和技术编程的计算机本身。
为了进行说明,诸如操作系统的程序和其它可执行程序组件在此被视为离散框。然而,可以理解这种程序和组件在不同时间驻留于计算机的不同存储组件,并由计算机的数据处理器执行。
尽管结合包括计算机的示例性计算系统环境进行了描述,本发明可用多个其它通用或专用计算系统环境或配置来操作。计算系统环境并非旨在提出对本发明的使用范围或功能的任何限制。此外,计算系统环境不应解释为对示例性操作环境中示出的任一组件或其组合有任何依赖性和要求。适用于本发明的众所周知的计算系统、环境、和/或配置的示例包括,但不限于,个人计算机、服务器计算机、手持式或膝上型装置、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电器、移动电话、网络PC、微型计算机、大型计算机、包括任一上述系统或装置的分布式计算环境等。
本发明可在由一个或多个计算机或其装置执行的诸如程序模块的计算机可执行指令的一般环境中描述。通常,程序模块包括但不限于,执行特定任务或实现特定抽象数据类型的例程、程序、典型、组件、以及数据结构。本发明还可在任务由通过通信网络链接的远程处理装置执行的分布式计算环境中实践。在分布式计算环境中,程序模块可位于包括存储器存储装置的本地和远程计算机存储介质中。
软件体系结构的环境中的接口包括软件模块、组件、代码部分、或计算机可执行指令的其它序列。该接口包括,例如访问代表第一模块执行计算任务的第二模块的第一模块。在一示例中,第一和第二模块包括诸如由操作系统提供的应用程序编程接口(API)、组件对象模型(COM)接口(例如用于对等应用程序通信)、以及可扩展标记语言元数据交换格式(XMI)接口(例如用于在web服务之间通信)。
接口可在诸如Java2平台企业版(J2EE)、COM、或分布式COM(DCOM)示例中紧密耦合地同步实现。或者或此外,接口可在诸如web服务中(例如使用简单的对象访问协议)松散耦合地异步实现。一般而言,接口包括以下特征的任何组合:紧密耦合、松散耦合、同步、以及异步。此外,接口可遵从标准协议、专用协议、或标准和专用协议的任意组合。
所述接口都可以是单个接口的一部分,或者可实现为单个接口或其任意组合。接口可本地或远程地执行以提供功能。此外,接口可提供比在此所示或所述的更多或更少的功能。
在此所示和所述的方法的执行或实行顺序不是必需,除非以其它方式指定。即,各方法的元素可以任何顺序执行,除非以其它方式指定,且这些方法可包括比在此揭示的更多或更少的元素。例如,可预期特定元素在本发明范围内的另一元素之前、同时、或之后执行或实行。
当引入本发明元素或其实施例时,术语“一”、“和”、“该”以及“所述”旨在表示有一个或多个该元素。术语“包括”、“包含”和“具有”旨在内含的,并表示除了例示元素外还可有其它元素。
从以上内容可见,可获取本发明的若干目标并得到其它有利结果。
因为可在以上构建、产品和方法中作各种改变而不背离本发明的范围,所以所述说明书中包含并在附图中示出的所有主题应解释为说明性的,并且不具有限制意义。
附录A
示例性动作及其示例性实现
示例性动作包括如下:Send(发送)、SendRequest(发送请求)、SendResponse(发送响应)、Receive(接收)、ReceiveRequest(接收请求)、以及ReceiveResponse(接收响应)、Code(编码)、Delay(延迟)、Fault(故障)、Suspend(延缓)、Terminate(终止)、InvokeSchedule(调用计划表)、InvokeSchedules(各调用计划表)、InvokeWebService(调用web服务)、DotNetEventSource(.NET事件源)、DotNetEventSink(.NET事件信宿)、Sequence(序列)、Parallel(并行)、While(条件循环)、ConditionalBranch(条件分支)、Conditional(条件)、Constrained(约束)、ConstrainedActivityGroup(CAG)(约束动作组)、EventDriven(事件驱动)、Listen(监听)、EventHandlers(事件处理器)、ExceptionHandler(例外处理器)、ExceptionHandlers(各例外处理器)、Compensate(补偿)、CompensationHandler(补偿处理器)、Scope(范畴)、以及Schedule(计划表)。
每个示例性动作具有与其相关联的元数据。通过与动作相关联的串行化程序,元数据被传送给工作流的说明性表示。例如,元数据可包括可任选的外代码方法以及可任选的互相关系集合。
Send动作
控制引擎提供三个用于发送消息的动作(例如Send、SendRequest、以及SendResponse),每一个解决不同的使用情形。此外,因为这三个动作共享部分元数据,一抽象基类被定义并用作这三个动作的超类。
Receive动作
控制引擎提供三个用于发送消息的动作(例如Receive、ReceiveRequest、以及ReceiveResponse),每一个解决不同的使用情形。此外,因为这三个动作共享部分元数据,一抽象基类被定义并用作这三个动作的超类。
Code
Code动作执行在元数据中指示的外代码方法。
Delay
Delay动作执行其强制性外代码方法以产生DateTime(日期时间)值。它在内部将其实例数据上的TimeoutValue(超时值)设置为该值。如果DateTime在过去,则Delay立即完成。否则,它建立一计时器预订从而在激发计时器时通知该Delay。当激发计时器时,Delay得到通知并完成。
Fault
Fault动作执行其强制性外代码方法以产生Exception对象。然后它发出该例外。
Suspend
Suspend动作延缓当前的计划表实例。
Terminate
Terminate动作终止当前的计划表实例。
Invoke Schedule
Invoke Schedule动作调用一计划表。
Invoke Web Service
通过代理类调用一web服务,传递并接收所指定的参数。
DotNetEvent Sink
阻挡指定事件已由先前调用的计划表实例引发的等待通知。
DotNetEvent Source
引发指定事件并立即完成执行。
Sequence
Sequence动作以有序方式协调子动作集的执行,一次一个子动作。
Parallel
Parallel动作并发地执行子动作集。
While
迭代地执行子动作。
ConditionalBranch
通过Sequence语义来执行子动作。
Conditional
Conditional动作包含ConditionalBranch动作的有序集。
Constrained
当由CAG告知Constrained动作要执行时,仅执行它封装的动作。
CAG(Constrained Activity Group)
当CAG执行时,它基于其启用和禁用约束的估计来执行(和重新执行)子动作。
Task(任务)
建模根据一个或多个原理执行的外部工作单元。
Event Driven
封装其执行由“事件”动作触发的动作。
Listen
有条件地执行n个子EventDriven动作之一。
Event Handler
EventHandler动作仅持有由相关联Scope使用的一个EventDriven动作集。
Exception Handler
封装带有表示范畴的捕捉块的元数据的动作。
Exception Handlers
封装ExceptionHandler动作的有序集。
Compensate
补偿已完成子范畴。
Compensation Handler
封装被定义为范畴的补偿处理器的子动作。
Scope
范畴是:事务边界;例外处理边界;补偿边界;事件处理边界;以及用于消息、变量、互相关系集合、以及信道宣称(即共享的数据状态)的边界。Scope内动作的执行是顺序的,因而所包含的动作显然在构建范畴时就按Sequence排序了。
Schedule
Schedule是控制引擎将执行的仅有的顶层动作。
Composite Activity(复合动作)
使能控制流的复合动作类型是:Sequence(序列)、Parallel(并行)、ConstrainedActivityGroup(CAG)(约束动作组)、Conditional(条件)、While(条件循环)、Listen(监听)。此外,Scope和Schedule是作为具有其内动作的隐含顺序的容器的复合动作类型。

Claims (20)

1.一种用于参照与工作流相关的用户代码来执行所述工作流的计算机实现方法,其特征在于,所述计算机实现方法包括:
编译所述用户代码;
用所述已编译代码来执行所述未经编译的工作流;
在执行所述未经编译的工作流时允许所述用户动态地更改所述未经编译的工作流。
2.如权利要求1所述的计算机实现方法,其特征在于,所述工作流包括多个动作,每个所述动作具有与其相关联的动作执行程序,且其中用所述未经编译的代码来执行所述未经编译的工作流包括参照所述已编译的用户代码对所述多个动作的每一个执行所述动作执行程序。
3.如权利要求1所述的计算机实现方法,其特征在于,还包括实行所述经更改的工作流。
4.如权利要求1所述的计算机实现方法,其特征在于,还包括执行所述经更改的工作流。
5.如权利要求4所述的计算机实现方法,其特征在于,执行所述未经编译的工作流和执行所述已更改的工作流包括不编译所述工作流就执行。
6.如权利要求1所述的计算机实现方法,其特征在于,所述用户代码表示影响所述工作流的执行的一个或多个事务规则。
7.如权利要求1所述的计算机实现方法,其特征在于,还包括从用户处接收所述用户代码。
8.如权利要求1所述的计算机实现方法,其特征在于,所述工作流包括多个动作,且其中编译所述用户代码包括编译与所述多个动作的每一个相关联的用户代码。
9.如权利要求1所述的计算机实现方法,其特征在于,执行所述未经编译工作流包括实施死锁检测和并发控制。
10.如权利要求1所述的计算机实现方法,其特征在于,一个或多个计算机可读介质具有用于执行如权利要求1所述的方法的计算机可执行指令。
11.一个或多个具有计算机可执行组件的计算机可读介质,所述组件用于参照与所述工作流相关的用户代码来执行工作流,其特征在于,所述组件包括:
一编译程序组件,用于将所述用户代码翻译成可执行对象代码;
一工作流组件,用于以来自所述编译程序组件的可执行对象代码来执行所述未经编译的工作流;以及
一设计程序组件,用于在所述未经编译的工作流由所述工作流组件执行时,允许所述用户动态地更改所述未经编译的工作流。
12.如权利要求11所述的计算机可读介质,其特征在于,所述工作流组件还执行所述已更改工作流。
13.如权利要求12所述的计算机可读介质,其特征在于,所述工作流组件无需编译所述工作流就可执行所述未经编译的工作流和所述已更改的工作流。
14.如权利要求11所述的计算机可读介质,其特征在于,还包括一接口组件,用于从用户处接收所述用户代码。
15.如权利要求11所述的计算机可读介质,其特征在于,所述工作流包括多个动作,每个所述动作具有与其相关联的动作执行程序,且其中所述工作流组件通过对所述动作的每一个执行所述动作执行程序来执行所述未经编译的工作流。
16.一种用于参照与所述工作流相关的用户代码来执行工作流的系统,其特征在于,所述系统包括:
一存储器区域,存储未经编译的工作流和用户代码;以及
一处理器,被配置成执行计算机可执行指令,用于:
编译存储在所述存储器区域的所述用户代码;
用所述已编译代码来执行所述未经编译的工作流;以及
在执行所述未经编译的工作流时允许所述用户动态地更改所述未经编译
的工作流。
17.如权利要求16所述的系统,其特征在于,所述工作流包括多个动作,每个所述动作具有与其相关联的动作执行程序,且其中所述处理器被配置成通过对所述动作的每一个执行所述动作执行程序来执行所述未经编译的工作流。
18.如权利要求16所述的系统,其特征在于,还包括一种用于编译存储在所述存储器的所述用户代码的装置。
19.如权利要求18所述的系统,其特征在于,还包括一种用所述已编译代码来执行所述未经编译的工作流的装置。
20.如权利要求19所述的系统,其特征在于,还包括一种在执行所述未经编译的工作流时允许所述用户动态地更改所述未经编译的工作流的装置。
CN 200510099094 2004-10-01 2005-09-01 用于在设计和运行时间无缝制作和编辑工作流的框架 Pending CN1766835A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US61554704P 2004-10-01 2004-10-01
US60/615,547 2004-10-01
US11/047,275 2005-01-31

Publications (1)

Publication Number Publication Date
CN1766835A true CN1766835A (zh) 2006-05-03

Family

ID=36742737

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200510099094 Pending CN1766835A (zh) 2004-10-01 2005-09-01 用于在设计和运行时间无缝制作和编辑工作流的框架

Country Status (1)

Country Link
CN (1) CN1766835A (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102520968A (zh) * 2011-12-28 2012-06-27 用友软件股份有限公司 可个性化定制的流程设计与展现装置及方法
CN103150164A (zh) * 2013-03-06 2013-06-12 浙江工业大学 一种事务规则驱动的敏捷sowf架构方法
CN104572835A (zh) * 2014-12-10 2015-04-29 南车青岛四方机车车辆股份有限公司 一种过程元模型构建方法及装置
CN104572834A (zh) * 2014-12-10 2015-04-29 南车青岛四方机车车辆股份有限公司 一种过程元模型构建方法及装置
CN105320523A (zh) * 2015-10-16 2016-02-10 北京恒华伟业科技股份有限公司 一种数据处理方法和装置
CN107644286A (zh) * 2017-08-15 2018-01-30 上海艾融软件股份有限公司 工作流处理方法及装置
CN107810509A (zh) * 2015-06-23 2018-03-16 微软技术许可有限责任公司 工作流生成和编辑
CN108292208A (zh) * 2015-11-24 2018-07-17 微软技术许可有限责任公司 并行前端应用和工作流开发
CN108615136A (zh) * 2016-12-13 2018-10-02 中国地质调查局发展研究中心 任务流程控制方法及系统
CN109445766A (zh) * 2018-11-07 2019-03-08 北京计算机技术及应用研究所 一种基于事件驱动的文件安全控制策略流程引擎系统
WO2020015215A1 (zh) * 2018-07-19 2020-01-23 平安科技(深圳)有限公司 工作流引擎的管理方法及装置、存储介质、计算机设备
CN113176901A (zh) * 2021-05-17 2021-07-27 上海云扩信息科技有限公司 一种程序的运行加载优化算法

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102520968A (zh) * 2011-12-28 2012-06-27 用友软件股份有限公司 可个性化定制的流程设计与展现装置及方法
CN102520968B (zh) * 2011-12-28 2015-04-15 用友软件股份有限公司 可个性化定制的流程设计与展现装置及方法
CN103150164A (zh) * 2013-03-06 2013-06-12 浙江工业大学 一种事务规则驱动的敏捷sowf架构方法
CN103150164B (zh) * 2013-03-06 2015-10-07 浙江工业大学 一种事务规则驱动的敏捷sowf架构方法
CN104572835A (zh) * 2014-12-10 2015-04-29 南车青岛四方机车车辆股份有限公司 一种过程元模型构建方法及装置
CN104572834A (zh) * 2014-12-10 2015-04-29 南车青岛四方机车车辆股份有限公司 一种过程元模型构建方法及装置
CN104572835B (zh) * 2014-12-10 2018-10-30 中车青岛四方机车车辆股份有限公司 一种过程元模型构建方法及装置
CN107810509A (zh) * 2015-06-23 2018-03-16 微软技术许可有限责任公司 工作流生成和编辑
CN105320523A (zh) * 2015-10-16 2016-02-10 北京恒华伟业科技股份有限公司 一种数据处理方法和装置
CN105320523B (zh) * 2015-10-16 2019-12-06 北京恒华伟业科技股份有限公司 一种数据处理方法和装置
CN108292208A (zh) * 2015-11-24 2018-07-17 微软技术许可有限责任公司 并行前端应用和工作流开发
CN108615136A (zh) * 2016-12-13 2018-10-02 中国地质调查局发展研究中心 任务流程控制方法及系统
CN107644286A (zh) * 2017-08-15 2018-01-30 上海艾融软件股份有限公司 工作流处理方法及装置
WO2020015215A1 (zh) * 2018-07-19 2020-01-23 平安科技(深圳)有限公司 工作流引擎的管理方法及装置、存储介质、计算机设备
CN109445766A (zh) * 2018-11-07 2019-03-08 北京计算机技术及应用研究所 一种基于事件驱动的文件安全控制策略流程引擎系统
CN113176901A (zh) * 2021-05-17 2021-07-27 上海云扩信息科技有限公司 一种程序的运行加载优化算法
CN113176901B (zh) * 2021-05-17 2023-09-19 上海云扩信息科技有限公司 一种程序的运行加载优化方法

Similar Documents

Publication Publication Date Title
CN1766835A (zh) 用于在设计和运行时间无缝制作和编辑工作流的框架
JP5021193B2 (ja) 拡張可能ワークフローモデルの宣言的表現
JP5710852B2 (ja) 設計時および実行時にワークフローを継ぎ目なくオーサリングし編集するためのフレームワーク
JP5173128B2 (ja) フローベースおよび制約ベースのワークフローをオーサリングし、実行するための統一モデル
US8170901B2 (en) Extensible framework for designing workflows
EP1643428A1 (en) Componentized and extensible workflow model
EP1643435A1 (en) An extensible framework for designing workflows
CN1252592C (zh) 通信服务供应方法和设备
US20060074704A1 (en) Framework to model cross-cutting behavioral concerns in the workflow domain
CN1755721A (zh) 组件化和可扩展的工作流模型
US20070276715A1 (en) Distributed activity management
US8527313B2 (en) Document instantiation triggering a business action
CN1825343A (zh) 创作和执行基于流程且基于约束的工作流的统一模型
CN101052948A (zh) 对象过程图应用程序开发系统
CN1419675A (zh) 用于自上而下的企业过程定义和执行的方法和系统
JP2006107440A (ja) ワークフロースケジュールのオーサリングツール
CN1633638A (zh) 在外貌特征模式中带有总功能特性的连接实体
CN102375743A (zh) 一种基于模型和模板开发soa系统的方法
CN1755722A (zh) 可扩展工作流模型的声明性表示
CN1835450A (zh) 网格作业管理器
CN1808375A (zh) 对工作流领域中横切行为问题建模的框架
Lässig et al. The ArchIBALD Data Integration Platform: Bridging Fragmented Processes in the Building Industry
JP2007004327A (ja) プロジェクト管理装置及びプロジェクト管理方法及びプロジェクト管理プログラム
Stolze et al. Agile development of workflow applications with interpreted task models
Pfadenhauer et al. Comparison of two distinctive model driven Web service orchestration proposals

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication

Open date: 20060503