CN101013362B - 用于设计工作流的可扩展框架 - Google Patents

用于设计工作流的可扩展框架 Download PDF

Info

Publication number
CN101013362B
CN101013362B CN2005100990939A CN200510099093A CN101013362B CN 101013362 B CN101013362 B CN 101013362B CN 2005100990939 A CN2005100990939 A CN 2005100990939A CN 200510099093 A CN200510099093 A CN 200510099093A CN 101013362 B CN101013362 B CN 101013362B
Authority
CN
China
Prior art keywords
workflow
activity
designer
user
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.)
Expired - Fee Related
Application number
CN2005100990939A
Other languages
English (en)
Other versions
CN101013362A (zh
Inventor
D·K·舒克拉
D·皮拉瑞诺斯
S·触
A·V·帕拉斯尼斯
M·梅达
E·希斯戴
A·G·班达卡
A·J·萨加
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 Technology Licensing LLC
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
Priority claimed from US11/046,967 external-priority patent/US8170901B2/en
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN101013362A publication Critical patent/CN101013362A/zh
Application granted granted Critical
Publication of CN101013362B publication Critical patent/CN101013362B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/06Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q50/00Systems or methods specially adapted for specific business sectors, e.g. utilities or tourism
    • G06Q50/10Services
    • G06Q50/18Legal services; Handling legal documents
    • G06Q50/188Electronic negotiation

Landscapes

  • Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Economics (AREA)
  • Tourism & Hospitality (AREA)
  • Human Resources & Organizations (AREA)
  • Strategic Management (AREA)
  • General Engineering & Computer Science (AREA)
  • Marketing (AREA)
  • Entrepreneurship & Innovation (AREA)
  • General Business, Economics & Management (AREA)
  • General Health & Medical Sciences (AREA)
  • Primary Health Care (AREA)
  • Health & Medical Sciences (AREA)
  • Development Economics (AREA)
  • Educational Administration (AREA)
  • Technology Law (AREA)
  • Game Theory and Decision Science (AREA)
  • Operations Research (AREA)
  • Quality & Reliability (AREA)
  • Human Computer Interaction (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Stored Programmes (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

一种用于构建组件化的工作流模型的用户界面。工作流的每一步骤被建模为具有元数据的活动,该元数据描述该工作流步骤的设计时方面、编译时方面以及运行时方面。用户通过该用户界面选择并安排活动来创建工作流。收集与工作流中每一活动相关联的元数据来创建工作流的持久表示。用户通过创作自定义活动来扩展工作流模型。

Description

用于设计工作流的可扩展框架
交叉引用
本发明要求2004年10月1日提交的美国临时专利申请第60/615,549的优先权。
技术领域
本申请的实施例涉及工作流建模领域。更为具体地,本发明的实施例涉及组件化和可扩展工作流模型。
背景技术
现有系统试图通过对商业问题建模而将商业问题映射到高级工作流。然而,真实世界的工作流在各方面都有所不同,这些方面诸如(a)执行和建模的复杂性、(b)设计时对工作流的结构的知识、(c)静态定义或特别/动态、(d)在其生命周期中各点创作和编辑该工作流的简易性、以及(e)与核心工作流过程的弱或强商业逻辑关联。现有模型无法容纳所有这些因素。
此外,大多数现有工作流模型是以基于语言的方法(例如,BPEL4WS、XLANG/S和WSFL)或基于应用程序的方法为基础的。基于语言的方法是具有一闭合的预定义构造集的高级工作流语言,它帮助向用户/程序员建模该工作流过程。工作流语言载有供该闭合构造集使用的所有语义信息,以使用户能够构建工作流模型。然而,语言无法由开发者来扩展,且表示构成该工作流模型的闭合的原语集。语言被绑定到由工作流系统销售商发货的语言编译器。仅该工作流系统产品销售商可通过在该产品的未来版本中用一新的构造集扩展该语言来扩展该模型。这通常要求升级与该语言相关联的编译器。
基于应用程序的方法是这样一种应用程序,它在该应用程序内具有工作流能力以解决领域专用问题。这些应用程序不是真正可扩展的,也没有可编程模型。
采用现有方法,复杂性、预知、动态工作流、创作简易性以及与商业逻辑和核心工作流的关联强度等问题未被充分地解决。没有可扩展、可定制以及可重新主宿工作流设计器框架可用于构建可视工作流设计器来对不同的工作流类别建模。现有系统缺乏一种快速应用程序开发(RAD)风格工作流设计体验,它允许用户图形地设计工作流过程,并以开发者选择的编程语言来关联商业逻辑。另外,没有启用了墨迹的工作流设计器。
另外,现有系统无法提供用于执行工作流的无缝特别或动态编辑。工作流过程在本质上是动态且移动的,且其形式不能在设计时完全预见。该工作流过程以结构化方式起始,并最终在其执行生命周期过程中发展和改变。需要一种允许工作流构建者能够在设计时创作各种类型的工作流模型,以及以无缝的方式对运行的工作流做出特别或动态改变的工作流创作框架。即使在部署了工作流过程之后且该工作流过程正在运行,商业需求的变化通常迫使改变或编辑当前运行的工作流过程。需要一种提供工作流过程的运行时创作的系统。
另外,工作流过程处理跨越工作流过程模型的多个步骤的横切的、互不相关且紊乱的问题.例如,尽管工作流过程的各部分被设计成参与长期运行的事务,然而同一过程的其它部分被设计成用于并发执行.同一工作流过程的另外一些部分要求跟踪,而其它部分处理商业或应用程序级例外.需要向工作流过程的一个或多个部分应用特定的行为.
某些工作流建模方法是不实用的,因为它们需要整个商业过程的基于流的完整描述,包括所有例外以及人类干预。这些方法中的一些提供了当出现例外时的附加功能,而其它方法独占地采用基于约束的方法而非基于流的方法来对商业过程建模。现有系统实现基于流或基于约束的方法中的任一种。这些系统该不灵活,以致于无法对许多常见商业情况进行建模。
因此,需要一种组件化且可扩展的工作流模型来解决这些和其它缺点的一个或多个。
发明内容
本发明的实施例提供了一种用于构建组件化工作流模型的可扩展框架。具体地,工作流过程中的每一步骤具有描述工作流步骤的设计时方面、编译时方面以及运行时方面的相关联组件模型。此外,任何开发者可通过创作这些组件来扩展核心工作流模型。本发明包括一工作流引擎,它足够灵活和强大来协调各种工作流的执行,包括高度形式的机器到机器过程、基于约束的特别人类工作流、以及具有基于流和基于约束的方法的混合的工作流。该工作流引擎准许对执行工作流的激活、执行、查询和控制能力。例如,本发明准许对执行工作流的特别和动态改变。该工作流引擎可以在包括服务器和客户机环境两者的各种宿主环境中重新主宿或嵌入。每一特定宿主环境将工作流引擎与一组服务提供者相结合。服务提供者的总能力确定了可在该特定宿主环境中执行的工作流的种类。
本发明的其它实施例提供了一种用于序列化工作流模型的声明性格式,诸如可扩展配合(orchestration)标记语言(XOML)。该声明性格式使用户能够通过编写一组组件来扩展工作流模型。对应于工作流过程的各步骤的语义被封装在活动确认器组件中,该组件在编译时确认并实施给定组件的语义。本发明的声明性格式的实施例还能够进行数据声明以及与工作流模型的各元素的数据相关。该声明性格式支持数据通过工作流的变换。例如,该格式声明性地表示外部数据源,如数据库或文件、代码片断以及工作流模型内的商业规则。
本发明的一个实施例提供了一种构建图形/可视工作流设计器的可扩展、可定址以及可重新主宿的工作流设计器框架,以对不同类别的工作流建模。本发明的另一实施例支持快速应用程序开发风格的工作流设计体验,以允许用户图形地设计工作流过程,并以任何编程语言来关联商业逻辑。本发明的实施例也使用笔和图形输入板技术提供了墨迹支持。本发明提供了一种自由形式的绘图表面,其中,由用户绘制的工作流被转移到内部表示。本发明支持通过在现有绘图表面上的墨迹编辑(例如,添加/删除活动)以及现有工作流的墨迹注释(例如,书写表面上的注解、建议或提醒等手绘物)对工作流的创建和修改。
本发明的其它一些实施例提供了用于以声明性方式捕捉横切行为并将行为应用于工作流模型的选中部分的组件。本发明的其它实施例在与其相关联的行为的上下文中执行工作流模型的选中部分。本发明的实施例提供了处理工作流模型的多个步骤的横切的、互不相关且紊乱的问题的框架、可重新使用组件和语言。
根据本发明的一个方面,一种方法在具有显示器和用户界面选择设备的计算机系统中对工作流建模.该工作流包括活动,并且,该工作流程对商业过程建模.该方法包括在显示器上显示多个活动.该方法也包括经由用户界面选择设备从用户接收对活动的选择.该方法也包括在显示器上显示所接收的活动选择.该方法也包括经由用户界面选择设备从用户接收结构信息.该方法也包括根据所接收的结构信息在显示器上排列所显示的活动选择,以创建工作流.
根据本发明的另一方面,一个或多个计算机可读介质具有用于在具有显示器和用户界面选择设备的计算机系统中对工作流建模的计算机可执行组件。该工作流包括活动,并且该工作流对商业过程建模。组件包括用于在显示器上显示多个活动的呈现组件。组件也包括用于经由用户界面选择设备从用户接收对由呈现组件显示的活动的选择的接口组件。呈现组件还在显示器上显示接口组件所接收的活动选择。接口组件还经由用户界面选择设备来从用户接收结构信息。组件也包括用于根据所接收的结构信息在显示器上排列活动选择,以创建工作流的设计器组件。
根据本发明的又一方面,一种系统对工作流建模。该工作流包括活动,并且该工作流对商业过程建模。系统包括用于存储多个活动的存储区域。该系统也包括用于显示存储在存储区域内的多个活动的显示区域。该系统也包括被配置成执行计算机可执行指令的处理器,这些计算机可执行指令用于从用户接收对活动的选择、在显示区域内显示所接收的活动选择、从用户接收结构信息、以及根据所接收的结构信息在显示区域内排列所显示的活动选择,以创建工作流。
作为选择,本发明可以包括各种其它方法和装置。
其它特点将部分地一目了然,并且将在下文中部分地指出。
附图说明
图1是包含任务和控制流合成活动的示例性工作流。
图2示出了示例性活动继承树。
图3示出了示例性组件模型。
图4是示出与本发明的用户交互以创建工作流的框图。
图5示出了示例性的用墨水写的工作流。
图6示出了从图5中用墨水写的工作流转换而来的工作流。
图7是示出与本发明的用户交互以创建工作流的流程图。
图8是示出触摸屏实施例中用墨水写的工作流的识别的流程图。
图9是用于创作依赖于工作流规范的向导的工作流的高级应用程序用户界面。
图10示出了示例性工作流设计器。
图11示出了包括后面是发送活动的接收活动的配合程序。
图12是示出可以在其中实现本发明的合适的计算系统环境的一个例子的框图。
附录A描述示范活动。
附录B描述可视设计器和相关联的活动设计器。
贯穿这些附图,对应的参考标号表示对应的部分。
具体实施方式
本发明的实施例对表示诸如商业过程等过程的工作流进行建模。商业过程是导致可预测和可重复结果的依赖性和有序的任务、活动等。包括组织的操作过程、机构的工作知识以及信息资源,商业过程被设计成以有效且及时的方式满足所定义的商业目标。在一个有效的环境中,过程的功能性组件可被容易地标识、适应和部署来解决不断改变的企业需求。工作流是与商业过程中的任务交互的最终用户的体验。任务被建模为活动、组件等,其每一个表示由个人或机器执行的工作单元。在一个实施例中,向用户呈现多个活动。用户选择并组织活动来创建工作流。执行所创建的工作流以对商业过程建模。参考图1,示例性工作流100包含任务和控制流合成活动。
在一个示例中,配合引擎工作流模型支持不同类别工作流的建模、创作和执行。示例包括按照出现在有序序列中或作为一组异步事件出现的一组结构化步骤对给定问题建模。该配合引擎协调进度表的执行。进度表是以树形结构分层排列的一组经组织的活动。执行活动的执行上下文以及对其可见的共享数据由一作用域提供。每一活动表示封装工作流过程中步骤元数据的组件。活动是工作流模型中的基本执行单元,且具有相关联的属性、句柄、约束和事件。每一活动可以由任何编程语言中的用户代码来配置。例如,用户代码可表示以公用语言运行时环境(CLR)语言书写的商业或应用程序逻辑或规则。每一活动支持对用户代码中的执行的预截听(pre-interception)挂钩和后截听(post-interception)挂钩。每一活动具有相关联的运行时执行语义和行为(例如,状态管理、事务、事件处理和异常处理)。活动可与其它活动共享状态。活动可以是原语活动或被组合成合成活动。原语或基本活动没有子结构(例如,子活动),并由此是树结构中的叶节点。合成活动包含子结构(例如,它是一个或多个子活动的父节点)。
在一个实施例中,活动有三种类型:简单活动、容器活动和根活动。在本实施例中,在模型中有一个根活动,且根活动中没有或有任何数量的简单活动或容器活动。容器活动可包括简单或容器活动。整个工作流过程可用作构建更高阶工作流过程的活动。此外,活动可以是可中断或不可中断的。不可中断合成活动不包括可中断活动。不可中断活动缺少可导致活动阻断的服务。
配合引擎提供一组示例性的活动。参考图2,一活动继承树示出了若干示例性活动。图2列出的示例性活动在附录A中详细描述。另外,任何用户可编写一个或多个活动来扩展工作流模型。例如,用户可为特定的商业问题、领域、工作流标准(例如,商业过程执行语言)或目标平台编写活动。配合引擎可向用户提供一组丰富的服务来编写活动,该组服务包括,例如分析代码、类型分解和类型系统的服务、用于序列化和呈现的服务。
在一个实施例中,每一活动具有至少三个部分:元数据、实例数据和执行逻辑。活动的元数据定义了可被配置的数据属性。例如,某些活动可共享在活动抽象基类中定义的一组公用元数据。每一活动依照其需求通过扩展该类来声明其自己的附加元数据属性。
元数据属性的值由该活动跨配置该活动的进度表的实例的所有实例共享.例如,如果用户创建进度表A,并向其添加一发送活动,则该发送活动被给予标识信息(例如,“001”)作为其元数据的一部分.添加到该进度表的第二发送活动将接收其自己的唯一标识信息(例如,“002”).一旦创建和执行了进度表A的多个实例,则发送“001”的所有实例将共享元数据值.相反,活动的实例元数据定义了一组对运行进度表实例中的活动实例专用的数据.例如,延迟活动可提供其实例数据上的只读属性,该实例数据是标识延迟活动的超时值的日期和时间值.一旦延迟活动开始执行,该值即可用,且它对延迟活动的每一单个实例很可能是不同的.通常参考进度表的实例,尤其是活动和任务的实例,而不用“实例”来限定参考.
合成活动具有其子活动组作为另一元素。子活动在一个实施例中被认为是元数据。配合引擎模型明确地准许在运行时在进度表的实例中操纵该元数据。向作为执行进度表实例的一个部分的合成活动添加新的子活动,使得仅该进度表实例的元数据(活动树)被影响是可能的。
接下来参考图3,每一活动具有一组相关联的组件,它们形成了该活动的组件模型。该组相关联的组件包括活动执行器、活动设计器、活动序列化器、活动确认器(例如,语义检查器)、以及活动代码生成器。活动执行器是实现该活动的执行语义的无状态(stateless)组件。活动执行器与活动的元数据一起工作来实现该活动。代码调度器担当活动执行器的服务提供者以向活动执行器提供服务。
活动设计器可视地显示活动的设计时可视表示。活动设计器是设计器分层结构中的一个节点,并且可以加主题或加皮肤。活动设计器主宿在设计环境中(例如,应用程序),并通过服务与宿主设计环境交互。活动确认器在编译时以及运行时实施活动语义。活动确认器在工作流模型的上下文中操作,并使用由该环境提供的服务(例如,编译器、设计器或运行时环境)。确认在工作流生命周期中的各个点发生。结构依从性检查在创建工作流的序列化表示时、编译时或响应于用户请求而做出。语义检查可以在运行时比在编译时执行的检查更强大,以确保诸如运行实例的活动树中活动的添加和替换等运行时操作的安全性。本发明评估与每一活动相关联的语义,以找出例如与预定接口要求的一致性和依从性。
活动序列化器是序列化活动元数据的组件。活动序列化器从各种模型/格式序列化器中调用。整个工作流模型是基于一可扩展模式被序列化成声明性标记语言的,它可以按需进一步被转换成其它工作流语言。
在一个实施例中,活动的组件模型作为数据结构储存在计算机可读介质上。在该数据结构中,活动设计器由储存用于可视地表示该活动的数据的图像字段(例如,图标)表示。另外,一个或多个创作时字段储存定义与活动相关联的属性、方法和事件的元数据。活动序列化器由储存用于将储存在创作时字段中的元数据传送到活动的声明性表示的数据的序列化器字段表示。活动生成器由储存与储存在创作时字段中的元数据相关联的软件代码的商业逻辑字段来表示。活动执行器由储存用于执行储存在商业逻辑字段中的软件代码的数据的执行器字段表示。
作用域和进度表
执行活动的执行上下文以及对其可见的共享数据由作用域来提供。作用域是核心活动之一。作用域是用于将变量和长期运行服务与事务语义、出错处理语义、补偿、事件处理程序和数据状态管理集合在一起的统一构造。作用域可具有相关联的异常和事件处理程序。在一个实施例中,作用域可以是事务的、原子的、长期运行的或同步的。在对用户变量的冲突读-写或写-写访问的情况下,向用户提供并发控制。作用域也是事务边界、异常处理边界以及补偿边界。由于作用域可以在进度表内嵌套,因此用不同作用域内相同的名字(即使作用域是嵌套的)来声明变量、消息、通道和相关集而没有名字冲突也是可能的。
在进度表内嵌套的作用域只能在该进度表的上下文内执行.进度表可以被编译为应用程序(例如,独立的可执行实体)或库(例如,用于从其它进度表调用).被编译为库的每一进度表有效地构成了可从其它进度表内调用的新活动类型.进度表的元数据包括参数的声明.
一旦开发了进度表,可执行所开发的进度表的实例。激活和控制进度表实例的过程是由其中嵌入了配合引擎的宿主环境所决定的。配合引擎提供了可用于测试进度表的不提供必要服务的“简单宿主”。另外,配合引擎提供了一激活服务来促进同样由引擎和外部应用程序用于与服务环境(即,宿主)交互的“服务提供者”模型(例如,应用程序编程接口)的标准化。激活服务创建了特定进度表类型的进度表实例,并可任选地传递参数。进度表实例本质上是运行进度表实例的代理,并包括唯一地标识该实例的标识符、对进度表的元数据(活动树)的引用、以及挂起、恢复和终止实例的方法。激活服务也支持基于给定的进度表实例标识符找出进度表实例。
代码分离(code-beside)
作用域活动可具有包括用于该作用域活动的商业逻辑的相关联的代码分离类。由于进度表本身是作用域,因此进度表也可具有代码分离的类。在进度表内嵌套的作用域也可具有其自己的代码分离类。在作用域内嵌套的活动共享该作用域的代码分离类,它担当其共享数据的状态和商业逻辑的容器。例如,代码活动的元数据包括对具有代码分离中的特定签名的方法的引用。在另一实例中,发送活动的元数据包括对特定签名的代码分离方法的可任选引用加上对消息声明和通道声明的强制引用。
代码分离的示例性使用包括:变量、消息、通道和相关集的声明;出/入/引用参数的声明;附加自定义属性的声明;要发送的消息的准备;已接收消息的处理;以返回布尔值的代码表达的规则的实现;本地定义的变量的操纵;读活动元数据和实例数据;写活动实例数据(例如,设置将要执行的活动的属性);引发事件;抛出异常;枚举和导航运行进度表实例的活动树中的活动的分层结构,包括跨嵌套的作用域和进度表调用边界;向运行进度表实例内的合成活动添加新活动;改变与运行进度表实例内的活动相关联的声明性规则;以及获取对其它运行进度表实例的引用和对其的操纵。
用于设计工作流的用户界面
参考图4,一框图示出了与本发明的用户交互以创建工作流。用户402与显示器404(例如,显示设备、或应用程序的执行环境内的显示区域)和用户界面选择设备406交互,以便经由计算机可执行组件来设计工作流。用于对该工作流建模的计算机可执行组件被存储在诸如计算机可读介质410等一个或多个计算机可读介质上,并且包括呈现组件412、接口组件414、设计器组件416和确认组件418。呈现组件412将多个活动显示在显示器404上。接口组件414经由用户界面选择设备406从用户402接收对呈现组件412所显示的活动的选择。呈现组件412还在显示器404上显示接口组件414所接收的活动选择。接口组件414还经由用户界面选择设备406从用户402接收结构信息。设计器组件416根据所接收的结构信息在显示器404上排列活动选择,以创建工作流。确认组件418评估语义与预定义接口要求的一致性。
在一个实施例中,本发明是启用墨迹的,并且包括用于从用户402接收工作流的手绘表示的触摸屏436.本发明将该手绘工作流转换成工作流.图5中示出示例性的用墨水写的工作流.在用户402选择“自动识别”之后,该工作流被转换成图6中所示的工作流.该启用墨迹的实施例允许用户402构建与图形输入板计算设备兼容的工作流设计器.该启用墨迹的工作流设计器允许用户402在整个工作流创建过程中使用笔、定点设备或类似物(例如,从最初的草图阶段到包括对所跟踪数据的分析的执行阶段和执行后阶段).在这一实施例中,这些计算机可执行组件还包括选项板组件422、识别器组件420、皮肤组件424和工作流组件426.选项板组件422定义多个选项板元素.所定义的多个选项板元素中的每一个对应于至少一个活动.接口组件414经由触摸屏436从用户402接收多个图形元素.排列所接收的多个图形元素,以创建工作流.识别器组件420将接口组件414所接收的多个图形元素中的每一个与选项板组件422所定义的选项板元素之一相关联,并且排列这些相关联的选项板元素,以便在触摸屏436上显示该工作流.皮肤组件424将所接收的用户定义主题应用于显示在触摸屏436上的工作流.工作流组件426根据识别器组件420所排列的相关联的选项板元素,来创建工作流.
具体地,用户402在图形输入板计算设备上用图形地草拟该过程。本发明支持用于与过程和过程构造(例如,并行、决策、循环以及事件/激活条件)交互的各种过程定义游动路线(swim lane)。然后,本发明的软件要么在草拟期间匆忙地、要么在用户402已完成草图之后将图形草图转换成过程定义。然后,可以在显示器404上用具有标准符号和元素的工作流来替换图形草图。用户402能够编辑所显示的工作流、为工作流添加或删除注释(例如,单或多用户情形)、以及纠正所显示的工作流元素。具体地,通过在现有工作流上绘制或书写注释、注解和/或提示,用户402可以进行注解;并且,本发明存储墨迹以及该工作流表示,以及墨迹相对于周围形状的位置。
另外,通过绘制额外的草图、通过绘制被解释为编辑的标准手势(例如,删除、复制、移动)、或通过插入特殊的活动类型,用户402可以修改该过程定义。本发明也支持绘图与过程定义之间的往返。例如,当绘图改变时,更新过程定义;反之亦然。
本发明存储该绘图以及所创建的过程定义。在一个实施例中,这可以用来在用户绘图上显示过程执行进度。例如,商业分析家绘制工作流,并将它提供给开发者,开发者将该工作流转换成过程定义、对它进行编译、并开始过程执行。商业分析家要么在过程定义视图中、要么在绘图窗格中观察执行过程。
本发明也允许用户402经由绘制和/或书写来与运行的(例如,执行的)工作流交互。例如,用户402可以在管理视图中控制运行过程的执行(例如,开始/停止/终止);或者通过用笔、定点设备或类似物来书写输入,可以与工作流进行通信。由本发明识别的手势(例如,删除或插入某些形状)不限于预定义的手势集。即,用户402可以创建供本发明软件识别的自定义手势。
在一个实施例中,本发明被实施为以商业分析家为目标的独立应用程序。在另一个实施例中,本发明被实施为用于应用程序中的工作流设计器。即,图4中所示的组件在应用程序的执行环境内执行。
在另一个实施例中,处理器408被配置成执行用于对工作流建模的计算机可执行指令,并访问存储区域428。存储区域428存储多个活动430。处理器408执行这些计算机可执行指令,以便从用户402接收对活动430的选择、在显示器404上显示所接收的活动430的选择、从用户402接收结构信息、以及根据所接收的结构信息在显示器404上排列所显示的活动430的选择,以创建工作流。
在包括触摸屏436或其他显示器(例如,定点设备或其类似物可接受的显示器404)的实施例中,存储区域428还存储经由显示器404和可任选的定点设备从用户402接收的多个图形元素432。这些图形元素432由用户402排列,以表示工作流。存储区域428还存储多个选项板元素434,其每一个对应于活动430中的至少一个。在这一实施例中,处理器408还被配置成执行计算机可执行指令,用于将存储在存储区域428内的图形元素432的每一个映射到多个选项板元素434之一、根据所映射的选项板元素434创建工作流、以及在显示器404上显示该工作流。
图4中所示的元素构成用于显示多个活动(例如,活动430)的示例性装置、用于接收对活动的选择的示例性装置、用于从用户402接收结构信息的示例性装置、以及用于根据所接收的结构信息来排列所显示的活动选择以便创建工作流的示例性装置。另外,定点设备构成用于经由数字笔或触针等传达信息的示例性装置,显示器404构成用于从数字笔或触针等接收输入的示例性装置,并且,处理器408构成用于从用户402接收多个图形元素(例如,图形元素432)并根据其来创建工作流的示例性装置。
再次参考图4,接下来参考图7,一流程图示出了用于对工作流建模的方法。该方法包括:在702处,在显示器404上显示多个活动430;在704处,经由用户界面选择设备406从用户402接收对活动430的选择;在706处,在显示器404上显示所接收的活动430的选择;在708处,经由用户界面选择设备406从用户402接收结构信息;以及,在710处,根据所接收的结构信息在显示器404上排列所显示的活动430的选择,以创建工作流。在一个实施例中,显示多个活动430包括:在显示器404上的选项板显示区域和/或工作空间显示区域内显示多个活动430。
接下来参考图8,在触摸屏实施例中,该方法还包括:在802处,定义多个选项板元素,其中,所定义的多个选项板元素中的每一个对应于活动中的至少一个;在804处,经由触摸屏从用户接收多个图形元素,其中,排列所接收的多个图形元素,以创建工作流;在806处,通过将所接收的多个图形元素中的每一个与所定义的选项板元素之一相关联,来识别所接收的多个图形元素中的每一个;以及,在808处,在触摸屏上排列这些相关联的选项板元素,以显示该工作流。
在一个实施例中,一个或多个计算机可读介质(例如,计算机可读介质410、428)具有用于执行图7和图8中所示的方法的计算机可执行指令。
工作流模板(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方式设计各种类别的工作流模型的框架。例如,参考图9,一种用于创作工作流的高级应用程序用户界面依赖于工作流规范的向导。该框架包括使开发者能够编写可视工作流设计器的一组服务和行为。这些服务提供了呈现工作流过程的有效方式、支持用于绘制工作流的墨迹/图形输入板、以及支持诸如撤消/回复、拖/放、剪切/复制/粘贴、缩放、扫视、搜索/替换等设计器操作、书签、装饰、用于确认错误的智能标签、用于活动的有效拖动目标指示符、自动布局、视图分页、导航标记器、拖动指示符、具有页眉/页脚的打印和预览等等。通过这一用户界面,可构造包含任务和控制流合成活动(例如,顺序、并行和条件)的简单工作流。对规则规范(例如,条件分支逻辑、while循环逻辑)或数据流规范(例如,任务A的输出是任务B的输入)不要求代码输入(或依赖于现有的已编译代码)。进度表的序列化表示(包括规则和数据流)是自包含的,且在不需要代码分离的某些情形中完成。
使用本发明的设计器框架,本发明的配合引擎包括一种快速应用程序开发(RAD)风格的可视工作流设计器,它支持以可视方式将软件代码与工作流模型相关联。工作流中的每一活动具有相关联的活动设计器。每一活动设计器是按照框架服务来编写的。本发明的框架也包含一可视设计器模型。该可视设计器模型包括通过该工作流模型中的关系彼此链接的一组活动设计器。图10示出了一个示例性工作流设计器。可视设计器和活动设计器在附录B中详细描述。本发明包括将代码与工作流模型相关联的各种模式,包括“代码分离”、“代码嵌入”和允许用户代码实时在工作流模型中往返的“仅代码”。本发明也提供了当用户在构建工作流时的实时语义错误。
配合引擎设计器允许用户通过使用其它所创建的进度表来递归地组成更高阶进度表并使用它们。进度表的内联扩充允许用户内联地查看进度表内容并剪切或复制内容。为允许进度表的内联扩充以及使进度表只读,创建用于内联进度表的单独设计表面和设计器宿主。此外,合成进度表设计器具有其自己的分层结构。所调用的进度表在设计器由用户扩充时被加载和显示。在一个实施例中,当活动被放到或复制到设计器表面上时,层叠设计器。一属性将调用活动设计器与主宿的进度表的根设计器链接。以下函数防止向设计器添加或移除活动。
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”的项目,并向该项目添加配合项。用户然后将作用域活动拖放至设计表面。下一步,用户将接收活动以及其后的发送活动放到该作用域上。图11示出了设计器中的所得工作流1100。每一活动设计器提供了对象模型上的用户界面表示。开发者能够直接对对象模型编程,并设置活动上的属性或使用该设计器。配合引擎设计器允许开发者从工具箱中选择活动并将其拖到设计器表面上。如果活动已被放置到进度表中并需要移动,则开发者能够选择它(通过点击它)并将其拖至它需要去往的进度表区域。如果开发者按住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=″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的序列化在原语(Primitive)和合成(Composite)活动之间有所不同。
原语活动的简单类型被序列化为该活动类型上的元属性。原语活动的复杂类型被序列化为子元素。作为一个示例,以下是Send活动的XOML表示。
<Send ID=″send1″HasTypedChannel=″False″>
    <Message Name=″message1″Type=″System.String″/>
    <UntypedChannel Name=″c1″/>
</Send>
以与原语类型序列化类似的方式,合成活动的简单类型被序列化为该活动类型上的元属性。然而,按照定义,合成活动封装了嵌套的活动。每一嵌套的活动被序列化为另一子元素。作为一个示例,以下是While活动的XOML表示。
  <While ID=″while1″>
                <ConditionRule>
                  <CodeExpressionRule>
                      <Expression Name=″test″/>
                    </CodeExpressionRule>
            </ConditionRule>
</While>
过程/工作流视图和序列化的表示之间存在强关系.当以工作流的序列化(例如,XOML)表示或工作流的分离代码创作时,其它表示将招致改变.由此,当开发者在XOML和过程/工作流视图之间切换时,修改活动的XOML(或在合成活动的情况下修改其构成部分)直接在过程/工作流视图中得到反映.反过来也是适用的.修改过程/工作流视图中的活动导致XOML内的适当修改.作为一个示例,过程/工作流中的活动的删除导致同一活动的XOML中XML元素的移除.在过程/工作流视图和分离的代码之间也发生往返.
在创建XOML代码的过程中,如果XOML定义不符合预定义的接口要求,则在违反的XML元素下加下划线,或用其它方式可视地向开发者标识。如果开发者切换到过程视图,则将向他们警告在XOML内存在错误,且设计器提供一链接,开发者可点击该链接并且会被导航到违反的元素。该同一错误出现在任务面板中,并且在双击该错误之后,开发者将会被导航到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编辑器。本发明的设计器向开发者提供了反馈,指示过程/工作流视图中做出改变然后在序列化视图中撤消将导致序列化代码的丢失。当开发者在过程/工作流视图中构造进度表的一部分时,切换到序列化视图然后决定执行撤消/恢复操作,将出现警告。
示例性操作环境
图12以计算机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立即可访问或者当前正在操作的数据和/或程序模块。作为示例而非局限,图12示出了操作系统144、应用程序146、其它程序模块148和程序数据150。
计算机130也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。例如,图12示出了对不可移动、非易失性磁介质进行读写的硬盘驱动器154。图12也示出了对可移动、非易失性磁盘158进行读写的磁盘驱动器156以及对可移动、非易失性光盘162,如CD ROM或其它光介质进行读写的光盘驱动器160。可以在示例性操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字视频带、固态RAM、固态ROM等等。硬盘驱动器154、磁盘驱动器156和光盘驱动器160通常通过非易失性存储器接口,如接口160连接到系统总线136。
上文讨论并在图12示出的驱动器及其关联的计算机存储介质为计算机130提供了计算机可读指令、数据结构、程序模块和其它数据的存储.例如,在图12中,示出硬盘驱动器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所描述的元件。图12描述的逻辑连接包括局域网(LAN)196和广域网(WAN)198,但也可包括其它网络。LAN 136和/或WAN 138可以是有线网络、无线网络、其组合等等。这类网络环境常见于办公室、企业作用域计算机网络、内联网以及全球计算机网络(例如,因特网)。
当在局域网网络环境中使用时,计算机130通过网络接口或适配器186连接至LAN 196。当在广域网网络环境中使用时,计算机130通常包括调制解调器178或用于通过WAN 198,如因特网建立通信的其它装置。调制解调器178可以是内置或外置的,它通过用户输入接口184或其它适当的机制连接至系统总线136。在网络化环境中,相对于计算机130所描述的程序模块或其部分可储存在远程存储器存储设备(未示出)中。作为示例而非局限,图12示出远程应用程序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(ConstrainedActivityGroup)
当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是担当容器的补偿活动类型,该容器具有其中的活动的隐含排序。
附录B
可视设计器
进度表通常由许多活动组成。每一活动具有其自己的相关联的设计器。在活动已从工具箱拖曳到图形用户界面的设计表面上之后,设计器将自身表现为图形用户界面(UI)(例如,视件工作室(visual studio))中的图标。该设计器在创作对象模型(AOM)上提供UI表示。开发者能够依照该对象模型来直接编程,并且在活动上设置属性,或者使用该设计器并充分利用视件工作室的属性浏览器。
活动创建和配置
创建进度表包括定义组成它的活动和任务。该配合引擎设计器允许开发者从该工具箱中选择活动(例如,在配合引擎活动的类别下),并将它拖曳到设计器表面上。如果活动已被放入进度表并需要被移动,则开发者能够选择它(通过点击它),并将它拖曳到它需要去的进度表的区域。如果开发者在拖放的同时按住ctrl键,那么,复制所选择的活动。
运行布置特征根据所执行的构造语义确认的纠正,来提供可能的落点(目标),作为可视指示符。可以将活动拖放到进度表上的这些目标中的任一个。自动滚动特征也参与拖放的上下文。当处理大型进度表时,通过将活动拖向将放置的进度表的区域,可以访问对当前不在视件工作室视见区内的设计器区域的导航。跨越同一项目中的各个进度表并跨越同一解决方案中的其他项目中的各个进度表支持拖放。在活动被放到设计表面上之后,开发者经由属性集来配置该活动。可以在标准视件工作室属性浏览器中编辑这些属性。每一活动控制什么属性在属性浏览器中是可查看的。
对话框的指导方针
为了协助开发者配置各种活动,设计者提供各种对话框或“子设计器”。为活动的各属性而调用这些对话框的每一个。当在属性浏览器中用省略号来注解它时,开发者能够为属性调用任何设计器。
类型浏览器对话
当通过属性浏览器来配置活动时,开发者经常需要指定一种类型的属性或对象。如果开发者知道他们要求的类型(例如,System.String),那么,开发者在属性浏览器中直接键入它。类型浏览器为项目中的与该属性的期望类型相匹配的所有编译的引用程序集提供可视化。在程序集出现在类型浏览器中之前,必须首先编译引用项目。基于所配置的特定活动属性,类型浏览器过滤向开发者显示的类型。根据底层活动所预期的类型,类型浏览器过滤可序列化类以及实现IComparable的接口和类。例如,通过从发送活动上的消息属性启动浏览器,该浏览器将列出可序列化类。配合引擎将消息类型、端口类型和相关类型识别为第一类过程类型。以下表格示出了具有CLR类型的这些类型的映射。
  消息·在Send、Receive及其变体上定义   OEMessage<T>其中,T是任何可序列化CLR类型
  通道·在Send及其变体上定义的类型化出站   OEOutboundChannel<I>;其中,T是任何接口
  消息·在Send、Receive及其变体上定义   OEMessage<T>其中,T是任何可序列化CLR类型
  通道·在Receive及其变体上定义的类型化入站   OEInboundChannel<I>;其中,T是任何接口
  相关   OECorrelation<I>;其中,T是实现IComparable的任何可序列化CLR类型
表B1.到CLR类型的示例性映射
在一个实施例中,类型浏览器图形用户界面不可调整大小,但为两个子窗口中的每一个提供水平滚动条和垂直滚动条。左边的子窗口的默认分类次序基于当前项目的引用程序集中所列出的类型名称而升序。在右边的子窗口内,存在两列:“类型名称”和“完全合格的名称”。默认分类次序基于“类型名称”而降序。但是,这两列都可以被分类。“类型名称”列可以被调整大小,以显示完整的类型名称。当开发者将焦点放在每个程序集上时,右边的子窗口显示容纳在该程序集内的、允许选择的类型(如上所述)。一旦选择了有效类型,这两个子窗口下面的文本框就提供类型的名称、以及它被容纳在哪个程序集内。该程序集信息提供程序集名称、版本号、文化和公钥记号。在发生该选择以前,文本为“请从列表中选择类型”。开发者最终决定选择类型还是退出浏览器。当选择了与该活动的属性相匹配的类型时,启用“OK”按钮。当开发者重新调用属性浏览器对话框时,自动选择该类型和引用的程序集。
所提供的用于协助开发者配置活动的各种属性的另一种类型的浏览器是相关性设置浏览器。在运行的进度表中,发送到进度表的消息实际上意在用于特定的进度表实例。例如,关于购货订单#123的发票必须被发回到始发(发出)该购货订单的同一进度表实例。为了将入站消息与适当的进度表实例相匹配,消息和进度表实例共享被称作“相关集”的关键字。相关集在Send和Receive活动上定义。相关集浏览器用来帮助配置相关集。要定义的第一个项是相关集的名称。如果开发者正在创建新的相关集,那么,他们能够直接输入其名称。如果他们正在配置Send/Receive以参与预定义的相关,那么,用这些相关的名称来填充下拉列表。从当前项目的分离代码中检索该列表。该对话框的输出是基于这里详述的配置的分离代码中的相关变量。例如,如果创建过串类型化的相关,那么,生成的所得代码将会是public OECorrelation<System.String>MyCorrelation=newOECorrelation<System.String>();)
开发者需要输入的下一个配置选项是:该相关所参与的活动是否正在对该集初始化.出于设计器的目的,该选项是“真”或“假”.另一个配置细节指定相关集的类型.按照与配置其它活动的类型相类似的方式,可以调用类型浏览器.开发者能够添加和移除该活动所参与的相关集.但是,作为在分离代码中所定义的相关的结果,活动可以参与先前的活动内所定义的相关.同样,移除相关实际上移除了活动对该相关的参与,而不是分离代码所生成的代码.如果开发者希望使该相关不再出现,那么他们有责任从分离代码中移除该定义.
该选项卡顺序是:相关集、名称、下拉选取器、添加、移除去、OK、取消和帮助。如果定义了多个相关集,那么,该选项卡将在添加之前和下拉选取器之后的下一个所定义的相关集处停止。开发者最终决定创建和/或移除相关,或者退出该浏览器。当已提供相关名称和类型时,启用OK按钮。点击OK会生成关于新的相关集的任何分离代码,并将活动添加到所定义的相关。选择取消或敲击Esc键,可允许该开发者退出浏览器,而不会对该活动进行更改。如果活动还没有被正确地配置,那么,设计器为开发者提供广泛的反馈:需要配置哪一活动、以及如何配置每一活动。
约束设计器对话框
不管进度表使用哪一约束技术,本发明都为开发者提供创作约束的能力。对于开发者而言,使用拖放隐喻来写代码是不自然的行为。所以,用于于约束构造的工具支持使用鼠标和使用键盘来定义约束的能力。约束的最终生成被持久化为XOML。这样,所生成的约束与现有的XOML对象模型一致,所以,它将允许开发者手工编辑约束定义。为约束生成而提供的UI协助用户创建约束并对它进行修改。这暗示以前生成的(和可能被修改的)约束与UI之间的往返。
用户模型
给定允许约束定义的活动,开发者定位对应的约束属性,并且,在下拉列表中指出通过选择适当的下拉列表来定义约束的愿望。在处理程序的定义之后,在属性浏览器中用省略号来注解属性,以调用约束编辑器。开发者能够指定约束的名称。该名称被持久化为XOML,具有该约束定义的其余部分。使用定义网格内的四个列:“操作数”、“算子”、“值”、以及“通过...来分组”,来进行约束定义。操作数是包含将参与约束的算子的下拉列表。开发者能够直接键入该下拉列表,并使用自动完成来迅速选择所需的算子。操作数是定义将要在约束中使用的算子的下拉列表。开发者可以将算子直接键入下拉列表,该下拉列表将迅速选择所需的算子。值是将要在约束中使用的开发者定义的值。一旦保存了约束,就将该值与所选择的属性进行比较,以确保类型匹配。如果类型不匹配,那么,出现消息,例如,“操作数类型和值类型不匹配”,并且,开发者被定向到违反的谓词。“通过...来分组”列是具有包括“AND”或“OR”两个可接受值的下拉列表。当约束定义正在进行时,开发者能够在定义网格下的不可编辑对话框中查看该约束。这允许开发者按更直截了当的方式来查看约束。输出将会类似于以下内容:((A<3)与(B>C))AND(D=3))OR(F=5)。
活动错误处理:“智能标签”
本发明提供帮助配置特定活动的一些子设计器,例如,类型浏览器、相关集浏览器和规则设计器。当活动的配置不充分时,用类似惊叹号智能标签的图标来装饰活动的设计器。开发者点击该图标,来看到对该活动专用的配置错误的下拉列表。对于与属性配置有关的错误,选择将焦点移到属性浏览器,并将焦点放在错误的属性上。当活动的所有属性有效时,该图标消失。
设计表面特征
本发明的设计者也提供在可访问性方面有帮助的一些其它UI选项。提供过程视图的上下文内的这些特征中的许多,以帮助开发者操纵大型进度表。例如,缩放允许开发者扩展其进度表的选择。存在用于放大/缩小进度表的几个机制,其每一个为特定功能而设计。在一个方法中,开发者可以通过设置特定的图象缩放百分比,来放大进度表。示例性百分比是40%、60%、80%、100%、150%、200%、300%和400%。可以通过使用顶层工作流菜单或通过使用滚动条上的命令按钮,来设置这些等级。工作流视图允许该用户设置这些缩放等级。缩放等级解决关于庞大的工作流的可缩放性问题。可以使用顶层工作流菜单或通过使用滚动条上的命令按钮,来设置缩放等级。缩放等级不会影响工作流的编辑;多个坐标系允许工作程视图实现这一点。工作流视图高速缓存缩放因子,然后将它用于呈现和坐标变换。通过在Graphics.ScaleTransform方法中选择它,可在绘图中使用缩放因子。当完成这一点时,基于所使用的缩放来变换使用图形对象而完成的所有绘图。在绘图之前,将所有这些坐标乘以比例缩放因子。当用户利用鼠标来执行关于坐标变换的任何动作时,也使用缩放因子。
在另一种方法中,通过从垂直滚动条中选择放大/缩小选项作为选项,开发者可以放大/缩小进度表。这会更改由转变成放大镜的光标所指出的设计者的“模式”。然后,开发者可以“用橡皮圈住”他们希望放大/缩小的进度表的区域。如果选择放大,那么,通过点击鼠标按钮,设计者可放大(对于缩小,反之亦然)。但是,当处于每个各自的模式时,开发者可以按下shift键并在放大/缩小之间来回切换。最后,为了退出任一模式,开发者可以敲击“Esc”键,并将会重新处于“默认”模式。当处于“默认”模式时,开发者可以按住“Ctrl”键,并利用鼠标滚轮来滚动到放大。缩放等级不抑制开发者操纵进度表的能力。换言之,开发者可以操纵、添加/移除活动,而不管缩放等级如何。默认的缩放等级是100%。不管视图如何,都保存缩放设置状态。更明确地说,如果开发者转换到XOML视图、打印预览、或分离代码,或者关闭进度表或解决方案,那么,保存缩放状态。
扫视为开发者提供“抓住”和移动进度表的能力。开发者选择扫视模式,光标变成手状图标。当开发者点击鼠标时,该手状图标“抓住”该表面,并且,鼠标运动在鼠标的这个方向上移动该表面。扫视可以作为选项来从垂直滚动条中访问。当处于扫视模式时,开发者不能从设计器添加/移除活动。明确地说,扫视集中于在设计器以内移动进度表的当前视图。
对于大型进度表,开发者可能不会充分利用设计器的缩放特征,因而具有进度表的不可见的一部分。开发者仍然需要能够从工具箱中拖曳新的活动并将它添加到进度表的能力。在这个情形中,开发者可以将活动拖曳到他们想要滚动的进度表的区域,并且,一旦进入该“自动滚动区”,箭头就将会出现,进度表就将在活动正被拖曳的方向上移动。当活动在开发者希望导航的方向上进入屏幕的可见区域10%的区域时,这些箭头激活并滚动设计器视图。
具体地,本发明提供用户用于导航到工作流的一部分的机制;集中于并修改那个部分,并且继续编辑工作流的某个其它部分.自动扫视允许用户获得所绘制的工作流的全部画面,并且,放大镜允许用户放大工作流的特定部分.自动扫视特征与缩放和自动滚动相继承,以便用户可以处理实在庞大的工作流.为了开始自动扫视过程,用户点击显示在垂直滚动条上的放大镜图标.在点击该图标之后,工作流视图就进入自动扫视模式.在这个模式中,通过调用TakeMagnifierSnapshot(拍摄放大镜快照),来拍摄可显示在视见区内的当前工作流快照.这项功能在存储器位图中拍摄工作流的快照,而无需缩放因子.在完成这一点之后,计算工作流的缩放因子,以便可以在视见区内看见大部分的工作流.然后,鼠标变换成放大镜光标.该光标的热点被映射到工作流的存储器位图的该部分.然后,在放大镜中显示存储器位图的被映射的部分.对于非常大的工作流,如果用户进入自动滚动区域,那么,会发生自动滚动,这修改所显示的视见区.一旦自动滚动停止,捕捉新的视见区位图.当用户释放鼠标时,光标的热点被映射到实际的工作流部分,并且,该部分在屏幕上居中.以下是自动扫视的伪代码:
-if用户进入自动扫视模式
-设置缩放等级,以便尽可能多地显示工作流
-捕捉可视工作流位图
-if用户正在拖曳鼠标
-获得鼠标坐标
-将它映射到工作流位图
-通过复制所映射的工作流位图,来绘制放大镜
-if鼠标进入自动滚动区,并且可以滚动工作流
自动滚动
-else if用户离开自动滚动区
-重新捕捉可视工作流位图
-endif
-else
-获得鼠标释放的坐标
-将它映射到工作流区域
-使工作流区域居中
-endif
在一个实施例中,本发明通过在工作流的右下侧显示小扫视窗口,来支持自动扫视;其中,用户能够看见缩略图形式的整个工作流的表示。
当仍然在导航大型进度表的主题中时,文档大纲特征让开发者迅速查看进度表,并且,通过在提纲中选择节点,来将设计器导航到所选择的活动。每个节点的子节点基于其在序列中的布置而排序。通过双击节点或叶,将开发者导航到进度表中所选择的活动。内嵌的进度表作为文档大纲中的单个节点来呈现。构成内嵌进度表的活动将不会作为文档大纲中的单独条目出现。在任何时刻,开发者都能够执行贯穿功能规范而定义的所有进度表操作(添加、删除、复制、粘贴、重命名等),并且,相应地反映文档大纲。文档大纲内的活动的多个选择对应地选择过程/工作流视图内的这些活动。通过按住Ctrl键并选择文档大纲内的节点,可加亮所选择的节点,以指出它们已被选择。如果作用域定义了事件和/或异常处理程序,那么,它在与作用域相同的层处显示。这允许开发者在一个地方查看整个作用域,与必须浏览作用域设计中的各页相对。
运行布置使用评估构造语义的纠正的能力来提供可以贯穿进度表放置哪些活动的肯定指示.当开发者将活动从工具箱拖曳到设计器上时,目标出现在进度表上.当开发者在目标位置附近拖曳节点时,应该激活该目标.当所拖曳的活动的图标抓取并替换原始目标时,激活是明显的.当发生这个情况时,开发者可以释放鼠标按钮,并且,节点在运行目标所指出的位置处对齐进度表.在多部分拖放情形中,所显示的目标应该是满足所有语义确认的目标.
合成的概念指的是一个进度表或任务在其它进度表和任务中的递归包含。工作流设计器使开发者能够容易地开发进度表和任务,然后在其它进度表和任务内调用这些进度表和任务。但是,只要开发者创建新的进度表或新的任务,视件工作室都使(所有类型的)其它配合引擎项目可以经由工具箱来获得工作流或任务的已编译版本。为了调用该已编译的工作流或任务,开发者将它从工具箱拖曳到进度表上,就象任何其它活动一样。在这个新的包含进度表中,进度表内嵌直接提供对该新的进度表或任务的视图。这是只读洞察,它提供对所包含的进度表或任务的内部工作方式的查看。
进度表或任务内的合成活动本身可以被扩展或层叠。维持每次扩展或层叠的状态。所以,如果外部构造(例如,并行或作用域)被折叠,但内部构造被扩展,那么,外部扩展将仍然提供扩展的内部。假设这是只读视图,那么,开发者能够将内嵌进度表内所保持的活动复制/粘贴和拖放到包含进度表。默认地,当开发者创建进度表时,它参与进度表内嵌。但是,有一些情形,其中,“被调用者”进度表作者不希望“调用者”进度表查看其进度表的内部工作方式。在被调用者进度表的创作期间,开发者能够指出其进度表将可能不会被内嵌。当该调用者开发者试图内嵌该属性化进度表时,出现消息“该进度表的作者不允许进度表内嵌”。
主题
配合引擎设计器可以主宿在提供主宿环境的不同应用程序中。当主宿在其它应用程序内时,配合引擎设计器外观和触觉发生变体,以便它可以混合到主宿应用程序中。当按照每一用户的需要主宿在视件工作室开发环境内时,用户能够更改设计器的视觉参数。主题支持允许用户更改配合引擎设计器的视觉参数,而不会影响设计器实现或修改设计器代码。
主题支持对于它而言具有两个部分;第一个部分在开发时,另一个部分在使用时。在开发时,设计器作者编写用于参加工作流的活动的设计器。当开发设计器时,设计器作者用能够参与主体支持的方法来编写设计器。这通过开发者将设计器内的可配置可视化信息抽象到随后与使用主题属性的设计器相关联的设计器主题类来完成。然后,开发者在呈现设计器可视化时使用来自设计器主题类的信息。
当用户正在使用设计器时,他/她可以通过编书主题文件来使设计器发生变体。主题文件是个别地描述每个设计器预期的可视化参数的设计器主题的集合。通过用户手工编辑XML文件,或通过默认UI,可以创建主题文件。
主题允许开发者定制工作流活动的外观。每项活动具有展示可被“主题化”的特定属性集的对应的设计器。通过提供可视化定制的可扩展性,提供主题还支持工作流设计器的定制和重复使用的可能性。在视件工作室内,开发者能够通过导航到工具菜单、选择选项、选择工作流设计器并选择主题,来配置哪个主题当前被应用于项目。
开发者能够通过使用“主题”下拉列表,来创建新主题或指定他们希望使用的主题.当开发者选择“创建新主题”并指定主题文件名时,可以创建新主题.选择“浏览”按钮可调用文件对话框,以搜索主题XML文件.设计器下拉列表允许开发者选择活动分组(基本和合成)、或要主题化的特定活动本身.
可以在核心组处应用主题:基本(从ActivityDesigner(活动设计器)中内部导出)和合成(从ICompositeActivityDesigner(合成活动设计器接口)中内部导出)。从这些类中的每一个继承的设计器继承其主题。但是,用于特定活动的设计器的每一个可被个别地主题化。如果发生这种情况,那么,显式活动设计器主题化优先于其继承的行为。例如,如果ActivityDesigner主题具有蓝色的文本字体颜色,那么,所有这些设计器都使用这个字体颜色。但是,如果主题明确地调出代码形状来将红色用作字体颜色,那么,所有这些活动都显示蓝色文本字体颜色,除显示红色的代码形状以外。
主题可以定制过程视图、以及包括进度表的活动的每一项。大多数活动设计器从两个类中导出:ActivityDesigner和ICompositeActivityDesigner(从ActivityDesigner中导出)。这些是被主题化的元素及其对应的选取器。对于过程视图,要被主题化的元素是主题样式(大/中/小)、示出智能标签(是/否)、示出滚动指示器(是/否)、示出放下指示器(是/否)、示出阴影(是/否)、水印(是/否)、前景色(颜色选取器)、背景色(颜色选取器)、示出网格(是/否)、绘制单色(是/否)、示出网格(是/否)、选择(例如,前景色和图案颜色)、字体库(字体选取器)、字体样式(字体选取器)、绘制圆形(是/否)、内容对齐(近/远/中)、示出内容(文本、图标、两者)、示出边界(是/否)、以及连接器(例如,StartCap(开始帽)和EndCap(结束帽))。
对于个别的活动设计器,以下内容能够被主题化:前景色(颜色选取器)、背景色(颜色选取器)、以及边界(例如,颜色和样式)。对于个别的合成设计器,以下内容能够被主题化:阴影(是/否)和水印(是/否)。
打印预览
按照与其它应用程序相类似的方式,配合引擎设计器提供打印预览特征。这个特征改变过程/工作流视图的可视布局,以反映:给定当前选中的打印机,将如何打印该进度表。从概念上说,打印预览是现有过程/工作流视图上的另一个视图。这样,开发者仍然能够执行他们所习惯的全部进度表、活动和任务操纵。利用打印预览,当发生进度表操纵时,开发者能够实时地理解打印蕴涵。打印整个过程/工作流视图(包括智能标签)。通过选择“打印预览”或点击垂直滚动条中的最顶端的图标,开发者可以从文件菜单中调用打印预览。当被调用时,默认视图应该是原始视图的40%。
开发者可以指示各种页面布局并指定惯例的文档特征,比如页边距、页眉/页脚选项,并且可以缩放工作流并在需要时使它对齐。这些是不可调整大小的页面设置对话框内的两个选项卡。第一个选项卡详述页面专用日期。从默认打印机中检索纸张大小、纸张来源和方位的值。默认地,页边距是离每个边缘1英寸。最后,用于缩放的默认值被调整到标准尺寸的100%。没有用于在页面上居中的默认值。页面设置对话框的第二个选项卡处理页眉和页脚选项。页边距的默认值是0.5英寸和居中对齐。对于为打印页面提供页眉和页脚的许多其它应用程序,文本可以被做成模板。这些默认模板选项包括以下内容:
 -Page{#}
       -输出:Page 1
 -Page{#}of{##}
       -输出:Page 1 of 10
-{FullFileName},Page{#}of{##}
       -输出:C:\Test Plan\OE Designer Test Plan.doc,Page 1 of 10
-{FullFileName},Page{#}
       -输出:C:\Test Plan\OE Designer Test Plan.doc,Page 1
-{FileName},{Date}{Time},Page{#}
       -输出:orchestration engine designer Test Plan.doc,04/07/041:12,Page 1
-{FileName},Page{#}of{##}
       -输出:orchestration engine designer Test Plan.doc,Page 1 of 10
-{FileName},Page{#}
       -输出:orchestration engine designer Test Plan.doc,Page 1
-Prepared by{User}{Date}
       -Prepared by JoeUser 04/07/04
-{User},Page{#},{Date}
       -JoeUser,Page 1,04/07/04
-{custom}
       -用户定义
这些模板选项可用于页眉和页脚。但是,开发者能够在“自定义”文本框内指定其自己的文本。
可访问性和键盘导航
配合引擎设计器提供按逐项活动等级,通过构造的已调度进度表来导航的能力。支持以下键盘导航:
-开发者可以使用上、下、左和右箭头键,来遍历进度表。
-合成活动可以通过使用“+”键来扩展,并可以通过使用“-”来层叠。
-开发者能够通过敲击Esc键而在拖放操作发生时取消它。
-敲击Enter键具有与双击活动相同的效果。
UI持久化
设计器提供保存用于以下各个项的UI配置的能力:缩、打印预览状态、滚动条位置、选择、以及包括合成活动的扩展或层叠状态的活动设计器细节、作用域和进度表的工作流、异常和事件状态、约束活动组(CAG)编辑或预览模式、预览活动中当前运行的活动(例如,关于CAG、事件和异常)、以及内嵌状态。
XOML视图
当创建进度表时,开发者根本上作用于两个单独的项:工作流(只要需要时,也都可以作为XML来进行操纵)的可编辑图形表示、以及分离代码(例如,C#或Visual Basic)。该定义可以作为XML或XOML来加以操纵。XOML是进度表的XML表示。过程/工作流设计器的目的是帮助开发者迅速生成该XML。
开发者可以在丰富的图形过程/工作流视图与基于模式的XML视图(XOML视图)之间来回切换.为了完成这一点,开发者可以使用位于工作流设计窗口的左下角处的小按钮,或者通过使用热键F7(用于XOML)和Shift-F7(用于过程/工作流视图)而在各个视图之间转换.XOML编辑器提供智能传感(IntelliSense)、色化处理、方法技巧和语句完成.开发者可以通过同时按Ctrl并按空格键,来调用智能传感.按照与标准C#/VB编辑器相类似的方式,Xoml视图提供略述Xoml定义的能力.通过右击并选择“略述”上下文菜单,这是可用的.
主题属性
为了将主题与活动设计器相关联,活动设计器需要用ThemeAttribute(主题属性)来装饰。利用这个方法,设计器作者可以将主题相关元数据与设计器相关联。当创建设计器时,主题基础结构获得该元数据,并可以在需要时将它传递给设计器,以呈现设计器可视化。以下是如何将主题属性与发送设计器相关联的例子。
主题属性类采用两个参数:与设计器相关联的主题对象的类型、以及将从其中对主题对象进行初始化的初始化器XML。初始化器XML是可任选的参数。
 成员名   描述
 DesignerThemeType   DesignerThemeType指定与活动设计器相关联的设计器主题类的类型。该主题类保持设计器在参与主题支持时使自身发生变体所需的数据。活动设计器作者可以具有其自己的主题类,其中存储对其设计器的呈现专用的信息。
 Xml   该XML属性用来指定用于将对设计器作者所指定的DesignerThemeType进行初始化的XML。该xml属性可以具有不同类型的值,它可以是以下任何一种:a.被嵌入到DesignerThemeType所驻留的程序集的XML清单资源。b.它可以是驻留在与设计器主题是其一部分的父主题相同的目录中的文件。c.它可以是可以被加载和反序列化的XML串。
表B2.主题属性类别成员
除了将设计器主题与设计器相关联以外,设计器作者还从设计器中抽象出可视化数据。设计器作者创建DesignerTheme(设计器主题)导出类,并将所抽象的数据放入该类。然后,设计器作者可以向导出的设计器主题类查询在诸如呈现、布局等操作中使用的参数。DesignerTheme类是需要从其中导出所有设计器主题的基类。该类包含所有设计器用来参与主题支持的基本信息。DesignerTheme类中的基本数据成员如下:
  成员  描述
  DesignerType  与DesignerTheme相关联的设计器的类型。该信息用来解析资源名字空间并将主题与设计器类型相关联。
  ApplyTo  与主题相关联的设计器的完全合格的名称。
表B3.DesignerTheme类中的基本数据成员
以上成员提供个别的设计器与主题的关联。有一些情况,其中,每个设计器需要具有用于呈现其自身的附加信息。这是通过从DesignerTheme类中导出设计器专用主题类,并将该特定信息放入该类来完成。
ActivityDesignerTheme(活动设计器主题)类用来描述诸如Send、Receive、Delay等简单设计器的主题。这些简单设计器不具有它们之下的其它设计器的层级,并且可以基于ActivityDesignerTheme类中的信息来呈现自身。每个设计器具有其自己的初始化器XML;利用该初始化器XML,它对ActivityDesignerTheme类进行初始化,以便呈现自身。以下是使用ActivityDesignerTheme类来描述其所抽象的可视化信息的设计器的列表:ActivityDesigner(活动设计器)、CodeDesigner(代码设计器)、CompensateDesigner(补偿设计器)、DelayDesigner(延迟设计器)、FaultDesigner(错误设计器)、InvokeWebServiceDesigner(调用web服务设计器)、ReceiveDesigner(接收设计器)、ReceiveRequestDesigner(接收请求设计器)、ReceiveResponseDesigner(接收响应设计器)、SendDesigner(发送设计器)、SendRequestDesigner(发送请求设计器)、SendResponseDesigner(发送响应设计器)、SuspendDesigner(挂起设计器)和TerminateDesigner(终止设计器)。
以下是活动设计器类的成员:
  成员名   描述
  Geometry   该主题支持的设计器的几何结构。所支持的几何结构是Rectangle(矩形)、RoundedRectangle(圆角矩形)、Ellipse(椭圆)、Diamond(菱形)。几何结构由设计器从环境主题中获得。
  Size   设计器的尺寸,这是基于环境主题的设计器样式成员来定义的。
  Foreground   设计器的前景色、宽度和样式。前景信息包含关于用来渲染
  设计器前景的笔的类型的信息。
  成员名   描述
  Border   设计器的边界色、宽度和样式。边界信息用来创建笔,以便为设计器绘制边界。
  Background   背景色、渐变等。该信息是画笔相关信息,它用来绘制设计器的背景。
  ImageSize   保持关于与设计器相关联的图像大小的信息。
  Font   保持关于在设计器上呈现文本的信息。
  PenWidth   用来渲染设计器的笔宽度。这是由环境主题成员设计器样式来定义的。
  Pen和Brush   所有这些主题包含关于与颜色相关联的笔和画笔的存取器。当处置主题时,主题缓冲这些笔和画笔,并毁坏它们。
表B4.活动设计器类的成员
CompositeDesignerTheme(合成设计器主题)类用来抽象诸如Parallel或Sequence等合成设计器的可视化信息。该类保持与合成设计器中的连接器和页眉/页脚的呈现有关的信息。除ActivityDesignerTheme类的成员以外,CompositeDesignerTheme类还包含以下属性:
  成员  描述
  ShowDrop Shadow  指出是否将要在合成设计器周围绘制放置阴影的布尔属性。
  ConnectorStartCapConnectorEndCap  关于用于CompositeDesigners(合成设计器)中的连接器的样式的信息。
  ShowWatermark  指出是否需要示出水印的布尔标志。
  Watermark  将要在CompositeActivityDesigners(合成活动设计器)中被绘制为水印的图像的来源。该属性是串类型,并可以是相对文件路径或资源名字空间。
  垂直和水平连接器大小  用于合成设计器的连接器的大小。
  成员  描述
  ExpandButtonSize  合成设计器的扩展按钮的大小。
  Pen和Brush  用来呈现主题的笔和画笔。
表B5.合成设计器主题类的属性
以下是具有与其相关联的CompositeDesignerTheme的设计器的列表:CompositeActivityDesigner(合成活动设计器)、CompensationHandlerDesigner(补偿处理程序设计器)、ConditionalDesigner(条件设计器)、ConditionedDesigner(有条件的设计器)、EventDrivenDesigner(事件驱动设计器)、EventHandlerDesigner(事件处理程序设计器)、ExceptionHandlerDesigner(异常处理程序设计器)、CompositeScheduleDesigner(合成进度表设计器)、ListenDesigner(监听设计器)、ParallelDesigner(并行设计器)、ScopeDesigner(作用域设计器)、SequenceDesigner(顺序设计器)、GenericTaskDesigner(类属任务设计器)、WhileDesigner(while设计器)。
PreviewDesignerTheme(预览设计器主题)与诸如CAG、ExceptionHandlersDesigner等设计器相关联,它以项条的形式在它们中显示子设计器的集合。该类包含被用来呈现项条以及其中示出这些项的预览窗口的数据。除CompositeDesignerTheme类的成员以外,PreviewDesignerTheme类还包含以下属性:
 成员   描述
 ItemSize   显示在预览条中的项的大小。这是基于环境主题的设计器样式属性来定义的。
 ItemCount   没有项目将要显示在预览条中。这是基于环境主题的设计器样式属性来定义的。
 PreviewWindowSize   预览窗口的大小。这是基于设计器样式枚举来决定的。
 PreviewButtonSize   预览按钮的大小。这是基于设计器样式枚举来决定的。
 BackColor   预览条和预览窗口的背景色。
 Pen和Brush   用来绘制预览设计器主题的笔和画笔。
表B6.PreviewDesignerTheme类的属性
以下是具有与其相关联的PreviewDesignerTheme的设计器的列表:ActivityPreviewDesigner(活动预览设计器)、CAGDesigner(CAG设计器)、EventHandlersDesigner(事件处理程序设计器)和ExceptionHandlersDesigner(异常处理程序设计器)。
AmbientTheme(环境主题)类与工作流视图相关联,并包含不仅关于呈现工作流视图的信息。该类中所包含的信息与应用于所有设计器的全局可视化选项有关,诸如,选择、智能标签、扩展按钮等。除这一点以外,关于诸如网格、工作流背景、水印等绘制物的信息也被包含在该类中。
除DesignerTheme类的成员以外,ServiceRootDesignerTheme(服务根设计器主题)还包含以下属性。
  成员   描述
  ShowSmartTags   在设计表面上示出智能标签。
  ShowScrollIndicators   当滚动可能时,示出自动滚动指示器。
  ShowDropIndicators   示出自动咬接放置指示器。
  WorkflowShadow   绘制工作流3D。
  WorkflowGrayscale   将工作流程绘制成黑白。
  DropHiliteColor   丢弃醒目颜色。
  SelectionColors   选择前景色和图案颜色。
  WorkflowColors   工作流前景、背景和工作空间颜色。
  WorkflowWatermark   要在工作流上示出的水印。
  Font   要用来呈现文本的字体。
  TextQuality   文本质量AniAlias与对正常。
  DesignerStyle   设计器样式,小/中/大。该属性定义笔厚度、以及要呈现的元素的不同大小。
  DrawRounded   为设计器边界绘制圆形边。
  ContentAlignment   设计器中的文本、图像内容对齐。
  Contents   要在设计器中呈现的文本、图像内容。
  成员   描述
  ShowDesignerBorder   显示/隐藏设计器边界。
  Margin   页边距大小,这基于设计器样式。
  SelectionSize   基于设计器样式的选择大小。
  SmartTagSize   基于设计器样式的智能标签大小。
 ScrollIndicatorSize   基于设计器样式的滚动指示器大小。
 DropIndicatorSize   基于设计器样式的放置指示器尺寸。
 Pen、Brush和Image   用来呈现工作流的所有笔、画笔和图像。
表B7.ServiceRootDesignerTheme的属性
一旦该主题与设计器相关联,当设计器正在执行布局、呈现或其中需要这些主题参数的任何其它的活动时,设计器就使用它。GetDesignerTheme(获取设计器主题)方法将设计器类型作为参数。当被调用时,该方法会导致Theme类返回与该设计器相关联的DesignerTheme导出的主题类。然后,设计器可以访问DesignerTheme导出类中的各种参数,并可以获得与DesignerTheme类相关联的资源,来呈现该设计器。主题类负责管理当前设计器主题、与该主题相关联的资源,并且,当用户更改主题时,也激发事件。
Theme类包含用于管理DesignerThemes的基础结构。以下是Theme类的功能。
-对DesignerThemes进行序列化/解序列化。
-在序列化过程期间,报告错误。
-当主题变化时,激发事件。
-管理与不同的设计器相关联的DesignerTheme类。
-管理主题资源,并担当为绘制而创建的对象的高速缓存。
-执行所包含的DesignerThemes所请求的资源解析。
主题类展示以下属性,以便在设计器中启用主题支持。
Figure G2005100990939D00471
Figure G2005100990939D00481
表B8.Theme类的属性
主题类保持用来呈现活动设计器的所有设计器主题,以允许全局地维护资源和主题信息。跨越具有相同过程的不同设计器实例来共享所有这些资源。这防止资源池的耗尽,并提高性能,因为设计器不必再创建这些对象。
主题类也展示静态ThemeChanged事件。所有这些工作流视图都监听该事件。当用户更改当前主题时,主题类激发所有工作流视图所监听的ThemeChanged事件。然后,工作流视图通过调用IActivityDesigner.OnThemeChaanged方法,来传播自身和它们所包含的设计器。每个设计器可以覆盖这个方法,并可以响应于主题变化事件来执行自定义动作。
通过编写描述参数的特定主题,用户可以使设计表面的外观发生变体,每个单独的设计器应该遵循这些参数,以便呈现其自身.用户通过编写主题文件来完成这一点.主题文件是包含单独的设计器主题部分的XML文件,这些设计器主题部分为每个设计器描述主题参数.用户手动地创建主题文件,或者,他/她可以使用默认UI来创建主题文件.
Figure G2005100990939D00482
Figure G2005100990939D00491
表B9.主题文件格式的构造
手工编辑XML文件是用于创建主题的一个方法。用于创建主题的另一个方法是使用所提供的UI。当在视件工作室内使用设计器时,在工具->选项->工作流设计器->主题之下显示用于定制主题的UI。主题UI是可重新主宿的。如果在视件工作室以外主宿配合引擎设计器,那么,用户可以编写其自己的对话框,来主宿主题UI。为了在视件工作室以外重新组塑主题UI,用户可以使用ThemePage(主题页)类。
主题UI允许用多个方法来创建主题.用户可以选择现有的主题,或者可以选择现有的主题并修改它们,以创建新的主题.一旦用户修改主题,他/她就可以通过选择保存按钮来将主题保存为不同的主题文件.主题UI在两种不同的模式中操作;属性配置和设计器预览.用户可以通过使用预览模式按钮而在两者之间翻转.
在属性配置模式中,用户可以选择个别的设计器。当从下拉列表中选择设计器时,在属性浏览器中显示与该设计器关联的各个属性。用户可翻转这些属性来修改设计器的外观。通过翻转到设计器预览模式,可以查看修改单独的属性的效果。在设计器预览模式中,在对话框内主存设计表面。在存储器中创建临时的活动树,以显示主题变化对单独的设计器的影响。
自动滚动
自动滚动特征允许用户迅速导航到工作流的任何一部分,同时执行拖放操作或完成自动扫视。通过添加自动滚动指示器,来增强自动滚动特征。自动滚动指示器是使用户能够理解可以发生自动滚动的可能的方向的视觉提示。自动滚动指示器特征改善了设计器的可用性。
工作流视图支持被称作ShowAutoScrollIndicators(显示自动滚动指示器)的属性,该属性返回布尔值,以指出何时需要显示自动滚动指示器。工作流视图包含位图,以指出可能执行滚动的方向。在自动扫视或拖放事件的情况中,工作流请求其客户机区域的绘画。响应于绘画请求,它通过覆盖绘制逻辑来按半透明方式绘制自动滚动指示器。
用户可能经常具有不在视见区内拟合的工作流(在任何时间点,工作流视图的一部分对用户是可见的)。在这一情况下,工作流视图具有相关联的水平滚动条和垂直滚动条。这是普通的情形,其中,用户试图从工具箱中拖曳新的对象,并想要放在工作流的不可见的一部分上,或者想要在工作流内对活动重新排序。对于小型工作流,这是可能的,而无须进行滚动;但对于较大的工作流,当用户想要在视见区以外放下对象时,需要滚动设计器。当用户拖曳鼠标并在自动滚动区上悬停时,在工作流视图中实现的自动滚动特征使得滚动工作流称为可能。以下是示出如何完成这一点的伪代码。
-对于每个拖放消息
-如果该消息是拖曳悬停,那么
-如果工作流视图在视见区内拟合
-通过沿边缘采用10%的工作流区域来计算自动滚动区
-如果鼠标动作中的坐标落到自动滚动区和工作流视图滚动中
-触发自动滚动定时器
-基于自动滚动区内的鼠标位置来递增或递减定时器中的滚动位置
-否则
-停止自动滚动定时器
拖放连接器装饰
该特征改善拖放操作的可用性.当用户开始拖曳组件时,设计器自动区别允许放下所拖曳的组件的连接器.一旦光标足够接近连接器,所拖曳的图像就咬接到连接器.工作流视图包含用于在活动上添加装饰的装饰服务.在完成所有活动的绘制之后,装饰服务使活动能够绘制常用的UI图示符.这保证其它活动没有在任何这图示符上绘制,从而为图示符给予特殊处理.当前,活动支持各种类型的图示符,包括不充分的配置、选择、可选择连接器、断点等.装饰服务类可以被视作工作流试图的私有助手类.当图示符变为运行时,装饰服务负责按不同的方式来表示图示符.图示符可以基于用户在图示符上所执行的鼠标动作而变为运行,这些包括鼠标悬停或鼠标点击.运行的图示符可以基于它是否运行来采取不同的动作;这些包括:示出下拉菜单或触发到属性浏览器的导航、触发确认例程以在活动上示出智能标签动作图示符等等.除在活动上添加图示符以外,装饰服务也通过使用IPropertyValueUIService(属性值UI服务接口)在属性浏览器上添加图示符.装饰服务负责将与图示符相关联的设计器动作添加到视件工作室IDE的任务列表.
一旦被创建,装饰服务就开始监听不同的事件;基于这些事件,活动设计器可能会感到需要表示图示符。这些事件包括:
ICmponentChangeService(组件改变改变服务接口)
ComponentChanged(组件改变):当组件属性变化时被触发。
ComponentAdded(组件添加):当添加新的组件时被触发。
ComponentRemoved(组件移除):当移除组件时被触发。
ISelectionService(选择服务接口)
SelectionChanged(选择改变):当设计器中的选择变化时被激发。
IPopertyValueUIService(属性值UI服务接口)
AddPropertyValueUIHandler(添加属性值UI处理程序):当属性浏览器中有选择改变或属性刷新时被激发。
ITypeProvider(类型提供者接口)
TypesChanged(类型改变):当从类型系统中添加/移除新的类型时被激发。
只要触发以上事件中的一个,装饰服务就等待下一个空闲消息。在空闲消息中,装饰服务请求活动设计器更新与图示符相关联的设计器动作,并使可查看设计器无效。设计器动作请求触发后台确认。在获得所更新的设计器动作之后,装饰服务将与所选择的设计器相关联的动作放入任务列表,并且也通过调用IPropertyValueUIService上的NotifyPropertyValueUIItemsChanged(通知属性值UI项改变)函数来向属性浏览器通知变化,该函数进而示出属性需要属性浏览器中的属性上的config.Icon。当点击该图标时,触发与该属性项关联的设计器动作。然后,装饰服务通过所有设计器,获得其图形,并在设计器之上绘制图示符。如果在任何图示符之上发生鼠标悬停或点击,那么,装饰服务激活图示符,并示出设计器动作。
由活动设计器返回的所有图示符从被称作DesignerGlyph(设计器图示符)的抽象类中导出。该类定义了与这些图示符中的每一个有关的行为。以下是关于DesignerGlyph类的类定义。以下的表格解释DesignerGlyph类中的每个方法及其运用。
Figure G2005100990939D00521
表B10.图示符方法
图示符可具有或不具有与其相关联的DesignerActions(设计器动作)。设计器动作是当用户激活图示符时需要执行的用户动作集。DesignerAction类用来指出用户动作。从用来显示菜单项的、被称作DesignerVerb(设计器动词)的类中导出DesignerAction类。DesignerAction也被装饰服务用来添加任务项。
以下是设计器当前出于不同的目的而使用的不同类型的图示符。
Figure G2005100990939D00522
Figure G2005100990939D00531
表B11.不同类型的图示符
通过装饰服务来绘制示出可以接受当前拖曳的对象的连接器的图标。IDesignerService展示属性“IComponent[]DraggedComponents”,该属性允许所有活动设计器访问所拖曳的对象,以便依照所有当前连接器来测试它们(一些设计器可以允许仅仅落在其连接器的子集上)。当通过公用覆盖DesignerGlyph[]Glyphs方法来向活动要求所有装饰图示符时,它:
-通过访问IDesignerService上的DraggedComponents(拖曳的组件)属性检验设计表面当前是否正处于拖放操作中
-对于每个连接器:
-调用CanInsertActivities()以了解连接器是否将会允许放下操作
-通过DesignerHelpers.IsContextReadOnly()来检验设计器是否不在只读地点中(调用进度表)
-为该连接器创建ConnectorDragDropGlyph(连接器拖放图示符)的实例
当具有拖曳的图像的光标在其中启用放下的区域上悬停时,所拖曳的图像咬接到连接器的中部。
-OnDragEnter()和OnDragOver()事件获得WorkflowDragEventArgs(工作流拖曳时间自变量)的实例,作为第一个参数
-WorkflowDragEventArgs具有属性public Point SnapInPoint{},它允许设计器指出它们愿意让所拖曳的设计器咬接到给定点
-WorkflowView控制器检验任何设计器是否声明过所拖曳的图像,并且
-移除图像的半透明模式
-将图像放置在设计器请求的位置中
-SequentialActivityDesigner(顺序活动设计器)覆盖OnDragEnter()和
OnDragOver()事件,以指出当前放下目标的中部(如果它拥有它的话)
扫视/缩放工具
本发明包括以下工具:放大/缩小”(提高/降低缩放等级,并围绕点击的点使视图居中)、以及扫视(是当被点击时“抓住”设计表面并允许四处拖曳它的手)。由于每个工具完全覆盖鼠标和键盘事件的处理,因此,策略设计图案创建处理所有这些事件的可替换IDesignerMessageFilter(设计器消息过滤器接口)对象。接口IDesignerMessageFilter被定义如下:
internal interface IDesignerMessageFilter
{
     Cursor Cursor{get;}
     CommandID Command{get;}
     void OnContextMenu(Point location);
     void OnMouseDown(MouseEventArgs eventArgs);
     void OnMouseMove(MouseEventArgs eventArgs);
     void OnMouseUp(MouseEventArgs eventArgs);
     void OnMouseDoubleClick(MouseEventArgs eventArgs);
     void OnMouseEnter(EventArgs e,Point mousePosition);
     void OnMouseHover(EventArgs e,Point mousePosition);
     void OnMouseLeave(EventArgs e);
     void OnMouseCaptureChanged(EventArgs e);
     void OnMouseWheel(MouseEventArgs eventArgs,Keys modifierKeys);
     void OnDragEnter(DragEventArgs drgevent);
     void OnDragOver(DragEventArgs drgevent);
     void OnDragLeave(EventArgs e);
     void OnDragDrop(DragEventArgs drgevent);
     void OnGiveFeedback(GiveFeedbackEventArgs gfbevent);
     void OnQueryContinueDrag(QueryContinueDragEventArgs qcdevent);
     void OnKeyDown(KeyEventArgseventArgs);
     void OnKeyUp(KeyEventArgs eventArgs);
}
这些函数被分成鼠标事件处理程序、键盘事件处理程序、以及基于消息过滤器及其状态来更改工作流视图光标形状的UpdateCursor()函数。
工作流视图本身实现设计器消息过滤器的默认行为。存在两个消息过滤器,用于缩放功能性(对每一放大和缩小有一个,用户可以通过按压Shift键而在放大/缩小模式之间转换)和扫视功能。
XomlDocumentRootView
XomlWindowPane(XOML窗口窗格)所创建的控件是XomlDocumentRootView(XOML文档根视图)。该控件具有垂直滚动条和水平滚动条。此外,在水平滚动条的左侧和垂直滚动条的底部有选项卡按钮。水平滚动条上的选项卡按钮用来显示多个视图的主宿。在第一个选项卡中,它主宿由surface.GetView()返回的视图,它是工作流视图;继续到第二个选项卡,它主宿微软Xml编辑器。一更改水平滚动条中的选项卡,它就激发适当的视图更改事件。它使用IviewCreationService(视图创建服务接口)来创建视图。通过与不同的视图创建服务挂钩,可以添加更多的视图。以下是IViewCreationService的接口定义:
public interface IViewCreationS ervice
{
//该属性给出视图总数。基于该属性的值,XomlDocumentRootView对象
//显示水平滚动条中的选项卡
uint ViewCount{get;}
//该方法基于索引创建视图。
IDesignerView CreateView(IRootDesignerView parentView,int index);
//该属性用于提供与相应的索引相关联的图像。
Bitmap GetImage(int index);
//该属性提供与相应索引上的视图相关联的文本。当用户在水平滚动条中的
//选项卡上方悬停鼠标时,对工具提示示出该文本。
string GetText(int index);
}
该服务的实现完成以下:
public interface IViewCreationService
{
//该属性仅返回两个视图。一个是工作流视图,另一个是作为xoml文件的文本
//的xoml视图
uint ViewCount{get;}
//该方法从索引0的DesignSurface获得工作流视图,如果存在反序列化错误,则
//作为对工作流视图的替代,它返回错误视图。对于索引1,它返回Xoml视图。
IDesignerView CreateView(IRootDesignerView parentView,int index);
//它提供与工作流视图和标记视图相关联的图标。
Bitmap GetImage(int index);
//该属性提供与相应索引上的视图相关联的文本。当用户在水平滚动条中的
//选项卡上方悬停鼠标时,对工具提示示出该文本。
string GetText(int index);
}
以该方式创建的每一视图必须从IDesignerView(设计器视图接口)继承。以下是IDesignerView的接口定义:
public interface IDesignerView:IServiceProvider
{
//获取或设置根视图对象
IRootDesignerView RootView{get;set;}
//这在用户按下tab时调用,使视图变为运行
void Activate();
//当用户按下tab并切换到其它视图时,则调用Deactivate()到前一视图
void Deactivate();
//这是在视图之间进行区分
bool IsDesigner{get;}
}
查看作用域
这是当被添加到设计器时作用域的默认视图。通过选择该选项,可以将开发者带回到该视图。
查看异常
通过选择该选项,可以在原地更改UI,以显示与作用域相关联的异常。当事务类型是长期运行或无时,启用该选项。换言之,当事务类型是原子时,该菜单不可用。
查看事件
通过选择该选项,可以在原地更改UI,以显示与作用域相关联的事件处理程序。
查看补偿
通过选择该选项,可以在原地更改UI,以显示用作用域来定义的补偿。当事务类型属性被设置为长期运行或原子时,启用该选项。
其它UI特征
为了使工作流在视觉上更吸引人,可以设置视觉深度,它向显示在工作流中的活动中的每一个添加阴影。虽然这增加了视觉吸引力,但是,它稍微减缓了用户交互,因为必须为工作流中的所有活动绘制阴影。视觉深度可以从0到4。基于这个数字来决定阴影深度。当设置视觉深度时,每次绘制工作流时,都拍摄其存储器快照,并将灰度级变换应用于该位图。然后,该灰度级位图在用户使用视觉深度来指定的偏移量处呈现到图形对象上。然后,使存储器快照的背景变得透明,并在灰度级位图之上复制它。这样,为工作流提供了3D效果。
工作流视图支持不同的布局,以便可以向用户呈现工作流的不同表示.该特征也用来示出工作流的打印预览.用户可以在打印预览模式中编辑工作流、设置页边距、添加页眉/页脚.这允许用户清楚地知道将如何打印工作流.工作流视图通过被称作IWorkflowLayout(工作流布局接口)的接口来主宿多个布局.该接口使工作流视图能获得在绘制不同的布局时使用的信息,并且也使布局能够执行特定操作,例如,坐标变换、缩放和绘制.
以下是被实现来创建新布局的各个属性和方法。
Figure G2005100990939D00571
Figure G2005100990939D00581
表B12.用于布局的属性和方法
设计器支持默认布局和打印预览布局。默认布局是工作流的简单表示。在该布局中,工作流在视见区中居中,布局决不改变所绘制的工作流的表示。通过在页面之上绘制工作流,打印预览布局显著地改变工作流的表示。打印预览布局从打印文档和页面设置数据中获得数据,以便计算页面大小、缩放和最大范围,并呈现页眉/页脚。打印预览布局准确地描绘将如何在打印机上打印工作流。在这个模式中,用户可以设置页边距、了解将用来显示页眉/页脚的方法、可以在必要时缩放工作流并对齐它。打印预览布局也使用户能够在预览的同时修改工作流。打印预览布局将工作流位图的各个拼接创建成多个部分,以便将它们呈现为不同的页面。
当用户开始在工作流视图上拖曳对象时,示出拖放指示器。拖放指示器向用户可视地示出,通过拖放操作,哪个对象当前正被高速缓存为数据对象。当工作流视图接收拖曳进入事件时,它试图对所拖曳的组件进行反序列化和高速缓存。然后,通过创建临时位图并在其上绘制该组件的图标和描述,该视图以存储器位图的形式创建所拖曳的组件的可视表示。然后,连同鼠标光标来绘制该存储器位图,以指出哪个对象正被拖曳。当拖曳操作结束时,工作流视图毁坏所高速缓存的位图和组件。
工作流视图支持两种类型的坐标系统。调用物理坐标系统(也由Winforms控件使用)的客户机坐标系统和逻辑坐标系统。在客户机坐标系统中,控件的左上点是0,0,并且,X和Y坐标垂直地和水平地增加;只有当滚动条不存在时,这个规定才是真实的。当滚动条存在时,Windows控件的左上部(即0,0)是滚动条位置。客户机坐标系统也受到缩放因子的影响。在逻辑坐标系统中,每个对象总是从0,0映射到m,n,并且,坐标不受到滚动位置或缩放因子的影响。由工作流中所表示的所有活动存储的坐标是逻辑坐标的形式。这样,活动不受到滚动位置或缩放因子的影响。
工作流视图具有它用来在逻辑坐标与客户机坐标之间变换坐标的以下函数。当转换点时,本发明考虑缩放百分比和滚动位置;但当转换尺寸时,本发明只考虑缩放百分比。
逻辑-物理变换:
Point TransformToPhysicalCoOrd(Point point,bool mapToLayout)
Size TransformToPhysicalSize(Size size)
Rectangle TransformToPhysicalViewPort(Rectangle logicalViewPort)
物理-逻辑变换:
Point TransformToLogicalCoOrd(Point point,bool mapToLayout)
Size TransformToLogicalSize(Size size)
Rectangle TransformToLogicalViewPort(Rectangle physicalViewPort)
一旦被创建,工作流视图就将被称作IDesignerService的服务添加到服务容器。活动设计器和其它宿主查询IDesignerService,以便与工作流视图和其下的窗口控件进行通信。以下是IDesignerService的定义。该接口所支持的属性、方法和事件被分成两个主要类别:设计表面支持的UI特征,即Zoom、VisualDepth、Printing等;以及Winforms控件特征,它们被展示以便适当地呈现工作流。
Figure G2005100990939D00591
Figure G2005100990939D00601
表B13.设计器服务属性
工作流视图模拟用于工作流中的每个活动设计器的虚拟窗口控件的行为.该行为意味着,即使活动设计器不是实际的窗口控件,工作流视图也用与Windows控件完全相同的方法来将窗口消息转发给它们.对于这一点,在每个鼠标消息中,工作流视图使用集中测试来找出在鼠标光标之下的设计器,并对它进行缓冲,然后适当地转发进入、悬停、移动和离开消息.为了保持哪个设计器在鼠标光标之下的状态和其它重要的鼠标信息,工作流视图使用被称作MouseEventData(鼠标事件数据)的数据结构.MouseEventData结构用来将消息适当地路由到活动设计器.
DesignerData(设计器数据)数据结构由工作流视图用来将与下面的窗口控件有关的信息传达给活动设计器和布局。该信息在测量字符串大小和计算设计器大小时非常重要。ViewportData(视见区数据)数据结构由工作流视图用来将与视见区相关联的信息传达给运行的布局。信息包括缩放、转换等。HittestData(集中测试数据)数据结构由工作流视图用来从活动设计器中取出集中测试相关信息。集中测试数据指出,活动设计器的哪个部分被鼠标击中。RenderingHint(呈现提示)数据结构由设计器用来呈现活动设计器。呈现提示包括可以用来绘制活动设计器的颜色、字体、图标和文本相关绘图信息。
示例性算法
用于绘图的示例性算法包括以下内容。
-通过在存储器器中创建位图在存储器设备上下文上绘画工作流
-填充位图背景
-通过调用根活动设计器的绘制来绘制所有设计器
-根活动设计器递归地调用它以内的所有设计器上的绘制
-在被绘制之前所有设计器检验它们是否在可见区域内
-通过调用装饰服务的绘制来绘制装饰
-如果用户在视见区上拖曳鼠标,则绘制拖曳矩形
-If用户设置了视觉深度,则,
-按视觉深度偏移量在原始设备上下文上绘制位图
-使该位图透明
-在最上层绘制位图,而无需偏移量
-Endif
-调用运行布局上的绘制
-对于打印预览,通过拼接主要位图以在此处绘制页面
-对于默认值,直接绘制主要位图
-If用户处于拖放模式,则,
-绘制正拖曳的组件的快照
-Endif
-If示出放大镜,则,
-绘制放大镜边界
-将放大区域映射到被放大的位图上
-将被放大的位图绘制到放大区域内
-Endif
用于布局的示例性算法包括以下内容。
-调用根设计器上的OnLayoutSize
-根设计器和其它合成设计器调用子设计器上的OnLayoutSize
-基于子布局,合成设计器计算其大小
-调用根设计器上的OnLayoutPosition
-根设计器和其它合成设计器调用子设计器上的OnLayoutPosition
-设计器基于其父设计器的位置来设置位置
-调用运行布局的更新
-布局更新它们中呈现布局所需要的数据结构
-更新根设计器位置,以便按布局所请求的来适当地对齐根设计器
-基于使用根设计器来计算范围的运行布局范围,来更新滚动条的滚动范围用于事件转发的示例性算法包括以下内容。
-For所有鼠标事件
-检验其上发生过该事件的设计器
-使用IActivityDesigner接口将离开事件转发到较早的设计器
-使用IActivityDesigner接口将进入/悬停事件转发到其上发生该事件的当前设计器
-缓冲当前设计器,并等待下一个事件
-Endfor
用于删除的示例性算法包括以下内容。
-通过使用ISelectionService(选择服务接口)来获得当前选择的设计器
-获得与设计器相关联的所有顶层活动。这是因为用户可以执行多次选择并可以选择父设计器和子设计器并按压删除
-For所有顶层活动
-获得每个顶层活动的父设计器
-如果具有子活动的父设计器上的CanRemoveActivity(能够移除活动)返回真
-调用具有子活动的父设计器上的RemoveActivity(移除活动)
-Endif
-Endfor
-获得被移除的最后一项活动的父设计器并选择它。
工作流设计器键盘和命令路由
设计器将服务IMenuCommandService(菜单命令服务接口)用于命令路由。实现该服务是宿主的责任。类型CommanSet(命令集)包含支持的命令的平面列表(CommandSetItem(命令集项-从System.ComponentModel.Design.MenuCommand中导出)。每个命令包含CommandID(命令ID)(由组ID和项ID组成)、用于执行该命令的处理程序、以及用于查询其状态(被启用、可见等)的处理程序;一旦被创建,就使用IMenuCommandService.AddCommand()来将命令注入服务。通过主宿应用程序(VS、Zamm)或者在某些情况中通过工作流视图,向CommandID解释UI提示(键盘、鼠标操作、菜单命令)。例如:当选择顶部菜单项时,由宿主来调用适当的命令。但是,工作流视图在被聚焦时处理鼠标操作和键盘。此外,作为与单独的设计器相关联的特殊命令的DesignerVerbs(设计器动词)在活动设计器中声明,并由IMenuCommandService自动收集。
 成员  运用
 CTor  构建命令列表,并将命令添加到IMenuCommandService。
 OnStatusXXX方法  评估命令的状态每个处理程序是自含式的,并使用设计器服务(比如ISelectionService和IComponentChangeService)来执行其任务。
 OnMenuXXX方法  执行命令。
 每个处理程序是自含式的,并使用设计器服务(比如ISelectionService)来执行其任务。
表B14.CommandSet类
  成员   运用
  CTor   高速缓存命令状态的处理程序。调用基本实现
  UpdateStatus()   调用状态处理程序来评估命令的状态。当更改选择时,由CommandSet调用。
表B15.CommandSetItem类
只要更改选择(通过ISelectionService来跟踪),就评估命令状态。为了始终获得当前状态,使用ImmidiateCommandSetItem(立即命令集项)(从CommandSetItem中导出),而不是CommandSetItem(命令集项)。
打印
IDesignerService接口上的类WorkflowPrintDocument(工作流打印文档)和公用属性PrintDocument(打印文档)支持打印。WorkflowPrintDocument本身保持对通过其来创建它的工作流视图的引用,以执行实际的绘制。由于打印机的分辨率不同于屏幕分辨率,因此,在开始实际的打印之前,打印文档使用打印机图形来重新布局工作流、打印所有页面、然后要求工作流视图再次使用屏幕分辨率来执行布局。
活动设计器接口
IActivityDesigner接口由需要参与工作流的所有活动设计器来实现.这是设计器用来与其它设计器和工作流视图交谈的协议.工作流视图寻找IActivityDesigner接口,以便向设计器呈现、布局或转发事件.通过支持IActivityDesigner接口,使所有设计器能够表现得象窗口控件,即使设计器实际上不是从窗口控件中导出的.该接口也使工作流视图和其它设计器基础结构(比如装饰服务、菜单命令服务)能够与设计器交换信息.从IActivityDesigner接口中导出的设计器可能不具有层级;为了具有层级,设计器需要实现ICompositeActivityDesigner接口.以下是IActivityDesigner的定义,具有关于属性和方法的细节.
Figure G2005100990939D00651
Figure G2005100990939D00661
表B16.IActivity设计器的属性和方法
ICompositeActivityDesigner:
ICompositeActivityDesigner由可在其之下具有层级的设计器来实现;即,它们可具有子设计器。合成设计器负责保持自身和所有其子设计器。通过使用ICompositeActivityDesigner接口,合成设计器分发关于其子设计器的信息、提供用于添加和移除子设计器的功能、并启用键盘导航。以下是ICompositeActivityDesigner的定义,具有关于属性和方法的细节。
Figure G2005100990939D00671
表B17.ICompositeActivityDesigner的属性和方法
简单设计器
ActivityDesigner(活动设计器)类表示设计器最简单的实现.与工作流中的活动相关联的所有设计器是从ActivityDesigner中导出的.ActivityDesigner类从IActivityDesigner接口继承,并且为该接口提供默认的实现.工作流视图使用IActivityDesigner接口与设计器谈话.ActivityDesigner类一般由需要用于设计器绘制的非常轻量的实现的设计器继承.这些设计器没有任何子对象或者分层结构.由活动设计器提供的特征包括基于布局逻辑、呈现支持(例如,通过绘制图标、描述、边框、内部和背景)、呈现帮助文本、返回所有设计器需要的默认字形、通过DesignerVerb(设计器动词)显示上下文菜单、过滤设计时专用属性、默认事件生成、默认击中测试、触发确认、显示工具提示、以及参加键盘导航.
public abstract class ActivityDesigner:ComponentDesigner,IActivityDesigner
System.Obiect
System.ComponentModel.Design.ComponentDesigner
  System.Workflow.ComponentModel.Design.ActivityDesigner
    System.Workflow.ComponentModel.Design.CompositeActivityDesigner
    System.Workflow.ComponentModel.Design.CodeDesigner
    System.Workflow.ComponentModel.Design.CompensateDesigner
    System.Workflow.ComponentModel.Design.DelayDesigner
    System.Workflow.ComponentModel.Design.FaultDesigner
    System.Workflow.ComponentModel.Design.CompositeScheduleDesigner
    System.Workflow.ComponentModel.Design.Invoke WebServiceDesigner
    System.Workflow.ComponentModel.Design.BaseReceiveDesigner
    System.Workflow.ComponentModel.Design.BaseSendDesigner
    System.Workflow.ComponentModel.Design.GenericTaskDesigner
    System.Workflow.ComponentModel.Design.STSTaskDesigner
合成设计器
CompositeActivityDesigner是具有分层结构的设计器(例如,在它们之下具有子对象)。CompositeActivityDesigner负责管理它自己及其子对象的所有方面。它也负责与其子对象交互以转发事件。只要有修改CompositeActivityDesigner所包含的活动设计器集合的请求;它就传递一个上下文(ContextBase(上下文基)),该上下文指定一个位置,需要将活动从这个位置移除。ContextBase可由每个CompositeActivityDesigner导出类专门化,以指定专用于它们的上下文。它的例子是SequentialActivityDesigner(顺序活动设计器),通过从ContextBase导出一个称为ConnectorContext(连接器上下文)的类来专门化ContextBase。CompositeActivityDesigner从ICompositeActivityDesigner接口导出,并且为它提供默认的实现。由CompositeActivityDesigner提供的特征包括展开层折叠设计器、拖放指示符、布局本身和子对象、绘制本身和子对象、子对象的击中测试、以及从分层结构插入移除活动。
public abstract class CompositeActivityDesigner:ActivityDesigner,
ICompositeActivityDesigner
System.Object
System.ComponentModel.Design.ComponentDesigner
  System.Workflow.ComponentModel.Design.ActivityDesigner
    System.Workflow.ComponentModel.Design.CompositeActivityDesigner
      System.Workflow.ComponentModel.Design.SequentialActivityDesigner
      System.Workflow.ComponentModel.Design.ParallelActivityDesigner
      System.Workflow.ComponentModel.Design.ConstrainedActivityDesigner
CompositeActivityDesigner是抽象类并且不能被实例化,因为它不能在其自身上存在。顺序、并行和CA设计器都是这个类的专门化。
SequentialActivityDseigner(顺序活动设计器)
SequentialActivityDesigner类表示在其下具有子对象且所有子对象是顺序排序的所有设计器。子对象通过称为连接器的链接来连接,连接器还用于修改子对象的顺序。SequentialActivityDesigner类是CompositeActivityDesigner的专门化,并且提供下列特征集:连接器开始和结束位图绘制、顺序地布局所有子对象并且更新链接它们的所有连接器、在子对象之间绘制连接器、在拖放发生时高亮放置区域、击中测试连接器、使用上下箭头键的顺序键盘导航、以及为连接器返回字形。
internal abstract class SequentialActivityDesigner:CompositeActiviryDesigner
System.Object
System.ComponentModel.Design.ComponentDesigner
  System.Workflow.ComponentModel.Design.ActivityDesigner
    System.Workflow.ComponentModel.Design.CompositeActivityDesigner
    System.Workflow.ComponentModel.Design.SequentialActivityDesigner
      System.Workflow.........Design.ActivityPreviewDesigner
      System.Workflow.........Design.CompensationHandlerDesigner
      System.Workflow.........Design.ConditionedDesigner
System.Workflow.........Design.EventHandlerDesigner
System.Workflow.........Design.ExceptionHandlerDesigner
System.Workflow.........Design.ScopeDesigner
System.Workflow.........Design.SequenceDesigner
System.Workflow.........Design.WhileDesigner
所有上述设计器是SequentialActivityDesigner的专门化;它们全部主要在绘制方面不同。所有这些设计器具有一种特殊的方法以在工作流上表示它们自己,但它们全部消除了由SequentialActivityDesigner提供的共同功能。
ParallelActivityDesigner(并行活动设计器)
ParallelActivityDesigner是CompositeActivityDesigner的另一个专门化,它包含多个SequentialActivityDesigner。这些SequentialActivityDesigner的每一个是并行设计器中的一个分支。并行设计器提供下列专门化的特征:布局多个顺序设计器、拖放用于添加附加的分支的指示符、使左右箭头键在并行分支之间遍历的键盘导航、以及绘制连接器以链接多个并行分支。
internal abstract class ParallelActivityDesigner:CompositeActivityDesigner\
System.Object
System.ComponentModel.Design.ComponentDesigner
  System.Workflow.ComponentModel.Design.ActivityDesigner
  System.Workflow.ComponentModel.Design.CompositeActivityDesigner
     System.Workflow.ComponentModel.Design.ParallelActivityDesigner
         System.Workflow.........ConditionalDesigner
         System.Workflow.........ListenDesigner
         System.Workflow.........ParallelDesigner
Conditional、Listen和Parrallel设计器是ParallelActivityDesigner的专门化,具有与它们相关联的附加绘制逻辑。
ActivityPreviewDesigner(活动预览设计器)
ActivityPreviewDesigner是顺序设计器,但具有以集合袋(collection bag)形式显示多个设计器的集合的能力。ActivityPreviewDesigner使用幻灯片的比喻来显示这个集合。当一个特定的设计器被选中时,其表示在活动预览设计器所主宿的预览窗口中显示。ActivityPreviewDesigner具有两种模式:编辑模式和预览模式。在预览模式中,用户不能修改已选中的设计器。该模式使用户能够看见设计器的整个表示而不必滚动。编辑模式允许设计器被修改。由ActivityPreviewDesigner提供的特征包括:预览条带以显示活动的集合、预览当前选中的活动、以及编辑所选中的设计器的能力。
internal abstract class ActivityPreviewDesigner:SequentialActivityDesigner
System.Object  
System.ComponentModel.Design.ComponentDesigner
  System.Workflow.ComponentModel.Design.ActivityDesigner
  System.Workflow.ComponentModel.Design.CompositeActivityDesigner
     System.Workflow.ComponentModel.Design.SequentialActivityDesigner
         System.Workflow.........Design.ActivityPreviewDesigner
           System.Workflow.........Design.GenericCollectionDesigner
           System.Workflow.........Design.CAGDesigner
Scope(作用域)和Service(服务)设计器
Scope和Service设计器是特殊的设计器。其每一个可具有与它们相关联的异常、事件和补偿。Scope和Service在用户代码文件中还具有与它们相关联的类,并且用户具有将变量限制在这些类中的能力。Scope和Service设计器被示出为不同与其它设计器,并且显示水印和通过绘制阴影来高亮它们。
Scope和Service设计器具有改变视图的能力,因此用户可翻转视图来揭示与它们相关联的异常、事件和补偿。当用户在Service或Scope图标上悬停时,出现一个下拉选项板,它使用户能够选取异常、事件或补偿视图之一。设计器视图随后被翻转,并且显示包含在所选中的视图中的活动。用户可在任何时间点只查看属于任何一个视图的活动。视图的翻转是通过过滤包含在Scope或者Schedule中的子活动来完成的。Scope和Schedule可具有ExceptionHandler、EventHandlers和Compensate中的最多一个作为它的子对象。基于用户观看的视图;设计器过滤掉这些子对象,以只显示可出现在所选中的视图中的子活动;因而实现支持多视图的效果。
Schedule设计器通常被设置为工作流视图中的根设计器。
internal class ScopeDesigner:SequentialActivity Designer
internal class ServiceDesigner:ScopeDesigner
System.Object
System.ComponentModel.Design.ComponentDesigner
  System.Workflow.ComponentModel.Design.ActivityDesigner
    System.Workflow.ComponentModel.Design.CompositeActivityDesigner
        System.Workflow.ComponentModel.Design.SequentialActivityDesigner
            System.Workflow.........Design.ScopeDesigner
               System.Workflow.........Design.ServiceDesigner
ServiceRootDesigner(服务根设计器)
ServiceRootDesigner与由设计器宿主所包含的根组件相关联。它负责创建随后要主宿在设计器窗口窗格中的工作流视图。ServiceRootDesigner还支持IToolBoxUser(工具箱用户接口)接口,它给予通过在工具箱项上双击来添加工具箱项的能力。
Design-time Descriptors(设计时描述符)
创作对象模型中的每个活动具有描述其在设计时期间行为的元数据。这包括关联活动(设计器)以及属性网格行为(命名、描述、过滤、属性编辑器等)。类型\属性\事件设计时行为是使用零个或多个下列元属性来描述的:
-SRCategoryAttribute(SR类别元属性)-配合引擎元属性。提供本地化的类别名。
-SRDescriptionAttribute(SR描述元属性)-配合引擎元属性。提供本地化的描述。
-EditorAttribute(编辑器元属性)-提供UITypeEditor(UI类型编辑器)
-TypeConverter(类型转换器)-提供过滤、值列表以及类型之间的转换。
-BrowsableAtrribute(可浏览属性)-在设计时显示/隐藏成员。
SRCategory(SR类别)和SRDescription(SR描述)只是资源名字与串之间的映射。大多数编辑器(UITypeEditor)是用于处理对话框(像CorrelationSetsDialog(相关性设置对话框))或者下拉列表的管理器。PropertyDescriptor(属性描述符)处理设计时的属性,并且由默认的TypeConverter、自定义的TypeConverter(它是如上被声明为元属性的)或者TypeDescriptor(类型描述符)中任一个来向其传递属性。
UI类型编辑器为配合引擎组件模型中的各属性提供编辑器。属性浏览器使用它们显示省略号或者下拉并且用于起动编辑器。
Type Converters(类型转换器)
类型转换器提供将对象转换到其它类型/从其它类型转换到对象的方法、提供表示设计时的对象属性的PropertyDescriptor列表、并且可能提供要属性网格的属性下拉中使用的值。
下面是在配合引擎组件模型中实现的某些TypeConverter:
-DeclTypeConverter(声明类型转换器)
基类到所有活动的类型转换器。实现CanConvertFrom()、CanConvertTo()、ConvertFrom()、ConvertTo(),它们将活动对象转换成串/从串转换成活动对象(以显示属性网格中活动的名字,并且允许名字编辑以创建活动)。而且,GetSite()提供对服务的访问。
-HandlerDeclTypeConverter(处理程序声明类型转换器)
事件的类型转换器。从DeclTypeConverter导出。实现GetStandardValues(),它使用IEventBindingService(事件绑定服务接口)来显示兼容的处理程序。
-VariableDeclTypeConverter(变量声明类型转换器)
变量(消息、通道、相关性等)的类型转换器。从DeclTypeConverter导出。
实现GetStandardValues(),它使用IFieldBindingService(字段绑定服务接口)来显示兼容的变量字段。另外,类型转换器过滤掉“Name(名字)”属性,并且为表现为类属类型的类型属性设置一个特殊的属性描述符。
属性描述符
属性描述符为活动对象提供设计时服务。它提供名字、描述、类别、类型转换器信息,并在获得/设置属性时提供附加功能。默认地,TypeConverter将为所有属性提供PropertyDescriptor。然而,TypeConverter可移除、添加或者包装它们以提供类型的不同设计时行为。
下面是创作对象模型中实现的某些PropertyDescriptor:
-DynamicPropertyDescriptor(动态属性描述符)
创作对象模型中所有属性描述符的基类。实现默认属性描述符的包装器,并且将所有方法委托给它。另外,提供直接从对象(如果它是组件)或者通过IReferenceService(引用服务接口)对于对象站点的访问。
-VariableDeclPropertyDescriptor(变量声明属性描述符)
所有变量(消息、通道、相关性等)的属性描述符。重载SetValue()以提供如下的代码分离字段:
-获得要设置的变量及其站点。
-获得包含作用域的站点。
-获得包含作用域的IEventBindingService。注意,每个作用域具有它自己的IEventBindingService以及它自己的字段集。
-用服务确认字段名。
-打开设计器事务。
-保存值。
-调用IFieldBindingService.CreateField(),将该字段添加到代码分离文件。
-提交事务。
-HandlerDeclPropertyDescriptor(处理程序声明属性描述符)
所有处理程序的属性描述符。重载SetValue()以提供如下的代码分离字段:
-获得要设置的HandlerDeclaration(处理程序声明)对象及其站点。
-获得IEventBindingService。
-打开设计器事务。
-创建LocalEventDescriptor(本地事件描述符)。
-获得事件的PropertyDescriptor(使用eventBindingService.GetEventProperty())并且在其上设置HandlerDeclaration。
-设置HandlerDeclaration对象的“Name(名字)”属性。
-提交事务。
-ArrayElementPropertyDescriptor(数组元素属性描述符)
表示集合中一个项的属性描述符。由于-例如相关性设置等集合项没有属性描述符(它们不是属性),因此ArrayElementPropertyDescriptor伪造描述符,如同它们是属性一样,因而允许在属性浏览器内显示它们。这个属性描述符被设计成由任何上述属性描述符来包装。
-LocalEventDescriptor(本地事件描述符)
用于表示HandlerDeclaration的EventDescriptor(事件描述符)。创作对象模型中的处理程序不是真的事件,而是属性,因此引入自己的EventDescriptor用于要使用的IEventBindingService。
使用ICustomTypeDescriptor(自定义类型描述符接口)
ICustomTypeDescriptor是设置组件描述符的另一种方法。组件本身实现该接口并且提供描述符,如类型转换器、默认值等等。GenericActivity(类属活动)、InvokeWebServiceActivity调用web服务活动)和InvokeSchedule(调用进度表)实现这个接口。
使用IExtenderProvider(扩展器供应者接口)
这是向组件引入设计时属性的又一种技术。扩展类RulePropertyProviderExtender(规则属性供应者扩展器)向ServiceDesigner(服务设计器)提供规则属性。通过经由ProvidePropertyAttribute(提供属性元属性)装饰扩展器类、实现元属性的取值器和置值器、以及将扩展器类添加到可通过组件的站点(Schedule.Site)访问的IExtenderProviderService(扩展器供应者服务接口)类(在此例中,由RulePropertyProviderExtender实现)来添加属性。
可扩展性支特
System.Workflow.ComponentModel.Design名字空间为用户提供各种可重用的类,以在创建它们自己的活动设计器并且将它们插入到配合引擎设计器之中时使用。下面是用户可使用的类的列表。
-ActivityDesigner(活动设计器):ActivityDesigner给予用户添加在其下没有其它活动的分层结构的简单活动的能力。用户需要从这个设计器继承并且可定制位图、描述和绘制。
-SequentialActivityDesigner(顺序活动设计器):SequentialActivityDesigner使用户能够编写可在其中包含多个活动的设计器。所有这些活动被顺序地排列,并且使用连接器线来链接。用户可从这个类导出,并且提供自定义的着色、描述、图标等。
-ParallelActivityDesigner(并行活动设计器):ParallelActivityDesigner使用户能够编写可在其中具有多个合成活动并且以并行方式排列它们的活动设计器.该类还使用户能够定制描述、图标、颜色等.该类可通过继承来扩展.
-OrchestrationEngineToolboxItem(配合引擎工具箱项):OrchestrationEngineToolboxItem使用户能够创建自定义的工具箱项。该类给予用户控制序列化的能力。该类提供挂钩,使用挂钩,用户可在活动被添加到设计器中时弹出自定义的UI。用户可通过继承重用该类。用户需要通过使用ToolBoxItem(工具箱项)元属性来提供工具箱项。
-TypeBrowserEditor(类型浏览器编辑器):TypeBrowserEditor使用户能够浏览设计器中可用的类型。该类是通过将它与类型为System.Type的属性相关联来使用的。用户使用UITypeEditor(UI类型编辑器)元属性来将该类与属性相关联。
-TypeConverter(类型转换器)类:配合引擎组件模型提供各种类型转换器,它们使用户能够定义他们自己的类型转换器。通过继承来扩展类型转换器,可使用所有类型转换器。
-DesignerGlyph(设计器字形):DesignerGlyph类可由用户用于在设计器之上绘制自定义的字形。用户可能想要显示需要在Z顺序的最顶上绘制的某些可视字形。DesignerGlyph类可用于绘制这类字形。可通过继承扩展这个类来使用它。
-DesignerAction(设计器动作):用户可将DesignerAction与DesignerGlyph相关联。当用户在DesignerGlyph上点击时显示这些动作。自定义的设计器动作可通过从DesignerAction类继承来创建。

Claims (14)

1.一种用于对工作流建模的系统,所述系统包括:
用于在显示器(404)上显示多个选项板元素(434)的装置,每个选项板元素对应于至少一项活动;
用于按照用户(402)经由用户界面选择设备(406)的输入接收多个图形元素的装置,所述多个图形元素被排列以创建工作流;
用于在所述显示器(404)上显示所接收的多个图形元素的装置;
用于按照用户(402)经由所述用户界面选择设备(406)的输入接收结构信息的装置,所述结构信息与所接收的多个图形元素相关联;
用于根据所接收的结构信息在所述显示器(404)上排列所显示的多个图形元素的装置;
用于将所述多个图形元素(432)中的每一个映射到所述多个选项板元素(434)中的一个的装置;以及
用于根据与所映射的选项板元素对应的活动,将所排列的多个图形元素转换成工作流表示的装置。
2.如权利要求1所述的系统,其特征在于,还包括用于在所述显示器(404)上显示多个选项板元素(434)之前,定义所述多个选项板元素(434)的装置。
3.如权利要求1所述的系统,其特征在于,还包括用于经由所述用户界面选择设备(406)从用户(402)接收定制信息的装置,以及用于根据所接收的定制信息调整所显示的多个选项板元素(434)的装置,每个选项板元素(434)对应于至少一个活动(430)。
4.如权利要求1所述的系统,其特征在于,还包括用于在所述显示器(404)上显示多个选项板元素(434)之后,经由所述用户界面选择设备(406)从用户(402)接收商业逻辑的装置,以使所述商业逻辑与所述活动(430)之一相关联,所述商业逻辑包括与在工作流的设计时期和执行中提供工作流的动态编辑的活动之一相关联的代码分离文件中的软件代码。
5.如权利要求1所述的系统,其特征在于,还包括用于在所述显示器(404)上显示多个选项板元素(434)之前,经由所述用户界面选择设备(406)从用户(402)接收用户定义活动的装置,其中,所述用户定义活动具有与其相关联的一个或多个语义,并且所述系统还包括用于评估所述语义的装置,以找出与预定义的接口要求的一致性;以及用于根据所述评估将所述用户定义活动存储为所述活动之一的装置。
6.如权利要求1所述的系统,其特征在于,还包括用于在将所排列的多个图形元素转换成工作流表示之后,接收将所创建的工作流转换成用户指定的语言的命令的装置。
7.如权利要求1所述的系统,其特征在于,还包括用于在将所排列的多个图形元素转换成工作流表示之后,经由触摸屏(436)从用户(402)接收以下的一项或多项的装置:对所显示的工作流的编辑、对所述工作流的注释、对所排列、显示的图形元素的纠正。
8.一种在具有显示器(404)和用户界面选择设备(406)的计算机系统中用于对工作流建模的计算机化方法,所述工作流包括活动,所述工作流对商业过程建模,所述计算机化方法包括:
在所述显示器(404)上显示多个选项板元素(434),每个选项板元素对应于至少一项活动;
按照用户(402)经由所述用户界面选择设备(406)的输入接收多个图形元素;
在所述显示器(404)上显示所接收的多个图形元素;
按照用户(402)经由所述用户界面选择设备(406)的输入接收结构信息,所述结构信息与所接收的多个图形元素相关联;
根据所接收的结构信息在所述显示器(404)上排列所显示的多个图形元素;
将所述多个图形元素(432)中的每一个映射到所述多个选项板元素(434)中的一个;以及
根据与所映射的选项板元素对应的活动,将所排列的多个图形元素转换成工作流表示。
9.如权利要求8所述的计算机化方法,其特征在于,还包括在所述显示器(404)上显示多个选项板元素(434)之前,定义所述多个选项板元素(434)。
10.如权利要求8所述的计算机化方法,其特征在于,还包括经由所述用户界面选择设备(406)从用户(402)接收定制信息,并且根据所接收的定制信息调整所显示的多个选项板元素(434),每个选项板元素(434)对应于至少一个活动(430)。
11.如权利要求8所述的计算机化方法,其特征在于,还包括在所述显示器(404)上显示多个选项板元素(434)之后,经由所述用户界面选择设备(406)从用户(402)接收商业逻辑,用于与所述活动(430)之一相关联,所述商业逻辑包括与在工作流的设计时期和执行中提供工作流的动态编辑的活动之一相关联的代码分离文件中的软件代码。
12.如权利要求8所述的计算机化方法,其特征在于,还包括在所述显示器(404)上显示多个选项板元素(434)之前,经由所述用户界面选择设备(406)从用户(402)接收用户定义活动,其中,所述用户定义活动具有与其相关联的一个或多个语义,并且所述方法还包括评估所述语义,以找出与预定义的接口要求的一致性;并且根据所述评估将所述用户定义活动存储为所述活动之一。
13.如权利要求8所述的计算机化方法,其特征在于,还包括在将所排列的多个图形元素转换成工作流表示之后,接收将所创建的工作流转换成用户指定的语言的命令。
14.权利要求8所述的计算机化方法,其特征在于,还包括在将所排列的多个图形元素转换成工作流表示之后,经由触摸屏(436)从用户(402)接收以下的一项或多项:对所显示的工作流的编辑、对所述工作流的注释、对所排列、显示的图形元素的纠正。
CN2005100990939A 2004-10-01 2005-09-01 用于设计工作流的可扩展框架 Expired - Fee Related CN101013362B (zh)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US61554904P 2004-10-01 2004-10-01
US60/615,549 2004-10-01
US11/046,967 2005-01-31
US11/046,967 US8170901B2 (en) 2004-10-01 2005-01-31 Extensible framework for designing workflows
US11/063,808 US20060074735A1 (en) 2004-10-01 2005-02-23 Ink-enabled workflow authoring
US11/063,808 2005-02-23

Publications (2)

Publication Number Publication Date
CN101013362A CN101013362A (zh) 2007-08-08
CN101013362B true CN101013362B (zh) 2010-05-05

Family

ID=35229823

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2005100990939A Expired - Fee Related CN101013362B (zh) 2004-10-01 2005-09-01 用于设计工作流的可扩展框架

Country Status (5)

Country Link
US (1) US20060074735A1 (zh)
EP (1) EP1643435B1 (zh)
JP (1) JP2006107478A (zh)
KR (1) KR20060087995A (zh)
CN (1) CN101013362B (zh)

Families Citing this family (126)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7451403B1 (en) * 2002-12-20 2008-11-11 Rage Frameworks, Inc. System and method for developing user interfaces purely by modeling as meta data in software application
US8170901B2 (en) * 2004-10-01 2012-05-01 Microsoft Corporation Extensible framework for designing workflows
GB2423382A (en) 2005-01-27 2006-08-23 Microgen Plc Generating business process programs using a symbolic representation of operators in a graphical interface
US7925994B2 (en) * 2005-07-07 2011-04-12 Microsoft Corporation Task navigator including a user based navigation interface
US8225231B2 (en) 2005-08-30 2012-07-17 Microsoft Corporation Aggregation of PC settings
US10042615B2 (en) * 2005-09-29 2018-08-07 International Business Machines Corporation Process contributions in a method architecture
US7681133B2 (en) * 2005-10-14 2010-03-16 Oracle International Corporation Declarative task-based user interfaces
US8296727B2 (en) * 2005-10-14 2012-10-23 Oracle Corporation Sub-task mechanism for development of task-based user interfaces
US8112394B2 (en) 2005-10-14 2012-02-07 Oracle International Corporation Long-lived data transactions
US20070130547A1 (en) * 2005-12-01 2007-06-07 Navisense, Llc Method and system for touchless user interface control
US8578282B2 (en) * 2006-03-15 2013-11-05 Navisense Visual toolkit for a virtual user interface
US20070239505A1 (en) * 2006-03-30 2007-10-11 Microsoft Corporation Abstract execution model for a continuation-based meta-runtime
US8024405B2 (en) * 2006-03-30 2011-09-20 Microsoft Corporation Declarative model for concurrency-control across lightweight threads
US8069439B2 (en) * 2006-03-30 2011-11-29 Microsoft Corporation Framework for modeling continuations in workflows
US7739135B2 (en) * 2006-03-30 2010-06-15 Microsoft Corporation Asynchronous fault handling in process-centric programs
US8396736B2 (en) * 2006-04-21 2013-03-12 Process Assets, Llc Systems and methods for providing documentation having succinct communication with scalability
US20070274300A1 (en) 2006-05-04 2007-11-29 Microsoft Corporation Hover to call
US8181150B2 (en) 2006-05-12 2012-05-15 The Mathworks, Inc. System and method for synchronized workflow management
US9715675B2 (en) * 2006-08-10 2017-07-25 Oracle International Corporation Event-driven customizable automated workflows for incident remediation
US9299039B1 (en) * 2006-08-23 2016-03-29 A9.Com, Inc. Managing task lists utilizing integrated information requests
US8433729B2 (en) * 2006-09-29 2013-04-30 Sap Ag Method and system for automatically generating a communication interface
KR100910336B1 (ko) 2006-10-19 2009-07-31 신동혁 논리 프로세스 및 물리 프로세스 모델을 맵핑한 비즈니스 프로세스 모델을 관리하기 위한 시스템 및 방법
US8086479B2 (en) * 2006-12-29 2011-12-27 Schlumberger Technology Corporation Oilfield management system and method
JP2008181248A (ja) * 2007-01-23 2008-08-07 Kyocera Mita Corp 表示制御装置及び表示制御プログラム
US7743076B2 (en) * 2007-01-26 2010-06-22 Microsoft Corporation Extensible action sequences coordinating independently created components
EP2147366A4 (en) 2007-04-13 2010-07-28 Thomson Licensing ADVANCED DATABASE SCHEME IN SUPPORT OF ENHANCED MEDIA PRODUCTION AND DISTRIBUTION
US9171282B2 (en) * 2007-10-22 2015-10-27 Oracle International Corporation Interactive complex event pattern builder and visualizer
US9449291B2 (en) * 2007-11-28 2016-09-20 Sap Se Subscriptions for routing incoming messages to process instances in a process execution engine
US8428983B2 (en) 2007-12-28 2013-04-23 International Business Machines Corporation Facilitating availability of information technology resources based on pattern system environments
US20090171703A1 (en) * 2007-12-28 2009-07-02 International Business Machines Corporation Use of multi-level state assessment in computer business environments
US8341014B2 (en) * 2007-12-28 2012-12-25 International Business Machines Corporation Recovery segments for computer business applications
KR100890861B1 (ko) * 2008-03-04 2009-03-27 정병수 3차원 응용프로그램 프레임워크를 생성하는 방법 및 그 3차원 응용프로그램 프레임워크를 기반으로 하는 응용프로그램 구현 방법
WO2009110725A2 (ko) * 2008-03-04 2009-09-11 주식회사 코드에스이 3차원 응용프로그램 프레임워크 구조 및 이를 기반으로 하는 응용프로그램 구현 방법과, 3차원 응용소프트웨어 프레임워크 기반의 자동 테스트 시스템 및 그 방법
US9563877B2 (en) * 2008-03-11 2017-02-07 Microsoft Technology Licensing, Llc Customizable controls provided by a messaging application for performing selected actions
US9225610B2 (en) * 2008-03-31 2015-12-29 Hitachi, Ltd. User interface providing information system topology presentation
WO2009143533A2 (en) * 2008-05-23 2009-11-26 Adapx, Inc. Systems and methods for using a digital palette to produce a digital document
TW201009688A (en) * 2008-08-20 2010-03-01 Clevest Solutions Inc Method and system of editing workflow logic and screens with a GUI tool
US8887061B2 (en) * 2008-09-26 2014-11-11 Microsoft Corporation Variable screen magnifier user interface
US8411046B2 (en) 2008-10-23 2013-04-02 Microsoft Corporation Column organization of content
US20100107100A1 (en) 2008-10-23 2010-04-29 Schneekloth Jason S Mobile Device Style Abstraction
US20100114619A1 (en) * 2008-10-30 2010-05-06 International Business Machines Corporation Customized transformation of free-form business concepts to semantically rich business models
US9424398B1 (en) * 2009-01-24 2016-08-23 Dionex Corporation Workflows for defining a sequence for an analytical instrument
US8175653B2 (en) 2009-03-30 2012-05-08 Microsoft Corporation Chromeless user interface
US8238876B2 (en) 2009-03-30 2012-08-07 Microsoft Corporation Notifications
US20100269032A1 (en) * 2009-04-15 2010-10-21 Microsoft Corporation Advanced text completion, such as for markup languages
US8836648B2 (en) 2009-05-27 2014-09-16 Microsoft Corporation Touch pull-in gesture
US8464229B2 (en) * 2009-12-29 2013-06-11 Microgen Aptitude Limited Creation of form-based software application in a graphical user interface (GUI) environment
US20110161371A1 (en) * 2009-12-29 2011-06-30 Microgen Plc Sql generation
US8732596B2 (en) * 2009-12-29 2014-05-20 Microgen Aptitude Limited Transformation of hierarchical data formats using graphical rules
US8140894B2 (en) * 2009-12-29 2012-03-20 Microgen Aptitude Limited Transaction regions in graphical computer-implemented methods of processing data
CN101777155A (zh) * 2010-02-01 2010-07-14 山东浪潮齐鲁软件产业股份有限公司 一种跨应用工作流任务列表集成业务处理页面的方法
KR101188886B1 (ko) * 2010-10-22 2012-10-09 삼성에스디에스 주식회사 유전 정보 관리 시스템 및 방법
US20120159395A1 (en) 2010-12-20 2012-06-21 Microsoft Corporation Application-launching interface for multiple modes
US20120159383A1 (en) 2010-12-20 2012-06-21 Microsoft Corporation Customization of an immersive environment
US8689123B2 (en) 2010-12-23 2014-04-01 Microsoft Corporation Application reporting in an application-selectable user interface
US8612874B2 (en) 2010-12-23 2013-12-17 Microsoft Corporation Presenting an application change through a tile
US9423951B2 (en) 2010-12-31 2016-08-23 Microsoft Technology Licensing, Llc Content-based snap point
US9311061B2 (en) * 2011-02-10 2016-04-12 International Business Machines Corporation Designing task execution order based on location of the task icons within a graphical user interface
US9383917B2 (en) 2011-03-28 2016-07-05 Microsoft Technology Licensing, Llc Predictive tiling
US20120304132A1 (en) 2011-05-27 2012-11-29 Chaitanya Dev Sareen Switching back to a previously-interacted-with application
US9658766B2 (en) 2011-05-27 2017-05-23 Microsoft Technology Licensing, Llc Edge gesture
US9104307B2 (en) 2011-05-27 2015-08-11 Microsoft Technology Licensing, Llc Multi-application environment
US9158445B2 (en) 2011-05-27 2015-10-13 Microsoft Technology Licensing, Llc Managing an immersive interface in a multi-application immersive environment
US8893033B2 (en) 2011-05-27 2014-11-18 Microsoft Corporation Application notifications
US9104440B2 (en) 2011-05-27 2015-08-11 Microsoft Technology Licensing, Llc Multi-application environment
US8687023B2 (en) 2011-08-02 2014-04-01 Microsoft Corporation Cross-slide gesture to select and rearrange
US20130057587A1 (en) 2011-09-01 2013-03-07 Microsoft Corporation Arranging tiles
US8922575B2 (en) 2011-09-09 2014-12-30 Microsoft Corporation Tile cache
US10353566B2 (en) 2011-09-09 2019-07-16 Microsoft Technology Licensing, Llc Semantic zoom animations
US9557909B2 (en) 2011-09-09 2017-01-31 Microsoft Technology Licensing, Llc Semantic zoom linguistic helpers
US9146670B2 (en) 2011-09-10 2015-09-29 Microsoft Technology Licensing, Llc Progressively indicating new content in an application-selectable user interface
US9244802B2 (en) 2011-09-10 2016-01-26 Microsoft Technology Licensing, Llc Resource user interface
US8933952B2 (en) 2011-09-10 2015-01-13 Microsoft Corporation Pre-rendering new content for an application-selectable user interface
CN102279754B (zh) * 2011-09-19 2013-10-30 山东中创软件工程股份有限公司 一种业务处理执行语言流程部署方法
US20130152021A1 (en) * 2011-12-09 2013-06-13 Microsoft Corporation Stage and stage view within a workflow
US9395959B2 (en) 2011-12-09 2016-07-19 Microsoft Technology Licensing, Llc Integrated workflow visualization and editing
US9223472B2 (en) 2011-12-22 2015-12-29 Microsoft Technology Licensing, Llc Closing applications
US9128605B2 (en) 2012-02-16 2015-09-08 Microsoft Technology Licensing, Llc Thumbnail-image selection of applications
US11455287B1 (en) * 2012-08-01 2022-09-27 Tibco Software Inc. Systems and methods for analysis of data at disparate data sources
US9110765B2 (en) * 2012-10-17 2015-08-18 Sap Portals Israel Ltd Displaying different hierarchy levels of computer program source code
JP2016506001A (ja) * 2013-01-23 2016-02-25 トムソン ライセンシングThomson Licensing アセットにより駆動されるワークフローのモデリング
US20150363096A1 (en) * 2013-01-31 2015-12-17 Hewlett-Packard Developement Company, L.P. Defining a design plan
US9450952B2 (en) 2013-05-29 2016-09-20 Microsoft Technology Licensing, Llc Live tiles without application-code execution
US9262239B2 (en) * 2013-05-10 2016-02-16 Adobe Systems Incorporated User-creatable custom workflows
CN103455369A (zh) * 2013-08-30 2013-12-18 西安电子科技大学 一种面向个人的任务分派与处理系统
GB201316948D0 (en) * 2013-09-24 2013-11-06 Cotham Technologies Ltd Methods and software for creating workflows
CN103645911B (zh) * 2013-11-01 2017-11-21 北京奇虎科技有限公司 高亮颜色的获取、修改方法及设备
US9912824B2 (en) * 2014-02-10 2018-03-06 Xerox Corporation Triggering workflows from a multifunction device
US9354922B2 (en) * 2014-04-02 2016-05-31 International Business Machines Corporation Metadata-driven workflows and integration with genomic data processing systems and techniques
WO2015149347A1 (en) 2014-04-04 2015-10-08 Microsoft Technology Licensing, Llc Expandable application representation
WO2015154276A1 (en) 2014-04-10 2015-10-15 Microsoft Technology Licensing, Llc Slider cover for computing device
CN105378582B (zh) 2014-04-10 2019-07-23 微软技术许可有限责任公司 计算设备的可折叠壳盖
US10254942B2 (en) 2014-07-31 2019-04-09 Microsoft Technology Licensing, Llc Adaptive sizing and positioning of application windows
US10678412B2 (en) 2014-07-31 2020-06-09 Microsoft Technology Licensing, Llc Dynamic joint dividers for application windows
US10592080B2 (en) 2014-07-31 2020-03-17 Microsoft Technology Licensing, Llc Assisted presentation of application windows
CN104199651A (zh) * 2014-08-26 2014-12-10 浪潮软件股份有限公司 一种图形化流程建模工具设计方法
US10642365B2 (en) 2014-09-09 2020-05-05 Microsoft Technology Licensing, Llc Parametric inertia and APIs
CN106662891B (zh) 2014-10-30 2019-10-11 微软技术许可有限责任公司 多配置输入设备
CN105808226A (zh) * 2014-12-31 2016-07-27 亚申科技研发中心(上海)有限公司 实验工作流的生成方法及系统
US20160306503A1 (en) * 2015-04-16 2016-10-20 Vmware, Inc. Workflow Guidance Widget with State-Indicating Buttons
AU2016302390B2 (en) * 2015-07-31 2022-06-23 WiseTech Global (Licensing) Pty Ltd Systems and methods for executable content and executable content flow creation
US10915299B2 (en) * 2015-10-16 2021-02-09 Salesforce.Com, Inc. Automatically matching start criteria and completion criteria of a walkthrough for an application or online service
EP3226184A1 (en) 2016-03-30 2017-10-04 Tata Consultancy Services Limited Systems and methods for determining and rectifying events in processes
EP3519951A4 (en) * 2016-10-01 2020-07-01 Gunakar Private Limited SYSTEM FOR COORDINATING A LOGICAL SEQUENCE OF INSTRUCTIONS IN ELECTRONIC DEVICES USING VISUAL PROGRAMMING AND WIRELESS COMMUNICATION
KR101726663B1 (ko) 2016-11-09 2017-04-13 국방과학연구소 블록 다이어그램 환경에서의 모델 기반 설계 시 클라우드 개념을 이용한 각 모델 간 입출력 포트 연결 자동화 방법 및 시스템
US10445680B2 (en) * 2017-02-02 2019-10-15 Azuqua, Inc. Engine for modeling and executing custom business processes
US20180321830A1 (en) * 2017-05-03 2018-11-08 Espressive, Inc. Screen-based workflow configuration and execution platform
US10534337B2 (en) 2017-05-04 2020-01-14 Servicenow, Inc. Flow engine for building automated flows within a cloud based developmental platform
US10747941B2 (en) * 2017-06-28 2020-08-18 General Electric Company Tag mapping process and pluggable framework for generating algorithm ensemble
US10979539B1 (en) 2017-07-21 2021-04-13 State Farm Mutual Automobile Insurance Company Method and system of generating generic protocol handlers
US11423083B2 (en) 2017-10-27 2022-08-23 Ab Initio Technology Llc Transforming a specification into a persistent computer program
CN109933326B (zh) * 2017-12-15 2023-03-17 北京奇虎科技有限公司 改写代码的编译方法、装置及相应终端
US10534587B1 (en) 2017-12-21 2020-01-14 Intuit Inc. Cross-platform, cross-application styling and theming infrastructure
US11157259B1 (en) 2017-12-22 2021-10-26 Intuit Inc. Semantic and standard user interface (UI) interoperability in dynamically generated cross-platform applications
CN110609822B (zh) * 2018-06-15 2023-02-28 伊姆西Ip控股有限责任公司 数据流处理方法、设备和计算机程序产品
US11087259B2 (en) * 2018-07-12 2021-08-10 Nintex UK Ltd. Business designer
US10817266B2 (en) * 2018-09-25 2020-10-27 Salesforce.Com, Inc. Converting a captured image to visual programming logic for an automation building tool
US10970052B2 (en) 2018-10-19 2021-04-06 Oracle International Corporation System and method for enhancing component based development models with auto-wiring
US10754626B2 (en) 2018-11-30 2020-08-25 Shopify Inc. Visual and code views in a process workflow user interface
US11294555B2 (en) * 2019-04-24 2022-04-05 Appian Corporation Intelligent manipulation of dynamic declarative interfaces
EP3748440B1 (en) 2019-06-03 2023-11-08 ABB Schweiz AG Workflow of an apparatus
US11282118B2 (en) * 2019-09-17 2022-03-22 Salesforce.Com, Inc. Order management user interface
US11288611B2 (en) * 2020-07-22 2022-03-29 Servicenow, Inc. Multi-process workflow designer user interface
US11295260B2 (en) * 2020-07-22 2022-04-05 Servicenow, Inc. Multi-process workflow designer
US11435871B1 (en) * 2021-05-18 2022-09-06 Amazon Technologies, Inc. Workflow assembly tool and workflow model for runtime execution
US11656744B1 (en) * 2022-03-14 2023-05-23 Wolters Kluwer Technology BV Interactive tool for efficiently developing task flows

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1134194A (zh) * 1993-11-02 1996-10-23 塔里根特公司 面向对象的图形系统
CN1433541A (zh) * 1999-11-02 2003-07-30 卡纳尔股份有限公司 显示图形对象

Family Cites Families (99)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5301320A (en) * 1991-06-28 1994-04-05 Digital Equipment Corporation Workflow management and control system
JP2749020B2 (ja) * 1991-11-14 1998-05-13 日立ソフトウエアエンジニアリング株式会社 ダイアグラム認識システム
JPH09501517A (ja) * 1993-02-08 1997-02-10 アクション・テクノロジーズ・インコーポレーテッド 業務処理を管理するための方法および装置
US5734837A (en) * 1994-01-14 1998-03-31 Action Technologies, Inc. Method and apparatus for building business process applications in terms of its workflows
US5634127A (en) * 1994-11-30 1997-05-27 International Business Machines Corporation Methods and apparatus for implementing a message driven processor in a client-server environment
US5774661A (en) * 1995-04-18 1998-06-30 Network Imaging Corporation Rule engine interface for a visual workflow builder
US5999911A (en) * 1995-06-02 1999-12-07 Mentor Graphics Corporation Method and system for managing workflow
DE19712946A1 (de) * 1996-05-30 1997-12-04 Ibm Methode zum Generieren einer Implementierung wiederverwendbarer Teile von Containern eines Workflow-Prozessmodells
US5930512A (en) * 1996-10-18 1999-07-27 International Business Machines Corporation Method and apparatus for building and running workflow process models using a hypertext markup language
US6016394A (en) * 1997-09-17 2000-01-18 Tenfold Corporation Method and system for database application software creation requiring minimal programming
US6807583B2 (en) * 1997-09-24 2004-10-19 Carleton University Method of determining causal connections between events recorded during process execution
US6621505B1 (en) * 1997-09-30 2003-09-16 Journee Software Corp. Dynamic process-based enterprise computing system and method
US6012066A (en) * 1997-10-01 2000-01-04 Vallon, Inc. Computerized work flow system
US6225998B1 (en) * 1997-12-02 2001-05-01 Aspect Communications Visual design of workflows for transaction processing
US6115646A (en) * 1997-12-18 2000-09-05 Nortel Networks Limited Dynamic and generic process automation system
US6020878A (en) * 1998-06-01 2000-02-01 Motorola, Inc. Selective call radio with hinged touchpad
US6397192B1 (en) * 1998-06-05 2002-05-28 I2 Technologies Us, Inc. Synchronizing one or more workflows using one or more synchronization-join activities that include synchronization logic
US6567783B1 (en) * 1998-06-05 2003-05-20 I2 Technologies Us, Inc. Communication across one or more enterprise boundaries regarding the occurrence of a workflow event
JP2003528358A (ja) * 1998-08-24 2003-09-24 富士通株式会社 ワークフローシステムおよび方法
US6606740B1 (en) * 1998-10-05 2003-08-12 American Management Systems, Inc. Development framework for case and workflow systems
US7133833B1 (en) * 1998-10-27 2006-11-07 Netscape Communications Corporation Lightweight directory access protocol workflow management system
US6678882B1 (en) * 1999-06-30 2004-01-13 Qwest Communications International Inc. Collaborative model for software systems with synchronization submodel with merge feature, automatic conflict resolution and isolation of potential changes for reuse
US6405364B1 (en) * 1999-08-31 2002-06-11 Accenture Llp Building techniques in a development architecture framework
US7020697B1 (en) * 1999-10-01 2006-03-28 Accenture Llp Architectures for netcentric computing systems
WO2001075568A1 (en) * 2000-03-30 2001-10-11 Ideogramic Aps Method for gesture based modeling
US6768986B2 (en) * 2000-04-03 2004-07-27 Business Objects, S.A. Mapping of an RDBMS schema onto a multidimensional data model
US6964034B1 (en) * 2000-04-20 2005-11-08 International Business Machines Corporation Application development server and a mechanism for providing different views into the same constructs within a strongly encapsulated environment
US6918053B1 (en) * 2000-04-28 2005-07-12 Microsoft Corporation Compensation framework for long running transactions
US6845507B2 (en) * 2000-05-18 2005-01-18 Ss & C Technologies, Inc. Method and system for straight through processing
US20020032692A1 (en) * 2000-09-08 2002-03-14 Atsuhito Suzuki Workflow management method and workflow management system of controlling workflow process
WO2002029517A2 (en) * 2000-10-02 2002-04-11 International Projects Consultancy Services, Inc. Automated loan processing system and method
US6604104B1 (en) * 2000-10-02 2003-08-05 Sbi Scient Inc. System and process for managing data within an operational data store
US6954747B1 (en) * 2000-11-14 2005-10-11 Microsoft Corporation Methods for comparing versions of a program
US6901405B1 (en) * 2000-12-20 2005-05-31 Microsoft Corporation Method for persisting a schedule and database schema
JP3702785B2 (ja) * 2000-12-27 2005-10-05 ヤマハ株式会社 楽音演奏装置、方法及び媒体
US7917888B2 (en) * 2001-01-22 2011-03-29 Symbol Technologies, Inc. System and method for building multi-modal and multi-channel applications
US20020161859A1 (en) * 2001-02-20 2002-10-31 Willcox William J. Workflow engine and system
US7240324B2 (en) * 2001-02-28 2007-07-03 Hewlett-Packard Development Company, L.P. Event-based scheduling method and system for workflow activities
JP2002259643A (ja) * 2001-03-02 2002-09-13 Hitachi Ltd ビジネスプロセス制御プログラム
US20020147606A1 (en) * 2001-03-14 2002-10-10 Norbert Hoffmann Application development method
US7146577B2 (en) * 2001-03-27 2006-12-05 Ncr Corporation Signature capture terminal
US6816865B2 (en) * 2001-04-18 2004-11-09 International Business Machines Corporation Process for data driven application integration for B2B
US20020188644A1 (en) * 2001-06-08 2002-12-12 Verano Workflow automated task component manager
JP2003008805A (ja) * 2001-06-26 2003-01-10 Matsushita Electric Ind Co Ltd 電子黒板システム
US7069536B2 (en) * 2001-06-28 2006-06-27 International Business Machines Corporation Method, system, and program for executing a workflow
US6898604B1 (en) * 2001-06-29 2005-05-24 Microsoft Corporation XML serialization and deserialization
US20030018508A1 (en) * 2001-07-19 2003-01-23 Schwanke Robert W. Data-triggered workflow processes
US7222334B2 (en) * 2001-07-24 2007-05-22 Hewlett-Packard Development Comapny, L.P. Modeling tool for electronic services and associated methods and businesses
WO2003015000A1 (en) * 2001-08-08 2003-02-20 Trivium Systems Inc. Workflow engine for automating business processes in scalable multiprocessor computer platforms
US6985939B2 (en) * 2001-09-19 2006-01-10 International Business Machines Corporation Building distributed software services as aggregations of other services
US6895573B2 (en) * 2001-10-26 2005-05-17 Resultmaker A/S Method for generating a workflow on a computer, and a computer system adapted for performing the method
US7389335B2 (en) * 2001-11-26 2008-06-17 Microsoft Corporation Workflow management based on an integrated view of resource identity
US20030177046A1 (en) * 2001-12-03 2003-09-18 John Socha-Leialoha Method and system for reusing components
US7408658B2 (en) * 2001-12-04 2008-08-05 Hewlett-Packard Development Company, L.P. Generation and usage of workflows for processing data on a printing device
US7089287B2 (en) * 2002-01-16 2006-08-08 Xerox Corporation Message-based system having embedded information management capabilities
US20030144891A1 (en) * 2002-01-26 2003-07-31 International Business Machines Corporation Supervising the processing status of activities within workflow management systems
DE10204310A1 (de) * 2002-02-01 2003-08-14 Correct Software Gmbh Verfahren zur Steuerung eines Computers
US7441197B2 (en) * 2002-02-26 2008-10-21 Global Asset Protection Services, Llc Risk management information interface system and associated methods
US7865867B2 (en) * 2002-03-08 2011-01-04 Agile Software Corporation System and method for managing and monitoring multiple workflows
US20030233374A1 (en) * 2002-03-14 2003-12-18 Ulrich Spinola Dynamic workflow process
DE10215653A1 (de) * 2002-04-09 2003-11-06 Bernhard Voslamber Verfahren und Anordung zur automatischen Erzeugung von Programmcodeabschnitten sowie ein entsprechendes Computerprogrammprodukt und ein entsprechendes computerlesbares Speichermedium
US6975914B2 (en) * 2002-04-15 2005-12-13 Invensys Systems, Inc. Methods and apparatus for process, factory-floor, environmental, computer aided manufacturing-based or other control system with unified messaging interface
US7424717B2 (en) * 2002-05-01 2008-09-09 Bea Systems, Inc. Systems and methods for business process plug-in development
US20040003353A1 (en) * 2002-05-14 2004-01-01 Joey Rivera Workflow integration system for automatic real time data management
US7571187B2 (en) * 2002-05-31 2009-08-04 Microsoft Corporation Support for real-time queries concerning current state, data and history of a process
US7107340B2 (en) * 2002-05-31 2006-09-12 Microsoft Corporation System and method for collecting and storing event data from distributed transactional applications
US7272816B2 (en) * 2002-07-31 2007-09-18 Sap Aktiengesellschaft Transformations between private and shared workflows
US7225425B2 (en) * 2002-08-29 2007-05-29 Sap Aktiengesellschaft Rapid application integration
US20040078105A1 (en) * 2002-09-03 2004-04-22 Charles Moon System and method for workflow process management
US7398525B2 (en) * 2002-10-21 2008-07-08 International Business Machines Corporation Resource scheduling in workflow management systems
US8056046B2 (en) * 2002-10-22 2011-11-08 The Boeing Company Integrated system-of-systems modeling environment and related methods
US7437703B2 (en) * 2002-10-25 2008-10-14 Sap Ag Enterprise multi-agent software system with services able to call multiple engines and scheduling capability
US7062537B2 (en) * 2002-11-25 2006-06-13 Microsoft Corporation Workflow services architecture
US20040148213A1 (en) * 2002-11-25 2004-07-29 Microsoft Corporation Automated workflow constraints
US7272820B2 (en) * 2002-12-12 2007-09-18 Extrapoles Pty Limited Graphical development of fully executable transactional workflow applications with adaptive high-performance capacity
US7885840B2 (en) * 2003-01-07 2011-02-08 Sap Aktiengesellschaft System and method of flexible workflow management
US7168077B2 (en) * 2003-01-31 2007-01-23 Handysoft Corporation System and method of executing and controlling workflow processes
US20040162741A1 (en) * 2003-02-07 2004-08-19 David Flaxer Method and apparatus for product lifecycle management in a distributed environment enabled by dynamic business process composition and execution by rule inference
CA2420479A1 (en) * 2003-02-13 2004-08-13 Ibm Canada Limited - Ibm Canada Limitee Flow debugging software and method
US20050066002A1 (en) * 2003-07-31 2005-03-24 Arnold Teres Workflow compatible healthcare information message communication system
US8645420B2 (en) * 2003-08-05 2014-02-04 Accenture Global Services Limited Methodology framework and delivery vehicle
US7693973B2 (en) * 2003-08-28 2010-04-06 International Business Machines Corporation Pluggable state meta-data processors based on meta information modeling in a service oriented architecture
CA2443454A1 (en) * 2003-09-11 2005-03-11 Teamplate Inc. Data binding method in workflow system
CA2442796A1 (en) * 2003-09-26 2005-03-26 Ibm Canada Limited - Ibm Canada Limitee Binding a workflow engine to a data model
US7093207B1 (en) * 2003-11-17 2006-08-15 Kla-Tencor Technologies Corporation Data analysis flow engine
US7519960B2 (en) * 2003-12-19 2009-04-14 International Business Machines Corporation Method and system for debugging business process flow
US7650344B2 (en) * 2004-02-09 2010-01-19 Coremetrics, Inc. System and method of managing software product-line customizations
US7424485B2 (en) * 2004-06-03 2008-09-09 Microsoft Corporation Method and apparatus for generating user interfaces based upon automation with full flexibility
US20060064335A1 (en) * 2004-08-17 2006-03-23 International Business Machines Corporation Method, system, and storage medium for performing business process modeling
US7451432B2 (en) * 2004-10-01 2008-11-11 Microsoft Corporation Transformation of componentized and extensible workflow to a declarative format
US7464366B2 (en) * 2004-10-01 2008-12-09 Microsoft Corporation Programming interface for a componentized and extensible workflow model
US7631291B2 (en) * 2004-10-01 2009-12-08 Microsoft Corporation Declarative representation for an extensible workflow model
US8478616B2 (en) * 2004-10-29 2013-07-02 FrontRange Solutions USA Inc. Business application development and execution environment
US20060112122A1 (en) * 2004-11-23 2006-05-25 International Business Machines Corporation Method, system, and storage medium for implementing business process modules
US7433887B2 (en) * 2004-12-29 2008-10-07 Microsoft Corporation Method and apparatus for metadata driven business logic processing
US7493594B2 (en) * 2005-03-14 2009-02-17 Research In Motion System and method for designing component based applications
WO2006110981A1 (en) * 2005-04-18 2006-10-26 Research In Motion Limited System and method for enabling assisted visual development of workflow for application tasks
US20060241954A1 (en) * 2005-04-22 2006-10-26 International Business Machines Corporation Method and system for adaptive action management for business solutions
US7983943B2 (en) * 2005-05-27 2011-07-19 Xerox Corporation Method and system for workflow process node synchronization

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1134194A (zh) * 1993-11-02 1996-10-23 塔里根特公司 面向对象的图形系统
CN1433541A (zh) * 1999-11-02 2003-07-30 卡纳尔股份有限公司 显示图形对象

Also Published As

Publication number Publication date
EP1643435A1 (en) 2006-04-05
CN101013362A (zh) 2007-08-08
EP1643435B1 (en) 2016-04-27
US20060074735A1 (en) 2006-04-06
KR20060087995A (ko) 2006-08-03
JP2006107478A (ja) 2006-04-20

Similar Documents

Publication Publication Date Title
CN101013362B (zh) 用于设计工作流的可扩展框架
US10222951B2 (en) Modeling system for graphic user interface
US7925985B2 (en) Methods and apparatus for process thumbnail view
EP0669022B1 (en) International data processing system
US8170901B2 (en) Extensible framework for designing workflows
CA2145678C (en) Command system
EP0664025B1 (en) Object oriented framework system
CA2135527C (en) Object oriented notification framework system
US8631388B2 (en) Graphical editor with incremental development
US6259446B1 (en) Menu state system
CA2135526C (en) Object oriented application interface
US5434965A (en) Balloon help system
JP3798015B2 (ja) プレース・オブジェクト・システム
CA2147380C (en) Atomic command system
Myers Object-Oriented Programming
Freeman Windows 8 Apps Revealed Using XAML and C#: Using XAML and C
Windischman et al. Professional Microsoft Office SharePoint Designer 2007

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150429

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150429

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100505

Termination date: 20190901