CN1825343A - 创作和执行基于流程且基于约束的工作流的统一模型 - Google Patents
创作和执行基于流程且基于约束的工作流的统一模型 Download PDFInfo
- Publication number
- CN1825343A CN1825343A CNA2005100998409A CN200510099840A CN1825343A CN 1825343 A CN1825343 A CN 1825343A CN A2005100998409 A CNA2005100998409 A CN A2005100998409A CN 200510099840 A CN200510099840 A CN 200510099840A CN 1825343 A CN1825343 A CN 1825343A
- Authority
- CN
- China
- Prior art keywords
- activity
- workflow
- activities
- constraint
- program
- 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
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Stored Programmes (AREA)
Abstract
设计和执行具有基于流程和基于约束的区域的工作流。用户选择一个或多个活动作为基于约束的区域的一部分。每一基于约束的区域具有与其相关联的约束。工作流通过执行基于流程的区域和基于约束的区域来执行。基于流程的区域顺序地执行。评估约束,且响应于所评估的约束执行基于约束的区域。
Description
相关申请的参照
本申请要求2004年10月1日提交的美国临时专利申请第60/615,542号的优先权。
技术领域
本申请的实施例涉及工作流建模领域。更为具体地,本发明的实施例涉及组件化和可扩展工作流模型。
背景技术
现有系统试图通过对商业问题建模而将商业问题映射到高级工作流。然而,真实世界的工作流在各方面都有所不同,这些方面诸如(a)执行和建模的复杂性、(b)设计时对工作流的结构的知识、(c)静态定义或特别/动态、(d)在其生命周期中各点创作和编辑该工作流的简易性、以及(e)与核心工作流过程的弱或强商业逻辑关联。现有模型无法容纳所有这些因素。
此外,大多数现有工作流模型是以基于语言的方法(例如,BPEL4WS、XLANG/S和WSFL)或基于应用程序的方法为基础的。基于语言的方法是具有一闭合的预定义构造集的高级工作流语言,它帮助向用户/程序员建模该工作流过程。工作流语言载有供该闭合构造集使用的所有语义信息,以使用户能够构建工作流模型。然而,语言无法由开发者来扩展,且表示构成该工作流模型的闭合的原语集。语言被绑定到由工作流系统销售商发货的语言编译器。仅该工作流系统产品销售商可通过在该产品的未来版本中用一新的构造集扩展该语言来扩展该模型。这通常要求升级与该语言相关联的编译器。
基于应用程序的方法是这样一种应用程序,它在该应用程序内具有工作流能力以解决领域专用问题。这些应用程序不是真正可扩展的,也没有可编程模型。
采用现有方法,复杂性、预知、动态工作流、创作简易性以及与商业逻辑和核心工作流的关联强度等问题未被充分地解决。没有可扩展、可定制以及可重新主宿工作流设计器框架可用于构建可视工作流设计器来对不同的工作流类别建模。现有系统缺乏一种快速应用程序开发(RAD)风格工作流设计体验,它允许用户图形地设计工作流过程,并以开发者选择的编程语言来关联商业逻辑。另外,没有启用了墨迹的工作流设计器。
另外,现有系统无法提供用于执行工作流的无缝特别或动态编辑。工作流过程在本质上是动态且移动的,且其形式不能在设计时完全预见。该工作流过程以结构化方式起始,并最终在其执行生命周期过程中发展和改变。需要一种允许工作流构建者能够在设计时创作各种类型的工作流模型,以及以无缝的方式对运行的工作流做出特别或动态改变的工作流创作框架。即使在部署了工作流过程之后且该工作流过程正在运行,商业需求的变化通常迫使改变或编辑当前运行的工作流过程。需要一种提供工作流过程的运行时创作的系统。
另外,工作流过程处理跨越工作流过程模型的多个步骤的横切的、互不相关且紊乱的问题。例如,尽管工作流过程的各部分被设计成参与长期运行的事务,然而同一过程的其它部分被设计成用于并发执行。同一工作流过程的另外一些部分要求跟踪,而其它部分处理商业或应用程序级例外。需要向工作流过程的一个或多个部分应用特定的行为。
某些工作流建模方法是不实用的,因为它们需要整个商业过程的基于流的完整描述,包括所有例外以及人类干预。这些方法中的一些提供了当出现例外时的附加功能,而其它方法独占地采用基于约束的方法而非基于流的方法来对商业过程建模。现有系统实现基于流或基于约束的方法中的任一种。这些系统该不灵活,以致于无法对许多常见商业情况进行建模。
因此,需要一种组件化且可扩展的工作流模型来解决这些和其它缺点的一个或多个。
发明内容
本发明的实施例提供了一种用于构建组件化工作流模型的可扩展框架。具体地,工作流过程中的每一步骤具有描述工作流步骤的设计时方面、编译时方面以及运行时方面的相关联组件模型。此外,任何开发者可通过创作这些组件来扩展核心工作流模型。本发明包括一工作流引擎,它足够灵活和强大来协调各种工作流的执行,包括高度形式的机器到机器过程、基于约束的特别人类工作流、以及具有基于流和基于约束的方法的混合的工作流。该工作流引擎准许对执行工作流的激活、执行、查询和控制能力。例如,本发明准许对执行工作流的特别和动态改变。该工作流引擎可以在包括服务器和客户机环境两者的各种宿主环境中重新主宿或嵌入。每一特定宿主环境将工作流引擎与一组服务提供者相结合。服务提供者的总能力确定了可在该特定宿主环境中执行的工作流的种类。
本发明的其它实施例提供了一种用于序列化工作流模型的声明性格式,诸如可扩展配合(orchestration)标记语言(XOML)。该声明性格式使用户能够通过编写一组组件来扩展工作流模型。对应于工作流过程的各步骤的语义被封装在活动确认器组件中,该组件在编译时确认并实施给定组件的语义。本发明的声明性格式的实施例还能够进行数据声明以及与工作流模型的各元素的数据相关。该声明性格式支持数据通过工作流的变换。例如,该格式声明性地表示外部数据源,如数据库或文件、代码片断以及工作流模型内的商业规则。
本发明的一个实施例提供了一种构建图形/可视工作流设计器的可扩展、可定址以及可重新主宿的工作流设计器框架,以对不同类别的工作流建模。本发明的另一实施例支持快速应用程序开发风格的工作流设计体验,以允许用户图形地设计工作流过程,并以任何编程语言来关联商业逻辑。本发明的实施例也使用笔和图形输入板技术提供了墨迹支持。本发明提供了一种自由形式的绘图表面,其中,由用户绘制的工作流被转移到内部表示。本发明支持通过在现有绘图表面上的墨迹编辑(例如,添加/删除活动)以及现有工作流的墨迹注释(例如,书写表面上的注解、建议或提醒等手绘物)对工作流的创建和修改。
本发明的其它一些实施例提供了用于以声明性方式捕捉横切行为并将行为应用于工作流模型的选中部分的组件。本发明的其它实施例在与其相关联的行为的上下文中执行工作流模型的选中部分。本发明的实施例提供了处理工作流模型的多个步骤的横切的、互不相关且紊乱的问题的框架、可重新使用组件和语言。
依照本发明的一个方面,一种计算机实现的系统表示工作流模型。该计算机实现的系统包括多个结构化活动的工作流。该工作流还包括多个非结构化的活动,其每一个具有与其相关联的约束。该系统还包括运行时引擎,用于通过执行多个结构化活动的每一个、评估多个非结构化活动的每一个的约束、以及根据与其相关联的约束的评估执行多个非结构化活动的每一个来执行该工作流。
依照本发明的另一方面,一种方法对工作流建模。该工作流表示商业过程。该方法包括向用户呈现多个活动。该方法还包括从用户接收对所呈现的活动的选择以及与其相关联的流程规范。该方法还包括依照所接收的流程规范对所接收的活动选择分组。该方法还包括从用户接收对所呈现的活动的另一选择以及与其相关联的约束。该方法还包括将所接收的对所呈现的活动的其它选择与对分组的活动选择合并,以创建工作流。
依照本发明的又一方面,一个或多个计算机可读介质具有用于对具有基于流程的区域和基于约束的区域的工作流建模的计算机可执行组件。该组件包括用于向用户呈现多个活动的显示组件。该组件还包括用于从用户接收对所呈现的活动的选择以及与其相关联的流程规范的接口组件。该接口组件还从用户接收对所呈现的活动的另一选择以及与每一活动相关联约束。该组件还包括用于依照所接收的流程规范对所接收的活动选择分组的设计器组件。该设计器组件还将所接收的对所呈现的活动的其它选择与分组的活动选择合并以创建工作流。
可替换地,本发明可包括各种其它方法和装置。
其它特征部分是显而易见的,而部分将在后文指出。
附图说明
图1是包含任务和控制流合成活动的示例性工作流。
图2示出了一个示例性活动继承树。
图3示出了一个示例性组件模型。
图4示出了一个示例性组件模型生命周期。
图5是示出基于流程的工作流内约束活动组的框图。
图6是用于创作依赖于工作流规范的向导的工作流的高级应用程序用户界面。
图7示出了一个示例性工作流设计器。
图8示出了包括接收活动及其后的发送活动的配合程序。
图9示出了可视工作流、工作流的XOML序列化表示以及工作流的分离代码之间的进度表定义和关系。
图10是示出其中可实现本发明的合适的计算系统环境的一个示例的框图。
附录A描述了示例性活动。
贯穿附图,对应的参考符号指示对应的部分。
具体实施方式
本发明的实施例对表示诸如商业过程等过程的工作流进行建模。商业过程是导致可预测和可重复结果的依赖性和有序的任务、活动等。包括组织的操作过程、机构的工作知识以及信息资源,商业过程被设计成以有效且及时的方式满足所定义的商业目标。在一个有效的环境中,过程的功能性组件可被容易地标识、适应和部署来解决不断改变的企业需求。工作流是与商业过程中的任务交互的最终用户的体验。任务被建模为活动、组件等,其每一个表示由个人或机器执行的工作单元。在一个实施例中,向用户呈现多个活动。用户选择并组织活动来创建工作流。执行所创建的工作流以对商业过程建模。参考图1,示例性工作流100包含任务和控制流合成活动。
在一个示例中,配合引擎工作流模型支持不同类别工作流的建模、创作和执行。示例包括按照出现在有序序列中或作为一组异步事件出现的一组结构化步骤对给定问题建模。该配合引擎协调进度表的执行。进度表是以树形结构分层排列的一组经组织的活动。执行活动的执行上下文以及对其可见的共享数据由一作用域提供。每一活动表示封装工作流过程中步骤元数据的组件。活动是工作流模型中的基本执行单元,且具有相关联的属性、句柄、约束和事件。每一活动可以由任何编程语言中的用户代码来配置。例如,用户代码可表示以公用语言运行时环境(CLR)语言书写的商业或应用程序逻辑或规则。每一活动支持对用户代码中的执行的预截听(pre-interception)挂钩和后截听(post-interception)挂钩。每一活动具有相关联的运行时执行语义和行为(例如,状态管理、事务、事件处理和异常处理)。活动可与其它活动共享状态。活动可以是原语活动或被组合成合成活动。原语或基本活动没有子结构(例如,子活动),并由此是树结构中的叶节点。合成活动包含子结构(例如,它是一个或多个子活动的父节点)。
在一个实施例中,活动有三种类型:简单活动、容器活动和根活动。在本实施例中,在模型中有一个根活动,且根活动中没有或有任何数量的简单活动或容器活动。容器活动可包括简单或容器活动。整个工作流过程可用作构建更高阶工作流过程的活动。此外,活动可以是可中断或不可中断的。不可中断合成活动不包括可中断活动。不可中断活动缺少可导致活动阻断的服务。
配合引擎提供一组示例性的活动。参考图2,一活动继承树示出了若干示例性活动。图2列出的示例性活动在附录A中更详细地描述。另外,任何用户可编写一个或多个活动来扩展工作流模型。例如,用户可为特定的商业问题、领域、工作流标准(例如,商业过程执行语言)或目标平台编写活动。配合引擎可向用户提供一组丰富的服务来编写活动,该组服务包括,例如分析代码、类型分解和类型系统的服务、用于序列化和呈现的服务。
在一个实施例中,每一活动具有至少三个部分:元数据、实例数据和执行逻辑。活动的元数据定义了可被配置的数据属性。例如,某些活动可共享在活动抽象基类中定义的一组公用元数据。每一活动依照其需求通过扩展该类来声明其自己的附加元数据属性。
元数据属性的值由该活动跨配置该活动的进度表的实例的所有实例共享。例如,如果用户创建进度表A,并向其添加一发送活动,则该发送活动被给予标识信息(例如,“001”)作为其元数据的一部分。添加到该进度表的第二发送活动将接收其自己的唯一标识信息(例如,“002”)。一旦创建和执行了进度表A的多个实例,则发送“001”的所有实例将共享元数据值。相反,活动的实例元数据定义了一组对运行进度表实例中的活动实例专用的数据。例如,延迟活动可提供其实例数据上的只读属性,该实例数据是标识延迟活动的超时值的日期和时间值。一旦延迟活动开始执行,该值即可用,且它对延迟活动的每一单个实例很可能是不同的。通常参考进度表的实例,尤其是活动和任务的实例,而不用“实例”来限定参考。
合成活动具有其子活动组作为另一元素。子活动在一个实施例中被认为是元数据。配合引擎模型明确地准许在运行时在进度表的实例中操纵该元数据。向作为执行进度表实例的一个部分的合成活动添加新的子活动,使得仅该进度表实例的元数据(活动树)被影响是可能的。
接下来参考图3,每一活动具有一组相关联的组件,它们形成了该活动的组件模型。该组相关联的组件包括活动执行器、活动设计器、活动序列化器、活动确认器(例如,语义检查器)、以及活动代码生成器。活动执行器是实现该活动的执行语义的无状态(stateless)组件。活动执行器与活动的元数据一起工作来实现该活动。代码调度器担当活动执行器的服务提供者以向活动执行器提供服务。
活动设计器可视地显示活动的设计时可视表示。活动设计器是设计器分层结构中的一个节点,并且可以加主题或加皮肤。活动设计器主宿在设计环境中(例如,应用程序),并通过服务与宿主设计环境交互。活动确认器在编译时以及运行时实施活动语义。活动确认器在工作流模型的上下文中操作,并使用由该环境提供的服务(例如,编译器、设计器或运行时环境)。确认在工作流生命周期中的各个点发生。结构依从性检查在创建工作流的序列化表示时、编译时或响应于用户请求而做出。语义检查可以在运行时比在编译时执行的检查更强大,以确保诸如运行实例的活动树中活动的添加和替换等运行时操作的安全性。本发明评估与每一活动相关联的语义,以找出例如与预定接口要求的一致性和依从性。
活动序列化器是序列化活动元数据的组件。活动序列化器从各种模型/格式序列化器中调用。整个工作流模型是基于一可扩展模式被序列化成声明性标记语言的,它可以按需进一步被转换成其它工作流语言。
在一个实施例中,活动的组件模型作为数据结构储存在计算机可读介质上。在该数据结构中,活动设计器由储存用于可视地表示该活动的数据的图像字段(例如,图标)表示。另外,一个或多个创作时字段储存定义与活动相关联的属性、方法和事件的元数据。活动序列化器由储存用于将储存在创作时字段中的元数据传送到活动的声明性表示的数据的序列化器字段表示。活动生成器由储存与储存在创作时字段中的元数据相关联的软件代码的商业逻辑字段来表示。活动执行器由储存用于执行储存在商业逻辑字段中的软件代码的数据的执行器字段表示。
作用域和进度表
执行活动的执行上下文以及对其可见的共享数据由作用域来提供。作用域是核心活动之一。作用域是用于将变量和长期运行服务与事务语义、出错处理语义、补偿、事件处理程序和数据状态管理集合在一起的统一构造。作用域可具有相关联的异常和事件处理程序。在一个实施例中,作用域可以是事务的、原子的、长期运行的或同步的。在对用户变量的冲突读-写或写-写访问的情况下,向用户提供并发控制。作用域也是事务边界、异常处理边界以及补偿边界。由于作用域可以在进度表内嵌套,因此用不同作用域内相同的名字(即使作用域是嵌套的)来声明变量、消息、通道和相关集而没有名字冲突也是可能的。
在进度表内嵌套的作用域只能在该进度表的上下文内执行。进度表可以被编译为应用程序(例如,独立的可执行实体)或库(例如,用于从其它进度表调用)。被编译为库的每一进度表有效地构成了可从其它进度表内调用的新活动类型。进度表的元数据包括参数的声明。
一旦开发了进度表,可执行所开发的进度表的实例。激活和控制进度表实例的过程是由其中嵌入了配合引擎的宿主环境所决定的。配合引擎提供了可用于测试进度表的不提供必要服务的“简单宿主”。另外,配合引擎提供了一激活服务来促进同样由引擎和外部应用程序用于与服务环境(即,宿主)交互的“服务提供者”模型(例如,应用程序编程接口)的标准化。激活服务创建了特定进度表类型的进度表实例,并可任选地传递参数。进度表实例本质上是运行进度表实例的代理,并包括唯一地标识该实例的标识符、对进度表的元数据(活动树)的引用、以及挂起、恢复和终止实例的方法。激活服务也支持基于给定的进度表实例标识符找出进度表实例。
代码分离(code-beside)
作用域活动可具有包括用于该作用域活动的商业逻辑的相关联的代码分离类。由于进度表本身是作用域,因此进度表也可具有代码分离的类。在进度表内嵌套的作用域也可具有其自己的代码分离类。在作用域内嵌套的活动共享该作用域的代码分离类,它担当其共享数据的状态和商业逻辑的容器。例如,代码活动的元数据包括对具有代码分离中的特定签名的方法的引用。在另一实例中,发送活动的元数据包括对特定签名的代码分离方法的可任选引用加上对消息声明和通道声明的强制引用。
代码分离的示例性使用包括:变量、消息、通道和相关集的声明;出/入/引用参数的声明;附加自定义属性的声明;要发送的消息的准备;已接收消息的处理;以返回布尔值的代码表达的规则的实现;本地定义的变量的操纵;读活动元数据和实例数据;写活动实例数据(例如,设置将要执行的活动的属性);引发事件;抛出异常;枚举和导航运行进度表实例的活动树中的活动的分层结构,包括跨嵌套的作用域和进度表调用边界;向运行进度表实例内的合成活动添加新活动;改变与运行进度表实例内的活动相关联的声明性规则;以及获取对其它运行进度表实例的引用和对其的操纵。
参考图4,一框图示出了示例性组件模型生命周期。用户与储存在一个或多个计算机可读介质上的计算机可执行组件交互,以对具有基于流程的区域和基于约束的区域的工作流建模。该计算机可执行组件包括显示组件402、接口组件404、设计器组件406以及运行时组件408。显示组件402向用户呈现多个活动。接口组件404从用户接收对所呈现的活动的选择和与其相关联的流程规范。设计器组件406依照所接收的流程规范对所接收的活动选择分组,以创建多个结构化活动,接口组件404还从用户接收对所呈现的活动的另一选择以及与每一活动相关联的约束。该另一选择表示多个非结构化活动,其每一个具有与其相关联的约束。在一个实施例中,用户定义一个或多个约束。设计器组件406还将多个结构化活动与多个非结构化活动合并,以创建工作流。运行时组件408依照流程规范执行多个结构化活动。运行时组件还通过评估与多个非结构化活动的每一个相关联的约束以及执行其约束满足每一评估的活动,来执行所创建的工作流。在一个实施例中,约束具有输入参数,并且运行时引擎408还通过识别输入参数中的改变并重新评估约束来执行工作流。
在一个实施例中,显示组件402、接口组件404、设计器组件406和运行时组件408的一个或多个在应用程序的执行环境、上下文等中执行。
如图4所示其在此处描述的硬件、软件和系统构成了用于向用户呈现多个结构化活动以及多个非结构化活动的示例性装置;用于从用户接收对多个结构化活动的选择、对多个非结构化活动的选择、以及与所选择的活动相关联的流程规范的示例性装置;用于依照所述流程规范将对多个结构化活动的选择与对多个非结构化活动的选择组合以创建工作流的示例性装置;以及用于执行所创建的工作流的示例性装置。
一个或多个计算机可读介质具有用于执行该方法的计算机可执行指令。
约束活动组
工作流以许多形状和大小出现,且其每一个的特征可以是它位于从一端的特别工作流到另一端的形式工作流的范围内。一般而言,特别工作流具有一组要以任何顺序完成或执行的任务。即,该组任务对于执行顺序是不相关的。形式工作流具有定义良好的控制流构造(例如,顺序、并发、条件分支以及while循环),用于精确地定义和控制该组任务的执行。某些工作流具有形式的一些部分,以及特别的其它部分,且可以被容易地表达为具有目标和约束。在某些情况下,工作流甚至可以在其生命周期内沿该范围移动,或当实例在进行中时改变其流程和/或约束。
本发明提供了基于流程的调度和基于约束的调度的统一。该合成以称为约束活动组(CAG)的控制流构造为中心。CAG活动提供了其执行过程由与约束活动相关联的约束指导的活动组。以此方式,CAG促进了其中未对执行路径明确建模的一组活动(例如,相关活动)的面向目标的受约束执行。CAG的退化情况(例如,其中没有在任何约束活动上指定任何约束,且使用了默认的完成条件)是约束活动的非同步并发或并行执行。
CAG与声明CAG的执行何时被认为完成的完成条件相关联。一个示例性默认完成条件声明CAG的执行在所有约束活动处于完成或取消状态时完成。一个示例性完成条件是引用包装CAG的作用域及其父作用域以及其它活动的状态中的变量和消息的布尔值。如果当CAg从潜伏状态移到启用状态时完成条件求值为真,则CAG立即完成,而不会启用或执行任何约束活动。当任何时刻执行CAG活动的完成条件求值为假,则包含在CAG中的任何以及所有执行活动立即被取消,且CAG活动移至完成状态。
CAG中的每一活动具有与其相关联的关联约束。用于约束活动(例如,CAG中的活动)的一个示例性约束是引用包装该CAG的作用域及其父作用域(但并非兄弟作用域)以及CAG内其它活动的状态中的变量和消息的布尔函数。约束可以是透明的、部分透明的或不透明的,取决于对于其数据依赖性和实现所知的内容。数据源依赖性(但非实现)对于部分透明的约束是已知的。对于完全透明的约束,数据依赖性和实现是已知的。不透明条件不提供关于数据依赖性或实现的信息。透明和部分透明的约束具有更有效求值的优点,因为引擎可对何时需要该约束的请求做出有用的判断。
当活动上的启用约束变为真时,该约束声明相关联的活动已准备好执行并且必须被启用。该约束仅当活动处于潜伏状态时才有意义。由此,它仅能被求值为真一次。约束可以在它被启用以后的任何时刻被禁用。这支持在两个任务被分配给两个个体,其中一个任务的完成取消另一任务(禁用)的情况下常见的XOR条件。如同启用约束中的禁用约束是一次使用的。CAG的启用约束可以在满足CAG的完成条件之后被重新启用,以向CAG中的任务提供重复的语义或while语义。
CAG活动的完成条件以及与所包含的活动相关联的所有约束可以被认为是单个表达式集合。当CAG本身被启用时,对满足其数据依赖性的所有布尔表达式求值。如果CAG的完成条件为真,则CAG立即被认为是完成。否则,生成要启用的零个或多个活动的列表。本发明的工作流引擎启用所识别的活动。当由于活动执行对进度表的状态(例如,对约束和完成条件所依赖的数据全域的状态)发生改变时,发生约束的重新求值,并识别要启用的新活动。表达式求值和活动执行并发地执行,这与分阶段或两步迭代过程相反。
接下来参考图5,一框图示出了工作流模型500,它使用CAG在基于流程的区域中定义了基于约束的区域。基于流程的区域包括一组结构化活动(例如,工作流模型元素)。工作流的基于约束的区域示出了当相关联的约束(例如,对进度表的数据状态的布尔表达式)为真时要执行的一组活动。基于流程的模型在达到其端点时完成,而基于约束的区域中的活动只要满足了与活动之一相关联的约束(例如,无限地或直到满足CAG完成语义)时就执行。对基于约束的区域具有完成语义使基于约束的区域和基于流程的区域能够被组合。
在图5的实例中,基于约束的区域包括约束组1502。约束组1中的活动包括发送1504和延迟1506。活动504、506的每一个具有与其相关联的约束。另外,完成条件508与约束组1502相关联。
工作流模板(stencil)
工作流模板(例如,工作流样板或活动包)包括根活动和一组活动。模板可以是域或宿主专用的。模型的示例包括结构化的工作流模板、人类工作流模板以及非结构化的工作流模板。某些模板可以作为一组活动是“闭合的”,包括被设计成可能在特定的宿主环境中共同工作的一个或多个根。其它模板可能是“开放”到各种程度的。模板定义了其可扩展性点。例如,开发者编写CustomRoot(自定义根)和新的抽象CustomActivity(自定义活动),并声明包是CustomRoot加上从CustomActivity导出的任何活动。
示例性BPEL或XLANG/S模板包括具有以下特征的根活动:状态管理和事务中的参与具有相关联的事件和异常处理程序、支持合约第一模型、可被分析、并具有定义良好的激活和终止行为。示例性模板还包括一组消息通信专用活动(例如,Send(发送)和Receive(接收)及其变体),以及诸如Scope(作用域)、Loop(循环)、Condition(条件)、Listen(监听)和Throw(抛出)等其它结构化活动。
一个示例性Halifax模板包括具有以下特征的根活动:隐含状态管理、相关联的异常处理程序(0-n)、支持基于事件的模型、具有良好定义的激活行为、以及具有未定义的终止。根活动包含0-n个EventDriven(事件驱动)活动。每一EventDriven活动表示一个Halifax活动。每一EventDriven活动具有相关联的状态管理协议并在原子作用域内执行。
设计器框架(用户界面)
配合引擎提供了用于以WYSWYG方式设计各种类别的工作流模型的框架。例如,参考图6,一种用于创作工作流的高级应用程序用户界面依赖于工作流规范的向导。该框架包括使开发者能够编写可视工作流设计器的一组服务和行为。这些服务提供了呈现工作流过程的有效方式、支持用于绘制工作流的墨迹/图形输入板、以及支持诸如撤消/回复、拖/放、剪切/复制/粘贴、缩放、扫视、搜索/替换等设计器操作、书签、装饰、用于确认错误的智能标签、用于活动的有效拖动目标指示符、自动布局、视图分页、导航标记器、拖动指示符、具有页眉/页脚的打印和预览等等。通过这一用户界面,可构造包含任务和控制流合成活动(例如,顺序、并行和条件)的简单工作流。对规则规范(例如,条件分支逻辑、while循环逻辑)或数据流规范(例如,任务A的输出是任务B的输入)不要求代码输入(或依赖于现有的已编译代码)。进度表的序列化表示(包括规则和数据流)是自包含的,且在不需要代码分离的某些情形中完成。
使用本发明的设计器框架,本发明的配合引擎包括一种快速应用程序开发(RAD)风格的可视工作流设计器,它支持以可视方式将软件代码与工作流模型相关联。工作流中的每一活动具有相关联的活动设计器。每一活动设计器是按照框架服务来编写的。本发明的框架也包含一可视设计器模型。该可视设计器模型包括通过该工作流模型中的关系彼此链接的一组活动设计器。图7示出了一个示例性工作流设计器。本发明包括将代码与工作流模型相关联的各种模式,包括“代码分离”、“代码嵌入”和允许用户代码实时在工作流模型中往返的“仅代码”。本发明也提供了当用户在构建工作流时的实时语义错误。
在一个实施例中,本发明向用户呈现了标识设计器框架用户界面中的多个活动的包。本发明还从用户接收对所呈现的活动的选择和分层组织。本发明序列化所接收的活动来创建工作流的持久表示。本发明还从用户接收表示用于与工作流中的多个活动之一相关联的商业逻辑的软件代码。本发明也可接收具有与其相关联的一个或语义的用户定义活动。本发明包括用于评估语义以找出其对预定义接口要求的一致性的语义检查器或确认器。如果语义与预定义的接口要求相一致,则本发明呈现该用户定义的活动作为多个活动之一。本发明还编译软件代码来创建一个或多个二进制文件。例如,本发明将序列化的工作流表示和软件代码编译成包含工作流的可执行表示的单个程序集(assembly)。本发明执行所创建的工作流。在一个实施例中,一个或多个计算机可读介质具有用于执行该方法的计算机可执行指令。
配合引擎设计器允许用户通过使用其它所创建的进度表来递归地组成更高阶进度表并使用它们。进度表的内联扩充允许用户内联地查看进度表内容并剪切或复制内容。为允许进度表的内联扩充以及使进度表只读,创建用于内联进度表的单独设计表面和设计器宿主。此外,合成进度表设计器具有其自己的分层结构。所调用的进度表在设计器由用户扩充时被加载和显示。在一个实施例中,当活动被放到或复制到设计器表面上时,层叠设计器。一属性将调用活动设计器与主宿的进度表的根设计器链接。以下函数防止向设计器添加或移除活动。
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”的项目,并向该项目添加配合项。用户然后将作用域活动拖放至设计表面。下一步,用户将接收活动以及其后的发送活动放到该作用域上。图8示出了设计器中的所得工作流800。每一活动设计器提供了对象模型上的用户界面表示。开发者能够直接对对象模型编程,并设置活动上的属性或使用该设计器。配合引擎设计器允许开发者从工具箱中选择活动并将其拖到设计器表面上。如果活动已被放置到进度表中并需要移动,则开发者能够选择它(通过点击它)并将其拖至它需要去往的进度表区域。如果开发者按住ctrl键并同时进行拖放,则做出所选中活动的副本。
积极放置提供了可能的拖动点(目标)作为设计表面上的可视指示器。自动滚动也参与在拖放的上下文中。当处理大型进度表时,到当前不在视见区中的设计器区域的导航可通过将该活动拖向要放置的进度表区域来访问。
拖放可跨统一项目中的进度表以及跨统一解决方案中的其它项目中的进度表得到支持。在活动被放置到设计表面上之后,开发者配置该活动。每一活动具有一组属性,开发者配置该属性以使进度表有效。这些属性可在属性浏览器中编辑。每一活动控制什么属性在属性浏览器中是可查看的。为帮助开发者配置各活动,设计器提供了各种对话框或“子设计器”。对活动的各属性调用每一对话框。
配合引擎能够定制工具箱中呈现的活动。当开发者创建自定义活动或进度表时,最终的结果是程序集。使用对话框,开发者能够浏览程序集位置并选择该程序集以使其作为配合引擎活动出现。或者,开发者可将程序集放置在配合引擎安装路径中,且它也为配合引擎活动呈现。
应用程序编程接口(API)
在另一实施例中,本发明提供了用于执行各种工作流操作的应用程序编程接口(API)。本发明包括用于创作工作流的设计应用程序编程接口。设计应用程序编程接口包括用于创作工作流的装置以及用于选择一个或多个活动来创建该工具流的装置。本发明也包括用于编辑经由设计应用程序编程接口创作的工作流的编译应用程序编程接口。编译应用程序编程接口包括用于序列化工作流的装置、用于定制工作流的可视外观的装置、用于编译经由设计应用程序编程接口创作的工作流的装置、用于确认工作流的装置。
本发明也包括用于将类型与工作流中的每一活动相关联的类型提供者应用程序编程接口。类型提供者应用程序编程接口包括用于将该类型与工作流中的每一活动相关联的装置,以及用于将一类型与工作流中的每一活动相关联的装置。
一个或多个API构成了用于创作工作流的示例性装置、用于选择一个或多个活动来创建工作流的示例性装置、用于序列化工作流的示例性装置、用于定制工作流的可视外观的示例性装置、用于确认工作流的示例性装置、用于编译工作流的示例性装置、以及用于将类型与工作流中的每一活动相关联的示例性装置。
活动执行框架
由于有进度表和作用域的例外,因此引擎将活动视为抽象的实体,并仅协调活动的执行而不知道任何特定活动的具体数据或语义。在一个实施例中,四个实体在活动的执行期间交互:活动本身、正在执行的活动的父活动、包含正在执行的活动的作用域、以及配合引擎。每一实体具有不同的功能。
如果活动的执行方法返回而没有向其活动协调器发信号通知完成,则该活动被认为是在逻辑等待状态中。这一活动可由配合引擎取消,或继续(例如,一旦它所等待的项或事件变得可用或发生,且由引擎向该活动通知这一情况)。
某些从未进入逻辑等待状态的活动可能从不被取消。示例包括发送活动和代码活动,因为它们不需要对外部事件或预定的需求就可执行。一旦交出了线程(即,一旦其执行方法由配合引擎调用),则这些活动将做工作直到完成。从不给配合引擎取消它们的机会,因为它们不返回线程直到它们发信号通知完成。
配合引擎运行时环境使用规则来触发在其上执行配合引擎活动的事件。配合引擎设计器向用户提供了在运行时关联要评估的规则来触发事件的能力。配合引擎设计器通过提供可扩展性体系结构使用户能够使用不同类型的规则技术。该设计器对于所使用的规则技术的类型是不可知的。
在一个实施例中,设计器支持布尔表达式处理程序,作为将规则与活动相关联的一种方式。这意味着在用户代码文件中,用户编写返回真或假值的方法,基于该方法触发规则。当前有多种可用于评估规则的技术,包括信息代理(Info Agent)和商业规则引擎(BRE)。为实现这一目标,设计器包括使规则技术开发者能够在设计器中主宿自定义用户界面的可扩展性体系结构。该设计器提供了一种自定义用户界面编写者以代码语句集合的形式序列化规则的方法。该设计器在用户代码文件中发放布尔处理程序,并向其插入代码语句集合。配合引擎包括可由规则编写者使用的默认用户界面。规则技术提供者通过创建自定义规则声明、编写与自定义规则声明相关联的用户界面类型编辑器、创建自定义用户界面来主宿规则用户界面、以及在保存时生成代码语句来向配合引擎设计器添加规则。
在一个示例中,用户选择要向其附加规则的活动设计器、在属性浏览器中定位规则属性并在下拉框中选择“RuleExpressionHandler(规则表达式处理程序)”(它使得“Statements(语句)”属性出现在用户界面的Rule(规则)属性下方)、在“Statements”属性中指定用户代码方法名、调用用户界面类型编辑器来调用主宿规则专用用户界面的对话框、以及在对话框中通过创建新的谓词行并将它们组合在一起来定义规则。用户界面在用户代码文件中发放方法。方法名将与由用户在属性浏览器中指定的名称相同。等效于创建规则的代码语句将被插入到该规则的用户代码方法中。
执行期间的消息通信
在运行工作流中,发送到进度表的消息是预期供特定进度表实例使用的。例如,购买定单#123的发票必须被发送回发起(例如,发送出)该购买定单的同一进度表实例。为将入站消息与适当的进度表实例相匹配,消息和进度表实例共享一相关集。该相关集可以是单值相关集,这意味着消息中的标识符字段与由进度表实例持有的相同类型的标识符进行匹配。多属性相关集也是可能的,且类似于数据库表中的多列主要关键字。
进度表实例持有的相关集的值是在进度表实例发送出消息时初始化的(例如,可从出栈定单的标识符字段中取该值),或当进度表实例接收消息时初始化的。该相关集值然后是该进度表实例状态的一部分。当随后的入站消息到达时,进度表实例状态中保持的相关集值与由预期类型的入站消息所持有的标识符字段进行匹配。当找到匹配,则满足该相关集,且该消息被传递到进度表实例。
尽管相关集的实现是由配合引擎和宿主环境所决定的,但是在一个实施例中,用户声明该相关集以使进度表实例能够正确工作。在另一实施例中,某些活动(例如,SendRequest(发送请求)/ReceiveResponse(接收响应)活动以及ReceiveRequest(接收请求)/SendReponse(发送响应)活动)与用户无关地设置相关集。由发送和接收活动执行各种各样的确认检查,以确保相关集是正确初始化和遵循的。
执行工作流的动态编辑
配合引擎提供了用于创作(以及随后可视化和执行)各种类型的工作流的框架。示例包括事件-条件-动作(ECA)风格的工作流或结构化工作流或规则驱动工作流。此外,不论是如何对工作流建模的,工作流都允许用户在设计时或甚至在工作流过程正在运行时以同一方式创作或编辑工作流,而无需重新编译该工作流过程。该框架允许用户以高保真度在运行时和设计时表示之间进行往返。特别(adhoc)改变是在运行时对过程模型做出的改变。用户可向运行的实例要求其进度表模型,并向该模型做出改变。例如,用户可按批添加、移除或替换活动,然后提交或回退批处理的改变。在一个实施例中,模型是在更新之后确认的。在本发明的许多工作流情形中,“设计时创作”和“运行时执行”之间的分隔存在模糊或甚至是消除。
进度表实例有效地与其它实例共享为那些实例的进度表类型所定义的活动类型(元数据)树。但是一旦开始执行,任何进度表实例可通过添加新活动或操纵声明性规则在进行中改变。采取这一修改的进度表实例并“保存为”新进度表类型,或更一般地,仅从实例中恢复序列化的表示是可能的。即,运行的进度表实例可被序列化,然后将其带入任何设计器(例如,创作环境)或运行时可视化工具。
此外,对于高级开发者而言,将进度表完全作为软件代码来创作是可能的。为直接创作进度表类型,开发者只需在该进度表的代码分离类的软件代码中包括称为InitializeScheduleModel(初始化进度表模型)的方法,然后用[ScheduleCreator](进度表创建器)元属性来标记该方法。在一个实施例中,该静态方法不采用任何参数,并返回一Schedule(进度表)对象。没有伴随的序列化文件,尽管可从所创建的Schedule对象中恢复该进度表的序列化表示。尽管这意味着可使用单个软件代码文件来开发进度表,然而可能不在该文件上执行确认检查。配合引擎编译确保作为进度表类型的基础的活动树的结构和语义有效性。在另一实施例中,编译和确认内部地运行,以产生所执行的实际类型,而不要求任何代码输入。进度表类型编译变为一种非常容易的过程,因为没有从编译时对象模型到运行时对象模型的转换。本质上,编译只需将进度表的对象模型表示与代码分离相组合以产生新类型。在一个实施例中,如果所编译的代码分离与对象模型中的活动所需求的相匹配,对特定的进度表可能完全没有任何基本需求来提供任何代码分离,或者代码分离可能已经以编译的形式(程序集)存在。
当编译序列化进度表时,指向有效地担当该进度表的代码分离的现有已编译类型是可能的。创建该已编译类型的派生类型,且该新类型担当代码分离以确保创建了唯一的类型来表示该新进度表。
序列化体系结构
序列化基础结构提供了一种模块化的、格式中立且容易扩展的机制来序列化配合引擎活动树。具体地,调用者(例如,应用程序或用户)向序列化管理器请求对象(或活动)A的序列化器。对象A的类型的元数据元属性将对象A绑定到所请求类型的序列化器。调用者然后要求序列化器序列化对象A。对象A的序列化器然后序列化对象A。对于在序列化时遇到的每一对象,序列化器向序列化管理器请求另外的序列化器。序列化的结果被返回给调用者。
配合引擎组件模型中的每一活动可参与序列化。在一个实施例中,序列化器组件不是活动类本身的一部分。相反,该组件通过在与该活动相关联的类中注释序列化器元属性来指定。序列化器元属性指向用于序列化该活动类型的对象的类。在另一实施例中,活动类型的提供者组件覆盖了由该活动提供的默认序列化器。
设计器序列化基于元数据、序列化器和序列化管理器。元数据元属性用于将类型与序列化器相关。“程序引导”元属性可用于安装为没有序列化器的类型提供序列化器的对象。序列化器是知道如何序列化特定类型或类型作用域的对象。对每一数据格式存在一基类。例如,可以有知道如何将对象转换成XML的XmlSerializer(XML序列化器)基类。本发明是独立于任何特定序列化格式的通用体系结构。序列化管理器是对用于序列化对象图的所有各种序列化器提供信息存储的对象。例如,五十个推想的图可具有五十个不同的序列化器,它们都生成其自己的输出。序列化管理器可由这些序列化器使用以在必要时彼此通信。
在一个实施例中,与使用类属对象元数据的序列化器耦合的序列化提供者的使用提供了一种回叫机制,其中,给予对象向给定类型提供序列化器的机会。可通过诸如AddSerializationProvider(添加序列化提供者)等方法来向序列化管理器给予序列化提供者。序列化提供者可通过向序列化器添加诸如DefaultSerializationProviderAttribute(默认序列化提供者属性)等元属性而被自动添加到序列化管理器。
在一个实施例中,格式由以下规则来规定:对象被序列化为xml元素、对象的属性被归类为简单属性(例如,序列化为xml元属性)或复杂属性(序列化为子元素)、以及对象的子对象被序列化为子元素。子对象的定义可在各个对象之间不同。以下示例是while活动的序列化,它具有Send活动作为其子对象之一。
<While ID="whilel">
<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的序列化在原语(Primitive)和合成(Composite)活动之间有所不同。
原语活动的简单类型被序列化为该活动类型上的元属性。原语活动的复杂类型被序列化为子元素。作为一个示例,以下是Send活动的XOML表示。
<Send ID="send1"HasTypedChannel="False">
<Message Name="messagel"Type="System.String"/>
<UntypedChannel Name="c1"/>
</Send>
以与原语类型序列化类似的方式,合成活动的简单类型被序列化为该活动类型上的元属性。然而,按照定义,合成活动封装了嵌套的活动。每一嵌套的活动被序列化为另一子元素。作为一个示例,以下是While活动的XOML表示。
<While ID="whilel">
<ConditionRule>
<CodeExpressionRule>
<Expression Name="test"/>
</CodeExpressionRule>
</ConditionRule>
</While>
过程/工作流视图和序列化的表示之间存在强关系。图9示出了可视工作流、该工作流的序列化(例如,XOML)表示以及该工作流的分离代码之间的进度表定义和关系。当以任一表示创作时,其它表示将招致改变。由此,当开发者在XOML和过程/工作流视图之间切换时,修改活动的XOML(或在合成活动的情况下修改其构成部分)直接在过程/工作流视图中得到反映。反过来也是适用的。修改过程/工作流视图中的活动导致XOML内的适当修改。作为一个示例,过程/工作流中的活动的删除导致同一活动的XOML中XML元素的移除。在过程/工作流视图和分离的代码之间也发生往返。
在创建XOML代码的过程中,如果XOML定义不符合预定义的接口要求,则在违反的XML元素下加下划线,或用其它方式可视地向开发者标识。如果开发者切换到过程视图,则将向他们警告在XOML内存在错误,且设计器提供一链接,开发者可点击该链接并且会被导航到违反的元素。该同一错误出现在任务面板中,并且在双击该错误之后,开发者将会被导航到XOML中违反的元素。
从XOML文件创建活动树(反序列化)
在一个实施例中,CreateEditorInstance()函数(创建编辑器实例)创建DesignSurface(设计表面)对象,然后对DesignSurface对象调用BeginLoad()函数(开始加载),向其传递实际的加载器对象,最终以对DesignerLoader()函数(设计器加载器)的BeginLoad()调用而结束。PerformLoad()函数(执行加载)读取文本缓冲区对象,并将其反序列化到配合引擎组件模型分层结构。本发明走查该分层结构,并将活动插入到设计表面以加载视件工作室(visual sutdio)中的组件。
本发明也监听对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编辑器。本发明的设计器向开发者提供了反馈,指示过程/工作流视图中做出改变然后在序列化视图中撤消将导致序列化代码的丢失。当开发者在过程/工作流视图中构造进度表的一部分时,切换到序列化视图然后决定执行撤消/恢复操作,将出现警告。
示例性操作环境
图10以计算机130的形式示出了通用计算设备的一个示例。在本发明的一个实施例中,诸如计算机130等计算机适用于此处所示和所描述的其它附图。计算机130具有一个或多个处理器或处理单元132以及系统存储器134。在所示的实施例中,系统总线136将包括系统存储器134的各种系统组件耦合至处理器132。总线136表示若干类型总线结构的任一种的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各种总线体系结构的任一种的处理器或局部总线。作为示例而非局限,这类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线以及外围部件互连(PCI)总线,也称为Mezzanine总线。
计算机130通常具有至少某种形式的计算机可读介质。计算机可读介质可以是可由计算机130访问的任何可用介质,可包括易失性和非易失性介质、可移动和不可移动介质。作为示例而非局限,计算机可读介质包括计算机存储介质和通信介质。计算机存储介质包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失性和非易失性,可移动和不可移动介质。例如,计算机存储介质包括RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机130访问的任一其它介质。通信介质通常具体化为诸如载波或其它传输机制的已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,并包括任一信息传送介质。本领域的技术人员熟悉已调制数据信号,它以对信号中的信息进行编码的方式设置或改变其一个或多个特征。有线介质,如有线网络或直接连线连接,以及无线介质,如声学、RF、红外和其它无线介质,都是通信介质的示例。上述任一的组合也应当包括在计算机可读介质的作用域之内。
系统存储器134包括易失性和/或非易失性存储器形式的计算机存储介质。在所示的实施例中,系统存储器134包括只读存储器(ROM)138和随机存取存储器(RAM)140。基本输入/输出系统142(BIOS)包括如在启动时帮助在计算机130内的元件之间传输信息的基本例程,通常储存在ROM 138中。RAM 140通常包含处理单元132立即可访问或者当前正在操作的数据和/或程序模块。作为示例而非局限,图10示出了操作系统144、应用程序146、其它程序模块148和程序数据150。
计算机130也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。例如,图10示出了对不可移动、非易失性磁介质进行读写的硬盘驱动器154。图10也示出了对可移动、非易失性磁盘158进行读写的磁盘驱动器156以及对可移动、非易失性光盘162,如CD ROM或其它光介质进行读写的光盘驱动器160。可以在示例性操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字视频带、固态RAM、固态ROM等等。硬盘驱动器154、磁盘驱动器156和光盘驱动器160通常通过非易失性存储器接口,如接口160连接到系统总线136。
上文讨论并在图10示出的驱动器及其关联的计算机存储介质为计算机130提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图10中,示出硬盘驱动器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所描述的元件。图10描述的逻辑连接包括局域网(LAN)196和广域网(WAN)198,但也可包括其它网络。LAN 136和/或WAN 138可以是有线网络、无线网络、其组合等等。这类网络环境常见于办公室、企业作用域计算机网络、内联网以及全球计算机网络(例如,因特网)。
当在局域网网络环境中使用时,计算机130通过网络接口或适配器186连接至LAN 196。当在广域网网络环境中使用时,计算机130通常包括调制解调器178或用于通过WAN 198,如因特网建立通信的其它装置。调制解调器178可以是内置或外置的,它通过用户输入接口184或其它适当的机制连接至系统总线136。在网络化环境中,相对于计算机130所描述的程序模块或其部分可储存在远程存储器存储设备(未示出)中。作为示例而非局限,图10示出远程应用程序192驻留在存储器设备上。示出的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其它装置。
一般而言,计算机130的数据处理器通过在不同的时刻储存在计算机的各种计算机可读存储介质中的指令来编程。例如,程序和操作系统通常分布在软盘或CD-ROM上。从那里,它们被安装或加载到计算机的次级存储器中。在执行时,它们被至少部分地加载到计算机的初级电子存储器中。此处描述的本发明包括这些和其它各种类型的计算机可读存储介质,这些介质包含用于实现以下结合微处理器或其它数据处理器描述的步骤的指令。当依照此处描述的方法和技术编程时,本发明也包括计算机本身。
为说明起见,诸如操作系统等程序和其它可执行程序组件在此被示出为离散的框。然而,可以认识到,这些程序和组件在不同的时刻驻留在计算机的不同存储组件中,且由计算机的数据处理器执行。
尽管结合包括计算机130的示例性计算系统环境来描述,然而本发明也可用众多其它通用或专用计算系统环境或配置来操作。该计算系统环境并非对本发明的使用作用域或功能提出任何局限。此外,该计算环境不应当被解释为对示例性操作环境中所示的组件的任一个或其组合具有任何依赖性或要求。可适用于本发明的公知的计算系统、环境和/或配置的示例可包括,但不限于,个人计算机、服务器计算机、手持式或膝上设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费者电子产品、移动电话、网络PC、小型机、大型计算机、包括上述系统或设备的任一个的分布式计算环境等等。
本发明可以在诸如由一个或多个计算机或其它设备执行的程序模块等计算机可执行指令的一般上下文环境中描述。一般而言,程序模块包括但不限于,例程、程序、对象、组件、数据结构等等,它们执行特定的任务或实现特定的抽象数据类型。本发明也可以在分布式计算环境中实践,其中,任务由通过通信网络连接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机存储介质中。
软件体系结构上下文中的接口包括软件模块、组件、代码部分或其它计算机可执行指令序列。例如,接口包括访问第二模块的第一模块,以代表该第一模块执行任务。在一个示例中,第一和第二模块包括诸如由操作系统提供的应用程序编程接口(API)、组件对象模型(COM)接口(例如,用于对等应用程序通信)、以及可扩展标记语言元数据互换格式(XMI)的接口(例如,用于web服务之间的通信)。
接口可以是紧耦合的同步实现,诸如Java 2平台企业版(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活动终止当前的进度表实例。
InvokeSchedule
InvokeSchedule活动调用进度表。
InvokeWebService
通过代理类调用web服务,转递和接收所指定的参数。
DotNetEventSink
阻断由先前调用的进度表实例引发的指定事件的等待通知。
DotNetEventSource
引发所指定的事件,并立即完成执行。
Sequence
Sequence活动以有序的方式协调一组子活动的执行,每次一个。
Parallel
Parallel活动并发地执行一组子活动。
While
迭代地执行子活动。
ConditionBranch
对每一Sequence语义执行子活动。
Conditional
Conditional活动包含一组有序的ConditionalBranch活动。
Constrained
为了将活动添加到约束活动组CAG而包装该活动。
元数据:
被包装活动的启用规则。
被包装活动的禁用规则。
运行时属性:
表示被包装活动是否已经至少完成一次的整数。
执行:
Constrained活动唯一被允许的父对象是CAG。CAG本身使用Constrained活动上的启用和禁用规则来确定何时执行它。当CAG告诉Constrained活动要执行时,它只是执行它所包装的活动。
Performed(已执行)属性在Constrained活动结束其执行时递增。只有在父CAG本身被重新执行时(例如在WhileLoop或者第二个外部CAG内时)才被复位为零。
CAG(ConstrainedActivityGroup)
提供对一组子Constrained活动的基于约束的执行。
元数据:
完成规则。
执行:
CAG只包含Constrained活动。当CAG执行时,它基于对其启用和禁用约束的求值执行(并且重新执行)子活动。子活动只有在其启用规则求值为真并且其禁用规则求值为假时才能由CAG执行。在一个实施例中,CAG步查其子树并预定对所有活动的活动状态改变(这将在调用边界停止)。CAG添加预订,只要活动被动态地添加到其子树。CAG根据进度表边界预订对其包围的作用域和所有父作用域的数据改变。这些预订是通过分析CAG中所有Constrained活动上的启用和禁用规则来确定的。引擎传送成批的数据改变通知,并且CAG决定对哪些规则求值。注意,由被调用的进度表作出的数据改变在调用完成时发送。本发明还标识作用域变量依赖性,即使那些变量是通过代码分离方法间接访问的。因此,有可能非常明确地确定在一个变量改变时应该重新对哪些约束求值。该同一机制对声明性和代码规则两者起作用。如果Constrained活动没有启用规则,则它总是取为真。
如果Constrained活动没有禁用规则,则它总是取为Performed>0。因而,如果在Constrained活动上没有指定规则,则在CAG执行时立即执行它,并且它永远不会被重新执行。同样,如果只在Constrained活动上提供一个自定义启用规则,则它在启用规则求值为真时执行,并且它只执行那一次。如果需要基于约束的重新执行,则应当提供适当的自定义禁用规则,以及适当的启用规则。
下面的表示出了执行Constrained活动所需的条件。
EnableRule(启用规则) | DisableRule(禁用规则) | 活动能执行? |
TRUE | FALSE | 是 |
TRUE | TRUE | 否 |
FALSE | FALSE | 否 |
FALSE | TRUE | 否 |
表A1.Constrained活动执行
如果在活动的执行期间,该活动的禁用规则求值为真,则CAG取消该活动的执行。这不排除该活动的重新执行。一旦CAG的完成规则求值为真,CAG立即取消任何当前正在执行的子活动,并且随后它自己完成。只要有必要,基于其数据和状态改变依赖性对规则(例如,启用、禁用、完成)求值。
CAG提供两种操作模式:预览(Preview)和编辑(Edit)。如果CAG设计器处在预览模式,则开发者只能选择出现在幻灯片中的活动。属性浏览器在开发者选中任何活动时展示启用和禁用规则选项。这使开发者能够用CAG为每个活动设置启用和禁用规则。如果CAG设计器处在设计模式,则开发者能够在预览窗口中的活动(称为Constrained)上点击。属性浏览器除由特定活动正常展示的属性之外还显示启用和禁用规则选项(如类似于预览模式)。
CAG设计器提供以下所示的附加上下文菜单选项:
预览活动:给定一个选中的活动,CAG将从设计模式切换到预览模式。
编辑活动:给定一个选中的活动,CAG将从预览模式切换到设计模式。
查看前一的活动:移动到紧靠幻灯片中当前选中的活动之前的活动。当到达CAG幻灯片中的第一个活动时,该菜单选项被禁用。
查看下一的活动:移动到紧靠幻灯片中当前选中的活动之后的活动。当到达CAG幻灯片中的最后一个活动时,该菜单选项被禁用。
在一个实施例中,CAG内的每个活动被包装在一“Constrained活动”内。这随后通过CAG的幻灯片向开发者展示。如果CAG处在预览模式且开发者选中该活动并复制它,则在一个实施例中可贴粘它的唯一地点(并且因而启用作为结果的上下文菜单)是在另一个CAG内。然而,如果开发者切换CAG模式到“设计”并且选择预览窗格内的活动,则以与其它活动相似的方式启用复制/粘贴和拖放。
Task
对由一个或多个主体执行的工作的外部单元建模。
EventDriven
包装其执行由“事件”活动触发的活动。
Listen
条件地执行EventDriven活动的n个子活动之一。
EventHandlers
EventHandlers活动简单地持有一组EventDriven活动,以供相关联的Scope使用。
ExceptionHandler
用表示作用域的捕捉块(catch block)的元数据包装活动。
ExceptionHandlers
包装一组有序的ExceptionHandler活动。
Compensate
补偿已完成的子作用域。
CompensationHandler
包装被定义为用于作用域的补偿处理程序的子活动。
Scope
作用域是:事务边界;异常处理边界;补偿边界;事件处理边界;以及消息、变量、相关集以及通道声明(即,共享数据状态)的边界、Scope内活动的执行是顺序的,并且由此,当构造作用域时,所包含的活动是明确地排序的,如同在Sequence中一样。
Schedule
Schedule是配合引擎将执行的唯一顶层活动。
CompositeActivities
允许控制流的补偿活动类型是:Sequence、Parallel、Constrained、ActivityGroup、Conditional、While、Listen。另外,Scope和Schedule是担当容器的补偿活动类型,该容器具有其中的活动的隐含排序。
Claims (20)
1.一种表示工作流模型的计算机实现的系统,所述计算机实现的系统包括:
具有多个结构化活动的工作流,所述工作流还包括多个非结构化活动,所述非结构化活动的每一个具有与其相关联的约束;
用于通过以下步骤执行所述工作流的运行时引擎:
执行所述多个结构化活动的每一个;
对所述多个非结构化活动的每一个评估约束;以及
将与其相关联的约束的评估作为函数来执行所述多个非结构化活动的每一个。
2.如权利要求1所述的计算机实现的系统,其特征在于,所述约束包括完成语义。
3.如权利要求1所述的计算机实现的系统,其特征在于,所述约束具有输入参数,并且其中,所述运行时引擎还通过以下步骤执行所述工作流:
识别所述输入参数中的变化;以及
重新评估所述约束。
4.如权利要求1所述的计算机实现的系统,其特征在于,所述多个结构化活动中的一个包括所述多个非结构化活动中的一个。
5.如权利要求1所述的计算机实现的系统,其特征在于,还包括:
显示区域;
所述显示区域的基于流程的区域,用于显示所述多个结构化活动;以及
所述显示区域的基于流程区域内的基于约束区域,用于显示所述多个非结构化活动。
6.如权利要求1所述的计算机实现的系统,其特征在于,还包括用于向用户呈现所述多个结构化活动和所述多个非结构化活动的装置。
7.如权利要求1所述的计算机实现的系统,其特征在于,还包括用于从用户接收对所述多个结构化活动的选择、对所述多个非结构化活动的选择、以及与所选择的活动相关联的流程规范的装置。
8.如权利要求7所述的计算机实现的系统,其特征在于,还包括用于依照所述流程规范组合对所述多个结构化活动的选择和对所述多个非结构化活动的选择以创建所述工作流的装置。
9.如权利要求8所述的计算机实现的系统,其特征在于,还包括用于执行所创建的工作流的装置。
10.一种用于对工作流建模的方法,所述工作流表示商业过程,所述方法包括:
向用户呈现多个活动;
从用户接收对所呈现的活动的选择以及与其相关联的流程规范;
依照所接收的流程规范组合所接收的对活动的选择;
从用户接收对所呈现的活动的另一选择以及与其相关联约束;以及
将所接收的对所呈现的活动的另一选择与所组合的活动选择合并,以创建工作流。
11.如权利要求10所述的方法,其特征在于,还包括定义所述约束。
12.如权利要求10所述的方法,其特征在于,还包括通过以下步骤执行所创建的工作流:
评估所述约束;以及
根据所述评估,执行对所呈现活动的另一选择中的活动。
13.如权利要求10所述的方法,其特征在于,还包括通过依照所述流程规范用所接收的活动选择执行活动来执行所创建的工作流。
14.如权利要求10所述的方法,其特征在于,向用户呈现所述多个活动包括在显示器上显示所述多个活动。
15.如权利要求10所述的方法,其特征在于,一个或多个计算机可读介质具有用于执行如权利要求10所述的方法的计算机可行指令。
16.一个或多个具有计算机可执行组件的计算机可读介质,所述组件用于对具有基于流程的区域和基于约束的区域的工作流建模,所述组件包括:
显示组件,用于向用户呈现多个活动;
接口组件,用于从用户接收对所呈现的活动的选择以及与其相关联的流程规范,所述接口组件还从用户接收对所呈现的活动的另一选择以及与其相关联约束;以及
设计器组件,用于依照所接收的流程规范组合所接收的活动选择,所述设计器组件还将所接收的对所呈现的活动的另一选择与组合的活动选择合并以创建工作流。
17.如权利要求16所述的计算机可读介质,其特征在于,还包括运行时组件,用于通过以下步骤执行所创建的工作流:
评估所述约束;以及
根据所述评估,执行所呈现的活动的另一选择中的活动。
18.如权利要求16所述的计算机可读介质,其特征在于,还包括运行时组件,用于通过依照所述流程规范执行所接收的活动选择中的活动以执行所创建的工作流。
19.如权利要求16所述的计算机可读介质,其特征在于,所述显示组件、接口组件以及设计器组件在应用程序的执行环境中执行。
20.如权利要求16所述的计算机可读介质,其特征在于,所述约束包括完成语义。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US61554204P | 2004-10-01 | 2004-10-01 | |
US60/615,542 | 2004-10-01 | ||
US11/046,988 | 2005-01-31 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1825343A true CN1825343A (zh) | 2006-08-30 |
Family
ID=36936008
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2005100998409A Pending CN1825343A (zh) | 2004-10-01 | 2005-09-01 | 创作和执行基于流程且基于约束的工作流的统一模型 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1825343A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663531A (zh) * | 2011-01-27 | 2012-09-12 | 微软公司 | 基于云的主数据管理 |
CN105144220A (zh) * | 2013-04-15 | 2015-12-09 | 微软技术许可有限责任公司 | 支持计算的基于约束的配置 |
CN105531670A (zh) * | 2013-04-23 | 2016-04-27 | 柯法克斯公司 | 智能移动应用开发平台 |
US9584949B2 (en) | 2011-01-27 | 2017-02-28 | Microsoft Technology Licensing, Llc | Cloud based master data management architecture |
CN102982396B (zh) * | 2011-09-06 | 2017-12-26 | Sap欧洲公司 | 通用过程建模框架 |
CN108269070A (zh) * | 2018-02-26 | 2018-07-10 | 金蝶软件(中国)有限公司 | 一种合并活动的控制方法及相关装置 |
CN110134579A (zh) * | 2019-01-18 | 2019-08-16 | 北京车和家信息技术有限公司 | 代码检查方法和装置 |
CN110264076A (zh) * | 2019-06-19 | 2019-09-20 | 深圳市艾迪思特信息技术有限公司 | 一种物联网事务管理系统 |
CN112292644A (zh) * | 2018-07-12 | 2021-01-29 | 应用材料公司 | 使用基于块的工作流程的约束编程 |
CN112905270A (zh) * | 2021-02-19 | 2021-06-04 | 北京百度网讯科技有限公司 | 工作流实现方法、装置、平台、电子设备以及存储介质 |
CN113139794A (zh) * | 2021-01-29 | 2021-07-20 | 江阴逐日信息科技有限公司 | 自动可配置流程演化方法、系统以及设备 |
EP4421699A1 (en) * | 2023-02-27 | 2024-08-28 | Tracelink, Inc. | Extensible state based workflows |
-
2005
- 2005-09-01 CN CNA2005100998409A patent/CN1825343A/zh active Pending
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663531B (zh) * | 2011-01-27 | 2015-07-08 | 微软公司 | 基于云的主数据管理 |
US9128768B2 (en) | 2011-01-27 | 2015-09-08 | Microsoft Technology Licensing, LCC | Cloud based master data management |
US9584949B2 (en) | 2011-01-27 | 2017-02-28 | Microsoft Technology Licensing, Llc | Cloud based master data management architecture |
CN102663531A (zh) * | 2011-01-27 | 2012-09-12 | 微软公司 | 基于云的主数据管理 |
CN102982396B (zh) * | 2011-09-06 | 2017-12-26 | Sap欧洲公司 | 通用过程建模框架 |
CN105144220A (zh) * | 2013-04-15 | 2015-12-09 | 微软技术许可有限责任公司 | 支持计算的基于约束的配置 |
CN105531670A (zh) * | 2013-04-23 | 2016-04-27 | 柯法克斯公司 | 智能移动应用开发平台 |
CN108269070A (zh) * | 2018-02-26 | 2018-07-10 | 金蝶软件(中国)有限公司 | 一种合并活动的控制方法及相关装置 |
CN108269070B (zh) * | 2018-02-26 | 2021-02-02 | 金蝶软件(中国)有限公司 | 一种合并活动的控制方法及相关装置 |
CN112292644A (zh) * | 2018-07-12 | 2021-01-29 | 应用材料公司 | 使用基于块的工作流程的约束编程 |
CN110134579A (zh) * | 2019-01-18 | 2019-08-16 | 北京车和家信息技术有限公司 | 代码检查方法和装置 |
CN110134579B (zh) * | 2019-01-18 | 2023-10-31 | 北京车和家信息技术有限公司 | 代码检查方法和装置 |
CN110264076A (zh) * | 2019-06-19 | 2019-09-20 | 深圳市艾迪思特信息技术有限公司 | 一种物联网事务管理系统 |
CN113139794A (zh) * | 2021-01-29 | 2021-07-20 | 江阴逐日信息科技有限公司 | 自动可配置流程演化方法、系统以及设备 |
CN112905270A (zh) * | 2021-02-19 | 2021-06-04 | 北京百度网讯科技有限公司 | 工作流实现方法、装置、平台、电子设备以及存储介质 |
CN112905270B (zh) * | 2021-02-19 | 2024-05-07 | 北京百度网讯科技有限公司 | 工作流实现方法、装置、平台、电子设备以及存储介质 |
EP4421699A1 (en) * | 2023-02-27 | 2024-08-28 | Tracelink, Inc. | Extensible state based workflows |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1825343A (zh) | 创作和执行基于流程且基于约束的工作流的统一模型 | |
CN1755721A (zh) | 组件化和可扩展的工作流模型 | |
CN1766835A (zh) | 用于在设计和运行时间无缝制作和编辑工作流的框架 | |
CN100351822C (zh) | 用简化视图定义、处理和表示用户界面组件的方法和工具 | |
CN1252592C (zh) | 通信服务供应方法和设备 | |
JP5021193B2 (ja) | 拡張可能ワークフローモデルの宣言的表現 | |
US8170901B2 (en) | Extensible framework for designing workflows | |
CN1744121A (zh) | 智能客户机内插附件体系结构 | |
CN1744120A (zh) | 应用程序对象与智能客户机对象之间的转换 | |
CN1419675A (zh) | 用于自上而下的企业过程定义和执行的方法和系统 | |
CN101052948A (zh) | 对象过程图应用程序开发系统 | |
US20060074735A1 (en) | Ink-enabled workflow authoring | |
CN1744122A (zh) | 智能客户机的同步 | |
CN1811702A (zh) | 开发门户应用和自动部署门户应用的系统和方法 | |
CN101052956A (zh) | 在标记语言环境中使用可撤消命令来编辑文档的文档处理和管理方法 | |
CN1607501A (zh) | 标记构架 | |
CN1834908A (zh) | 用于将开发模式应用于基于组件的应用程序的系统和方法 | |
CN1591405A (zh) | 版本兼容的数据处理系统 | |
CN1534476A (zh) | 矢量图形的标记语言和对象模型 | |
CN1627257A (zh) | 用于创建模块化web应用的框架 | |
KR20060087997A (ko) | 작업 흐름을 작성하고 편집하기 위한 컴퓨터 구현 방법 | |
KR20060087996A (ko) | 작업 흐름 도메인에서 횡단적인 거동 관심사를 모델링하는컴퓨터 구현 방법 | |
CN1249045A (zh) | 实现层次状态图的装置和对其有用的方法及设备 | |
CN1585948A (zh) | 用于系统整合的应用程序视窗部件 | |
CN1633638A (zh) | 在外貌特征模式中带有总功能特性的连接实体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20060830 |