允许元编程的最优增量工作流执行的制作方法

文档序号:6356507阅读:258来源:国知局
专利名称:允许元编程的最优增量工作流执行的制作方法
技术领域
本发明一般涉及工作流,尤其涉及允许元编程的最优增量工作流执行。
背景技术
工作流系统表示过程管理技术的应用。工作流是定义过程或程序的操作方面的有组织的互相关任务集。具体而言,工作流可定义任务如何结构化、负责实体以及任务的相对排序等。因此,工作流方便过程的自动化设计、控制和监视。一种公知工作流是企业工作流,该企业工作流自动化业务过程以使得文档、信息和/或任务被传递至各个人以便根据程序规则来行动。例如,一个人可以按顺序执行某一指定工作,并且随后在完成时可启动其他人的工作。实际上,工作的传递基于先前任务的完成来自动化和控制。作为示例,贷款评估或批准过程可被表示为工作流。还能够在计算机系统及相关联的功能,而不是单独的人类相关任务的上下文中采用工作流。作为示例,可采用被称为构建系统(build system)的专用工作流系统来方便程序开发。构建系统使得能够像构建那样脚本化并执行各种各样的程序开发任务,包括将源代码编译成二进制代码、测试和开发,等等。虽然从命令提示中调用对单个文件的开发操作是容易的,但类似地对通常是具有复杂依赖关系的大量文件发起这些操作是呈指数地更加困难的。构建系统被设计成通过使开发者能够描述并且随后数次发起对各自具有特定功能的分立代码单元的一系列调用的执行来帮助该情形。例如,构建系统可允许在对一个或多个组件源文件作出改变时快速重新编译程序。具体而言,工作流和构建当前利用域专用语言或标记语言来指定。域专用语言 (DSL)是被设计成在特定域中工作的专用语言。例如,经常采用允许非技术人员查看并操纵过程的图形DSL。诸如XML(可扩展标记语言)等标记语言是用于通过文本注释来表示结构化数据的数据描述语言。

发明内容
下面呈现了摘要,以便提供所公开的主题的某些方面的基本概念。本发明内容不是广泛性的概观。它并不旨在标识关键/重要元素,也不旨在描绘所要求保护的主题的范围。其唯一的目的是以简化形式呈现一些概念,作为稍后呈现的更详细描述的序言。简而言之,本发明一般涉及工作流,包括工作流的构造和执行。工作流能够用通用编程语言来通过程序描述和构造。特别地,这一构造允许采用元编程来观察、推理、修改和 /或生成工作流。工作流任务和项目依赖关系能够由工作流来显式表达并用于特别地优化工作流执行。例如,可以分割任务以便按照项目和任务依赖关系来跨多个处理器和/或计算机并发执行。另外,在发生对工作流或其分量的改变时,可利用依赖关系来将重新执行限于该工作流中由该改变影响的各部分。此外,关于工作流执行状态的消息可携带附加类型信息以允许以结构化方式展示消息以便高效地向用户传达信息。还公开了涉及撤消操作以及与常规工作流系统的可互操作性的功能。 为实现上述及相关目的,在此结合以下描述和附图描述了所要求保护的主题的某些说明性方面。这些方面指示可实践本主题的各种方式,它们均落在所要求保护的主题的范围之内。当结合附图阅读以下详细描述时,本发明的其他优点和新颖特征将变得显而易见。


图1是工作流系统的框图。
图2是工作流节点实例和关系的图形表示。
图3是可由通用程序产生的代表性工作流对象图。
图4是代表性调度组件的框图。
图5是代表性记录组件的框图。
图6是可用于记录工作流消息的示例性用户界面的屏幕截图。
图7是代表性改变检测组件的框图。
图8是包括测试和设置组件的工作流系统的框图。
图9是通过程序创建工作流的方法的流程图。
图10是初始工作流执行的方法的流程图。
图11是在改变后重新执行工作流的方法的流程图。
图12是改变检测的方法的流程图。
图13是对已改变的工作流执行动作的方法的流程图。
图14是包括调度任务以便执行的工作流执行方法的流程图。
图15是任务执行方法的流程图。
图16是示出用于本发明各方面的合适的操作环境的示意性框图。
具体实施例方式以下细节一般涉及工作流,包括工作流的构造和执行。工作流可由通用程序来构造以利用通用编程语言的可表达性,包括特定语言特征或编码技术,诸如但不限于,继承、 参数化和条件,以及与其相关联的常规工具,诸如调式器、类型校验器和代码优化器,等等。 此外,可以例如执行元编程以观察、推理、修改和/或生成工作流。包括表示项目和任务的互相关节点集的通过程序构造的工作流能够从开始到结束增量式地执行。此外,项目和任务依赖关系能够在该工作流中显式表达并且可用来特别地针对一个或多个因素(例如,时间、成本……)优化工作流处理。例如,可以按照项目和任务依赖关系来分割任务以使得能够跨多个处理器和/或计算机并发执行。另外,关于工作流执行状态的有组织且有意义的消息可例如通过图形用户界面(⑶I)传递给开发者。在初始工作流执行之后,能够在对互相依赖的持久存储的项目(例如,文档、文件、文字(例如,组件名称)……)的后续改变中维护这些项目之间的约束,以确保工作流保持一致状态。根据一种实施方式,项目是否已经改变可以如所需那样粗糙地或精细地定义, 并且不一定是依赖时间的。一旦检测到改变,注意力就转向最小化传播该改变并返回至一致状态所需的工作量。能够再次采用工作流依赖关系来将重新执行限于该工作流中受该改变影响的子集。所公开的其他特征涉及撤消动作以及与常规工作流系统的可互操作性,等寸。现在参考附图更详细地描述本发明的各个方面,在全部附图中用相同的标号来指示相同的或相应的元素。然而应该了解,附图及其相关详细描述不旨在将所要求保护的主题限于所公开的具体形式。相反,其意图是覆盖落在所要求保护的主题的精神和范围之内的所有修改、等效和替换的方案。首先参考图1,示出了工作流系统100。工作流系统100包括工作流引擎110,该工作流引擎110通常用于执行或处理工作流,其中工作流是定义过程或程序的互相关任务和项目集。任务描述要采取的动作(例如,复制、删除、调用……),并且进一步定义其本身之间的依赖关系、输入和输出。项目可以是任务输入和/或输出(例如,文件、文档、特性……)。 例如,任务可消费一个或多个项目作为输入并任选地产生一个或多个项目作为输出。或者, 任务可以在不接收一个或多个项目作为输入的情况下产生一个或多个项目作为输出。工作流引擎110获取工作流或其表示以及任何必需项目,执行工作流,并且可任选地产生结果 (例如,一个或多个文档的集合、文件、可执行代码……)。工作流系统100能够在许多不同的上下文中采用,包括但不限于业务/企业过程和计算机软件开发。出于清楚和明白的目的,所公开的主题的各方面和各实施方式将参考业务/企业过程或计算机软件开发来描述。当然,所要求保护的主题不旨在由此受限。还应注意,术语可随上下文变化,而所述概念、特征和/或功能保持不变。例如,在具体参考软件开发上下文时,术语“构造”可以代替此处的单词“工作流”。由此,工作流系统100可被称为构建系统100,工作流引擎110可被称为构建引擎110,而工作流可被称为构建。类似地,任务、项目、输入和输出等可理解地随上下文变化,而不按照对所要求保护的主题的范围或适用的上下文提出限制的任何方式。根据一种实施方式,工作流可通过程序从用通用编程语言(例如,Java 、C# 、 Visual Basic ……)指定的工作流描述(也称为配置文件/脚本、描述文件、构建文件/脚本/配置)中构造,通用编程语言通常是独立于域的且图灵完整的。以此方式,工作流可利用通用编程语言的可表达性,包括特定语言特征或编码技术,诸如但不限于继承、参数化和条件等。换言之,通用语言允许容易地描述或定义各种各样的关系,包括任意复杂的关系。 同样,通过采用通用编程语言,工作流及其开发者可利用与特定语言相关联的常规工具,诸如调式器、类型校验器和代码优化器,等等。如图1所描绘的,开发者可指定通用程序120, 该通用程序120描述工作流并且在被执行时构造工作流或其表示(例如,对象图)。当前,趋势是使用域专用语言(DSL)或可扩展标记语言(XML)来指定工作流。然而,例如由于其声明性特性,DSL和XML限制可用于描述工作流的可表达性或计算种类。换言之,DSL和XML当前不具有表达可由通用编程语言(例如,Java 、C# 、Visual Basic ……)表达的所有计算的能力。更正式地,通用编程语言被称为图灵完整的,这意味着它们能够表达图灵机可计算的任何事物。相反,XML不是图灵完整的,而虽然DSL可以是图灵完整的,但DSL常规上是以不是图灵完整的显式目标设计的。类似情形是正则表达式和无上下文语法之间的表达能力差异,其中正则表达式能够描述的比无上下文语法能够描述的少。这里对于DSL和XML对比通用编程语言亦是如此。例如,如果DSL不实现继承、功能参数化或条件,则无法用该DSL表达特定事物。因此,存在无法由DSL和XML描述的特定工作流。此外,对继承、参数化和条件的本机支持以及由特定通用编程语言提供的其他功能由于数十年的演变而被很好地设计,并且通常比可作出以模拟/模仿类似功能的对DSL或XML 的任何扩展好得多地执行。作为示例,考虑贷款批准过程,包括需要由申请人审阅并签署并由贷款人评估的多个相关文档。在常规系统中,将需要为每一个特定贷款人生成工作流,因为每一个贷款人的文档和过程本身可能有差异。然而,更好的方法将会是产生可以为每一个特定贷款人参数化的通用贷款批准过程。换言之,可以指定可以用不同的参数(例如,贷款文档、条款和条件……)来实例化的工作流。此外,假设申请过程对于美国公民和非公民稍有不同。在这种情况下,可以在工作流中指定条件。此外,可使用继承来指定各种类型的申请者之间的不同。参数化、条件和继承全都由诸如C# 或Visual Basic 等面向对象的通用编程语言来本机地支持。虽然可作出向DSL或XML添加类似功能的尝试,但结果将会是设计糟糕的小型语言。此外,DSL和XML不具有传统上与通用编程语言相关联的所有工具,包括类型校验器、调式器以及代码优化器等等。作为示例,如果使用强类型通用编程语言来构造工作流, 则可对该工作流进行类型校验以减少编码差错。例如,源代码可具有类型“Source(源)” 而汇编件可具有类型“Assembly (汇编件)”,并且如果试图将汇编件作为源文件来传递,则类型校验器可以例如在编译时指示这是错误的。另外,可以采用调式器来测试和调试工作流,并且使用代码优化器来优化工作流的规约。此外,利用通用编程语言来构造工作流使得能够对工作流进行元编程,其中元编程指的是相对于仅仅能够执行工作流,观察、推理、交互、操纵和/或生成工作流的能力。例如,假设表示人类飞行员在飞行时执行的工作的工作流。此外,假设实施飞行员不能工作超过十个小时,之后需要由新飞行员来代替的限制。可以编写分析工作流并确定该工作流是否能够在十小时内完成并决定是否需要两个飞行员的程序。类似地,可以分析工作流以确定其是否能被分割并且在多个处理器和/或机器上运行。另外地或另选地,可以分析工作流以确定是否能够通过交换任务或以不同次序执行任务来优化执行。此外,工作流可被输入到其他工作流中,或者换言之,工作流可以是可自适用的, 以使得能够产生推理、改变、生成和/或更新其他工作流的工作流。作为示例,假设如果开发者产生代码,则要求该开发者对该代码进行数字签名。如果存在未签署代码的第一工作流,则可采用变换该第一工作流以使其确实签署代码的第二工作流。通用程序可构造互相关节点图。图2提供了节点实例和关系的图形表示以帮助对其进行进一步讨论。节点210可包括输入和输出的列表以及在不同的图构造之间一致且稳定的唯一标识符(ID)。唯一标识符可依赖于图中的上游节点(它依靠的事物)以便允许即使在工作流本身改变时也部分地执行工作流,如将在下文中进一步描述的。每一个节点 210可以是项目220或者任务230。项目220可描述任务需要运行的信息。例如,项目可以是作为元数据传递给任务的文件或特性(例如,用于配置工作流的键/值对)。在得到支持的情况下,项目可以是强类型的,以减少编码差错几率。作为示例,编译程序的特性可以告诉编译程序是产生库还是产生可执行代码(exe) :“ftx)perty<TargetType>”,其中“TargetType(目标类型)”被定义为“public enumTargetType {Library, Exe}”。由此,在编译构建图的程序时,编译程序可强制实施对该特性的有效输入。对于文件亦如此。例如,编译程序可采取“Assembly(汇编件)”类型,该类型从如“Reference (引用),,自变量的类型“File (文件)”导出,以便强制实施只为该特性传递汇编件(例如,可执行代码(exe)、动态链接库(dll)……)。虽然项目 220可由一个或多个任务消费,但项目220还可由任务230在执行时产生。任务230描述要采取的动作以及对于该动作的双撤消动作。任务230可具有指示或参数化动作的输入项目集220。例如,编译任务可具有输入,诸如源文件列表、汇编件名称、汇编件引用和目标类型,等等。任务230还可具有由动作产生的输出项目。例如,编译程序可产生汇编件作为输出。由任务230描述的动作和和撤消动作可被表示为被示为动作250和撤消260的命令240。作为示例,对编译程序的外壳执行命令调用可基于诸如“csc. exe/r: system, dll/ t: library foo. csc/out:foo. dll”等输入项目来被表示为具有一组自变量的命令动作 250,其中“csc. exe”调用编译程序,“system, dll”和“foo. csc”表示输入,而“foo. dll”是输出。尽管可定制,但任务的默认撤消命令260是标识并移除输出文件。因此,在以上示例中,撤消命令260将删除“foo. dl 1 ”。在一种实施方式中,任务230还负责注册其自身、输入和输出之间的依赖关系。命令240包括用于执行动作的所有信息。一旦构造,命令240就可以是自包含的 (但它能够知道创建它的任务的唯一 ID)且可串行化的,以使得命令240能够被传送至不同的机器并由该不同的机器执行。换言之,命令可被表示为数据,从第一计算机串行化、发送到第二计算机,由第二计算机来去串行化并执行。此外,命令可以是自包含的且可串行化的,以允许撤消命令被存储在文件中并且用于撤消与不再作为工作流的一部分存在的任务相关联的动作。命令240还可具有指示命令240的成功或失败的执行方法以及自动将每一个记录的消息与拥有该命令的任务相关联的特定记录器,如将在下文中进一步描述的。命令的一个示例是“aiellExecuteCommancK外壳执行命令)”,该命令取得用于运行或执行的可执行代码、一组自变量和退出代码(例如,成功执行、失败)并且在执行时将使用操作系统应用程序编程接口(API)来执行外部命令,以便向记录器提供消息,并基于该命令的退出代码来返回成功或失败。最终,节点集210可被称为目标270。这一目标270可被传递至工作流引擎并用于发现并执行要完成的工作。以下是可利用诸如C# 等通用编程语言来生成并在执行时构造工作流的示例性通用程序
权利要求
1.一种工作流系统(100、800),包括耦合到存储器(1630)的处理器(1620),所述处理器(1620)被配置成执行以下存储在所述存储器(1630)中的计算机可执行组件第一组件(112),所述第一组件被配置成接收包括节点集的工作流,所述节点集表示一个或多个任务以及一个或多个项目并且显式地表达所有任务和项目依赖关系;以及第二组件(113),所述第二组件被配置成按照所述任务和项目依赖关系来确定所述工作流的独立子集并启动所述独立子集的执行。
2.如权利要求1所述的系统,其特征在于,所述第二组件被配置成同时启动所述工作流的两个或更多独立子集的执行。
3.如权利要求1所述的系统,其特征在于,所述第二组件被配置成确定所述独立子集包括已改变项目以及依赖于所述已改变项目的一个或多个任务和/或项目。
4.如权利要求3所述的系统,其特征在于,还包括被配置成按照先前状态和改变定义来检测项目改变的第三组件。
5.如权利要求4所述的系统,其特征在于,所述改变定义是不依赖时间的。
6.如权利要求4所述的系统,其特征在于,所述改变定义对于相关任务的项目改变。
7.如权利要求1所述的系统,其特征在于,还包括被配置成用描述消息类型的信息来记录关于工作流执行的消息的第三组件。
8.如权利要求1所述的系统,其特征在于,所述工作流从用通用编程语言指定的工作流的描述中产生。
9.如权利要求1所述的系统,其特征在于,所述项目中的至少一个是工作流。
10.一种工作流方法,包括采用至少一个处理器(1620),所述至少一个处理器被配置成执行存储在存储器 (1630)中的计算机可执行指令以执行以下动作接收用通用编程语言描述工作流的程序;以及执行所述程序以产生包括一个或多个任务和项目的集合的工作流的表示。
11.如权利要求10所述的方法,其特征在于,还包括通过程序对所述工作流的表示的观察、推理、或修改中的一个。
12.如权利要求10所述的方法,其特征在于,对描述所述工作流的程序发起与所述通用编程语言相关联的调试器、类型校验器或代码优化器工具中的至少一个的执行。
13.如权利要求10所述的方法,其特征在于,还包括向工作流引擎提供所述工作流的表示,所述工作流引擎被配置成利用由所述工作流的表示表达的人物和项目依赖关系来启动所述工作流的独立子集的执行。
全文摘要
本发明“允许元编程的最优增量工作流执行”描述并且随后由通用程序来构造工作流。特别地,这一构造使得能够采用元编程。此外,工作流项目和任务依赖关系能够在该工作流中显式表达并且用来特别地针对一个或多个因素优化工作流执行。例如,依存关系信息可用来调度任务的并发执行以及在工作流或项目改变时将重新执行限于由该改变影响的任务。另外,可以类型化涉及工作流处理的消息以便于以结构化且容易理解的方式记录。
文档编号G06Q10/00GK102193823SQ201110068588
公开日2011年9月21日 申请日期2011年3月14日 优先权日2010年3月12日
发明者D·v·威尔兹恩, H·J·M·梅杰, J·V·格格 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1