详细描述
以下参考附图更完整地描述了各实施例,附图形成各实施例的一部分,并示出了用于实施各实施例的具体示例实施例。然而,其它实施例可以用许多不同形式来实现,并且不应被解释为限于此处所述的实施例;相反,提供这些实施例以使本公开内容全面且完整。各实施例可被实施为方法、系统或设备。因此,各实施例可以采用硬件实现、完全软件实现或组合了软件和硬件方面的实现的形式。因此,以下详细描述不在限制的意义上考虑。
简言之,一种同步方法被安排成允许包括生产性套件应用程序的客户机机器与包括诸如客户关系管理,即CRM应用程序等业务线(LOB)应用程序的服务器机器之间的同步。该客户机机器经由web服务器调用发送请求以更新、删除或创建LOB应用程序中的新实体。该LOB应用程序提取从客户机机器接收到的请求,其中该请求可用XML数据表示来提供。该服务器机器经由嵌入在电子邮件中的控制消息来发送请求以更新、删除或创建生产性套件应用程序中的项目,其中该项目与一LOB实体相关联。该控制消息向用户隐藏,并且由客户机机器提取以便评估、冲突解决、特性升级以及LOB实体和生产性套件应用程序项目之间的绑定。
各实施例的逻辑操作被实现为(1)在计算机系统上运行的计算机实现的步骤的序列,和/或(2)计算系统内的互连机器模块。实现是取决于实现该实施例的计算系统的性能要求的选择问题。因此,构成此处所描述的实施例的逻辑操作被替换地称为操作、步骤或模块。
各种模块、技术和方法此处可以在诸如程序模块等由一个或多个计算机或其它设备执行的计算机可执行指令的一般上下文中描述。一般而言,程序模块包括用于执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。通常,程序模块的功能可在各实施例中按需组合或分布。
这些模块和技术的一个实现可被储存在某一形式的计算机可读介质上或可通过其传送。计算机可读介质可以是可由计算机访问的任何可用的介质。作为示例而非局限,计算机可读介质可包括“计算机存储介质”和“通信介质”。
“计算机存储介质”包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失性和非易失性,可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机访问的任一其它介质。
“通信介质”通常以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,通信介质也包括任一信息传送介质。术语“已调制数据信号”指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非局限,通信介质包括有线介质,如有线网络或直接连线连接,以及无线介质,如声学、RF、红外和其它无线介质。上述任一的组合也应当包括在计算机可读介质的范围之内。
贯穿本说明书对“一个实施例”、“一实施例”或“一示例实施例”的表述意味着所描述的具体特征、结构或特性被包括在至少一个实施例中。由此,对这些短语的使用可以表示多于仅仅一个实施例。此外,所描述的特征、结构或特性在一个或多个实施例中可以用任何适当的方式来组合。
然而,本领域的技术人员可以认识到,各实施例可以在没有这些具体细节中的一个或多个的情况下,或者用其它方法、资源、材料等来实施。在其它情况下,未详细示出或描述公知的结构、资源或操作仅仅是为了避免使各实施例的各方面变得晦涩。
示例计算环境
图1示出了通用计算环境100,它可用于实现此处所描述的技术。计算机环境100仅为计算环境的一个示例,并非对计算机和网络体系结构的使用范围或功能提出任何局限。也不应将计算机环境100解释为对示例计算机环境100中示出的任一组件或其组合具有任何依赖或需求。
计算机环境100包括计算机102形式的通用计算设备。计算机102的组件可包括但不限于,一个或多个处理器或处理单元104、系统存储器106以及将包括处理器104的各类系统组件耦合至系统存储器106的系统总线108。
系统总线108表示若干种总线结构类型的一种或多种,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各类总线体系结构的处理器或局部总线。作为示例,这类体系结构可包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线、外围部件互连(PCI)总线(也称为小背板(Mezzanine)总线)、PCI Express总线、通用串行总线(USB)、安全数字(SD)总线或IEEE 1394(即火线)总线。
计算机102可包括各种计算机可读介质。这类计算机可读介质可以是可由计算机102访问的任一可用介质,包括易失性和非易失性介质、可移动和不可移动介质。
系统存储器106包括诸如随机存取存储器(RAM)110等易失性存储器,和/或诸如只读存储器(ROM)112或闪存RAM等非易失性存储器形式的计算机可读介质。基本输入/输出系统(BIOS)114包括如在启动时帮助在计算机102内的元件之间传输信息的基本例程,它被储存在ROM 112或闪存RAM中。RAM 110通常包含处理单元104立即可访问和/或当前正在操作的数据和/或程序模块。
计算机102也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。作为示例,图1示出了对不可移动、非易失性磁介质(未示出)进行读写的硬盘驱动器116,对可移动、非易失性磁盘120(如,“软盘”)进行读写的磁盘驱动器118,以及对可移动、非易失性光盘124,如CD-ROM、DVD-ROM或其它光介质进行读写的光盘驱动器122。硬盘驱动器116、磁盘驱动器118和光盘驱动器122的每一个通过一个或多个数据介质接口125连接到系统总线108。或者,硬盘驱动器116、磁盘驱动器118和光盘驱动器122可通过一个或多个接口(未示出)连接到系统总线108。
盘驱动器及其相关联的计算机可读介质为计算机102提供了计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。尽管该示例示出了硬盘116、可移动磁盘120和可移动光盘124,然而可以理解,可储存可由计算机访问的数据的其它类型的计算机可读介质,如磁带盒或其它磁存储设备、闪存卡、CD-ROM、数字多功能盘(DVD)或其它光存储、随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)等,也可用于实现示例性计算系统和环境。
多个程序模块可储存在硬盘116、磁盘120、光盘124、ROM 112和/或RAM 110中,作为示例,包括操作系统126、一个或多个应用程序128、其它程序模块130以及程序数据132。这些操作系统126、一个或多个应用程序128、其它程序模块130和程序数据132(或其某一组合)中的每一个可实现支持分布式文件系统的所有或部分常驻组件。
用户可以通过诸如键盘134和定点设备136(如,“鼠标”)等输入设备向计算机102输入命令和信息。其它输入设备138(未具体示出)可包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪和/或其类似物。这些和其它输入设备通常通过耦合至系统总线108的输入/输出接口140连接到处理单元104,但也可以通过其它接口和总线结构连接,如并行端口、游戏端口或通用串行总线(USB)。
监视器142或其它类型的显示设备也通过接口,如视频适配器144连接到系统总线108。除监视器142之外,其它输出外围设备可包括诸如扬声器(未示出)和打印机146等组件,它们可通过I/O接口140连接到计算机102。
计算机102可以使用到一个或多个远程计算机,如远程计算设备148的逻辑连接在网络化环境中操作。作为示例,远程计算设备148可以是PC、便携式计算机、服务器、路由器、网络计算机、对等设备或其它常见的网络节点等等。远程计算设备148被示为可包括此处相对于计算机102所描述的许多或所有元件和特征的便携式计算机。或者,计算机102也可在非联网的环境中操作。
计算机102和远程计算机148之间的逻辑连接被描述为局域网(LAN)150和通用广域网(WAN)152。这类网络环境常见于办公室、企业范围计算机网络、内联网以及因特网。
当在LAN网络环境中实现时,计算机102通过网络接口或适配器154连接至局域网150。当在WAN网络环境中使用时,计算机102通常包括调制解调器156或用于通过广域网152建立通信的其它装置。调制解调器156可以对计算机102是内置或外置的,它通过I/O接口140或其它适当的机制连接至系统总线108。可以理解,示出的网络连接是示例性的,也可以使用在计算机102和148建立至少一个通信链路的其它手段。
在诸如用计算环境100示出的网络化环境中,相对于计算机102描述的程序模块或其部分可储存在远程存储器存储设备中。作为示例,远程应用程序158驻留在远程计算机148的存储器设备中。出于说明的目的,应用程序和诸如操作系统等其它可执行程序组件在此处被示出为离散的框,尽管可以认识到,这些程序和组件在不同的时刻驻留在计算设备102的不同存储组件中,并由计算机的至少一个数据处理器执行。
以下是在MIcrosoft Outlook
中实现的支持Microsoft Outlook
信息与LOB系统的同步的示例接口和配置的描述。在其它实施例中,代替MicrosoftOutlook
或作为其补充,可使用不同的生产性套件应用程序。
示例配置
图2示出了其中客户机设备被安排成与LOB系统同步的示例系统。如图所示,诸如Microsoft Outlook
等生产性套件(220)在客户机设备上可用。Microsoft Outlook
维护一个或多个项目,诸如:日历、约会、联系人、电子邮件等。每一生产性套件项目(230)包括与该生产性套件相关的一组标准特性(231),以及与LOB系统相关的一个或多个数据项(LOB数据232)。附加的系统特性也与该项目相关联,诸如是将数据和特性绑定到项目所必需的(例如,系统特性233中的绑定信息)。在项目外部(240),有一组与同步相关的系统特性(242),以及用于高速缓存同步数据的数据存储(241)。
单个用户必须能够在多台机器上安装客户端软件。然而,仅主机器能够与LOB系统同步。其它机器被认为是次要机器。LOB系统与主机器同步地返回一业务响应。该LOB系统与一格式化器接口以向主机器提供面向LOB系统的“命令”,诸如创建、更新或删除命令。在任何时刻,可以仅有一台主机器。包括其自己的生产性套件副本(270)的次要机器(例如,客户机260)仍包含主机器上可用的信息的副本,包括绑定项目(例如,生产性项目280,包括特性281-283)的业务和同步状态。所描述的系统可被安排成在服务器上维护一同步高速缓存,以将来自服务器的业务状态响应分发到次要客户机。
生产性套件项目(例如,项目230)应持有供系统识别和呈现绑定项目的足够信息。LOB数据(包括升级的特性)应与生产性套件项目一起储存且与其相关联。储存在生产性套件项目中的系统信息应是静态的。换言之,它不应在其一旦被设置时改变,以避免引入“人为”同步冲突。系统应储存与生产性套件项目外部的同步有关的同步数据和系统特性。可使用隐藏在特性中的令牌来指定哪一机器是主机器。在某些情况下,可传递令牌,使得主机器可在诸如灾难恢复等情况下改变。
图3示出了当由LOB系统创建一新的绑定项目时如何设置绑定项目(330)和LOB实体(370)之间的相关。首先,如由步骤1(391)所指示地在LOB系统(360)中创建LOB实体(370),其中LOB实体(370)包括一标识符(LOBID 372)。LOB系统(360)向服务器(340)传送一创建由LOBID 372标识为绑定项目的LOB实体的请求(392),如步骤2所指示的。服务器(340)接收该请求(392),并向该请求(392)应用一格式化器(250),使得一命令(394)被传送给主客户机(310)以创建绑定。用于客户机(310)上的生产性套件(例如,Outlook)的同步子系统(320)在下一次同步期间接收该命令(392),并如由步骤5所指示地创建与一Outlook项目(350)的绑定。该绑定项目具有分配给它的唯一标识符(BIID 332),并且通过LOBID 334与该LOB实体相关联。
图4示出了当在生产性套件中创建一新的绑定项目时如何设置绑定项目和LOB实体之间的相关。首先,如由步骤1(491)所指示地在生产性套件中创建项目(430)。接着,生产性套件(例如,Outlook)中的同步子系统(420)将一创建绑定命令传送(492)个LOB系统(460),如由步骤2所指示的。LOB系统(460)在与客户机的下一次同步期间接收该创建绑定命令,并创建由LOBID 472标识的LOB实体(470),如由步骤3(493)所示的。LOB系统(460)可任选地在步骤4(494)处将LOBID(472)传回客户机(410),其中客户机(410)然后可将该LOBID(434)与该绑定项目(430)相关联,如步骤5(495)所示。在某些情况下,LOBID(472)不被传回生产性套件。
图5示出了当在生产性套件中更新或删除一绑定项目时如何改变绑定项目和LOB实体之间的相关。首先,如由步骤1(591)所指示地在生产性套件中改变项目(530)。接着,生产性套件(例如,Outlook)中的同步子系统(520)如由步骤2(592)所指示地将更新或删除传送(例如,通过web服务调用)给LOB系统(560)。LOB系统(560)在与客户机(510)的下一次同步期间接收该更新/删除绑定命令,并修改或删除由LOBID 572标识的LOB实体(570),如步骤3(593)所示。在其中生产性套件不知道LOBID(534)的某些情况下,LOB系统(560)参考绑定标识符BIID 532来确定要修改或删除哪一LOB实体(570)。
图6示出了当由LOB系统更新或删除一绑定项目时绑定项目与LOB实体之间的相关如何改变。首先,如由步骤1(691)所指示地在LOB系统(660)中修改或删除LOB实体(670)。LOB系统(660)向服务器(640)传送请求(692)以更新或删除由送至服务器的请求(692)中的LOBID(672)和BIID中的至少一个所标识的LOB实体。服务器(640)接收该请求(692),并向该请求(692)应用格式化器(650),使得如由步骤4所指示地传送了改变或删除绑定项目的命令或控制消息(694)。主客户机(610)上用于生产性套件(例如,Outlook)的同步子系统(620)在下一次同步期间接收该命令,并如由步骤5(695)所指示地修改或删除对适当绑定项目(630)的绑定(例如,BIID 532和LOBID 634)。
上述同步子系统被部署到可以是公司网络内部或外部的客户机机器。预想了到公司网络的虚拟专用网,即VPN连接,经由诸如Microsoft Exchange Server等服务器应用程序的HTTP型远程同步连接也是可以的。LOB同步可以作为客户机设备上的后台线程运行,只要生产性套件正在运行。在生产性套件中所作出的改变经由任何适当的RPC机制(例如,公司网络、VPN、HTTP等)被提交给LOB系统,而对LOB系统的改变期望仅在公司网络上作出。文件同步可以在公司网络内诸如经由Microsoft Active Directory(现用目录)以任何适当的方式来处理,其中Microsoft Active Directory被安排成展示用于此目的的.NETAPI。
示例同步接口定义
对于每一绑定项目类型,同步系统将取决于所发生的改变(创建/更新/删除)来执行不同的动作。除此之外,可作为处理查询控制消息的结果来调用“Query(查询)”动作。以下指定了需要被传入这些动作中的每一个以及从中返回的信息。
Create(创建)是由系统在处理客户机侧绑定项目创建时调用的。对于Create的参数包括BoundItemID(绑定项目ID)、NewItemData(新项目数据)以及CultureName(文化名称)。对于Create的返回值包括LOBID、BusinessStatus(业务状态)以及Description(描述)。BoundItemID是用于绑定项目的客户机生成的唯一标识符串。NewItemData是由用于LOB系统的模式定义的XML文档,使得用于绑定项目的LOB数据被正确提供。CultureName是应当用于从Create调用中得出的业务状态、描述和任何其它消息的文化的名称。LOBID是LOB生成的作为用于项目类型的唯一标识符的串(例如,ContactID(联系人ID)唯一地标识了联系人)。BusinessStatus是对应于作为Create的结果必须被分配给绑定项目的新业务状态的简短名称的串。它是LOB系统提供的任意值,同步不对该值的内容作出任何假设。理念是该值能用于过滤处于相同状态的项目。Description是一可任选串,它是关于BusinessStatus的解释。它将是绑定项目信息的一部分,使得它在需要时可以是UI上所展示的描述。
Update由系统在处理客户机侧绑定项目更新时调用。对于Update的参数包括BoundItemID、RequestID(请求ID)、LOBID、PreviousItemData(先前的项目数据)、NewItemData以及CultureName。对于Update的返回值包括BusinessStatus和Description。RequestID是用于更新消息的唯一标识符,以允许LOB系统标识重复。如果发送了重复的更新消息,则必须发送相同的RequestID。PreviousItemData是对应于来自最后一次同步状态的绑定项目的所有BoundData的XML文档。
Delete(删除)是由系统在处理客户机侧绑定项目删除时调用的。对于Delete的参数包括BoundItemID、LOBID、PreviousItemData和CultureName。对于Delete的返回值包括BusinessStatus和Description。
QueryResult(查询结果)是由系统在处理查询控制消息时调用的。对于QueryResult的参数是包含对于所有现有的指定类型的绑定项目的BoundItemID及其相应的LOBID的列表的XML文档。对QueryResult没有返回值。
示例控制消息定义
本节指定了每一控制消息类型中所期望的信息。控制消息包括:创建控制消息、更新控制消息、删除控制消息和查询控制消息。
创建控制消息包括用于以下各项的字段:BoundItemID、LOBID、BoundItemType(绑定项目类型)和LOBData(LOB数据)。更新控制消息包括用于以下各项的字段:LOBID、BoundItemType和LOBData。删除控制消息包括用于以下各项的字段:LOBID和BoundItemType。查询控制消息包括用于BoundItemType的字段。
BoundItemID是要分配给新的绑定项目的唯一标识符。BoundItemID是如将在以下更详细描述的由格式化器生成的。BoundItemType是对应于绑定项目类型的完全限定名的串,包括解决方案和版本。BoundItemType可由系统用于定位相应的绑定项目定义,它描述了要被绑定到生产性套件的特性以及生产性套件项目如何与LOB实体同步。如上所述,LOBID是由LOB系统分配给绑定项目的唯一标识符,而LOBData是包含用于绑定项目的所有绑定数据的XML文档。
示例同步系统
该系统可被安排成使得它不依赖于来自生产性套件(例如,MicrosoftOutlook)的事件来调用和检测同步。为了检测改变(创建/更新/删除),该系统使用一种在生产性套件、同步数据存储(SDS)和直接从LOB系统获得的信息之间的三向同步方法。数据可以从系统中的多个入口点改变。信息可在包括从web访问、移动设备以及从其它客户机机器的许多不同地点改变。改变最终将被同步到主客户机机器(例如,经由Outlook/Exchange同步)。
LOB系统可基于唯一RequestId来检测并处理重复请求。与LOB系统的出站(客户机到服务器)通信可通过web服务来作出,而入站(服务器到客户机)消息将经由服务器应用程序(例如,Microsoft Exchange)流入客户机。
冲突检测也由系统在LOB系统和生产性套件改变同一绑定项目时处理。如果系统检测到用户和LOB系统更新了同一绑定项目,则将标识一冲突并且冲突分解将适当地处理该冲突。
LOB系统支持在接收到同步web服务调用时提供立即的业务响应。LOB系统无需接收关于Create、Update、Delete或Query命令的成功处理的确认或出错通知。
本节描述了LOB系统和客户机之间的高级通信流程。以下各图提供了所支持的可能的通信流程的概观。
图7示出了在退(push)操作期间在客户机和服务器之间的示例通信流程。推操作如将描述的可由客户机(710)或服务器(750)发起。
步骤1示出客户机(710)发起流程,其中改变检测过程由客户机上的系统执行。在步骤1处,系统中的同步逻辑(730)标识新的、经更新的和被删除的绑定项目,并创建(791)需要被提交给LOB系统的虚拟改变请求列表。该虚拟列表可在诸如虚拟出站队列(VQQ 712)等队列中提供。该列表在步骤2处当存在到LOB系统(例如,服务器750)的连接(例如,web服务调用792)时被处理。如果在步骤2处没有标识出与LOB系统的连接,则在下一次运行改变检测过程时重试该列表。
当创建虚拟请求列表时,该系统还考虑到新的传入控制消息(来自LOB的创建、更新、删除通知,来自控制消息列表714)以检测并适当地解决或引发冲突。冲突由同步逻辑(730)在生产性套件和LOB系统中修改了同一项目或在一方试图更新一项目而另一方正试图删除该项目时检测到。对于不导致冲突的每一检测到的改变(创建、更新、删除),系统通过调用诸如在同步接口定义中描述的web服务(792)来向LOB系统(例如,服务器750)提交请求。
LOB系统(例如,具有LOB应用程序760的服务器750)还可在LOB系统上发生相关动作时触发客户机(710)上创建、更新、删除或查询动作的执行。在步骤3处,LOB系统调用由格式化器(770)展示的web服务(793)。在创建请求的情况下,格式化器(770)返回将由系统用于标识新的绑定项目的唯一ID。关于作为web服务调用的一部分发送的信息的细节,参见此处所讨论的同步接口定义一节。
在步骤4处,格式化器(770)生成控制消息(794),并将其发送给与生产性套件相关联的指定邮箱(例如,Outlook邮箱)。控制消息(794)从一专用帐户发送。当控制消息被传送到目标邮箱(例如,由Microsoft ExchangeServer,或某一其它电子邮件和目录服务器780)时,它按照防止对控制消息的意外删除的服务器侧规则被自动移至一隐藏文件夹。该服务器侧规则由客户机维护(创建和重新创建)(例如,参见Outlook插件规范以获得更多细节)。
在步骤5处,经由为生产性套件应用程序(720)格式化的电子邮件类型的机制将控制消息(795)传送到客户机(710)。客户机(710)在步骤6(796)处通过执行按需创建、更新和删除绑定项目的同步过程来处理该控制消息(795)。当处理控制消息时,该系统还考虑到需要被传递给LOB系统来适当地检测并标记冲突的本地改变(绑定项目的创建、更新、删除)。
图8和9示出了可在另一示例系统中使用的拉(pull)操作,其中拉可以由同步web服务或LOB系统所模拟的轻推(nudge)来发起。
同步逻辑
绑定项目可被改变是因为用户直接或通过同步(例如,web访问接口)间接地改变它们。需要比较项目并确定客户机和LOB系统之间的差别来决定是否应将一侧上的改变传播到另一侧的过程。
改变可以用四种方式之一来发生。第一,用户可在生产性套件中改变绑定项目。系统检测并自动向LOB系统提交改变请求。第二,改变可通过另一客户机来作出,并且这通过同步同时影响生产性套件客户机和LOB系统两者。对生产性套件和LOB系统的改变可以按任何顺序以任何延迟发生。第三,改变可通过智能电话(Smartphone)、web访问或任何其它手段作出,并且经由服务器同步到生产性套件。这些改变需要通过一同步过程来找到。第四,改变可以在LOB系统本身中作出。每一类改变必须都被同步过程考虑在内。
本地同步数据存储(SDS)储存原始版本。SDS与生产性套件和LOB系统同步并随后用于跟踪两者之间的增量。增量然后被添加到包含对LOB系统的所有服务请求的虚拟请求队列。更新过程确定何时需要将改变传播到LOB系统。同步逻辑形成请求,并在有连接时将其提交给LOB系统。当更新生产性套件时,同步逻辑使用LOB系统的信息来更新Outlook,然后更新SDS。
大多数绑定数据在两个地方存在:作为生产性套件中的项目以及在LOB系统中。假定每一副本包含在另一副本上不存在的额外数据。同步系统负责同步:一共享的特性子集被储存在绑定项目的BoundData特性中,且作为同步的结果,可创建或毁去绑定项目的存在,例如项目。同步系统假定单个真实性定义:LOB系统总是正确的。同时,同步系统对LOB实体没有任何直接访问,并且因此在SDS中保存有关它假设储存在LOB系统中的单独副本。
同步过程可被划分成若干个不同的阶段。在清扫(sweep)阶段,将邮箱中的所有绑定项目与SDS进行比较。邮箱和SDS之间的引用完整性的任何失配被检测到并被立即修补。检测经修改的项目并标记它以供进一步处理。然后检测被删除的项目并将其传递给同步器,使得适当的删除请求可被发送给LOB系统。在某些实现中,上述同步过程的各阶段可被合并成单个集成过程,其中各种功能(例如,绑定、清扫、解决等)可被组合成一简化算法。该简化算法可实现改进的执行速度或实现某些其它改进的效率(例如,减少存储器/盘使用、消除冗余等)。
所标识的任何控制消息在第二阶段中处理。接着,对被标记为已修改的所有项目进行特性升级。将所得的经更新的XML数据表示与SDS副本进行比较并通知同步器。同步器在后台线程中运行,并且在此实施例中使用SDS副本。同步器负责提交Create、Update和Delete请求以及处理查询。
SDS副本包含上述相同的特性。在正常情况下,对于生产性套件项目和在SDS副本中EntryID(入口ID)、BoundItemID、BoundItemType和LOBID是相同的。生产性套件项目和SDS副本之间的任何差别被解释为更新LOB实体的请求。如果不是,则引用完整性被打破,并且必须进一步调查生产性套件项目。任何差别的主要原因是:项目是由用户创建的,对该项目还没有SDS副本,但是BoundData特性是可读的,并且该项目被用户复制、移动或删除,EntryID和BoundItemID之间的映射被打破;可能有全部都与单个SDS副本相关的零个、一个或多个项目,并且BoundData特性是可读的,用户已接收到了经更新的会议请求或任务请求;它具有被破坏的相应约会或任务(绑定项目)。项目的EntryID已被保留,但是BoundData特性不再是可读的。从另一用户接收到了外绑定项目的副本。BoundData特性不可读,并且对该项目在SDS中没有相应的副本。一副本或一绑定项目已被发送给另一用户并接着被发回,这是先前的可能性的变型,并且它不能被识别为特殊情况。可能已发生了数据破坏。
存在这样一个内置假设:BoundItemID是唯一的(主键),并且BoundItemType+LOBID的组合也是唯一的(次键)。这些限制必须在SDS数据库中强制实施。当然,邮箱中EntryID也是唯一的。其中BoundData特性不可读或其中储存在内部重复特性不匹配Outlook项目上的相同特性(BoundItemID、BoundItemType和LOBID)的任何项目被认为是破坏。作为一通用规则,这一破坏项目被自动解除绑定。任何重复项目(当一个以上Outlook项目具有相同的BoundItemID时)被检测到,并且或者被转换成一新的绑定项目,或者被解除绑定;原始项目与SDS副本匹配(在移动的情况下,取一个副本)。
通信流程
图10示出了客户机上的生产性套件和LOB系统之间的另一示例通信流程。LOB系统(1070)可经由控制消息(创建、更新和删除)发起对绑定项目的更新。格式化器(1080)服务如LOB系统(1070)所请求的那样创建控制消息。该控制消息经由邮箱(1010)中的电子邮件消息被传送给生产性套件。服务器侧规则将该控制消息移入一指定的(隐藏)文件夹(例如,控制消息文件夹1020),从该文件夹中,这些控制消息由控制消息处理器(1030)选取。创建、更新和删除请求被立即处理;而查询请求被排队到SDS(1050)中,并且由同步器(1060)处理。绑定器/清扫器/解决器(1040)服务(或取决于实现,多个服务)被安排成:将邮箱(1010)中的所有绑定项目与SDS(1050)进行比较,并标识绑定项目中的失配/改变。
尽管不是非常常见的,但是仍有重要的情形涉及LOB系统对一给定用户重新创建所有绑定项目。这可用于用初始绑定项目以及当某些项目已丢失或变为破坏时的灾难发现的一部分来填充邮箱。这一情形的一种变型可用于将现有的绑定项目升级到一新的绑定定义(模式)。它还可请求关于绑定项目的当前状态的信息(查询)。另一常见的使用是向用户的邮箱(1010)发送定期邮件消息;在这一情况下不涉及同步系统。
发送者的身份用于将有效的控制消息与非授权(或欺骗的)控制消息相区分。控制消息中的信息可被加密以保护其私密性。
主机器负责处理控制消息、升级特性、解决冲突以及向LOB提交更新。它保持SDS和邮箱同步。次要机器可用于经由UI来更新绑定项目。它还使用同步构建其自己的SDS数据库,但是具有某一重要的差别。次要机器不处理控制消息,并且在同步期间不完成特性升级,次要机器也不向LOB系统提交改变。当构建SDS时,次要机器假设邮箱中的数据是正确的。由于引用完整性问题而导致的任何更新SDS的失败被无声地忽略,因为假设主机器最终将解决冲突并且解决将被传播到次要机器。这一规则的重要结果是次要机器上的SDS不包含任何未决改变的完整状态,因此它不能被升级到主机器。
服务器可被安排成出于将来自服务器的业务状态响应分发到各个次要客户机机器的目的而维护一同步高速缓存(例如,类似于SDS,但是不包括绑定数据信息)。服务器可周期性地将改变推到次要客户机,使得次要客户机具有相关SDS数据的最新副本。
同步子系统
同步子系统在图11中示出,并且包括以下主要组件:控制器(1102)、绑定项目管理器(1106)、绑定项目包装器(1112)、清扫器、解决器(1109)、控制消息处理器(1110)、数据提供者(1107)、以及同步器(1105)。
控制器(1102)是用于控制同步过程的公共组件。
绑定项目管理器(1106)是用于创建和/或直接访问绑定项目的公共组件。绑定项目包装器是将生产性套件项目封装为绑定项目,或解除项目的绑定的公共包装器。在某些实现中,绑定项目管理器(1106)的功能可作为控制器(1102)的一部分或另一组件的一部分被包括。
清扫器(1112)是用于找出需要调查(由于自从发生最后一次同步以来已经改变)的绑定项目的内部组件。在某些实现中,清扫器(1112)的功能可作为控制器(1102)的一部分或另一组件的一部分被包括。
解决器(1109)是用于调查绑定项目,并且或者本地解决改变(经由特性升级)和/或标记改变以进行完整同步的内部组件。在某些实现中,解决器(1109)的功能可作为控制器(1102)的一部分或另一组件的一部分被包括。
控制消息处理器(1110)是用于处理来自被监视的指定文件夹(1111)的针对格式化器发送的消息的控制消息的内部组件。处理控制消息以在创建/更新/删除动词的情况下更新生产性套件项目,或提交查询命令供同步器组件处理。在某些实现中,控制消息处理器(1110)的功能可作为控制器(1102)的一部分或另一组件的一部分被包括。
数据提供者(1107)是提供对SDS数据表(1108)的访问的内部组件。在某些实现中,数据提供者(1107)的功能可作为控制器(1102)的一部分或另一组件的一部分被包括。
同步器(1105)是负责以下事项的内部组件:当在客户机上创建、更新或删除绑定项目时通知LOB系统,在成功通知之后更新同步数据存储(SDS1108),处理查询控制消息,以及报告同步过程的状态。在某些实现中,同步器(1105)的功能可作为控制器(1102)的一部分或另一组件的一部分被包括。
改变同步由图12示出如下。对绑定项目的改变可以在主机器(启用OBA的机器)上或诸如从web服务(例如,Outlook web访问,即OWA)或某一其它非启用OBA的客户机和移动设备等通过另一外部接口来作出。取决于改变是在哪里作出的,系统将使用略微不同的代码路径来同步这些改变。
管理绑定项目:启用的客户机
用户可在允许诸如通过内插附件或插件组件等来进行同步的客户机中创建、更新和删除绑定项目。系统检测改变,并自动将改变请求提交给LOB系统。该请求被处理,并且LOB系统发回一应用层成功或失败响应。该响应由客户机接收,并且更新绑定项目的应用程序业务状态。在新绑定项目(例如,在Outlook
中创建)的情况下,来自LOB系统的响应由系统用于将该绑定项目与一LOB实体相关。
管理绑定项目:web访问
用户通过web访问访问其邮箱。绑定项目作为标准项目展示给用户。用户可正常改变标准信息,但是不能改变扩展信息。用户可更新或删除现有绑定项目,但是不能创建新的绑定项目,除了复制现有的绑定项目(间接创建)的情况之外。当用户返回到其主机器时,通过web访问作出的改变由服务器应用程序(例如,通过Microsoft Exchange)同步。系统检测该改变,并自动将适当的改变请求提交给LOB系统。
管理绑定项目:非启用的客户机
用户可使用未被启用的生产性套件客户机来访问其邮箱。绑定项目作为标准项目出现。用户可正常改变标准信息,但是不能改变扩展信息。用户可更新或删除现有绑定项目,但是不能创建新项目。用户然后与服务器应用程序(例如,Microsoft Exchange)同步。当用户返回到其主客户机机器时,在非启用的客户机中作出的改变从服务器应用程序同步。系统检测该改变,并自动将适当的改变请求提交给LOB系统。
管理绑定项目:移动设备
用户通过移动设备访问其邮箱。没有为移动设备提供特殊的支持,它们仅仅与web访问一样处理。绑定项目作为标准项目被展示给用户。用户可正常改变标准信息,但是不能改变扩展信息。用户可更新或删除现有绑定项目,但是不能创建新的绑定项目。当用户返回到其主客户机机器时,在移动设备中作出的改变由服务器应用程序(例如,Microsoft Exchange)同步。系统检测该改变,并自动将适当的改变请求提交给LOB系统。
管理绑定项目:多个启用的客户机
用户具有一个“主”客户机机器,和任意数量的“次要”客户机机器,其中每一机器具有一已安装的允许生产性套件应用程序和LOB系统之间的同步的客户端应用程序。用户可创建、更新或删除任何机器中的绑定项目。在一个机器上作出的改变将经由服务器应用程序(例如,Microsoft Exchange)同步到其它机器,但是在一个实施例中,仅主机器能够与LOB系统同步。“主”机器在安装时指定;其它机器将被认为是“次要”机器。对用户能够具有的次要机器的数量没有具体限制。当到LOB系统的连接在主机器上可用时,系统将自动提交所需的改变请求给LOB系统。
所描述的系统可被安排成使得出于将来自服务器的业务状态响应分发到各个次要客户机机器的目的而在服务器上维护一同步高速缓存。对于此示例,服务器的同步高速缓存在每一客户机清扫之前或之后更新。服务器的同步高速缓存可包括来自SDS的所有数据,除了绑定数据之外。根据清扫内部时间表,服务器的同步高速缓存可从服务器下载到每一次要客户机自己的SDS。
管理绑定项目:改变的传播
当对相关业务实体的改变是在LOB系统中作出的时候,将经由格式化器通知服务器应用程序。改变通知被传送到可能需要将该改变应用于绑定项目的启用的客户机。由于改变通知被推出,因此客户机无需查验更新,并且可直接响应而不等待调度的同步时间。
同步方法
图13是用于示例同步方法的流程图。系统清扫器过程可周期性地定位并“标记”需要被同步的绑定项目,其中这些项目被置于一逻辑列表中以供同步(同步列表)。对于同步列表中的每一项目,生成创建、更新或删除请求(CUD请求)并将其储存在出站队列(例如,来自图7的VQQ 712)中。然后发起一web服务调用,使得可建立到LOB系统的连接。该web服务调用可以成功、失败或生成一连接异常。
当响应于该web服务调用从LOB获得响应时,建立了成功的连接。对于到web服务的成功连接,系统用来自响应的信息更新SDS中的绑定项目副本。对同步列表中的每一项目类似地处理其它CUD请求。
当响应于web服务调用从LOB系统提供除连接异常以外的其它异常时,得到失败的连接。对于到web服务的失败的连接,CUD请求被保持在出站队列中,并被标记以进行重试。当标识了第一个失败的连接时可初始化对CUD请求的重试计数。重试将继续,直到或者建立了成功的连接,或者在一预定时间间隔上允许的最大尝试次数达到一极限。当达到所允许的最大尝试次数而没有成功时,该CUD请求被移至一失败请求队列。不处理其它CUD请求,除非实现成功连接。
连接异常可在客户机具有有效的认证cookie并且对目标服务器的查验失败时发生。当从web服务调用得到连接异常时,系统跳至同步列表上的下一项目。
用于同步的一个示例过程流由图13示出,如以下将描述的。处理在框1301除开始,并且流至判定框1305。
在判定框1305处,生产性套件同步系统评估同步列表以标识需要在生产性套件应用程序和LOB应用程序之间同步的任何绑定项目。当同步列表上没有绑定项目时,该处理流至框1310,在那里系统在再次评估同步列表之前等待一预定时间(例如,X分钟)。当在同步列表中找到绑定项目时,系统在框1315处确定是否达到了最大失败请求数。当达到了最大请求数时,处理再次流至框1310。或者,处理在框1320处继续,在那里创建一CUD请求。
继续到框1325,将该CUD请求置于诸如来自图7的VQQ 712等出站请求队列中。在框1330处,生产性套件应用程序同步系统通过诸如web服务调用等服务调用将出站请求队列中的每一请求提交给LOB系统。继续到判定框1335,评估该CUD调用请求以确定该请求是否被成功提交给LOB系统。当CUD调用请求成功时,处理从判定框1335继续到框1340(在那里更新同步数据存储,即SDS)。当CUD调用请求失败时,处理从判定框1335流至框1345。在某些情况下,生成连接异常,并且处理从判定框1335流至判定框1305。
在框1345处,用于生产性套件应用程序的同步系统对CUD调用请求尝试重试。在判定框1350处,系统确定是否从动调用请求接收到响应。当该响应成功时,处理从判定框1350流至框1340,在那里更新SDS。当响应失败时,处理从判定框1350流至判定框1360。如果没有接收到响应,则处理从判定框1350流至框1355,在那里系统在框1345处尝试另一重试之前等待一超时到期。
在判定框1360处,系统确定是否达到了对CUD调用请求的最大重试数。当达到最大重试数时,处理继续到框1365,在那里CUD请求被移至一失败队列。当未超过最大重试数时,系统在框1370处递增内部重试计数器,并且前进到框1355以等待另一重试。
引用同步的项目
如上所述,绑定是在LOB实体和PS(生产性套件)项目之间创建的。尽管同步系统没有对LOB实体的任何直接访问,但是SDS保持它假设被储存在LOB系统中的单独副本。当创建LOB实体和PS项目之间的绑定时,可将同步的PS项目的副本置于SDS中,使得PS项目可以用与该LOB实体相关联的LOBID来索引。换言之,与LOB实体相关联的PS项目可以参考CorrelationIs从SDS中检索。由于PS项目可参考LOBID来检索,因此可实现可以利用PS项目的多个感兴趣的应用程序、插件或其它软件方法(例如,后端工作流系统)。
在一个示例中,LOB应用程序可将LOB标识符(例如,LOBID)经由电子邮件通信传送到生产性套件应用程序。电子邮件通信包括引用LOB项目的嵌入信息。例如,LOBID可被嵌入在与电子邮件消息相关联的首部中。电子邮件通信无需包含(嵌入或以其它方式)LOB项目本身,因为LOBID引用该LOB实体。一旦接收到电子邮件消息,用于生产性套件的电子邮件处理程序可在同步阴影或同步数据存储中标识引用该LOB标识符的特定生产性套件项目。
在另一示例中,用户可用引用与SDS中的PS项目相关联的LOB标识符的链接(例如,任何数量的形式的URL链接,诸如HTTP、HTTPS、FTP、FTPS、OBA等)来引用生产性套件项目。
在又一示例中,当LOB系统向生产性套件系统发送电子邮件消息时,可激活动作窗格、任务窗格或其它软件方法。一旦被激活,该软件方法可通过引用LOBID来从SDS中检索生产性套件项目,然后对该生产性套件项目执行动作。
可由软件方法在生产性套件项目上执行的动作可导致生产性套件项目的创建、更新或删除,这然后可以如上所述地与LOB系统同步。LOB系统可通过引用软件方法以及电子邮件通信中的LOB ID来有效地将任务传达给生产性套件用户。
在一个示例性软件方法中,即来自LOB系统的电子邮件通信可向用户传达完成与同用LOB ID标识的LOB实体同步的特定生产性套件项目相关联的审阅或批准的请求。该电子邮件通信可以在LOB系统中的最后期限到来时或在由LOB系统的特定用户提供时由LOB系统自动传送。该电子邮件可由LOB系统通过向格式化器传送信息(例如,经由XML数据表示、经由文本、经由嵌入的数据等)来创建,格式化器然后与电子邮件和目录服务器(见例如图7)协作来创建电子邮件消息。电子邮件可强调该需求以最终化与生产性套件项目相关联的动作、提供进一步的解释等,其中电子邮件可引用后端工作流系统中的任务。由于生产性套件应用程序可将嵌入在电子邮件通信中的链接解释为任务,因此实际任务信息可被自动呈现。用户然后可选择并跟随该链接以打开生产性套件应用程序中的任务项目,其中相关联的同步的后端信息可用XML数据表示来储存。由于LOB标识符可被嵌入在链接中,因此任何所需的与生产性套件项目相关联的动作可通过适当地配置处理程序(例如,URL处理程序)来采取。
尽管已经示出并描述了示例实施例和应用,但是可以理解,本发明不限于以上所描述的精确配置和资源。可以对此处所公开的方法和系统的排列、操作和细节作出本领域的技术人员显而易见的各种修改、改变和变型,而不背离本发明的范围。由于可在不背离本发明的精神和范围的前提下作出本发明的许多实施例,因此本发明归所附权利要求书。