首页> 中国专利> 在基于工作流的应用程序中对用户输入和交互建模

在基于工作流的应用程序中对用户输入和交互建模

摘要

将交互实现为工作流自身的一部分的系统和方法。通过采用交互活动组件,数据被传入或传出工作流以形成一个交互工作流。此交互活动组件在工作流定义内为挂起点建模,其中用户输入以及相关联的交互可以在要求用户输入的各交互的间隙期间被提供至工作流。这样一个布局允许工作流和与其相关联的宿主应用程序之间受控/同步地进行数据交换。

著录项

  • 公开/公告号CN101346713A

    专利类型发明专利

  • 公开/公告日2009-01-14

    原文格式PDF

  • 申请/专利权人 微软公司;

    申请/专利号CN200680048702.0

  • 申请日2006-12-07

  • 分类号G06F17/00(20060101);

  • 代理机构31100 上海专利商标事务所有限公司;

  • 代理人陈斌

  • 地址 美国华盛顿州

  • 入库时间 2023-12-17 21:19:23

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-05-13

    专利权的转移 IPC(主分类):G06F17/00 变更前: 变更后: 登记生效日:20150421 申请日:20061207

    专利申请权、专利权的转移

  • 2011-10-26

    授权

    授权

  • 2009-03-04

    实质审查的生效

    实质审查的生效

  • 2009-01-14

    公开

    公开

说明书

背景

工作流一般是在组织中的信息和控制流。为了有效地竞争,企业不断 地努力来定义、记录并精简这样的流程。在一企业环境中,这些流程包括 销售和订单处理、采购任务、库存控制和管理、制造和生产控制、发货和 验货、应付账款等。

计算机系统和相关联的软件现在提供企业和其它组织可以用于改进他 们的工作流的工具。软件工具可以用来对业务工作流流程或进度表建模并 标识效率不高的地方和可能的改进。另外,当一流程涉及在人员、部门、 车间、或甚至独立的公司之间交换数据时,计算机系统和网络可以用来实 现这些交换。这样的系统和软件工具还能够实现通常与业务相关信息相关 联的大规模计算和其它数据或信息处理。

因此,工作流管理包括对一组织的业务流程中的信息流动和控制进行 有效管理,其中这种信息处理的自动化导致了现代商业界中的许多有效改 进。而且,工作流管理的这种自动化现在正允许企业和其他组织通过在包 括诸如因特网等全球计算机网络的计算机系统中执行工作流事务来进一步 改进绩效。

一个典型的基于工作流的应用程序常常需要满足多个条件。例如,一 个这样的条件是基于业务规则作出决策的能力。这可以包括简单规则(例 如,就像基于信用检查的结果做出的是或否的决定),以及更复杂的规则 (例如,必须对可能的大型标的进行评估以作出初步担保决定)。另外的 要求是与工作流外的其它软件和其它系统进行通信。例如,初始请求可以 从应用程序的一部分接收到,而其它方面(例如,联系信用服务)可以要 求使用其它Web服务或技术进行的通信。需要满足的另一条件是工作流与 用户的适当交互。例如,工作流应该通常能够显示用户界面本身或通过其 它软件与人们交互。此外,另一个需要满足的条件是维持整个工作流生命 周期中的状态的能力。因此,对在软件中创建和执行工作流提出了独特的 挑战。

例如,某些业务流程可能需要数小时、数天、或数星期来完成,并且 在这样的时间长度内维持关于工作流当前状态的信息是高要求的。此外, 这样一种长时间运行的工作流还通常将以非阻断方式与其它软件通信,并 且异步通信会有困难。与此同时,尽管对软件中的固定交互的建模是相对 直接的,但消费者往往会不断要求额外的灵活性,例如在进行中改变业务 流程的能力。处理不同的应用程序还会进一步增加工作流创建和管理中所 涉及的复杂度。

许多用于工作流工具的应用程序是在企业或组织的内部的。随着具有 调制解调器或其它类型的通信链路的联网计算机的到来,在远程位置处的 计算系统现在可以与彼此方便地通信。这种增强的通信允许在一个公司的 远程设备之间使用计算系统工作流应用程序。一个示例可以包括向异地销 售办公室转发来自公司总部的一个客户订单以供合适的销售人员来验证并 将验证返回给总部。工作流应用程序还可以具有处理不同公司之间的业务 往来的特定用途。在一典型的应用中,具有买方-卖方关系的两个公司可 能希望自动化生成和处理采购订单、产品运输、帐单和托收等。

例如,针对一个专门问题的应用程序(例如客户关系管理(CRM)或 一个例如金融服务的特定垂直市场)可以围绕工作流来构建。这种类型的 应用程序通常实现多个不同业务流程。在诸如Windows Workflow Foundation等常见工作流基础上构建驱动那些流程的逻辑可以使得应用程 序能更快地建立、更快地改变、以及更容易定制。此外,这种流程的自动 化可以带来本来是不可能的显著的效率上的改进。然而,这种对工作流技 术的公司间应用要求公司之间的合作以及要求各独立公司的现有计算机系 统和应用程序的适当接口和适当的持久服务实现。

到目前为止,已开发的工作流应用程序工具通过定义工作流进度表来 提供自动化业务工作流的某些能力。例如,买方会希望将正采购的产品列 表连同采购订单号一起发送到卖方,并且卖方会希望回复订单确认和期望 的发货日期。这种类型的交易可以涉及从零售商处购买产品的一般消费者, 或者是经常往来业务的两个大型公司实体。与订单和确认相关联的数据可 能相对较小并且该数据的传输时间可能大约为秒的分数。在计算机系统上 运行的工作流进程表应用程序可以在期限未到的时间内(一般很短)将系 统资源分配给事务。

然而,对工作流内的用户交互进行建模有困难。尤其是,当有人参与 时,工作流可能会需要长时间来完成并且建立可缩放系统需要禁用工作流 与用户的交互。此外,无论应用程序的类型如何,基于工作流状态驱动的 用户界面(UI)会进一步增大所涉及的复杂度。

因此,存在克服上述与常规系统和设备相关联的示例性缺点的需要。

概述

为了提供对所请求保护的主题的一些方面的基本理解,以下展示了一个简 化的概述。本概述并不是详尽的概要。它并非意在确定所请求保护的主题的 关键/重要特征,也并非意在对所请求保护的主题的范围进行划界。其唯一 目的是以简化的形式作为接下来要被展示的更详细的描述的前序来展示一 些概念。

本发明通过采用交互活动组件提供将交互/用户输入实现为工作流自身的 一部分的系统和方法,其中数据传入和传出工作流以形成交互的工作流。这样 一种交互活动组件在工作流定义内为挂起点建模,并且是对应用程序类型不可 知的,以便包括web服务应用程序、控制台、桌面、web服务等等。因此,用 户输入和相关联的交互可以在要求用户输入的各交互间隙期间被提供至工作 流以便允许工作流与和该工作流相关联的宿主应用程序之间受控/同步地数据 交换。因此,在工作流的执行期间的被定义的时刻,用户上下文可以与一个工 作流实例相关联。

在一个相关的方面,交互活动组件以及挂起点可以涉及工作流的用户切 换。例如,工作流可以基于挂起期间的工作流状态(例如与工作流的用户有关 的信息)驱动用户界面(UI)。因此,提供执行到特定点的交互工作流,并且 为宿主应用程序提供反馈。此外,宿主应用程序可以基于挂起状态改变工作流 的外观。可以定义工作流类型(例如,通过编程或通过可视工具),并且宿主 应用程序可以订阅挂起事件以便将挂钩提供至工作流的执行中。然后,一个或 多个挂起事件可以被引发并且基于该事件中的信息(例如,关于工作流的当前 用户的信息),UI外观可改变。由此,数据可以传入或传出工作流类,并且 可以为运行时的交互定义自定义特征(例如,强类型工作流)。

例如,在费用报告的上下文中,初始用户可启动费用报告工作流,然后批 准者用户可批准这个费用报告。因此,一个流程可以抽象到工作流类中,其中 该流程和工作流类正执行到一个批准者应该涉入的点。在这个点上,初始用户 的交互被停止。然后批准者可以(例如,从不同的机器中)启动应用程序来运 行该工作流并用由批准者指定的动作(例如,批准、不批准等)来恢复工作流 实例。因此,数据可以在工作流实例的生命周期内在挂起点处传入和传出工作 流实例。

根据本发明的方法,可以检查工作流中的动作来验证它是否表示了一个交 互活动。如果是,则该工作流被挂起。随后,一个挂起事件被引发并传达至宿 主应用程序。这样,当工作流实例被挂起,从宿主应用程序中获得挂起数据并 将其传入和/或传出工作流。另外,如果从宿主应用程序获得的数据指示了一个 恢复事件,则可以恢复该工作流。还可以基于工作流实例标识(例如,通过查 找组件)加载工作流。恢复事件可以被工作流接收并被执行以到达该进程中的 下一个动作。

为了实现上述以及相关的目的,此处结合以下的描述以及附图来描述 所请求保护的主题的某些说明性方面。这些方面指示了可实践本主题的各 种方式,所有这些方面意在落入所请求保护的主题的范围内。当结合附图 考虑时,其它优点和新颖的特征将从以下的详细描述中变得明显。

附图简述

图1示出通过交互活动组件与工作流交互的宿主应用程序的示例性系统图 示。

图2示出带有需要与用户和/或宿主交互的多个挂起点的工作流执行。

图3和图4示出根据本发明的一个示例性方面的用于带有挂起点的费用报 告的特定流程图。

图5示出用于展示工作流执行期间所执行的各个动作的示例性图形界面。

图6示出根据本发明的一个方面的工作流实例和宿主应用程序之间的数据 交换。

图7-9示出根据本发明的一个方面的工作流执行流的示例性方法。

图10示出用于执行本发明各种方面的示例性环境。

图11是一个可用来实现带有本发明的交互活动组件的工作流的另外的计 算环境的示意性框图。

详细描述

现在参考附图描述本发明主题的各方面,在所有附图中,相同的标号表示 相同或对应的元素。然而,应该理解,附图和与其有关的详细描述并非意在将 所请求保护的主题限于所公开的具体形式。相反,意在涵盖落入所请求保护的 主题的精神和范围之内的所有修改、等效技术方案以及替换技术方案。

如此处所使用的,术语“组件”、“系统”、“服务”等意在指的是计算 机相关的实体,其或者是硬件、硬件和软件的组合、软件、或执行中的软件。 例如,组件可以是,但不限于,在处理器上运行的进程、处理器、对象、可执 行、执行的线程、程序、和/或计算机。作为说明,在计算机上运行的应用程序 和计算机两者可以是组件。一个或多个组件可驻留在进程和/或执行的线程内, 并且组件可位于一台计算机上和/或分布在两台或更多的计算机之间。

词语“示例性”在此处用来表示作为示例、实例或说明。此处作为“示 例性”来描述的任何方面或设计并不必然被理解为相比其它方面或设计是优选 或有利的。

此外,所公开的主题可被实现为采用标准编程和/或工程技术来生产软件、 固件、或它们的任何组合来控制计算机或基于处理器的设备以实现此处所详述 的各方面的系统、方法、装置或制品。此处使用的术语“计算机程序”意在包 含可从任何计算机可读设备、载体或介质中可访问的计算机程序。例如,计算 机可读介质可包括但不限于磁存储设备(例如,硬盘、软盘、磁带......)、光 盘(例如,压缩盘(CD)、数字多功能盘(DVD)......)、智能卡和闪存设 备(例如,卡、棒)。另外,应该意识到,可使用载波来承载诸如那些在发送 和接收电子邮件或在访问诸如因特网或局域网(LAN)等网络时所使用的计算 机可读电子数据。当然,本领域的技术人员将认识到,在不背离所请求保护的 主题的范围或精神的情况下可对该配置做出许多修改。

首先转到图1,示出了用于系统101的框图,该系统将交互实现为工作流 本身的一部分,其中数据传入或传出于工作流以便形成一个交互的工作流。系 统101使用在工作流定义内为挂起点建模的交互活动组件140,并且是对应用 程序类型不可知的,以便包括web服务应用程序、控制台、桌面、web服务 等等。

此外,系统101包括与工作流系统100交互的宿主应用程序120,其中工 作流可以对被定义为活动图的人或系统流程建模。一个活动是工作流中的一个 步骤,并且是工作流的执行、重复使用和组成的单元。活动图表达规则、动作、 状态以及它们的关系。通常,工作流通过工作流引擎/运行库110来运行,并且 根据如宿主120描述的几个规则,工作流运行库需要外部的应用程序来主宿它。 宿主120与工作流系统100之间的数据交换可涉及和/或描述业务文档和其它对 象,它们或者用于帮助工作流活动,或者用于帮助工作流中用来与宿主应用程 序120通信数据的本地变量之间的流动。

例如,宿主应用程序可以通过Workflow Provider Base Class(工作流提供 者基类)117和/或与其相关联的实现与和工作流系统100相关联的Workflow Provider(工作流提供者)115交互。另外,宿主120可以负责多个另外的且重 要的方面,例如一个或多个工作流的创建,为正确执行工作流所需要的各组件 之间的调用的调度;以及隔离机制的设置。此外,出于可缩放的原因,宿主120 可以创建多进程以便利用机器中的多个中央处理单元(CPU),或在机器农场 (farm)上运行大量工作流实例。宿主120还可以控制在工作流经历长时间等 待时应用的策略、监听特定的事件并将它们传达给用户或管理员、设置超时时 限和对每个工作流的重试、展示性能计数器、以及出于调试和诊断目的而写日 志信息。

与工作流系统101相关联的工作流可以通过为工作流与外界通信的目的而 专门建立的服务与外界通信,其中该服务可以引发事件,将使得工作流内的事 件驱动活动被挂钩(hook up)。同样,该服务展示供工作流调用并向宿主发送 数据的公共方法。

如图1所示,交互活动组件140可以将交互实现为工作流本身的一部分, 其中数据传入和传出工作流以形成交互的工作流。交互活动组件140在工作流 定义内为挂起点建模。因此,用户输入和相关联的交互可以在要求用户输入的 各交互间隙期间内被提供到工作流中以便允许工作流与和该工作流相关联的 宿主应用程序之间受控/同步地数据交换。因此,在工作流的执行中的被定义的 各时刻处,用户上下文可以与一个工作流实例相关联。

图2示出了带有需要与用户交互的挂起点的工作流200的执行。交互活动 组件可以对挂起点212-215(1到n,其中n为整数)建模来对应于工作流运行 时的实例,其中工作流可以被挂起,以用于与例如宿主应用程序的数据交换。 此外,这样的挂起点212-215可以涉及工作流用户的切换。例如,工作流可以 基于挂起期间的工作流状态(诸如与工作流用户有关的信息)驱动用户界面 (UI)。

可以以用于计算机系统内执行的进度表的形式定义工作流200。进度表可 包括具有指定的并发性、依赖性以及与其相关联的事务属性的一组动作。每个 进度表具有相关联的进度表状态,其包括进度表的定义、在进度表中的当前位 置、以及与该进度表相关联的活动或实况数据和对象。在进度表内,事务边界 可基于动作的分组而存在。在这个方面,事务可包含单个动作、或事务、或动 作或事务的组。例如,动作可被分组成按串行方式执行的序列,以及其中能并 发执行动作的任务。从而,基于分组,并发属性可被分解,以用于进度表内的 动作和事务。

动作对应于在进度表内已完成的工作并且是进度表组成的基本单元。这样 的动作可以包括与延迟时间、并发以及补偿有关的属性,它们在进度表的上下 文中或可替换或进行组合。例如,动作可向进度表发送外部产生的激励,由此 允许外部程序促使该进度表状态的前进。这些激励可以是事件、消息或对被监 视的组件的调用。在事件的情况下,运行的进度表作为一个订阅器。该进度表 的特定实例将监听诸如事件、消息或对被监视的组件的调用等动作。

此外,动作可以驱动对组件的方法的调用。这样的方法通常对组件进行例 示化(例如,创建组件的实例)、对该实例调用方法、以及如果之后没有在进 度表内被使用的话,随后释放对实例的引用。当应用程序执行一个进度表时, 可创建进度表引擎的实例并且加载该进度表及其相关联的绑定。此外,动作可 以包括关于期望的或实际的完成时间或时间滞后的信息。这样的信息在该进度 表正被定义时可嵌入到进度表定义中、和/或可以基于历史的或可预测的关于动 作滞后的信息在运行库中被动态提供。

挂起点212-215还可以指示工作流中的脱水(dehydration)点。因为工作 流可能运行数小时、数天、或数星期,当运行库在一段时间内不活动时,运 行库200可以自动关闭正运行的工作流,并且持久地存储它在挂起点 212-215处的状态。脱水一般指的是一种基于对滞后性的考虑而在存储介质 中选择性存储进度表状态的方法。例如,当在进度表中的一个动作预期为 一个即将到来的消息等待五小时时,该进度表状态可被脱水到盘中直到收 到消息。在这种情形下,系统可以在接收到消息之前执行其它任务,从而 显著提高系统的工作输出和效率。因此,用户输入和相关联的交互可以在 要求用户输入的各交互间隙期间被提供到工作流,以便允许工作流与和工 作流相关联的宿主应用程序之间受控/同步地数据交换。因此,在工作流的 执行中的被定义的各时刻处,用户上下文可以与一个工作流实例相关联。

以下提供了用于在挂起点212-215处挂起和/或恢复工作流实例的交互活 动组件的示例性定义:

      [Executor(typeof(InteractiveActivityExecutor))]

    public class InteractiveActivity:EventSinkActivity

    {

         public string InteractionIdentifier{get;set;}

         public string Action{get;set;}

         protected override void Initialize(IServiceProvider context)

        {

              IInteractivityControl hostInterface=

context.GetService(typeof(IInteractivityControl))as

                    IInteractivityControl;

              if(hostInterface==null)

              {

                   throw new

System.InvalidOperationException();

              }

              hostInterface.Resume+=new

                   System.EventHandler<AspInteractivity.

                         WorkflowResumeArgs>(this.OnResume);

         }

         private void OnResume(object sender,

                    AspInteractivity.WorkflowResumeArgs e)

         {

              this.Action=e.Action;

         }

     ...

     }

    public class InteractiveActivityExecutor:

                 ActivityExecutor<InteractiveActivity>

    {

         protected override Status

Execute(InteractiveActivity activity,

                 ActivityExecutionContext context)

         {

               IInteractivityControl hostInterface=

    context.GetService(typeof(IInteractivityControl))as

                        IInteractivityControl;

                   if(hostInterface==null)

                   {

                        throw new

     System.InvalidOperationException();

                   }

                   SuspensionInfo info=

                       new SuspensionInfo(((InteractiveActivity)

                           activity).InteractionIdentifier,null,

WorkflowSuspendType.InteractiveActivityBreak);

                hostInterface.Suspend(info);

                Status status=base.Execute(activity,context);

                return status;

            }

        }

如所示,为了阻断工作流的执行,活动类可以通过对交互服务调用 Suspend方法(挂起方法)来使用其自身的执行器。这样可以启动与交互活 动组件相关联的InteractionIdentifier(交互标识符)的传播并将其传播至宿 主的句柄。

因此,可以提供执行到特定点的交互工作流,并向宿主应用程序提供 反馈。宿主应用程序可以基于挂起状态来改变工作流的外观。可以定义工作 流类型(例如,通过编程或通过可视工具),并且宿主应用程序可以订阅挂起 事件以便将挂钩提供到工作流的执行中。然后,可以引发一个或多个挂起事件 并且基于该事件中的信息(例如,关于工作流的当前用户的信息),UI外观 可改变。因此,数据可以传入或传出工作流类,并且可以定义自定义特征(例 如,强类型工作流),以供运行时的交互。

图3和图4示出带有挂起点的费用报告的特定流程图,该费用报告在要求 用户输入的各交互间隙期间允许用户的输入和相关联的交互,以便允许工作 流与和工作流相关联的宿主应用程序之间受控/同步地数据交换。流程图 300和400示出采用SwitchUser(切换用户)活动和Interactive Activity(交 互活动)组件来作为类属Expense Reporting(费用报告)工作流内的挂起 点。

这样,并且在费用报告的上下文中,初始用户可以启动一个费用报告工作 流,然后批准者用户可以批准这个费用报告。因此,一个过程可以被抽象到工 作流类中,其中该过程和工作流类正运行至批准者应该涉入的点。在这个点上, 初始用户的交互被停止。然后批准者可以(例如,从不同的机器中)启动应用 程序来运行工作流并按批准者指定的动作(例如,批准、不批准等)恢复工作 流实例。因此,数据可以在工作流实例的生命周期内在挂起点处传入和传出工 作流实例。

如图3所示,框310表示SubmittedER(提交费用报告)动作,其中挂起 状态指示了宿主应用程序需要通过图形界面(例如,一个专用形式)呈现提交 的费用报告,如下文图5中详细描述。此外,工作流定义300中的动作320表 示SwitchUser活动的实例,本发明通过这个SwitchUser活动的实例改变当前 的对下一个工作流段的执行负责的用户与工作流实例之间的联系。这个通常确 保只能在适当用户的执行上下文下执行批准/拒绝动作来恢复工作流。同样,动 作330、430根据本发明的一个示例性方面表示InteractiveActivity间断的实例。 类似地,标为NewER的框420示出了New Expense Report(新费用报告), 其中在等待通过图形界面(例如,图5中的一个专用形式)的用户输入的结果 作为全局费用报告数据被提供的时候,工作流被变为挂起。

工作流的特点在于用于提交和批准费用报告的应用程序,其中应用程序包 含由工作流所组织的多个页。除了各种活动和控制流结构之外,工作流还展示 例如当工作流被展示于费用报告的批准者时如何切换相关联的用户。如前文所 述,在FillER(填写费用报告)动作430期间,工作流被挂起,并且用户可以 继续向费用报告添加同行项。还可以包括查询用于在应用程序工作流中显示的 可用的进程中的工作流列表。

例如,费用报告应用程序可以包含列出了当前用户已提交的在进程中的费 用报告的主页,以及任何等待用户批准的报告。这样的应用程序通过详细说明 诸如费用报告用途等信息、添加独立同行项以及验证信息的精确度等使得能够 创建新的费用报告。此外,当提交了新的费用报告时,应用程序可以向批准者 发送邮件通知460。批准者可以随后查看费用报告并且批准它或者拒绝它,并 基于此发送最终邮件。

根据本发明的一个示例性方面,以下提供了一个将交互纳入其内的示例性 Expense Reporting(费用报告)工作流定义。

  <Workflow Name=”ExpenseReportingWorkflow”

   Inherits=”InteractiveWorkflow”

   Implements=”ITrackingWorkflowStateHandler”

  xmlns=”System.ApplicationServices.Workflows,System.ApplicationServices.Work

  flow”

     xmlns:w=”System.Web.Workflows,System.Web”

     xmlns:s=”SampleApp”>

     <StartActivity Name=”Start”>

       <Transitions>

         <ActivityTransition Destination=”NewER”/>

       </Transitions>

     </StartActivity>

     <UIActivity Name=”NewER”InteractionIdentifier=”NewER”

   Actions=”Submit”>

       <Transitions>

         <ActivityTransition Destination=”FillER”Action=”Submit”/>

       </Transitions>

     </UIActivity>

     <UIActivity Name=”FillER”InteractionIdentifier=”FillER”Actions=”AddItem,

   Submit”>

       <Transitions>

      <ActivityTransition Destination=”FillER”Action=”AddItem”/>

      <ActivityTransition Destination=”FillApprover”Action=”Submit”/>

    </Transitions>

  </UIActivity>

  <CodeActivity Name=”FillApprover”

CustomExecute=”FillApprover_CustomExecute”>

    <Transitions>

      <ActivityTransition Destination=”VerifyER”/>

    </Transitions>

  </CodeActivity>

  <UIActivity Name=”VerifyER”InteractionIdentifier=”VerifyER”

Actions=”Submit”>

    <Transitions>

      <ActivityTransition Destination=”MailActivity1”Action=”Submit”/>

    </Transitions>

  </UIActivity>

  <s:MailActivity Name=”MailActivity1”

    From=”expenses@example.com”Subject=”New expense report submitted;

approval required.”>

    <Transitions>

      <ActivityTransition Destination=”SwitchUserl”/>

    </Transitions>

  </s:MailActivity>

  <SwitchUserActivity Name=”SwitchUserl”>

    <Transitions>

      <ActivityTransition Destination=”ApproveER”/>

    </Transitions>

    <Bindings>

      <ActivityBinding ActivityPropertyName=”UserName”

WorkflowPropertyName=”Approver”>

    </Bindings>

  </CodeActivity>

  <UIActivity Name=”ApproveER”InteractionIdentifier=”ApproveER”

Actions=”Approve,Reject”>

    <Transitions>

      <ActivityTransition Destination=”Payment”Action=”Approve”/>

      <ActivityTransition Destination=”MailActivity2”Action=”Reject”/>

    </Transitions>

  </UIActivity>

  <s:MailActivity Name=”MailActivity2”

    From=”expenses@example.com”Subject=”Expense report was rejected.”>

    <Transitions>

      <ActivityTransition Destination=”Stop”/>

    </Transitions>

  </s:MailActivity>

  <CodeActivity Name=”Payment”CustomExecute=”Payment_CustomExecute”>

    <Transitions>

      <ActivityTransition Destination=”MailActivity3”/>

    </Transitions>

  </CodeActivity>

  <s:MailActivity Name=”MailActivity3”

    From=”expenses@example.com”Subject=”Expense report was approved.”>

    <Transitions>

      <ActivityTransition Destination=”Stop”/>

    </Transitions>

  </s:MailActivity>

  <StopActivity Name=”Stop”/>

  <Code Language=”C#”>

  private Guid_expenseReportID;

  private ExpenseReport_expenseReport;

  public ExpenseReport ExpenseReport{

       get{return_expenseReport;}

  }

  public Guid ExpenseReportID{

       get{return_expenseReportID;}

       set{_expenseReportID=value;}

  }

  protected override void OnStarting(EventArgs e){

       base.OnStarting(e);

       _expenseReport=new ExpenseReport();

       _expenseReportID=_expenseReport.ID;

  }

  private void FillApprover_CustomExecute(object sender,

ActivityExecuteEventArgs e){

       //TODO:Use current user and expense report amount to determine

approver(使用当前的用户和费用报告合计以确定批准者)

       e.Result=true;

  }

  private void Payment_CustomExecute(object sender,ActivityExecuteEventArgs

e){

       //TODO:Make payment by calling a Web service(通过调用Web服务进

行付款)

       e.Result=true;

  }

  #region Implementation of ITrackingWorkflowStateHandler

  void ITrackingWorkflowStateHandler.BeginLoad(){

  }

  void ITrackingWorkflowStateHandler.BeginSave(){

        ExpensesDB.UpdateExpenseReport(_expenseReport);

   }

   void ITrackingWorkflowStateHandler.EndLoad(){

        _expenseReport=ExpensesDB.GetExpenseReport(ExpenseReportID);

   }

   void ITrackingWorkflowStateHandler.EndSave(){

   }

   #endregion

   </Code>

 </Workflow>

Web.config

 <system.web>

   <pageFlows>

     <pageFlow name=”ExpenseReporting”

       workflow=”ExpenseReporting.workflow”

       provider=”SqlWorkflowProvider”

       startPagePath=”Default.aspx”>

       <pages>

         <add name=”NewER”pagePath=”NewER.aspx”

 behavior=”CreateWorkflow”/>

         <add name=”FillER”pagePath=”FillER.aspx”

 behavior=”ResumeWorkflow”/>

         ...

       </pages>

     </pageFlow>

   </pageFlows>

 </system.web>

Default.aspx

 <%@Page%>

 <html>

 <body>

 <form runat=”server”>

   <asp:WorkflowDataSource runat=”server”id=”pendingWorkflows”

     pageFlowName=”ExpenseReporting”Filter=”CreatedByUser”/>

   <asp:WorkflowDataSource runat=”server”id=”approvalWorkflows”

     pageFlowName=”ExpenseReporting”Filter=”AssignedToUser”/>

   Expense Reports Pending Approval(费用报告批准中):

   <asp:GridView runat=”server”DataSourceID=”pendingWorkflows”/>

   Expense Reports Needing Approval(费用报告需要批准):

   <asp:GridView runat=”server”DataSourceID=”approvalWorkflows”/>

   <a href=”NewER.aspx”>Create New Expense Report</a>

 </form>

 </body>

 </html>

Approve.aspx

 <%@Page%>

 <asp:PageFlowManager runat=”server”id=”pageFlowManager1”

 PageFlowName=”ExpenseReporting”/>

 <html>

 <body>

 <form runat=”server”>

    <asp:FormView runat=”server”DataSourceID=”pageFlowManager1”>

      <ItemTemplate>

        ...

      </ItemTemplate>

    </asp:FormView>

    <asp:ActionButton runat=”server”Text=”Approve”>

      <ClickActions>

    <asp:PageFlowAction Type=”Resume”ResumeAction=”Approve”/>

      </ClickActions>

    </asp:ActionButton>

    <asp:ActionButton runat=”server”Text=”Reject”>

      <ClickActions>

        <asp:PageFlowAction Type=”Resume”ResumeAction=”Reject”/>

      </ClickActions>

    </asp:ActionButton>

  </form>

  </body>

</html>

图5示出可结合本发明各方面使用的示例性图形界面(例如,一种专用形 式)。用于页面流510的这样一种费用报告应用程序的特征在于用于例如提交 和批准费用报告的web应用程序。除了各种活动和控制流结构之外,工作流还 展示如何切换相关联的用户。页面流510还展示查询用于在应用程序工作流中 显示的可用的进程中的工作流列表。例如,工作流可以基于工作流在挂起期间 的状态(例如与工作流的用户有关的信息)驱动用户界面(UI)。因此,提供 执行到特定点的交互工作流,并且为宿主应用程序提供反馈。此外,宿主应用 程序可以基于挂起状态改变工作流的外观。如在费用报告的上下文中所解释 的,可以定义工作流类型(例如,通过编程或通过可视工具),并且宿主应用 程序可以订阅挂起事件以便将挂钩提供到工作流的执行中。然后,可以引发一 个或多个挂起事件并且基于该事件中的信息(例如,关于工作流的当前用户的 信息),UI外观可改变。因此,数据可以传入或传出工作流类,并且可以为 运行时的交互定义自定义特征(例如,强类型工作流)。另外,宿主可以查询 工作流实例来标识使工作流变为挂起和/或闲置的当前交互活动。

图6示出可在工作流定义内对挂起点建模的系统600的框图,其中数据正 在传入和传出工作流以形成一个交互的工作流。通常,可以例如根据时间、或 者通过切换当前用户,而在具有作为工作流实例一部分的交互活动组件610的 工作流实例640中引发一个挂起事件来启动工作流的执行中的一个挂起。工作 流可以通过执行所包含的StartActivity(启动活动)启动执行,并当StopActivity (停止活动)被执行后结束。在执行过程中,检查每个活动来验证它是否可以 被执行。例如,如果该活动不能执行,则工作流被(例如)挂起。如果活动可 以被执行,则调用相关联的Execute(执行)方法,并且如果该方法返回一个 成功结果,则使用适当的活动转换来确定下一个活动。工作流可以出于多个原 因被挂起,例如:活动执行的取消、活动不能继续执行、被引入用来延迟后续 执行的特殊延迟、以及要求由不同用户后续执行而进行的用户上下文切换。一 旦工作流实例被挂起,它可以被保存/串行化至从中可随后检索、解串行化以及 恢复它的数据库或等效的存储中。如果活动执行导致错误,且该错误没有被处 理,则工作流还会进入错误状态。

如图6所示,交互活动组件610可以通过与工作流引擎/运行库635相关联 的交互服务620引发事件。之后,工作流被挂起并且宿主630可以与工作流实 例640交换数据(例如,获得数据)。然后宿主可以通过调用恢复工作流执行 的交互活动服务620来恢复工作流。因此,用户输入和相关联的交互可以在要 求用户输入的各交互间隙期间提供至工作流,以便允许工作流与和工作流相关 联的宿主应用程序之间受控/同步地数据交换。

图7-9示出根据本发明的一个方面的工作流执行流的示例性流程图。尽管 示例性方法在此处被示出并描述为表示各种事件和/或动作的一系列框,但是本 发明不受这种框所示出的顺序的限制。例如,除了此处所示出的顺序之外,某 些动作或事件可根据本发明按不同顺序发生和/或与其它动作或事件并发。另 外,不是所有示出的框、事件或动作都是实现根据本发明的方法所必需的。此 外,将意识到,根据本发明的示例性方法和其它方法可联系此处所示出和描述 的方法以及没有示出或描述的其它系统和装置来实现。如图7所示,在方法700 中,工作流过程705执行并前进到过程中的下一个动作。在710处,工作流执 行可以验证要被执行的该动作是否意味着工作流的结束。如果是,则在720处, 工作流的执行结束。否则,方法前进至动作730,其中检查要被工作流执行的 该动作以验证它是否是一个交互活动。如果是,则如下文所详细描述的,在740 处,工作流被挂起以便允许与宿主应用程序的交互。否则,方法返回动作705, 其中工作流执行当前动作并前进至下一个动作。

如图7所示,以及在740处工作流被挂起之后,在750,执行流继而向宿 主引发一个挂起事件。这样,并且如图8所示,当工作流实例在860处被挂起 时,在862处,宿主和工作流之间交换数据。这样,数据可以被传入和/或传出 工作流。这可以包括在864处从数据流实例中获得数据和/或在866处由宿主设 置数据。因此,用户输入以及相关联的交互可以在要求用户输入的各交互间隙 期间被提供至工作流,以便允许工作流与和工作流相关联的宿主应用程序之间 可控/同步地数据交换。因此,在工作流的执行中的被定义的各时刻处,用户上 下文可以与一个工作流实例相关联。

在870处,执行验证来检查被宿主激发的数据是否是一个恢复事件。如果 不是,则工作流实例可保持在挂起的状态以便恢复数据交换,并且方法返回到 动作862。否则,方法前进至图9,其中宿主可向数据流发送事件来恢复执行 (在980处)。在982处,对工作流是否被加载进行验证。如果是,则在986 处,工作流接收恢复事件并随后返回至动作705来执行执行流的下一个动作。 否则,并且如果工作流没有被加载,则在984处,基于与工作流相关联的标识 (例如,当工作流实例被创建时)来加载工作流,并且然后前进至动作986以 恢复工作流。

为了提供用于所公开的本发明的各个方面的应用背景,图10和图11以及 下面的讨论意在提供对所公开的主题的各个方面在其中被实现的合适环境的 简单、总体描述。尽管是在运行于一个计算机和/或多个计算机上的计算机程序 的计算机可执行指令的总体上下文中描述本主题,但是本领域的技术人员将认 识到,还可以结合其它程序模块来实现本发明。一般来说,程序模块包括执行 特定任务和/或实现特定抽象数据类型的例程、程序、组件、数据结构等。此外, 本领域的技术人员将意识到,本发明方法可用其它计算机系统配置来实现,这 些配置包括单处理器或多处理器计算系统、小型计算设备、大型计算机以及个 人计算机、手持式计算设备(例如,个人数字助理(PDA)、电话、手表......)、 基于微处理或可编程消费类或工业类电子产品等。所示出的方面还可以在分布 式计算环境中执行,在分布式计算环境中,任务由通过通信网络链接的远程处 理设备执行。然而,本发明的一些(如果不是所有的)方面可在独立的计算机 上实践。在分布式计算环境中,程序模块可以位于本地或远程存储器存储设备 中。

参考图10,描述包括计算机1012的用于实现本发明的各个方面的示例性 环境1010。计算机1012包括处理单元1014、系统存储器1016以及系统总线 1018。系统总线1018将包括(但不限于)系统存储器1016等系统组件耦合到 处理单元1014。处理单元1014可以是各种可用处理器的任一种。双微处理器 以及其它多个处理器体系结构也可用作处理单元1014。

系统总线1018可以是几种类型的总线结构中的任一种,包括采用任何种 类的可用总线体系结构的存储器总线或存储器控制器、外围总线或外部总线、 和/或局部总线,该可用总线体系结构包括,但不限于,11位总线、工业标准 体系结构(ISA)、微通道体系结构(MSA)、扩展型ISA(EISA)、智能驱 动器电子电路、VESA局部总线(VLB)、外围部件互联(PCI)、通用串行 总线(USB)、高级图形端口(AGP)、个人计算机存储器卡国际联合总线 (PCMCIA)以及小型计算机系统接口(SCSI)。

系统存储器1016包括易失性存储器1020和非易失性存储器1022。包含用 于在计算机1012内的元件之间传输信息的基本例程的基本输入/输出系统 (BIOS)存储于非易失性存储器1022中。作为说明,而不是限制,非易失性 存储器1022可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编 程ROM(EPROM)、电可擦除ROM(EEPROM)或闪存。易失性存储器1020 包括随机存取存储器(RAM)并作为外部高速缓冲存储器。作为说明,而不是 限制,RAM以多种形式可得,诸如同步RAM(SRAM)、动态RAM(DRAM)、 同步DRAM(SDRAM)、双数据率SDRAM(DDR SDRAM)、增强型SDRAM (ESDRAM)、同步链环(Synchlink)DRAM(SLDRAM)以及直接存储器 总线(Rambus)RAM(DRRAM)等。

计算机1012还包括可移动/不可移动、易失性/非易失性计算机存储介质。 例如,图10示出盘存储1024。盘存储1024包括,但不限于,如磁盘驱动器、 软盘驱动器、磁带驱动器、Jaz驱动器、Zip驱动器、LS-100驱动器、闪存卡、 或记忆棒等设备。另外,盘存储1024可以包括与其它存储介质分开或组合的 存储介质,其包括,但不限于,诸如光盘ROM设备(CD-ROM)、可记录CD 驱动器(CD-R驱动器)、CD可重写驱动器(CD-RW驱动器)或数字多功能 盘ROM驱动器(DVD-ROM)等光盘驱动器。为了方便盘存储设备1024与系 统总线1018的连接,通常采用诸如接口1026等可移动或不可移动接口。

应该意识到,图10描述了作为用户与合适的操作环境1010中所描述的基 本计算机资源之间的中介的软件。这样的软件包括操作系统1028。能存储于盘 存储1024上的操作系统1028用来控制并分配计算机系统1012的资源。系统 应用程序1030通过或是存储于系统存储器1016或是存储于盘存储1024上的 程序模块1032和程序数据1034利用操作系统1028对资源的管理。应该意识 到,此处描述的各种组件可以与各种操作系统或操作系统的组合一起实现。

用户通过(诸)输入设备1036向计算机1012输入命令或信息。输入设备 1036包括,但不限于,诸如鼠标、跟踪球、指示笔、触摸垫等定点设备、键盘、 话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、TV调频卡、数码照相 机、数码摄像机、web摄像头等。这些或其它输入设备经由(诸)接口端口1038 通过系统总线1018连接到处理单元1014。(诸)接口端口1038包括,例如, 串行端口、并行端口、游戏端口以及通用串行总线(USB)。(诸)输出设备 1040使用与(诸)输入设备1036同样类型的端口中的一些端口。因此,例如, 可以使用USB端口来向计算机1012提供输入并且将计算机1012中的信息输 出至输出设备1040。提供输出适配器1042用来示例存在诸如监视器、扬声器、 以及打印机等一些输出设备1040,以及需要专用适配器的其它输出设备1040。 作为说明而非限制,输出适配器1042包括提供输出设备1040与系统总线1018 之间的连接手段的显卡和声卡。应该注意,其它设备和/或设备的系统(例如(诸) 远程计算机1044)提供输入和输出能力两者。

计算机1012可以采用与如(诸)远程计算机1044等一个或多个远程计算 机的逻辑连接而在联网环境中操作。(诸)远程计算机1044可以是个人计算 机、服务器、路由器、网络PC、工作站、基于微处理器的电器、对等设备或 其它常见的网络节点等等,并且通常包括与关于计算机1012所描述的元件中 的许多或所有元件。为了简明起见,对于(诸)远程计算机1044只描述了存 储器存储设备1046。(诸)远程计算机1044通过网络接口1048与计算机1012 逻辑连接并且然后通过通信连接1050被物理连接。网络接口1048包括诸如局 域网(LAN)和广域网(WAN)等通信网络。LAN技术包括光纤分布式数据 接口(FDDI)、铜分布式数据接口(CDDI)、以太网/IEEE802.3、令牌环/IEEE 802.5等。WAN技术包括(但不限于)点对点链路、诸如综合业务数字网络 (ISDN)及其变型等电路交换网络、分组交换网络、以及数字用户线(DSL)。

(诸)通信连接1050指的是用来将网络接口1048与总线1018相连接的 硬件/软件。尽管通信连接1050为了清楚说明起见被示为在计算机1012内,但 它还可以在计算机1012外部。连接到网络接口1048所必需的硬件/软件包括(仅 出于示例性目的)内部和外部技术,例如,包括常规电话类别调制解调器、电 缆调制解调器和DSL调制解调器等调制解调器、ISDN适配器、和以太网卡。

图11是用来实现带有本发明的交互组件的工作流的示例计算环境1100的 示意性框图。系统1100包括一个或多个客户机1110。(诸)客户机1110可以 是硬件和/或软件(例如,线程、进程、计算设备)。系统1100还包括一个或 多个服务器1130。(诸)服务器1130可以是硬件和/或软件(例如,线程、进 程、计算设备)。服务器1130可以容纳线程以便通过采用例如此处描述的组 件来执行转换。客户机1110与服务器1130之间的一个可能的通信可以采用适 用于在两个或多个计算机进程之间传输的数据分组的形式。系统1100包括能 用来帮助(诸)客户机1110与(诸)服务器1130之间进行通信的通信框架1150。 (诸)客户机可操作地连接到能被用来存储(诸)客户机1110本地信息的一 个或多个客户机数据存储1160。类似地,服务器1130可操作地连接到能被用 来存储服务器1130本地信息的一个或多个服务器数据存储1140。

以上已描述的包括各种示例性方面。当然,不可能为了描述这些方面而描 述每个可以想到的元件或方法的组合,但是本领域的普通技术人员可以认识到 可能会有许多进一步的组合与排列。因此,此处所描述的方面意在包括落入所 附权利要求的精神和范围内的所有这些更改、修改以及变型。此外,就在详细 描述或者权利要求中使用的术语“包括”的意思来说,这个术语意在以当术语 “包括”作为权利要求中的过渡词使用时所理解的那种方式表示为“包括在 内”。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号