CN102549559A - 托管的计算机环境中的虚拟对象间接化 - Google Patents
托管的计算机环境中的虚拟对象间接化 Download PDFInfo
- Publication number
- CN102549559A CN102549559A CN2010800417359A CN201080041735A CN102549559A CN 102549559 A CN102549559 A CN 102549559A CN 2010800417359 A CN2010800417359 A CN 2010800417359A CN 201080041735 A CN201080041735 A CN 201080041735A CN 102549559 A CN102549559 A CN 102549559A
- Authority
- CN
- China
- Prior art keywords
- grand
- user
- service
- application
- services
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/541—Interprogram communication via adapters, e.g. between incompatible applications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
- Information Transfer Between Computers (AREA)
- Input From Keyboards Or The Like (AREA)
Abstract
讨论了一种管理计算机宏的计算机实现的方法。该方法包括:标识存储在托管的计算机系统处的宏;通过遍历所述宏中的命令行来执行所述宏;以及标识响应于宏的多个不同服务的一个服务。该方法还包括将所述宏中的命令从与所述宏以其创建的宏语言相关联的格式转换成与所述多个不同服务的被标识的一个服务相关联的命令格式,以及在将从多个不同服务的所述一个服务接收的信息转换成所述宏或与所述宏对应的应用可使用的格式之后,向所述宏或与所述宏对应的所述应用提供所述信息。
Description
相关申请的交叉参考
依照35 U.S.C.§119(3),本申请要求于2009年8月13日提交的、名为“VIRTUAL OBJECT INDIRECTION IN A HOSTED COMPUTERENVIRONMENT”的美国申请序列号12/540,927的优先权,通过参考而在此并入其公开内容。
技术领域
本申请涉及电子内容的基于网络的递送。
背景技术
宏是可以在一个或多个计算机应用内部执行、以便提供与那些应用的增强且自动的交互性的指令集,其中宏的至少一部分代表在其他情况下可能由应用的用户手动采取的步骤。例如,宏可以编写为根据电子表格应用中的某些数字计算值以及将该值拷贝到桌面计算机上的相关文字处理应用。用户可以向该宏指派“热键”组合,使得该宏可以由用户通过简单地按下热键组合来运行。作为另一示例,宏也可以编写为引起某些电子消息(例如,来自配偶、客户或老板的电子消息)在重要性方面得到提升,使得其能够更容易地被计算设备的用户看到。一个熟悉的基于宏的系统是用于MICROSOFTOFFICE生产套件的应用的Visual Basic。
发明内容
本申请讨论了用于在托管的计算系统(也称为“云”)中创建和使用宏的系统和技术。宏可以存储在宏服务器子系统中,并可从宏服务器子系统执行,而不是从客户端设备执行,由此允许宏容易地在用户之间共享,因为所有合格的用户可以从很多地方访问到宏,只要用户可以联网并提供自己的凭证即可。此外,宏可以容易地访问多个应用和服务,无论是托管的计算系统提供的,还是与托管的计算机系统分离的第三方系统提供的。这种服务可以包括提供关于各种用户位置的信息(例如,通过用户移动设备上的GPS确定的信息)的服务;提供新闻和天气供给的服务;以及其他这种服务。应用可以包括例如电子邮件和其他消息收发应用、生产力应用(诸如,电子表格和文字处理器)、地图应用和可以在单个呈现中一起呈现的各种应用的混搭(其可以由用户访问,甚至可以由用户开发,以便提供来自宏的定制输出)。可以经由使用web浏览器显示的一个或多个web页面来向用户呈现应用。该系统和技术也可以提供宏的记录,其中用户可以启用宏记录器,以及该记录器可以追踪用户在计算机上的动作以及将这些动作变成宏代码,使得在用户运行该宏时的稍后时间,可以自动地重复这些动作。
在多个不同的应用将由宏进行控制以及多个服务将由宏进行访问的情况下,可以提供服务接口,使得宏程序员可以使用单个宏语言来与所有各种服务和应用通信。服务接口可以将命令、参数、指令、数据和其他项目从一个语言转译成另一语言,反之亦然,以便用作保护程序员的抽象层的形式。接口可以通过生成宏需要与之通信的每个服务的对象并定义用于每个对象的访问方法来进行操作。可以向对象提供安全包装器,以阻止恶意的或随意的代码不必要地访问系统资源;以及向对象提供配额强制实施层,其避免对宏的过度使用或者对服务的过度访问(例如,经由病毒、僵尸网络或类似机制)。
宏可以访问的第三方服务可以包括SOAP服务或其他类似服务,其可以从与提供该服务的域分离的域进行访问,并且提供用于通过因特网共享信息的已知机制。例如,第三方服务提供者可以编纂最新的天气数据,以及可以使该数据在经请求的情况下可用于其他服务。
在第一方面中,一种管理计算机宏的计算机实现的方法。该方法包括:标识存储在托管的计算机系统处的宏;通过遍历所述宏中的命令行来执行所述宏;以及标识响应于宏的多个不同服务的一个服务。该方法还包括将所述宏中的命令从与所述宏以其创建的宏语言相关联的格式转换成与所述多个不同服务的被标识的一个服务相关联的命令格式,以及在将从多个不同服务的所述一个服务接收的信息转换成所述宏或与所述宏对应的应用可使用的格式之后,向所述宏或与所述宏对应的所述应用提供所述信息。
实现可以包括以下特征中的任一、全部或都不包括。宏可以从调用该宏并且包括用于该宏的路径和名称的URL标识。该方法可以进一步包括:提供从多个不同服务的所述一个服务接收的信息包括通过伪装的对象来提供所述信息,其中所述伪装的对象隐藏用于从所述多个不同服务的至少一个服务获取所述信息的对象的特征。该方法还可以包括确定来自与所述执行宏对应的用户对所述多个服务的一个服务的调用是否超过确定水平,以及如果所述调用超过所述配额,则阻止所述宏的执行。确定来自与所述执行宏对应的用户对所述多个服务的一个服务的调用是否超过确定水平包括将所述宏包装在配额包装器中,所述配额包装器作为所述宏与一个或多个对象之间的适配器进行操作,并且实现对所述宏的使用限制。
在某些方面中,该方法还可以包括接收托管的计算机系统上的事件的通知,其中所述事件独立于所述托管的计算机系统上的用户状态;将所述事件与所述宏相关联以及将所述用户的账户与所述托管的计算机系统相关联;以及在所述用户的账户上执行所述宏。该方法还可以包括:将所述宏中的命令从与所述宏以其创建的宏语言相关联的格式转换成与所述多个不同服务的被标识的一个服务相关联的命令格式包括:向存储在所述托管的计算机系统上的转译表应用所述宏的部分。该方法还可以包括将所述宏中的命令从与所述宏以其创建的所述语言相关联的格式转换成与应用相关联的命令格式,以使用所述宏来控制所述应用。该方法还可以包括向所述用户传输消息,以向所述用户通知所述应用的操作。所述消息选自包括电子邮件消息、电话语音消息和文本消息的群组。
在其他方面中,多个不同服务的一个服务可以选自包括位置服务、电子邮件服务和SOAP服务的群组。该方法还可以包括将所述宏中的所述命令从与所述宏以其创建的所述宏语言相关联的格式转换成与所述多个不同服务的被标识的一个服务相关联的命令格式包括:使用Java对象来将访问方法包装至所述服务。
在另一实现中,一种使用系统来管理计算机宏的计算机实现的系统,所述系统包括:多个托管的应用,其可从托管的计算机系统进行操作;宏数据存储库,其存储多个宏,每个宏被指派至所述托管的计算机系统上的用户的账户,以及每个宏定义待由所述多个托管的应用的至少一个应用执行的一系列动作;以及处理器,用于执行服务接口,当所述服务接口被执行时,其定义用于所述系统可访问的多个服务的每一个服务的一个或多个对象,其中所述一个或多个对象的每一个对象将来自第一语言的所述多个宏的通信转译成与所述第一语言不同的第二语言的所述多个服务的一个或多个服务。
实现可以包括以下特征的任一、全部或都不包括。该系统可以包括事件处理器,其被编程以接收在所述多个托管的应用处发生的事件的通知,以及响应于接收到所述事件的通知,引起所述多个宏的执行。对象的每一个对象包装访问方法,其定义用于与所述多个服务的一个服务进行通信的通信机制。该系统可以进一步包括一个或多个安全包装器,其作为执行宏与所述一个或多个对象之间的适配器进行操作,并且在不具有用户关于所述宏的肯定指示的情况下防止宏的运行。所述系统还可以包括一个或多个配额强制实施层,其被编程以防止高于确定水平的所述多个宏的一个或多个的执行。所述确定的水平由在时段中代表特定用户的账户的宏的执行数量所定义。
在又一实现中,用于管理计算机宏的计算机实现的系统包括多个托管的应用,其可从所述托管的计算机系统操作;宏数据存储库,其存储多个宏,每个宏被指派至所述托管的计算机系统上的用户的账户,以及每个宏定义待由所述多个托管的应用的至少一个应用执行的一系列动作;以及用于执行第一格式的所述宏的一个或多个宏,以及将来自所述执行的信息转译成响应于来自所述宏的调用而提供与所述第一格式不同的第二格式的信息的一个或多个服务的装置。
在附图和下文的描述中给出了一个或多个实施方式的细节。从描述和附图以及权利要求,其他特征和优势将变得明显。
附图说明
图1是示出用于允许在托管的计算机系统中针对宏进行通用编程的结构的概念图。
图2是能够操作共享宏的托管的计算机系统的示意图。
图3A是用于向用户提供第三方数据对象的过程的流程图。
图3B是用于管理计算机宏的过程的流程图。
图4A是用于执行由运行在web页面上的应用启用的宏的过程的流程图。
图4B是用于记录和执行托管的系统上的宏的过程的泳道流程图。
图5示出了用于宏系统中的对象的示例结构。
图6示出了宏构建系统的示例截屏。
图7示出了可以用于执行在此申请中讨论的动作的通用计算机设备的示例。
在各附图中,相同的附图标记指示相同的元素。
具体实施方式
图1是示出用于允许在托管的计算机系统100中针对宏进行通用编程的结构的概念图。这种操作可以与在客户端设备或针对单个客户端设备的服务器(例如,经由远程桌面连接服务或VPN)上发生的宏执行形成对比,因为除了其他之外,在托管的系统上进行的宏执行支持从各种客户端(诸如桌面计算机、上网本计算机)对宏的执行,或者公众可用的计算机(诸如,网吧中的计算机)对宏的执行。而且,这种宏可以容易地通过下述操作而在用户之间共享:第一用户定义对宏的访问限制,该访问限制允许其他用户(例如,与最初用户来自相同域的、对该系统进行访问的用户)在使用其自己的应用时运行宏。以及这种宏甚至可以在用户不在线时针对该用户执行(诸如在对用户和用户的计算机而言的外部输入触发宏执行的开始时)。此外,当托管的系统具有彼此有关的多个注册用户时(例如,他们都为同一业务组织工作),在托管的系统中运行的宏可以产生跨与多个这种用户对应的数据存储和/或应用的复杂工作流。
在这种系统中,当宏可以访问来自多个不同服务(包括与托管的系统的提供者不同的第三方所提供的服务)的信息时,以及当宏可以与托管的系统中的多个不同应用(诸如消息收发应用和业务生产力应用)一起工作时,宏尤其有用。然而,这种多样化的服务和应用可能具有多样化的通信结构和协议。结果,与系统100相关联的宏服务器子系统可以在宏运行时解译成不同的格式,使得宏创建者可以使用单个宏语言访问很多资源。例如,可以针对暴露给宏创建者的不同服务定义对象模型,这些服务诸如是操纵电子表格和日历,取回web内容,发送电子邮件,访问其日历,转译文本等。对象模型可以使用例如Java对象来代表。每个Java对象可以将访问方法包装至底层服务。可以使用远程过程调用来与第一方资源(即,提供宏服务器子系统的相同组织所提供的资源)进行通信,而可以使用诸如SOAP或类似服务形式的web内容取回来与第三方资源(由其他组织提供的那些资源,诸如经由与用户通过其访问托管的计算机系统的域不同的域提供的)进行通信。
在服务接口可用的情况下,宏创建者可以产生宏,而无需知道或精通用于各种其他服务的提供的服务架构。实际上,宏服务器子系统可以充当应用服务器(或服务提供者)与宏之间的抽象层(例如,服务接口)。以这种方式,用户可以使用简单且易于实现的命令集和语言来与应用服务器(或另一资源提供者)通信,并且本身不需要关心在其他情况下为了直接与应用服务器(或其他服务提供者)通信而需要进行的潜在更困难交互。例如,宏服务器子系统可以转译用于控制应用服务器上的服务或应用的操作的控制命令,并且还可以在用户与托管在应用服务器(或第三方提供者的服务器)上的服务或应用之间来回传递数据,也许对数据进行了修改,也许没有进行修改。在一个示例中,用户可以实现调用多个服务的宏,而无需直接访问专属于该服务的内部指令调用。
至此,以及现在更具体地参考图1,示出了使用一个或多个宏104a-104d来与客户端计算设备通信的服务器系统和服务接口102。宏104可以通过多种机制来提供数据和服务,其中一个这种机制直接与系统内部的抽象数据和服务相关联,而另一机制与该系统外部的抽象数据和第三方服务相关联。
第三方服务可以包括SOAP服务或可以从与提供服务的域分离的域进行访问以及提供一个或多个已知机制用于通过因特网来共享信息(例如,在API中发布)的其他类似外部服务。例如,第三方服务提供者可以编纂最新的天气数据,以及可以使该数据在经请求的情况下可用于其他服务。
服务接口102可以存储数据对象,诸如Java对象106a和106b或者第三方数据对象。Java对象106a和106b可以代表可以针对暴露给最终用户的不同服务进行定义的模型,这些服务诸如操纵电子表格、取回web内容、发送电子邮件、访问其日历、上载日志帖子、转译文本等。
每个Java对象106a和106b分别具有访问方法108a和108b,其可以由宏104使用以便利用存储在Java对象106a和106b中的服务或功能性。服务接口102可以有助于确保用户可以经由访问方法108获得在托管的计算系统100中提供的服务和应用的无缝访问,而无需系统100向用户暴露内部服务。
每个Java对象可以将访问方法包装至底层服务。访问方法可以由内部直接网络调用(针对电子表格和转译)、GData(针对日历应用)、内部邮件服务(针对电子邮件)和其他访问方法(针对web内容取回)代表。这些服务中的很多服务不需要直接暴露给最终用户。
服务接口102可以保护服务免于直接暴露给最终用户。例如,服务接口102可以在底层数据对象周围提供“包装器”或“装饰器”,以消除将内部服务暴露给最终用户的风险。包装器代表软件层,其充当宏与Java对象(诸如Java对象106a或106b)之间的适配器。在某些实现中,包装器可以有助于确保将访问权提供给数据对象,而无论这些数据对象最初被设计成在哪些应用或服务中运行。而且,包装器可以支持针对特定数据对象的通用访问不可用的设备、应用、服务或其他数据的使用。
在某些实现中,包装器可以向提供者和/或最终用户提供安全层。例如,服务接口102包括可以包装Java对象106a的安全层110a。安全层110a是围绕宏代码本身,例如以便在用户未采取积极动作的情况下不允许该宏代码运行的附加代码。在某些实现中,该动作可以是用户选择屏上控件(标记为“OK”),或者以某些其他方式批准该宏。在提供这种批准之前,可以向用户示出警告,以说明该宏可能影响到的服务或其他资源,以及也可以给予用户定义允许宏影响的资源子集的能力,而防止宏影响其他资源。
服务接口102还包括日志记录层112a和112b,其可以捕获用户调用并提供用户会话的转录(transcript)。日志记录层112a和112b可以记录作为执行宏的部分进行的每个操作、操作的持续时间、操作中的错误的普遍程度,以及以其请求操作的用户的源语言或区域。
服务接口102还包括配额强制实施层114a和114b,其可以保护服务提供者以防止服务滥用以及保护用户以防止垃圾邮件。例如,配额强制实施层114a-114b可以通过使用可能有助于找到这种批量账户创建的垃圾邮件打分程序来检测特定账户是否是批量设立以用垃圾邮件干扰服务的。系统100可以使用配额强制实施层114a-114b来检测短时间内是否请求或执行了大量的活动,因为垃圾邮件制造者通常会这样做。此外,配额强制实施层114a-114b可以通过对用户的活动进行限速来防御滥用。例如,系统100可以使用配额强制实施层114a-114b来限制每分钟可以进行的API调用数量。具体地,系统100可以提供用于执行指令计数的机制,其中回调被安装在脚本引擎中,以及除非消耗了预定最大数量的指令调用,否则调用将增大指令计数器。如果达到最大指令调用水平,则系统100抛出错误消息,并且可以终止服务的执行。
在通常水平,安全层110a-110b、日志记录层112a-112b和配额强制实施层114a-114b可以在层中以一致且统一的方式应用至底层可编程对象106a和106b。因为配额和安全是统一应用的,并且不是针对多个服务各异的,所以在这种示例中,程序员出错(以及作为结果的安全违规)的机会可以减少。在某些实现中,层110-114(例如,包装器)都可以使用共享的代码来调用可位于服务器上的Java客户端。
安全层110a-110b可以以各种方式保护最终用户,诸如避免其受到特洛伊木马、钓鱼攻击或其他恶意代码的攻击。在某些实现中,安全层110a可以在向用户递送对话框之后构建。在这种示例中,包括在对话框中的消息可以将宏标识为潜在不受信的宏,并且可以进一步标识如果宏被执行将可以发生什么。例如,宏可以诸如通过将恶意代码插入文件或者执行代码以实施恶意动作,而试图俘获计算机各种方面的控制权。
向用户呈现的对话框可以在某些实现中标识特定于该宏的、潜在有害动作的列表,该列表基于宏的扫描。扫描宏可以例如有助于至少部分基于宏中的文本串或者与已经是恶意的过去的宏的内容对应的其他信息,来标识特定的潜在有害效果。用户可以批准或不批准该宏可以具有的访问权。用户的批准可以用于构建如上所述的、基于能力(capability)的安全层,诸如允许宏具有读特权,但不允许宏更新某些文件。在这种情况下,用户给予宏的并反映在安全层中的特权或权限可以限于用户已经批准的那些类型的动作。
在某些实现中,用于生成安全层的过程可以检测试图误导用于检测恶意代码的机制的恶意代码。例如,替代在宏中编码“delete(删除)”,可以串接子串“de”和“lete”,以试图掩盖真实删除操作的意图(例如,“delete”)。
在操作中,服务接口102可以利用可执行对配额服务器的调用的配额强制实施层114a-114b来包装各种编程的已包装对象的关键方法。配额服务器可以存储配置文件、包装器、日志文件和其他包装器信息。配额服务器可以允许短期和长期配额限制二者的配置。例如,服务接口102可以强制实施在特定时段期间(诸如,一天、若干小时或用户注册系统的整个时段)的启用的最大数目。这种方式可以允许出现活动的突发,但是可以避免反复无常的脚本在短时间内用尽用户一天的整个配额。
在某些实现中,经由混淆(obfuscated)的用户ID来向配额服务器标识用户,其中混淆是由标识服务器的混淆器和程序特定键值(key)执行的。配额服务器允许针对每个用户的过载(override),从而特定用户可以请求并被给予附加的容量。配额限制可以应用至触发的用户而不是执行宏或宏所有者,因为给定的宏(例如,文档批准系统)可能具有成百乃至上千的用户。
在某些实现中,服务接口102可以针对不同的特定客户应用不同的配额配置。例如,如果用户是特定web客户端服务的成员,则在使用该服务时该用户可以被给予比不是成员的用户高的配额。而且,来自特定域的用户可以被给予比来自其他域的用户高的配额。而且,结合上文,每个用户可以针对不同宏具有不同的配额水平。例如,特定用户可被给予与基准相关的“基本”水平,例如,基准为100的情况下,用户可被评定为50,这意味着用户收到平均用户的配额的一半。特定宏可以具有与基准或绝对指派相关的类似指派。例如,宏可以被指派每天40次执行的基准,使得以上列出的用户每天能够执行该宏20次(50/100,或0.5,乘以40)。
在一个特定示例中,系统100可以提供限制每天发送的电子邮件数量的配额强制实施层。类似地,配额强制实施层114a-114b可以通过在达到预定阈值之后阻止“创建事件”调用,来限制特定用户可以创建的日历事件的数量。在又一示例中,系统100可以对存储器对象分配进行计数以进一步限制存储器使用,以及防止恶意的或较差构建的宏分配太多大的存储器对象。其他配额强制实施规则也可以由系统100实现。
在某些实现中,包装器110a-114b也保护了服务提供者。例如,服务接口102可以包括类快门(shutter)接口,以防止脚本访问禁止的Java对象。具体地,服务接口102可以采用类快门接口来过滤脚本和宏可见的Java类。在这种示例中,显式或隐式地向类快门传递用户代码试图加载的任何类的合格类名称。类快门接口通常在且仅在具有给定名称的Java类或Java对象被授权暴露给脚本或宏的情况下,返回为真的布尔值。此外,服务接口102限制脚本引擎、安全包装器110、日志记录层112、配额强制实施层114、程序节(bean)和诸如string、float等的Java原语类可用的Java类。这可以防止用户访问环境变量或其他java对象。
在某些实现中,类快门可能本质上是封闭的,并且可以通过仅使用类和数据内容的预定义白名单来进行操作。例如,未显式地出现在白名单上的任何类可被拒绝,并且不能使用外卡(wildcard)。白名单可以包括编程的bean、Java原语或其他批准的数据内容。
访问方法108a和108b代表程序员用于向及从服务或应用传输数据的API。访问方法108a-108b可以包括通信协议,宏104a-104d可以挂钩至(hook into)该通信协议,以容易地访问多个应用和服务。应用可以广泛变化,并且可以包括电子邮件、生产力应用(诸如电子表格和文字处理器)、地图应用和可以在单个web页面上一起呈现的各种应用的组合。应用可以由用户访问或开发以提供来自宏104的定制输出。
系统100可以从标准web浏览器进行访问。在某些实现中,访问方法108a和108b可以针对特定用户拒绝服务或访问。例如,访问方法108a可以拒绝对Java对象106a的访问,如果消耗了配额最大值的话。
托管的计算机系统100还包括程序应用116和118。应用116和118可以包括用户(例如,经由宏)可以致其运行或执行的任何应用,诸如电子邮件应用、电子表格应用、文字处理应用、照片共享应用、演示文稿包、财务规划应用或应用的组合。在某些情况下,用户可以通过选择要运行的应用,诸如通过双击桌面上的或应用的下拉菜单中的应用名称,来显式地开始应用。其他应用可以隐式地开始,诸如在用户点击电子邮件附件(例如,文本文件或电子表格),或者在用户点击不知名的文件时,任何一个都可以诸如基于文件的扩展名或其他定义的关联来自动开始与该文件关联的对应应用的执行。如果应用由用户可能已经开始运行的执行宏调用的话,则应用也可以开始。在开始或执行应用的又一示例中,事件可以独立于系统100的当前状态或用户的动作而发生,诸如在用户的账户中接收到了电子邮件消息,这可以开始或恢复某些应用的执行。例如,事件(例如,接收的电子邮件消息)可以触发宏(例如,以便更新电子表格,添加标题栏)。
托管的计算机系统100还包括服务(诸如SOAP服务120),诸如从第三方通过因特网可得的、用于向这种服务的请求者传递信息的服务。服务接口102可以经由网络122来提供对SOAP服务120的访问。SOAP服务是平台独立的web服务,其可以用来交换结构化数据。SOAP服务120的框架可以形成web服务协议栈的基础层,提供可以基于其构建web服务的基本消息收发框架。SOAP服务架构通常包括针对消息格式、消息交换模式(MEP)、底层传输协议绑定、消息处理模型和协议可扩展性的若干规范层。
服务接口102可以通过抽象出服务规范的一个或多个层来访问SOAP服务或其他第三方服务,使得用户可以在不了解服务规范的情况下访问服务。具体地,服务接口102通过创建挂钩至原始服务120的虚拟SOAP服务124来提供SOAP服务120。在一个示例中,钩子(hook)可以采用位于虚拟SOAP服务124中的动态代理对象126的形式。动态代理对象126可以例如提供在“java.lang.reflect”包中。具体地,包可以提供数组类,其包含用于创建和操纵数组对象的静态方法;和代理类,其支持实现特定接口的代理类的动态创建。代理类的实现由实现“InvocationHandler”接口的所提供对象提供。“InvocationHandler”接口可以使用参数来启用对象或方法-第一参数是动态代理对象128,第二参数是代表来自该代理实现的接口的方法的方法对象,以及第三参数是传递给接口方法的参数数组。启用方法返回对象结果,其包含返回至调用代理接口方法的代码的结果。
服务接口102可以使用服务的描述来创建虚拟SOAP服务124。描述可以容易地被访问,因为web服务是典型的在web上可得的、通常以机器可读方式提供服务的这种描述的公共服务。服务接口102可以使用这些描述来创建虚拟SOAP服务124。系统100可以通过使用Java反射和动态代理创建具体编程对象的幻象(illusion)来创建动态SOAP服务API。也可以使用其他方法来实现此目的,诸如通过使用Java字节码生成,或者使用不同编程语言的特征。
SOAP服务120通常由web服务描述语言(WSDL)进行定义。系统100可以创建SOAP bean,其获取WSDL,并返回填充有用于该服务的顶层方法的Javascript对象。此外,系统100可以提供这样的方法,其将产生服务的简单存档,包括服务获取了哪些对象、填充哪些字段等。
作为具体示例,国家天气服务(NWS)提供用于获取天气细节的web服务。用户可以通过系统100键入NWS的已知公开URL的地址,并且使用这种服务来接收针对个人天气更新的访问。结果是动态生成的编程对象(例如,Java对象106a),用户可以使用该对象来在其脚本中进行调用。具体地,用户可以创建NWS bean,其使用以下伪码来联系NWS的SOAP API:
var service=
SoapApp.getWsdl(′http://www.weather.gov/WeatherService.wsdl′);
var weather=service.getCurrentWeather({zipCode:′10003′});
var temp=weather.temperature;
在上述示例中,系统可以使用动态代理对象126和Javascript对象-属性的映射脚本来在Javascript实现和Java实现之间移动。由于XML和Javascript典型地不是打字键入的,所以系统100可以完全忽略Java类的生成。具体地,系统100可以使用WSDL来生成哪些对象类型具有特定字段类型以及哪些方法取得哪些参量以及返回特定值类型的“语法”。由此,事实上,第三方服务对象或SOAP bean成为用于将WSDL(例如,经由fastnet获得的)变成对象图的机器。系统100继而可以创建函数调用,其导致针对SOAP服务120或其他第三方服务的http/fastnet请求。系统100可以在XML(SOAP调用期望的)和属性的映射(Javascript代码提供并接收的)之间进行整理(marshal)。
命令映射可以用于从用户在生成宏时使用的公共宏语言生成待发送至各种服务或应用的命令。例如,可以针对以下制定规则:获取宏语言的命令或命令群组,以及将命令转译成目标语言(以及针对数据或命令,反之亦然)。在使用多个不同服务或应用的情况下,可以使用多个不同的规则集或其他命令映射机制,其中每个服务或应用可以具有指派给它以用于在它与宏语言之间进行转译的映射。
在某些情况下,系统100可以支持多个宏语言。在这种情况下,可以在每个宏语言和每个服务或应用语言之间提供映射机制。备选地,命令和其他数据可以在再次转换成下一成分之前,转换成中间通用形式。在存在许多宏语言M和许多服务或应用(N)时,这种方式可能是有益的,使得仅需要M+N个转译器而不是M×N个转译器。
通常,通过提供服务或应用的抽象版本,宏服务器子系统结合服务接口102(与托管的计算系统100相关联)可以允许编写宏代码的用户以统一且一致的方式来编写宏。服务或应用的抽象版本通常由其描述进行定义。该描述可以用来创建虚拟服务,在多个用户使用一个或多个宏104调用该服务后便可以立即访问之。这向终端用户提供了编程和启用服务或应用功能性的简单方法。
图2是能够操作共享宏的托管的计算机系统200的示意图。通常,系统200提供了各种组件,其示出了宏可以由用户创建、并在托管的系统上保存、共享、访问以及执行的一个示例方式。
在此系统200中,宏服务器子系统202提供以持久方式将宏代码保存在脚本信息存储数据存储库206中的位置,其中保存的信息可以包括宏库名称、脚本内容和宏所有者的标识符(例如,使用混淆的用户ID或其他标识符)。在宏运行时,可以向宏服务器子系统202发送命令以执行给定宏。代码继而可以从脚本信息存储数据存储库206检索,以及可以在脚本引擎或脚本执行器208中创建实例。
可以构建代表用于不同服务器侧应用的编程API的Java对象,并且Java对象可以包装在基于能力的安全包装器中,以及变成程序员可见的经包装的服务(或“bean”)。经包装的服务210可以包括所有的相关服务,宏服务器子系统202可以例如向与宏执行有关的经包装的服务的消费者供应这些服务。经包装的服务210可以是被打包以可以容易地传递的其他对象集合的任何相关对象。
经包装的服务可以包括暴露与后端服务交互的公有方法的Java业务代表。公有方法可以包括在封包中或者用于封装方法、类、串、电子表格、应用编程接口(API)、和各种计算机语言(例如,Java等)提供的其他工具的其他机制中。公有方法可以暴露例如可以用来定义和执行宏的资源(或使其公有)。公有方法的某些实现细节可以保持私有,这可以提供信息隐藏和抽象的适当水平。公有方法可以跨若干不同类型的对象而看起来类似,从而向宏用户暴露些许一致的外观和感觉,并且由此提供了多态性的水平。结果,经包装的服务的集合可以促进用户在面向对象的事件驱动环境中对宏的使用。
这些经包装的服务或bean在此示例系统200中附接至针对每个属性(property)(例如,电子表格、日历等)具有公有成员的顶层Java对象。此顶层Java对象连同标准的预定标签一起插入至脚本执行器的环境范围中。在某些实现中,脚本执行器将公有成员(以及仅公有成员)反射至脚本编制环境。
因此,当用户的JavaScript代码执行
var doc=google.spreadsheets.create(″my new doc″) (1)
时,调用在顶层对象的“电子表格”域中的Java对象上的“create(创建)”Java方法。此方法的Java实现使用“CREATE(创建)”命令和与新题目对应的参量(例如,“my new doc(我的新文档)”,以及脚本运行器的经混淆标识符对电子表格服务器进行远程过程调用。电子表格服务器响应于该远程过程调用而创建新的电子表格并返回其键值。宏服务器创建代表新创建的电子表格的新的Java对象,其包含该新的键值。该Java对象包括用于若干电子表格操作的方法,操作诸如“重命名”、“插入工作表)”等。该对象还被包装在基于能力的安全包装器中并被返回。脚本执行器在内部将此对象包装至NativeJavaObject包装器中,并将其返回至上述变量“doc”。
在包装对象的某些实现中,任何适当的服务(例如,电子表格、日历、电子邮件等)可以返回包装在Java动态代理中的对象。可能存在不同的代理,诸如用于安全的、日志记录的和配额的。每个代理可以并入或使用其暴露哪种服务(例如,Java接口,诸如“Spreadsheet(电子表格)”、“SpreadsheetRange(电子表格范围)”、“EmailService(电子邮件服务)”等)的描述,该描述可定义公有方法。接口上可以存在注释,适用于不同的包装器。
例如,电子表格服务上的“create”方法可以创建新的电子表格。其可以具有一个注释,声明该方法是WRITE(写)方法,提供了例如用于警告用户该脚本将试图向其电子表格文档的集合进行写入(以及如果用户未针对该脚本授予WRITE特权,则该脚本将在运行时失败)的机制。基本上,安全包装器有助于确保给定方法的声明的所需许可(WRITE等)位于用户的授权令牌中。如果该方法被授权,则其将调用传递至下一层。
通过限制特定用户可以访问针对宏的操作的次数,也可以提供安全。为了执行这种功能性,可以在“create”方法上存在配额注释,即,对此方法的调用应当根据最终用户的“创建电子表格”配额进行计数。配额包装器可以调用或使用配额服务,其跟踪给定用户引起操作被执行的次数。例如,如果用户超过了配额,则该方法可能失败;如果否,其再次被向下传递至下一层。用户的配额可以在设定的时间段(诸如,天、周或月)进行测量,以及可以在周期的时间点处进行重置或减小。
宏执行的转录也可以由日志记录层提供,该日志记录层记录调用的每个方法的串版本和提供的参量。
包装的服务创建器212可以创建顶层经包装的服务,其程度依赖于宏及其环境。例如,经包装的服务创建器212可以检查运行宏的最终用户已显式给予该宏的能力,并且可以创建与宏的状态对应的顶层bean。该状态可以包括例如当前文档(例如,电子邮件、文本文档、附图、电子表格等),如果有的话,以及用户认证。经包装的服务创建器212可以生成顶层的经包装的服务,其具有基于环境的能力,并且可以将经包装的服务210注入至用户例如可以在该处定义和执行宏的脚本执行器208的执行环境中。就某种意义来说,经包装的服务创建器212可以被视为bean的生产者或工厂,或“bean工厂”。
可以创建的经包装的服务210的类型包括例如电子表格应用、日历应用等的经能力包装(capability-wrapped)的实例。此Java对象可以插入执行范围。对象的源可以用于标识对象(例如,利用标签“顶层”)。因此,例如“TopLevel.spreadsheets”可以成为对经能力包装的对象(例如,SpreadsheetApplicationApi对象)的参考。对象的公有方法可以作为Java对象反射至JavaScript编程环境中,并且可以供宏使用。
例如,JavaScript代码诸如:
var doc=google.spreadsheets.getActiveSpreadsheet();
var otherDoc=google.spreadsheets.openByName(″MyOtherDoc″);
var value=doc.find(″A1″).getValue();
otherDoc.find(″B2″).setValue(value); (3)
可以打开现有的电子表格(例如,称为“MyOtherDoc”的电子表格)并将单元格A 1的值从当前的电子表格拷贝至新电子表格的单元格B2。诸如“find(查找)”方法返回的Range对象之类的Java对象是经能力包装的,以及所有其他都是如此,并且如果认证的用户不能访问相关电子表格的话,则可能失败。例如,在之前呈现的拷贝/粘贴单元格示例中,成功执行所需的访问是对活跃的电子表格的读访问(例如,getValue所需的),以及对目标电子表格(例如,电子表格“MyOtherDoc”)的写访问(例如,setValue所需的)。
脚本执行器208可以负责为宏创建上下文,以及执行顶层经包装的服务210的实际插入。可以针对每个宏执行创建新的顶层范围,诸如以避免一个执行脚本“毒害”用于其他脚本的整个范围的可能性。宏上下文可以利用类快门或过滤器的实现进行加载,这防止了创建未被批准的(例如,不在允许的类的白名单上)的任何Java类。另外,脚本执行器208可以创建用于限制失控脚本的指令计数器,诸如以检测脚本何时进入无限循环。在某些实现中,失控脚本可以由脚本管理器204提前终止。
脚本执行器208可以负责各种功能,包括解析、检查语法、功能调用、宏执行和恢复。解析功能可以检验脚本以及返回在数据存储库(诸如脚本信息数据存储库206)中的脚本存储中所发现的函数和宏的列表。例如,参考图1,作为解析功能结果被检测到的函数和宏可以包括获得名称函数114、检查名称函数116、获得位置函数118或任何其他函数、宏等,其可以嵌入在脚本或宏代码(例如,宏代码112)中。
系统支持的其他功能也可以用来帮助管理服务器侧系统200上的宏集合。例如,语法检查功能可以在存储脚本之前确定其中的脚本是否存在错误(例如,语法错误、语言编辑错误、关键词误用错误等)。如果检测到了语法或其他错误,则可以传达错误,以警示用户或脚本程序员。
调用功能可以“调用”宏中的函数(或开始执行之)。此调用功能可以是执行宏的受限版本,诸如具有给予单元格内(例如,电子表格中的)函数调用的特权的版本。例如,宏的受限版本可以限于仅返回值,而不允许创建副效应。
宏执行和恢复功能可以用来开始和恢复宏。例如,宏执行功能可以开始宏的最初执行。在某些情况下,宏的执行可以需要来自用户的附加输入。在此情况下,宏的执行可以被暂停、或进入等待状态,以等待来自用户的输入。一旦已提供了用户输入,则恢复宏功能可以继续已被暂停的宏的执行。
脚本信息存储库206可以用作数据存储库,提供和/或支持诸如脚本/宏创建、存储、检索、更新、删除等的操作。存储在脚本信息存储库206中的脚本可以由用户库、个体脚本或应用(例如,用于电子邮件、电子表格、文字处理文档等的应用)来组织。可以在整个用户的库上或者库中的个体元素上执行操作。例如,一个操作可以通过用户库的ID检索用户库(例如,基于库的名称进行的主键查找)。另一操作可以检索链接至给定文档(诸如代表宏或脚本的文档)的所有用户库。
脚本信息存储库206提供的检索操作可以包括检索给定用户对给定用户库的授权的操作、检索给定用户拥有的所有用户库的操作、利用其ID检索连续(continuation)记录的操作等。
脚本信息存储库206提供的创建/更新操作可以包括创建/更新用户库的操作、创建从库到抽象对象的键值(例如,文档ID)的关联的操作、创建/更新给定用户对给定库的授权的操作、创建新的连续记录(例如,利用序列化的针对给定用户的二进制数据)和库的操作以及其他创建/更新操作。
脚本信息存储库206提供的执行删除的操作可以包括删除连续记录的操作、删除从库到抽象对象的关联的操作,以及删除库的操作,以移除所有子对象,包括与授权和链接连续关联的子对象。脚本信息存储库206的示例逻辑结构在下文参考图5进行描述。
脚本管理器204可以将命令委托给宏服务器子系统202的底层组件206-219。下文给出特定示例命令的描述,以及去往底层组件206-219的委托控制路径利用一系列带有字母的过程箭头1-6标记,其通常是按时间顺序排列文字的,尽管某些动作以另一顺序发生也是可能的。
脚本管理器204可能执行(例如,通过委托)的一个命令是存储用户库。例如基于用户特权或其他安全,该命令的执行是受限的。例如,如果用户库表征(例如,原缓冲(protobuffer)或协议缓冲)包含库ID,则脚本管理器204可以确保执行用户被允许修改该库。如果发生认证,则脚本管理器204可以将其写入存储层并返回库的新表征。如果不存在ID,则可以创建新的ID,以及可以返回包含新生成的ID的表征。对库进行存储可以涉及例如:解析库中的函数(例如,使用脚本执行器208)、向库DAO对象添加函数、检测语法错误(例如,使用脚本执行器208)、存储库内容,以及存储所有者。参考图2,对用户库进行存储涉及的组件可以例如由过程箭头1、2和6指示。
在例如用于用户库表征时,协议缓冲可以包括这样的数据结构,其可以在线上序列化,或者在数据库中保持为二进制形式。该数据结构可以使用强类型字段,以强制实施通信协议。
脚本管理器204可以执行的另一命令是导入库。此命令可以创建库到给定文档(例如,电子表格、电子邮件日历或任何其他可附接的上下文)的链接或其他关联。例如,电子邮件消息可以与用户的给定邮件账户关联。该链接的目的在于底层文档可以快速辨别与之关联的宏,以例如显示在“运行”菜单中。例如,库导入命令可以在数据存储库中创建“链接”表条目。参考图2,在导入库时涉及的组件例如可以由过程箭头1和2指示。
脚本管理器204可能执行的另一命令,即,拷贝命令,拷贝已有的库,制作其内容的副本。例如,包含在库中的所有脚本和宏可以拷贝至新的库名称。尽管拷贝的动作会制作库内容的副本,但是不拷贝关联。新创建的库的所有者被设置成当前所有者。在完成拷贝操作后,返回新库的ID。例如,拷贝命令可以在数据存储库中创建新的“用户库”表条目,而不拷贝任何链接、连续或授权。参考图2,在拷贝库中涉及的组件例如可以由过程箭头1和2指示。
删除库命令可以例如检查许可,继而如果允许的话,其可以从数据存储库(例如,在脚本信息206中)删除库。例如,删除库命令可以从“用户库”表和所有子表移除条目。前端例如可以负责任何“你确定吗?”询问。在删除库中涉及的组件可以例如由过程箭头1和2指示。
获得用户的库的命令可以基于该用户的ID而返回给定用户拥有的库。例如,该命令可以返回脚本信息206中存储的用户库(例如,在用户库或其他表中)条目,其中所有者字段是当前用户。参考图2,在获取用户的库中涉及的组件例如可以由过程箭头1、2和4指示。
获得文档的库的命令可以返回给定文档导入的任何库。例如,获得库命令可以在链接表中扫描匹配的“文档化”字段,以及返回父“用户库”。参考图2,在获取用于文档的库时涉及的组件例如可以由过程箭头1、2和4指示。
分类库命令可以添加针对“虚拟”文档(诸如“SAMPLES(样本)”)的关联。例如,分类库命令可以在链接表中创建具有给定名称(SAMPLES等)的条目。参考图2,在分类库时涉及的组件例如可以由过程箭头1和2指示。
获得用于分类的库命令可以返回给定类别的所有库。例如,获得用于分类的库命令可以与获得文档的库类似。参考图2,在利用分类搜索库时涉及的组件例如可以由过程箭头1和2指示。
评价函数命令可以从库检索函数,并将其传递至脚本执行器208以供执行。参考图2,在评价函数中涉及的组件例如可以由过程箭头1、2、3、5和6指示。
在给评价宏命令提供了输入参数(例如,库ID、宏名称和关于当前文档的上下文信息,如果有的话)时,评价宏命令可以利用包装器创建编程bean,并将经包装的服务传递至脚本执行器208以供执行。参考图2,在评价宏时涉及的组件例如可以由过程箭头1、2、3、5和6指示。
在给定了宏库ID和连续ID时,连续宏命令可以在脚本执行器208上启用连续操作。例如,这种命令可以引起暂停的执行宏继续活跃执行。参考图2,在继续宏时涉及的组件例如可以由过程箭头1、2、3和6指示。
更新授权命令可以针对对于给定用户和给定宏库的授权集合来更新(或添加)数据存储库中的条目。参考图2,在更新授权中涉及的组件例如可以由过程箭头1和2指示。在某些实现中,“获得库”和其他命令可以典型地仅作用在脚本存储层上,而不会启用脚本执行器208。
现在参考系统200的另一组件,通过对来自宏控制器(例如,JavaScript宏控制器“MarcoController.js”)的请求做出响应,命令伺服小程序216可以引起宏命令被执行。该响应可以作为重定向,诸如对用户而言是透明的和自动的重定向,而发生。在一个示例重定向技术中,在浏览器客户端请求特定URL时,重定向规则可以将请求指引至宏服务器,诸如宏服务器子系统202。命令伺服小程序216可以处理的请求类型包括例如名称诸如GET_ADMIN_PANEL(获得管理面板)、SET_SCRIPT(设置脚本)等的若干请求。
例如,GET_ADMIN_PANEL请求可以返回宏管理面板的完整HTML,以及宏控制器(例如,MarcoController.js)可以将该HTML插入封闭(closure)对话。SET_SCRIPT请求可以向命令伺服小程序216发送脚本内容和用户库ID。命令伺服小程序216可以触发脚本管理器204创建/更新用户库,这可导致返回面板左手侧(包含类别和库名称)的HTML(例如,由GXP生成)。macrocontroller.js可以在该部分中绘制用于左手侧面板的HTML。
SET_SCRIPT请求可以从脚本管理器取得用于给定库的脚本内容,并且可以返回内容面板(经由GXP生成)以用于编辑该脚本。macrocontroller.js可以将该HTML放入面板的内容部分中。
IMPORT_LIB(导入库)请求可以利用导入库命令来启用脚本管理器。该请求可以经由gxp来绘制该面板的左手侧,并将其返回至macrocontroller.j 。
COPY_LIB(拷贝库)请求可以与IMPORT_LIB命令类似,但是使用拷贝命令而不是导入命令。DELETE_LIB(删除库)请求可以与IMPORT_LIB类似,但是可以使用删除命令,例如以经由gxp返回整个管理面板HTML。CATEGORIZE_LIB(分类库)请求可以用作“添加至样本”特征。与import_lib类似,CATEGORIZE_LIB可以利用分类库命令来启用脚本管理器,并返回面板的左手侧以用于重新绘制。
RUN_MACRO(运行宏)请求可以获得宏名称、库id和文档状态的序列化表征(例如,当前选择等),以及启用脚本执行器208以执行给定宏。如果发生错误,则向macrocontroller.js抛回错误消息以显示给用户。如果用户不得不授权该宏,则消息可以发送回macrocontroller.js以提示该用户。
宏服务器子系统202通过网络224与应用220和位置服务器222交互。应用220可以是由用户利用用户设备226执行的应用,诸如运行在用户笔记本计算机上的web浏览器。用户设备226可以显示例如web页面226a(例如,使用电子表格服务器)。用户的web浏览器可以采用宏控制器226b来控制宏在用户的用户设备226上的执行。
来自第三方过程和web页面228的外部事件可以用作针对宏的、在宏服务器子系统202内定义的触发机制。可以经由网络230(诸如因特网)接收外部事件。此处的外部事件可以与参考图1描述的外部事件105对应。
此处的系统还可以允许用户通过实例化宏记录器、执行宏记录器跟踪的多个动作,以及保存用户稍后可以启用以便自动执行动作的那些动作的表征来记录宏。宏记录可以典型地在此实现中于服务器侧执行。当用户执行可记录的命令(例如,设置单元格值、插入工作表等)时,可以向电子表格服务器发送命令。该服务器可以注意到其是否处于“记录”模式,以及如果是的话,可以查找该命令并将文本写入与可能具有相同效果的脚本代码对应的运行串缓冲中。
例如,考虑如果用户在电子表格的单元格A 1中键入“你好”。可以向电子表格服务器发送命令,带有意思是“设置范围”的命令ID、“你好”这一值、行0、列0和为0的工作表ID(例如,如果其是第一个工作表的话)。注意,这不仅仅用于记录器;这是实际上对电子表格服务器上的单元格执行改变的命令,所以无论记录发生与否,此命令都会发送。记录器由此可以基本上是进行电子表格操作的已有命令流上的窃听器(wiretap)的等价物。
记录器可以查找命令ID并发现其是“设置范围”命令。知道要生成的适当代码是在“range(范围)”对象上的“setValue(设置值)”调用,该记录器可以查找并使用行和列来生成对应的文本。记录器继而可以查找并使用工作表标识符,以确定针对该工作表的变量是否已经存在。结果,宏记录器可以生成文本,诸如:
sheet.getRange(‘a1’).setValue(‘hello’); (2)
由此,利用这些结构,计算机用户可以登录托管的计算机服务并且访问大量不同的应用和服务。用户可以显式地选择执行宏,或者宏可被自动触发,并且宏可以在应用或其他相关应用中运行,如果这些应用被宏引用的话,则会自动实例化。结果,用户可以具有对大量数据和编程机制的访问权,以产生鲁棒的在线服务。
图3A是用于向用户提供第三方数据对象的过程300的流程图。过程300可以例如通过网络122或228在系统100或200中执行。通常,过程300涉及处理针对来自第三方web服务的服务的、利用宏语言的用户请求,其中那些服务是使用一个或多个其他语言或协议进行通信的。
在此示例中,过程300在框302处开始,其中诸如图1中的系统100将WSDL解析成具有可调用的方法和具有属性的数据对象的服务集合。在步骤304,系统100可以使用经解析的WSDL来创建可以以自动方式进行访问的Java对象和/或服务。例如,用户可以通过进行针对特定服务的简单函数调用来创建挂钩至所创建的Java对象的宏。在上述NWS天气示例中,用户仅需要知道天气服务具有“getCurrentWeather(获得当前天气)”方法以及该方法需要具有“zipCode(邮编)”参数的对象,并且返回带有“temperature(温度)”域的天气对象。例如,天气服务可以使用如“getCurrentWeather”和“getForecast(获得预报)”的方法来创建服务对象,每个方法获取“regionDescription(地区描述)”并返回“weatherStatus(天气状况)”对象。随着系统100扫描WSDL,服务接口100可以创建这些数据对象和服务的集合以用于将来使用。
系统100可以使用Java反射来创建可以向运行在系统100上的宏返回的伪装(masqueraded)对象。Java反射是Java编程语言的特征,给定对象可以借由其伪装成另一对象。在步骤306,系统100将数据对象伪装成不存在的对象,使得对此伪装对象的所有调用终止,其中调用具有用于方法名称的串,以及用于有关参量的对象集合。
在某些时刻,用户可能诸如通过显式地运行宏或者通过隐式地令宏运行(例如,通过建立将触发宏在服务器子系统上的执行的事件,或者通过实际发生和被报告的事件)来从系统100请求服务。过程300可以确定是否已接收到用户对服务的调用或请求,步骤308。如果系统100确定还未接收到调用,则系统100可以继续将WSDL解析成服务或方法,步骤302。如果系统100接收到服务请求,则该系统可以在存储的服务注册表中查找该服务,步骤310。例如,如果用户调用“service.getCurrentWeather”,串“getCurrentWeather”作为方法被提供。系统100可以继而在存储的服务注册表中查找“getCurrentWeather”串。
在步骤312,系统100可以确定所请求的服务是否可用。例如,系统可以检测“getCurrentWeather”串是否在服务的注册表中可用。如果服务不可用,则系统100可以继续将WSDL解析成服务或方法,步骤302。如果在服务的注册表中找到了“getCurrentWeather”串,则系统基于WSDL的之前解析,将知道需要向串提供哪些参数,并且可以提供所需的参数以联系所请求的服务。例如,系统100可以确定“getCurrentWeather”串需要“regionDescription”参数,以及其将返回“weatherStatus”串。
在步骤314,系统100使用参数信息来创建针对表单的输入参量,其包含“regionDescription”参数中所需的所有变量。在步骤316,系统100继而执行针对实际外部web服务的web服务调用,其例如利用命令“getCurrentWeather”的XML表征和“regionDescription”中的变量来填充有效载荷。外部web服务返回XML的代码片段,并且系统100继而辨认出该代码片段看起来像“weatherStatus”对象,步骤318。因此,系统100使用来自返回的XML的信息来填充用于“weatherStatus”对象的变量,以及还将该信息返回至伪装的对象,步骤320。例如,如果“weatherStatus”对象具有“temperature(温度)”域,则系统100可以创建Java动态代理对象126,其知道针对“temperature”的请求应当检索从该服务返回的XML代码片段解析出的特定值。
因此,在示例过程300中,系统100允许用户使用“执行”服务所需的服务请求内容和变量来访问第三方web服务。例如,用户仅需要提供针对天气服务和期望的地点(例如,邮编)的请求,以接收带有可以置入宏或应用中的温度域的天气对象。
图3B是管理计算机宏的过程的流程图。过程330可以例如通过网络122或228在系统100或200中执行。通常,该过程涉及标识待执行的宏、访问用于该宏的宏代码、遍历该宏的行,以及将来自这种代码的命令转译或转换成其他协议或格式,使得宏可以与不同的大量服务和应用交互。
过程330开始于步骤332,其中标识存储在托管的计算机系统处的宏。例如,可以从调用该宏并包括用于该宏的路径和名称的URL标识该宏。用户可以创建宏104a,以在每个早晨的特定时间、特定邮编处、从国家天气服务(http://www.nws.noaa.gov)访问天气预报,以及向用户的移动电话发送天气。
在步骤334,系统100继而可以通过遍历宏中的命令行来执行该宏。例如,系统100可以解析并执行包括去往国家天气服务的链接、邮编、蜂窝电话号码和一天中特定时间的代码。系统100可以在数据库中注册该宏,并标识多个不同服务中对该宏104a做出响应的一个服务,步骤336。例如,系统100可以确定宏104a应用至由http://www.nws.noaa.gov提供的天气预报服务。
在步骤338,系统100将宏104a中的一个或多个命令从与系统100上的宏语言关联的格式转换成与标识的服务关联的命令格式。这种转换可以以各种方式发生,诸如通过参考提供语言之间映射操作一般概要的命令映射结构,以及继而通过向经转译的命令添加适当的定义、变量、参数或其他适当信息。
在某些情况下,经转译的命令可以从存储并执行宏的系统内部的一个或多个服务或者从这种系统外部的服务调用信息。由此,在步骤340中,系统100确定是否已在诸如以上述方式对服务提供者做出请求之后,从特定服务提供者接收了服务信息。例如,系统100可以确定国家天气服务提供者是否已经提供了与所标识的宏有关的信息。如果在预定时段未接收到或验证服务信息,则系统100利用错误消息进行响应并使用宏104a来拒绝对服务的访问,步骤342。如果接收到了服务信息,则系统100确定是否已超过预定配额,步骤344。如果已经超过了配额,则系统100利用错误消息进行响应,并拒绝对该服务的访问,步骤342。然而,如果未超过配额,则系统100将接收的服务信息转换成宏104a或与该宏对应的(以及经由宏或者在宏的控制下接收信息的)应用可用的格式,步骤346。该系统继而可以向与宏对应的应用或该宏提供经转换的服务信息,步骤348。
图4A是用于执行从运行在web页面上的应用启用的宏的过程400的流程图。通常,图4A所示过程与图3A所示过程类似,并且示出了可以在多组件系统中的不同组件之间共享该过程的方式示例。
示例过程400包括与浏览器401a和宏服务器401b之间的交互对应的步骤。例如,在过程的浏览器侧处的交互可以涉及用户采用运行电子表格应用的客户端设备,而执行的宏可以在数据服务器系统(诸如,宏服务器401b)处运行并由数据服务器系统获得数据。除了通用交互之外,该过程400在浏览器侧上示出的步骤与宏无关,其可以在用户与电子表格应用(例如,由电子表格服务器系统提供的)之间发生。过程400在宏服务器侧上执行的步骤可以例如由宏服务器子系统202执行。该过程400还可以代表以上参考图1和图2描述的系统100和200上的宏执行。通常,过程400在宏服务器401b侧的步骤可以由脚本管理器204控制。
在框402,发生用于执行宏的请求。例如,该请求可以由在客户端设备上运行浏览器应用的用户发起。该用户可以执行按键组合以触发宏的运行,或者该运行可以通过打开应用中的特定文档、用户选择应用上的控件,或者通过除用户与系统的交互之外的机制,诸如通过子系统接收的外部信号,来发起。
在步骤404,发起宏的执行。此发起例如可以在宏服务器子系统202内发生。例如,与可以由客户端设备传递或标识的地址对应的宏代码可以加载至子系统,并且可以以常规方式开始宏代码的执行。
在步骤406处确定用户是否针对执行该宏提供了授权。这种动作可以在宏代码执行的开始处发生。例如,用户授权可以是防止恶意代码运行的方式的一部分,如上所述。
如果不存在用户授权,则在步骤410取回用户授权需求,以及在步骤412提示用户进行授权。如果用户在步骤414提供了授权,则在步骤416存储用户的授权;否则,过程400在步骤418结束。用户授权需求可以包括例如:如果允许宏执行,则可能发生的恶意结果的类型列表。该列表可以在步骤412呈现给用户。
如果存在用户授权,则在步骤408创建经包装的服务。经包装的服务(或“bean”)可以例如由经包装的服务创建器212来创建。这种动作可以是可选的,并且可以用于保护执行的代码免受恶意干扰,如上所述。
在步骤420,脚本(或宏)在脚本执行器中执行。例如,参考图2,该脚本可以由脚本执行器208执行。该执行例如发生在宏服务器子系统202中,与发生在客户端本地的宏执行形成对照。脚本执行可以以常规方式发生,子系统的部分在脚本中的步骤中步进,以及在满足每个步骤时执行其动作。
在步骤422,确定是否遇到了连续。如果是,则将该连续进行存储,步骤428。事实上,连续可以用来暂停脚本,直到特定时间或发生了事件为止。如果未遇到连续,则处理在步骤424恢复,在该步骤中确定是否已遇到错误。如果未遇到错误,则宏的执行顺利地在步骤430结束。如果在步骤424遇到错误,则在宏的执行在步骤430结束之前,在步骤426警告用户。
由此,利用此过程,可以向用户提供由用户在客户端设备上的动作(或其他事件)触发的宏所提供的功能性,以及该宏可以在与客户端设备分离的子系统上执行。该执行在某些情况下,可以在用户不在线时发生,以及宏执行的结果可以用于用户和在系统内注册的其他用户。
连续可以充当脚本解释器的执行状态的“快照”,冻结执行,使得执行可以稍后恢复。这在概念上与调试器中的断点如何操作类似,或者与标准浏览器侧执行中的“警告”调用(例如,JavaScript)类似。连续可以实现为解释器中所有对象(例如,所有局部变量和“bean”)的二进制序列化以及指向当前执行点的指针。连续可以在脚本执行器208内实现,其可以支持作为公共可得特征的连续。所有对象(例如,包括“bean”)可以由脚本执行器208使用例如作为Java标准特征的Java序列化来进行序列化。利用Java序列化,对象(和其全部子对象)可以写出至二进制流,其包含所有域的当前值和对象标识符。当宏恢复时,脚本执行器208可以被给予连续二进制数据,其可以用于例如解序列化成新的活跃的Java对象。
在某些实现中,连续可以存储在数据库中。连续被存储在数据库中,例如直到宏恢复,而不是存储在服务器存储器中。数据库存储的一个原因可以是因为服务器可以在连续被触发这一时间与用户恢复执行(例如,通过点击对话框上的“ok”按钮或某些其他恢复动作)这一时间之间重新开始。在某些实现中,连续可以具有预定生命期(例如,6小时),在那之后,其可以被丢弃。以此方式,连续不会继续占用盘空间,例如如果用户一直不点击“ok”按钮的话。
图4B是用于记录和执行托管的系统上的宏的过程431的泳道流程图。示例过程431包括在浏览器、宏记录器、宏服务器和应用之间的交互。通常,该过程从服务器子系统向用户提供宏记录控件的集合,用户借此可以采用控件来指示用户和系统采取的动作何时应当被记录,以及这种动作继而可以重新编排格式为用于宏的代码,在该宏被调用时,其会重新执行该动作。
该过程在框432处开始,其中宏记录器由用户选择。该选择例如在用户选择开始记录宏的控件时在浏览器上发生。宏记录器在步骤434处被提供。宏记录器可以在用户的浏览器上执行,或者宏记录器可以远程执行,诸如在宏服务器子系统202处。宏记录器可以例如显示在无边界浏览器窗口中,其与目前正在用户的客户端设备上显示应用的窗口分离。该记录器还可以以其他方式被提供,诸如在作为显示应用的相同页面一部分的iFrame或类似元素中。
在步骤436,宏记录器与应用在一起显示。例如,如果用户在其笔记本计算机上的浏览器中执行电子表格应用,可以出现弹出菜单或其他显示,并且其代表宏记录器。宏记录器可以与用于控制记录器操作的各种控件一起显示,诸如用户可以选择的记录、暂停和停止按钮。记录在步骤438处开始,意味着用户可以开始定义宏的击键等。这种记录可以由消息触发,该消息被发送至经由显示记录器的代码来提供记录器的服务器子系统,指示用户已经选择了记录器上的记录控件。
在步骤440,用户与应用交互,意味着用户执行在用户使用的应用内定义宏的功能性的操作(击键、选择等)。例如,用户可以选择电子表格中的某个范围的单元格,可以在这些单元格上执行命令(例如,拷贝并粘贴它们、在其中输入公式等),以及可以执行其他这种动作。
在步骤442,在用户与应用交互期间,宏记录器开始记录用户的动作,其可以包括在命令在记录过程期间由用户记录时显示这些命令。如上所注意到的,记录器可以以与应用解释用户输入的方式相同的方式来解释用户输入,并且继而可以将这种经解释的动作转换成宏稍后可以在其运行时馈送至应用的命令。记录器还可以追踪用户在其中执行命令的应用(例如,浏览器窗口),使得宏可以知道在其运行时向那些各种不同的应用提供命令。
在用户与应用交互以及动作被记录时,在步骤444处提供用户动作的标准执行。该执行可以出现在用户与之交互的应用中。由此,用户的动作可以被并行提供至应用和宏记录器,使得动作被记录,以及还使得应用以适当方式对动作做出反应。
在完成了宏的定义之后,从用户接收保存命令,诸如通过按压记录器中的“完成”按钮、“停止”按钮或其他控件。在步骤448,发送用于宏的信息。这种信息可以在用户执行命令进行记录时解译成宏命令,或者可以在宏记录停止时,被解译或转换。宏记录器继而可以发送信息例如至宏存储库,以及可以生成指向宏代码的一个或多个指针(例如,URL),使得稍后可以容易地访问代码。例如,宏记录器可以请求用户标识在稍后启动宏时要使用的按键组合。
在步骤450,保存宏信息,包括库名称(向其存储宏)、脚本或宏内容(由宏记录器记录)和用户ID。还可以保存其他信息,以及在适当时将其与宏关联。
稍后,片刻后或几天到几年后,当用户决定运行宏时,用户可以指定待运行的宏。对宏的选择例如可以通过从为用户目前与之交互的应用定义的宏列表中选择宏名称来完成。例如,用户可访问的宏列表可以与用户的账户关联存储,或者可以在列表中显示给用户(其中,每个宏的作者已经提供了该宏的可理解名称)。备选地,可以自动进行宏的选择,诸如通过另一宏的执行,通过独立于特定用户动作的事件在系统上的发生,或者以其他方式。用户还可以使保存的宏可用于其他用户,诸如通过针对第一用户想要其有权访问宏的其他用户的其他账户标识符或电子邮件地址进行推介。用户还可以提供其他用户的群组,诸如通过指向消息收发群组(例如,电子邮件列表)或针对特定域或子域的所有用户(例如,从用户的雇主访问系统的所有用户)。
例如,运行宏的输入可以可选地诸如从用户接收,步骤452a。备选地,运行宏的触发事件可以在步骤452b发生。通过任一机制,与宏对应的宏代码被接收并执行,步骤454。
在宏执行的初始阶段,在步骤456创建用于和与宏关联的应用相对应的API的对象。这种对象可以代表执行宏所需要的对象,并且可以包括例如将命令从一个格式转译成另一格式的对象,包装其他对象的对象,施加配额的对象,和其他这种对象。
对象在安全包装器中进行包装,步骤458。这种包装可以借由上述机制发生,并且可以用于保护用户免于在系统上执行恶意代码。
在步骤460,利用用户ID调用(或触发或执行)应用。调用应用可以由宏服务器子系统202执行。用户ID包括在调用中以便诸如通过保证用户被授权进行读取、更新或删除特定文件等而检查授权。
在步骤462,执行与在调用的应用中执行的步骤有关的动作。例如,动作可以对应于在记录的宏中记录的个体指令或步骤。步骤的执行发生在应用中,其可以在物理上远离通过其对宏进行记录的浏览器。事实上,在某些示例中,宏可能已经由完全不同的用户在不同的浏览器上进行了记录和保存。在这种情况下,不同的用户可以是被最初记录宏的用户授权使用该宏的朋友或家庭成员。
在步骤464,返回进一步执行所需的键值。这些键值可以包括例如用户提供的输入或者应用本身传递的参数。从目标应用(例如,电子表格应用)返回的“键值”可以标识其状态可能由于给定命令的结果而改变的任何项目。例如,命令INSERT_SHEET(插入新工作表)可以导致新的工作表成为“当前”工作表。宏可以具有可操作以反射新的当前工作表的其他命令(例如,getActiveSheet)。其他命令(例如,INSERT_ROW(插入行))可以改变当前选择,改变目前哪些单元格是活跃的单元格。可以向宏返回当前状态和选择数据以进行存储,以备任何后续命令(例如,getActiveSelection(获取活跃选择))需要该信息。
步骤460、462和464可以继续相对同时运行,直到宏完成。当在步骤462遇到并执行最后指令时,或者当宏执行中的事件暂停宏的执行时,可以结束。
图5示出了用于宏系统中对象的示例结构,尤其是用于诸如图2中脚本信息存储库206的结构中的信息的示例逻辑结构。该逻辑结构500由节点502-508表示。对于存储在脚本信息存储库206中的任何一个宏,例如,可以存在至少一个结构500或其部分。继续节点504、链接节点506和用户授权节点508都针对用户库节点502具有0..N关系,意思是,对于每个用户库(或报头)节点,可以存在任意数量(包括0个)连续、链接和用户授权。
结构的根节点是用户库节点502,其例如定义宏和/或库的名称(例如,“Dan的基于云的宏库”中的“Macro_XYZ”),宏库的所有者(例如,“Dan”)和与宏关联的脚本(例如,宏代码)。每个宏库可以具有唯一的标识符,诸如64位伪随机数,其也可以用作数据库主键。在某些实现中,在从数据库检索宏时,未使用诸如包含在库中的函数集合和库名称之类的域;其严格地在运行/显示宏库时使用。“所有者”域可以例如作为外键与诸如是“获得用户XYZ所有的所有宏”的操作一起使用。链接表可以与例如诸如“获得文档XYZ使用的所有宏”的操作一起使用。
连续节点504可以包括连续ID、连续数据(例如,来自附加的录入点,诸如用于在宏进入等待状态之后,用附加的输入恢复宏)以及用户名称(例如,创建了连续节点504的用户)。针对给定宏可以存在多个连续节点504。连续的“所有者”可以主要被记录以防止会话劫持,使得例如用户X不能恢复已经作为用户Y运行的宏。以此方式,操作可以确保仅用户Y可以恢复其发起的宏。可以允许多个这种记录,因为一个用户可能具有若干连续(例如,在分开的窗口中打开的三个电子表格,每个具有活跃的提示对话框)。多个用户还可以同时运行其自己的宏实例,每个具有其自己的对话提示。
链接节点504允许外部实体链接到该宏。链接节点504可以包括文档ID,其可以是“指向”宏的URL或某些其他路径名称。可以存在多个链路节点506,因为可以针对同一宏存在若干不同名称(以及到该宏的若干不同URL路径或其他路径)。
用户授权节点508可以包含允许针对宏的受限访问的信息。例如,限制原缓冲字段可以使用值的协议模式来控制访问,而用户字段可以基于用户ID来控制访问。一个或二者可以在每个节点508中使用。针对给定宏可以存在多个用户授权节点508,每个标识不同的授权水平。用户授权节点508可以强制针对每个用户、每个宏仅存在一个授权记录。该强制可以采用用户针对执行该宏的批准戳的表征,以及该宏可以做的事情。可以允许多个记录,仅因为多个不同用户可能分别授权该宏,并且每个用户可以针对其执行具有授权的不同动作。当用户X执行宏时,其用于该宏的授权记录被取出,所有其他记录被忽略。
如果对于宏的需求改变(例如,如果作者添加了对博客应用的调用),而这会改变宏需要运行的需求,则已有用户授权首先标记为无效。结果,当用户尝试在添加了附加需求之后重新执行宏,则其可以被重新提示授权。例如,该提示可能说“此宏需要访问日历和博客应用”,其中该宏之前可能已简单地说过“此宏需要访问日历”。如果服务被删除,则可能不需要提示来进行重新认证;仅在需求增加时如此。
图6示出了宏构建系统600的示例屏幕截图。用户可以使用该系统例如建立用于宏的参数和规则,其可以随后例如基于外部事件来执行,或者可以在用户选择时手动运行。通常,该系统将宏结构组织成三个阶段,每个在屏幕截图的列中示出,以及每个阶段(包括每个阶段中的子阶段)可以在被配置之前随阶段改变。利用这种系统,用户可以快速地标识用于宏的触发器,来自与所选触发器有关的可用参数的、用于操作该宏的参数,以及与所选参数对应的宏的结果。
在一个示例中,用户可以构建基于与电子邮件有关的事件执行电子邮件功能的宏。在另一示例中,宏可被构建,以在非电子邮件相关应用(例如,电子表格、文字处理应用等)中执行操作。在又一示例中,用户可以构建这样的宏,其具有输出,但不会依赖于任何触发事件。无论作为触发器或输出的应用类型,简单地在屏幕上做出用户选择可以自动地导致相应宏的构建。运行在屏幕“后面”的软件应用可以例如处理图6的屏幕截图上示出的界面上的选择和用户输入,并且可以自动构建宏,包括插入适当的宏语法、各种应用专有API调用和语言专有API调用,以及宏运行需要的其他宏组件。所有这些对于简单地在若干可理解的域中输入若干输入的用户而言可以是透明的。
屏幕截图600包括宏名称域601,其标识正在构建的宏(例如,最初由用户定义的或稍后更新的)。如上文注意到的,宏的定义可以出现在三个常见区域中:宏触发数据区域602、宏处理数据区域604和宏输出数据区域606。宏触发数据区域602可以包括用户可以用来决定和标识触发宏的事件或条件的域和控件。宏处理数据区域604可以用来定义在宏运行时将发生的处理。宏输出数据区域606可以标识宏的输出,诸如宏将在其上进行动作的应用数据类型和将在该数据上发生的动作(或操作)。除了数据区域602-606之外,还可以存在其他数据定义区域,诸如如果多个应用中的数据将由同一宏进行更新的话,可以存在多个宏输出数据区域606。在某些实现中,提交/回滚技术可以用来确保做出所有更新,或者一点也不做,这可以有助于保证数据一致性。
三个数据区域602、604和606通常可以被设计成按顺序完成。在某些实现中,用户在一个区域中选择的值可能影响在该区域下面的或右边域或控件上显示的内容。例如,在宏触发数据区域602中录入的数据可以影响在其他区域(例如,数据区域604和606)中显示(和用户可选择的)的数据选择类型和域。例如,如果用户选择“电子邮件”作为宏的触发机制(例如,通过指定或选择属性域608中的“电子邮件”),则宏处理数据区域604中可用的选项可以定制为电子邮件属性。
宏触发数据区域602(如在此示例中描述的)包括属性域608、活动域610和参数域611。在活动域610中显示的值(和可由用户选择的)可以取决于属性域608中的用户选择。例如,通过选择属性域608中的“电子邮件”,活动域610中的值包括与电子邮件有关的选项(例如,传入消息、收件箱大小、标记大小等)。对不同属性的选择(例如,在线拍卖)可以产生活动域610中不同的条目列表(例如,项目数量、项目类别等)。参数域611可以用于向活动指派值。用户可以在参数域611中录入或选择的潜在值可以包括例如大小、颜色、美元数量、时间段、语言、性别或者仅仅关于适于特定应用的任何定量或定量值。在某些实现中,参数域611上的标记可以取决于活动框610的值而进行自动标记(例如,大小,颜色,价格等)。
宏处理数据区域604包括条件域612、检查服务域614和服务值域616。条件域612显示用于标识将触发宏执行某些动作(例如,诸如以某个方式转发传入电子邮件)的条件的选项。在条件域612中显示的具体值(例如,“来自用户”或“来自群组中的用户”等)可以例如取决于属性域608中的用户条目(例如,“电子邮件”)。如果用户选择了属性域608的不同值(例如,“电子表格”),可以在条件域612中显示不同的值集合(例如,与电子表格有关的)。
检查服务域614可以在收集的用于运行宏的信息中标识由宏检查的应用和宏外部的服务。例如,通过选择检查服务域614中的“定位器”,用户可以定义该宏在其执行期间应当检查发送者的位置、用户X的位置或在电子邮件的抄送行中列出的特定用户的位置或其他选择。服务值域616标识将从参考的服务向宏返回哪些特定值。此示例中的位置可以例如基于接近实时的GPS位置、蜂窝电话三角定位跟踪的位置、街道地址、邮编或任何其他适当定位准则。
在某些实现中,宏处理数据区域604可以包括用于在宏中使用布尔运算符的各种机制。这些机制可以是条件域612“与”检查服务域614所隐含的“AND”之外的机制。例如,条件域612可以与任意/全部控件617(如单选按钮描绘的)的集合一起使用,这可以促进明确指定AND/OR运算符和逻辑。例如,用户可以选择任意/全部控件617的“任意”(或“全部”)选项,以便指定将针对该宏考虑在检查服务域614中检查的任意(或全部)个体选项。
在某些实现中,可以为宏构建系统600上的其他域等提供附加的布尔控件和域,诸如域名称的直接文本输入、域值、布尔运算符和良好放置的括号。更高级控件类型的这些类型可以包括在例如可以通过选择高级布尔控件618而可得的屏幕上或其他界面上。在某些实现中,访问高级布尔控件618可以允许用户查看用于整个宏的已有逻辑,并且可以包括例如由在数据区域602-606中作出的经更新用户选择和输入所代表的当前逻辑。系统600可以执行自动语法检查并验证用户输入的(或从列表选择的)域与针对其对这些域进行检查的值相一致。
宏输出数据区域606包括属性域620、动作域622和参数域624。这些域可以用于例如指定宏的特定输出(例如,执行这、发送那,更新特定文件、域或电子表格单元格)。在图6所示示例中,属性620选择“电子邮件”,使得与电子邮件有关的条目显示在动作域622中。由此,此宏的输出将向某个或某些地址发送某些形式的电子邮件。
参数域624可以在需要的时候(例如,基于上面的选择和域)用于向域或选择指派值。在某些实现中,域的值可以定义在域的“后面”,使得双击域名称可以显示用于定义域的值的弹出对话框,而在域上悬停可以显示该域的当前值。
在图6中描绘的示例宏构建屏幕中,宏触发数据区域602被定义为在电子邮件应用(例如,按照属性域608)接收到“传入消息”(例如,在活动域610中标识的)时触发宏。宏处理数据区域604包括指定特定用户、电子邮件主体中包含特定文字,并基于用户X的位置的条件612。用于这些条件的值可以例如在其他参数域(图6中未示出)中进行定义。由此,如果满足这些条件,则宏将执行以完成。宏输出数据区域606示出了“电子邮件”是当前宏的输出类型,以及待执行的动作是“文字联系我”(例如,如在动作域622中定义的)。作为在数据区域602-606中录入值的结果,在检测到来自特定用户的、在主题行中包含特定词汇以及基于用户X的位置的传入电子邮件消息的触发事件,宏使用消息收发应用来向传入电子邮件的目标发送文本消息,告诉他收到了这样的电子邮件。示例宏构建屏幕的优势在于其以简明的GUI格式向用户提供此信息,而隐藏了执行此功能的底层宏,并且用户甚至不需要知道如何编写宏乃至如何辨认宏。该屏幕可以用于构建完整的宏或构建宏的部分,其中用户可以向该宏添加该屏幕不能提供的其他代码。
用于定义宏的用户界面可以包括按钮或控件626,例如用于“保存”被输入或更新的宏,“撤消”对宏的一个或多个更新或改变,“显示”结果宏,或者在不保存的情况下“取消”编辑。“从其复制”域628可以允许用户通过拷贝已有宏或拷贝用于已有宏的参数来创建和定义新宏,以便将该屏幕预设至用户继而可能改变的初始状态。描述域630可以允许用户记录宏的目的,或者向宏提供该宏的名称未捕捉到的宏的某个涵义水平。
在某些实现中,宏定义可以具有与之关联的时间元素,诸如该宏何时首次生效的有效日期632,该宏何时不再执行的到期日期634,以及可以用来例如指定该宏将执行的日期(工作日、周一、周末等)的日程或“运行于”域636。日期域可以包括特定日期或日期范围和/或时间,或者可以包括枚举类型(例如,现在,从不,工作日,等)。
在某些实现中,系统600提供的用户接口可以被调整以在具有较小显示的用户设备(诸如,智能电话等)上执行。例如,数据区域602-606和其他域可以顺次提供。在某些实现中,可以为整个屏幕提供滚动条,以允许用户一次导航至一个总的区域。
使用系统600构建的宏可以与上述针对系统100和200以及图1和图2描述的安全方面一起使用。具体地,每个构建的宏可以在基于能力的安全包装器中包装。系统600可以包括与安全有关的域(未示出),其可以促进安全,包括例如,可以使用该宏的其他用户的名称和其可以执行操作的限度(例如,发送电子邮件,更新电子表格等)。
这种基于能力的安全可以通过将用户在授权代码执行时的意图纳入考虑而提供益处。在这种系统中,以及作为示例,执行用户创建对象(称为能力),其将用户希望允许的每个操作进行封装,并将这些对象传递至待执行的非受信代码。在非受信代码由系统执行时,这些对象成为有效载荷的部分(例如,包装器的部分),并且不可由非受信代码修改或创建。当非受信代码试图访问底层受信资源(例如,常规地,文件系统等)时,其仅能通过用户创建的包装受信资源的对象来这样做。能力可以允许给予非受信代码以访问权的精细粒度的控制,并且可以用于构建遵守最小特权原理的执行环境。这意味着任何给定模块仅可以执行其能够执行其功能所需的最小动作集合,而不会执行更多。
已经关于托管的基于宏的系统描述了示例系统和过程,以下段落描述用于利用这种系统和过程的一系列示例,其中的很多讨论了系统可以如何使用基于能力的安全来处理这些情况中的每个情况,以及如何将可能作为这种示例部分的某些风险减轻。
示例1:销售策略强置实施
考虑单位的销售部门在电子表格中创建针对潜在消费者的建议的场景。电子表格包括该公司生产的所有产品和特征的成本。随着销售人员往下读该表单,他或她可能利用在该特征旁边列中的1或0将该特征标记为活跃的或不活跃的(即,目前可用于销售)。该表单可以包含用于计算价格的公式,包括各种打折和价格乘数。
在行项目之间可能存在很多依赖性,例如,包括可能互相排斥的某些特征。这些规则可以表示为宏。另一方面,规则可利用规则语言表达,该规则语言可编译为附接至该工作表的宏,以强制实施规则。附加的规则可以包括错误检查和其他一致性检查。另外,可能存在与基于区域或其他因素的促销或触发的事件关联的规则。
考虑这种规则的一个方面是如何管理之。例如,在工作表参考的共享库中具有宏和/或规则可能是有帮助的,使得管理员可以容易地在工作表中更新值。而且,宏可以是系统管理员向各种小型业务所有者提供的以及可以允许那些用户中的每个用户访问和执行宏的工具套件的部分。管理员可以使得宏从托管的系统上的中央位置得到更新,以及用户可以全部执行来自该位置的宏。
由此,该宏可以在共享模式中进行发布,单个“时隙(slot)”用于访问该宏的每个电子表格。另一用户可以通过将指向该宏的URL包括至其电子表格而将该宏导入其电子表格,以及给予宏向该电子表格写入的授权。
示例2:投资用户接口
考虑投资公司在电子表格中具有定价模型,以及想要从外部服务获取股票报价并将其注入电子表格以生成推荐(例如,买入、持有等)的场景。
可能需要从电子表格读取脚本以及向其写入脚本,以及脚本可能需要访问外部股票报价服务。作者可以向该脚本给予将该脚本限制至仅特定股票报价服务的访问权。如果作者使该表格位置为空,则将不仅问启用该服务的用户是否给予该脚本联系服务的授权,而且还要问联系哪个特定服务。利用该方式,用户可以限制该脚本可以做什么;该脚本将不能联系任何其他服务。
如果用户想要与意欲将此宏包括在其自己的电子表格(例如,拷贝该宏而不是引用之)的其他用户共享此宏,则其他用户将需要其自己的授权来访问外部股票报价服务。如果用户通过让其他用户指向在中央位置处的宏来共享宏,则用户可以能够使用该宏,即使他们不具有联系外部股票报价服务的授权。在这种情况下,可以向其给予脚本本身具有的授权(尽管他们可能不能从其自己的脚本访问服务)。
示例3:事故报告
考虑公共交通公司对自动化其事故报告感兴趣的场景。发生事故的司机可以访问托管的服务,以填写电子表格中记录诸如公共汽车位置等信息的表。宏可以用于将该报告发送至各种管理者以供其审阅。
宏可能需要标识管理者(例如,经由其可访问的另一电子表格、数据库查询等)、生成法律部门的正确电子邮件地址,以及与那些人共享该文档,以及发送电子邮件并访问其他电子表格(例如,包括哪个事故报告未决的记录的电子表格)。那些人可能需要进一步编辑该电子表格以及继而触发将该宏前移的事件。该宏可以在连续模式中运行,使得其在每次特定用户已解决了该宏的阶段时暂停,以及继而等待下一用户拾取之。在由事件唤醒时,其可以检查以查看谁签核了该文档(例如,如在文档本身中记录的或者在发送至宏的事件中的信息中记录的),并且可以等待,直到需要签核的每个人都签核了,在该时刻,宏继而可以通知其他人并记录该事故已完全处理(例如,在又一电子表格中)。在某些实现中,如果两个事件同时到达,则其可以排队,使得宏一次仅处理一个连续。工作流状态可以在宏的本地变量上下文中简单保持,以及部分记录在电子表格中。
在相关场景中,未完全处理和关闭(例如,基于工作流)的事故报告可被查询。此查询可能需要访问包含关于事故报告的状态信息的电子表格(或者简单地打开该电子表格)。
示例4:公共汽车调度报告
考虑公共汽车交通公司想要能够通知客户某些公共汽车线路的延迟的场景。该公司可以编辑电子表格以更新其公共汽车的预期时间/位置,以及这种编辑可以自动发生,诸如通过接收公共汽车的位置数据并基于这种信息来计算估计的到达时间(例如,通过将公共汽车标识为离开站X,以及增加时间Y以计算在站X+1处的到达时间)的宏来实现。电子表格中的宏可以标识某些公共汽车线路罕有地延迟的时间,以及如果这样,其可以向已经签约了通知的客户发送文本消息。例如,用户可以订阅以便在用户处于商业区以及在其正常公共汽车站的两个街区内以及用户的任何在途公共汽车(例如,公共汽车线路692、698等)可能在多于5分钟后到达该街角的任何时候,接收文本消息。用户移动设备上的应用可以在用户处于适当位置时触发,以便引起托管的服务激活用户记录上的标记,使得用户接收到针对用户当前位置的更新,而用户无需手动输入位置(例如,通过将用户的GPS坐标转换成最近的公共汽车站位置)。
出于安全目的,宏的作者可以给予向有限用户集合(例如,在另一电子表格中列出的那些用户,由管理员进行控制)发送文本消息的能力,以及可能将此宏发布为是工作表本地的,而不是公众可访问的。作者可以不给予宏向该工作表写入的能力。此场景带来了通过参考在文档或其他集合(例如,电子表格或某些其他组定义)中定义的组而指定能力范围的可能性。
示例5:基于位置的事件触发
考虑一个用户更新电子表格中的音乐会推荐的集合,包括每个音乐会的地址和日期/时间,的场景。通过当其他用户处于这些音乐会之一的附近以及音乐会时间即将到来的任何时候,其他用户可以订阅来自此电子表格的通知。在此情况中的通知可以使用例如服务,诸如地图服务、社交网络服务(以标识做出推荐的用户的好友)、位置服务(用于标识好友何时处于特定位置)以及发送通知的文本消息收发服务。由此,托管的宏尤其非常适于此场景。
示例6:调查
考虑用户创建调查或其他数据录入表、发送电子邮件表至多个其他用户,以及向电子表格添加指示每个用户如何填写该表的行的场景。
应当给予宏从某个地址向用户提供的地址集合给人群集合发电子邮件的能力。宏可以追踪该表中来自每个用户的数据的接收,诸如通过访问来自托管的服务的用户标识特征或者通过标识响应中的用户ID(例如,电子邮件地址)。宏继而可以访问电子表格、将用户ID录入电子表格的一个列,以及将用户答案录入电子表格的其他列中。以此方式,第一用户可以快速地向群组(例如,从已有朋友列表或电子邮件列表确定的)发送表,以及自动地把来自该群组的评论制成表格。
示例7:购买订单批准
考虑用户发起购买订单(例如,“我想要X千个棉签,以及我倾向于供货商XYZ”)的场景。当用户提交了购买订单(PO),宏可以基于诸如项目、总价、部门等数据来确定谁需要批准该PO。例如,如果总价高于固定阈值,则PO可能需要总裁批准。随着批准者批准了该PO,宏可以沿着工作流移动,诸如,在宏、数据库或电子表格中定义的用户列表;该宏可以保持本地状态以记住谁批准了谁没批准该PO;当所有批准者已批准时,该PO被发送进行购买。
此宏可以在连续方面得到最佳运行。该宏将具有向某些用户发送带有表或URL的去往文档的链接或附件的电子邮件的能力,那些用户可以点击该表或URL以批准或不批准给定购买订单,宏可以访问具有诸如部门总裁的信息的其他电子表格或数据库,等。
示例8:邮件合并
考虑用户具有名称、地址、电子邮件地址等的名称电子表格和另一文档(例如,电子邮件、电子表格等),想要用来自列表的域替换后一文档中的域,以及用电子邮件向名称工作表中指定的接收者发送合并的文档的场景。
为了安全,存在可以整体在特定文档和名称列表的场景中运行的宏。能力是:“允许向列表(在此表的第一列中指定的)发送电子邮件”以及访问模板文档。宏本身利用从电子表格行和某些模板计算的数据来向列表中的人群发送电子邮件。用于邮件合并宏的特定形式是已知的。
示例9:医生轮班调度
考虑多个医生在访问同一电子表格并编辑之的场景。宏可以检查电子表格以确保每个医生遵守该电子表格的格式编排或调度规则(例如,在时段中的最大或最小轮班数量)。每个用户可以能够点击按钮,以运行将工作表与日历应用进行同步以例如进行更直观访问(例如,用于创建重复日程)的宏。也可以存在双向同步。
宏可被扩展以能够与各种其他日历应用对接。宏还可以帮助医生验证他们在遵守规则,帮助他们跟踪他们登记报名了多少轮班,以及将电子表格与日历应用同步。
示例10:电子邮件插件
用户可以定义宏以标识进入其账户的传入电子邮件的每个实例,以及使得电子邮件的发送者标识和主题栏从该电子邮件拷贝至与该用户的账户关联的电子表格的下一空行中。以此方式,用户可以自动将传入电子邮件的最新日志保持在其账户中。
示例11:博客记录插件
作为服务博主的用户可能开发用于处理用户对博客的评论的宏。例如,可以使用关于评论者的信息,诸如在评论的旁边示出评论者的位置(例如,使用与来自用户的评论对应的IP地址)。此外,用户可以将所有评论与触发词汇(例如亵渎语言)的黑名单进行比较,使得在张贴了包含不适当词汇的评论时,用户接收到文本消息警报。用户可以继而登录博客清除之。
示例12:计费小时
作为顾问的用户可以在日历应用中跟踪其收费小时。他们可以使用宏来周期地(例如,每周或每月)将这种条目解析出来(例如,通过辨识表x.x中的时间条目)。宏继而可以使用与条目关联的文本来标识应当对其时间进行计费的项目编号(例如,将关键字及客户名称与某些不同项目关联的列表),以及继而可以向电子表格中的单元格添加数据以执行计费操作。该宏继而可以将来自电子表格的值(在应用了每小时计费费率之后)合并至文字处理程序生成的账单中,并可以继而利用电子邮件将作为结果的文档发送至客户。如果客户是托管的系统的注册用户,则该宏可以直接请求支付(包括经由包括客户可以用来指示支付账单意图的可选择机制的表),以及该客户可以随后选择控件来将钱从客户账户转移至顾问账户。
示例13:驾驶方向邮件合并
托管的系统的用户可能希望向他的多个朋友发送针对即将到来的聚会的邀请。该用户可以由此准备用于邀请至聚会的外壳(shell)。用户继而可以将宏指向好友及其地址的列表(例如,在托管的系统上的联系人应用中)以实际上将邮件执行合并到邀请中。然而,用户还可以向地图服务提供其自己的地址(聚会的位置)和针对其正被准备邀请的来自列表的朋友的地址,该地图服务可以根据标准API返回这样的图像,其示出了从朋友的住所到聚会之间的驾驶方向叠置在其上的地图。该宏可以将图像并入邀请,该邀请继而被连同自动和自定义生成的方向发送至朋友,。
图7示出了通用计算机设备700和通用移动计算机设备750的示例,其可以与此处描述的技术一起使用。计算设备700意在代表各种形式的数字计算机,诸如笔记本、台式机、工作站、个人数字助理、服务器、刀片服务器、大型机和其他适当的计算机。计算设备750意在代表各种形式的移动设备,诸如个人数字助理、蜂窝电话、智能电话和其他类似的计算设备。此处示出的元件、其连接和关系及其功能仅是示例,而不用于限制在本文档中描述和/或保护的发明的实现。
计算设备700包括处理器702、存储器704、存储设备706、连接至存储器704和高速扩展端口710的高速接口708和连接至低速总线714和存储设备706的低速接口712。组件702、704、706、708、710和712的每一个意在使用各种总线进行互联,并且可以安装在公共母板上或以其他适当方式安装。处理器702可以处理在计算设备700中执行的指令,包括存储在存储器704中的指令或存储在存储设备706上用于在诸如耦合至高速接口708的显示器716的外部输入/输出设备上显示GUI的图形信息的指令,以在诸如耦合至高速接口708的显示器716的外部输入/输出设备上显示GUI的图形信息。在其他实现中,在适当的情况下,多个处理器和/或多个总线可以与多个存储器和存储器类型一起使用。而且,可以连接多个计算设备700,每个设备提供一部分所需操作(例如作为服务器阵列、一组刀片服务器或者多处理器系统)。
存储器704存储计算设备700内的信息。在一个实现中,存储器704是易失性存储器单元。在另一实现中,存储器704是非易失性存储器单元。存储器704还可以是计算机可读介质的另一形式,诸如磁或光盘。
存储设备706能够提供用于计算设备700的大规模存储。在一个实现中,存储设备706可以是或包含计算机可读介质,诸如软盘设备、硬盘设备、光盘设备或磁带设备、闪存存储器或其他类似固态存储器器件或器件阵列,包括存储区域网络或其他配置中的设备。计算机程序产品可以有形体现在信息载体中。计算机程序产品还可以包含指令,当执行时,其执行诸如上述描述方法的一个或多个方法。该信息载体是计算机或机器可读介质,诸如存储器704、存储设备706、处理器702上的存储器或传播的信号。
高速控制器708管理用于计算设备700的带宽密集型操作,而低速控制器712管理较低的带宽密集型操作。这种功能的分配仅是示例性的。在一个实现中,高速控制器708耦合至存储器704、显示器716(例如,通过图形处理器或加速器),以及耦合至高速扩展端口710,其可以接受各种扩展卡(未示出)。在实现中,低速控制器712耦合至存储设备706和低速扩展端口714。低速扩展端口可以包括各种通信端口(例如,USB、蓝牙、以太网,无线以太网),其可以耦合至一个或多个输入/输出设备,诸如键盘、指点设备、扫描仪或通过网络适配器耦合至诸如交换机或路由器的联网设备。
计算设备700可以以众多不同形式实现,如附图中所示。例如,其可以实现为标准服务器720,或这种服务器的组中的多个服务器。其还可以实现为机架服务器系统724的部分。此外,其可以实现为诸如笔记本计算机722的个人计算机。备选地,来自计算设备700的组件可以与移动设备(未示出),诸如设备750,中的其他组件结合。这种设备的每个可以包括一个或多个计算设备700、750,并且整个系统可以由彼此通信的多个计算设备700、750构成。
除了其他组件以外,计算设备750包括处理器752、存储器764、输入/输出设备(诸如显示器754)、通信接口766和收发器768。设备750还可以提供有存储设备,诸如微驱动或其他设备,以提供附加存储。组件750、752、764、754、766和768中的每个组件使用各种总线互连,以及若干组件可以安装在公共母板上或者以其他适当方式安装。
处理器752可以执行计算设备750内的指令,包括存储在存储器764中的指令。处理器可以实现为包括单独和多个模拟和数字处理器的芯片的芯片集。处理器可以提供例如设备750的其他组件的协调,诸如对用户接口、设备750运行的应用,以及设备750的无线通信的控制。
处理器752可以通过耦合至显示器754的显示接口756和控制接口758来与用户通信。显示器754可以是例如TFT LCD(薄膜晶体管液晶显示器)或OLED(有机发光二极管)显示器,或其他适当的显示技术。显示接口756可以包括用于驱动显示器754以向用户呈现图形和其他信息的适当电路。控制接口758可以从用户接收命令以及转换命令以提交至处理器752。此外,可以提供与处理器752通信的外部接口762,以便支持设备750与其他设备的近距离通信。外部接口762可以在某些实现中提供例如有线通信,或者在其他实现中提供无线通信,以及可以使用多个接口。
存储器764存储计算设备750内的信息。存储器764可以实现为计算机可读介质、易失性存储器单元或非易失性存储器单元的一个或多个。也可以提供扩展存储器774,并通过可以包括例如SIMM(单线存储器模块)卡接口的扩展接口772而连接至设备750。这种扩展存储器774可以提供设备750的额外存储空间,或者可以还存储用于设备750的应用或其他信息。具体地,扩展存储器774可以包括用于执行或补充上述过程的指令,并且还可以包括安全信息。由此,例如,扩展存储器774可以被提供以作为设备750的安全模块,以及可以利用允许设备750的安全使用的指令进行编程。此外,可以经由SIMM卡提供安全应用和附加信息,诸如以不可破解的方式将标识信息放置在SIMM卡上。
存储器可以包括例如闪存和/或NVRAM存储器,如下所述。在一个实现中,计算机程序产品有形体现在信息载体中。计算机程序产品包括指令,在执行时,其执行一个或多个方法,如上文所述的那些。信息载体是计算机或机器可读介质,诸如存储器764、扩展存储器774、处理器752上的存储器,或者可以例如通过收发器768或外部接口762接收的传播信号。
设备750可以通过通信接口766无线通信,其可以在需要的情况下包括数字信号处理电路。通信接口766可以提供各种模式或协议下的通信,诸如GSM语音呼叫、SMS、EMS或MMS消息收发、CDMA、TDMA、PDC、WCDMA、CDMA2000或GPRS,以及其他。这种通信可以例如通过射频收发器768发生。此外,可以使用蓝牙、WiF或其他收发器(未示出)发生短程通信。此外,GPS(全球定位系统)接收器模块770可以向设备750提供附加的导航和位置相关无线数据,其可以在适当的时候由运行在设备750上的应用使用。
设备750还可以使用音频编解码器760进行音频通信,其可以从用户接收说出的信息并将其转换成可用的数字信息。音频编解码器760可以同样通过设备750的手持机中的扬声器生成用于用户可听声音。这种声音可以包括来自语音电话呼叫的声音,可以包括记录的声音(例如,语音消息、音乐文件等),并且还可以包括在设备750上操作的应用生成的声音。
计算设备750可以以大量不同方式实现,如附图所示。例如,其可以实现为蜂窝电话780。其还可以实现为智能电话782、个人数字助理或其他类似移动电话的部分。
设备750还可以包括能够感测运动的一个或多个不同设备。示例包括但不限于加速度计和指南针。加速度计和指南针或能够检测运动或位置的其他设备可以从任何销售者获得,并且可以以各种方式感测运动。例如,加速度计可以检测加速度的变化,而指南针可以检测相对于磁北极或磁南极的定向改变。这些运动中的改变可以由设备750检测,并且用于根据此处描述的过程和技术来更新相应设备750的显示。
此处描述的系统和技术的各种实现可以实现在数字电子电路、集成电路、专门设计的ASIC(专用集成电路)、计算机硬件、固件、软件和/或其组合中。这些各种实现可以包括在包括至少一个可编程处理器的可编程系统上可执行和/或解释的一个或多个计算机程序中的实现,该处理器可以是专用或通用的,其耦合到存储系统、至少一个输入设备以及至少一个输出设备以接收自或发送至上述设备的的传送数据和指令。
这些计算机程序(也称为程序、软件、软件应用或代码)包括用于可编程处理器的机器指令,以及可以利用高级过程和/或面向对象的编程语言实现,或者以汇编/机器语言实现。如此处使用的,术语“机器可读介质”、“计算机可读介质”表示任何计算机程序产品、装置和/或设备(例如,磁盘、光盘、存储器、可编程逻辑器件(PLD)),其用于提供机器指令和/或数据至可编程处理器,包括接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指代用于向可编程处理器提供机器指令和/或数据的任何信号。
为了提供与用户的交互,此处描述的系统和技术可以实现在具有用于向用户显示信息的显示设备(例如,CRT(阴极射线管)或LCD(液晶显示器)监视器)和用户通过其可以向计算机提供输入的键盘和指点设备(例如,鼠标或轨迹球)的计算机上实现。其他种类的设备也可以用来提供与用户的交互,例如,向用户提供的反馈可以是任何形式的感觉反馈(例如,视觉反馈、听觉反馈或触觉反馈);以及来自用户的输入可以以任何形式接收,包括声学的、语音的或触觉输入。
此处描述的系统和技术可以在包括后端组件(例如,数据服务器)的计算系统或包括中间件组件(例如,应用服务器)的计算系统,或包括前端组件(例如,具有用户通过其可以与此处描述的系统和技术的实现进行交互的web浏览器或图形用户接口的客户端计算机)的计算系统,或这种后端、中间件或前端组件的任何组合中实现。系统的组件可以通过数字数据通信的任何形式或介质(例如,通信网络)互连。通信网络的示例包括本地网络(“LAN”)、广域网(“WAN”)和互联网。
计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离并且典型地通过通信网络进行交互。客户端和服务器的关系借助于运行在相应计算机上并且彼此具有客户端服务器关系的计算机程序实现。
已经描述了大量实施方式。然而,应当理解,在不脱离本发明精神和范围的前提下,可以做出各种修改。例如,已经针对用于在以第一语言编写的宏与设计用于以不同语言通信的应用之间进行对接的特定机制描述了本文档的大部分,但是可以采用用于跨多个系统提供单个开发环境的其他机制。
此外,为了实现期待的结果,在附图中描绘的逻辑流不需要按照所示的特定顺序,或者顺次顺序。此外,可以提供其他步骤,或者步骤可从描绘的流中省略,或者可以向描绘的系统添加其他组件或从其移除组件。因此,其他实施方式也落入所附权利要求的范围内。
Claims (19)
1.一种管理计算机宏的计算机实现的方法,包括:
标识存储在托管的计算机系统处的宏;
通过遍历所述宏中的命令行来执行所述宏;
标识响应于宏的多个不同服务的一个服务;
将所述宏中的命令从与所述宏以其创建的宏语言相关联的格式转换成与所述多个不同服务的被标识的一个服务相关联的命令格式;以及
在将从多个不同服务的所述一个服务接收的信息转换成所述宏或与所述宏对应的应用可使用的格式之后,向所述宏或与所述宏对应的所述应用提供所述信息。
2.根据权利要求1所述的方法,其中所述宏是从调用所述宏以及包括用于所述宏的路径和名称的URL标识的。
3.根据权利要求1所述的方法,其中提供从多个不同服务的所述一个服务接收的信息包括通过伪装的对象来提供所述信息,其中所述伪装的对象隐藏用于从所述多个不同服务的至少一个服务获取所述信息的对象的特征。
4.根据权利要求1所述的方法,进一步包括:确定与执行宏对应的用户对所述多个服务的所述一个服务的调用是否超过确定水平,以及如果所述调用超过预定水平,则阻止所述宏的执行。
5.根据权利要求4所述的方法,其中确定与所述执行宏对应的用户对所述多个服务的所述一个服务的调用是否超过确定水平包括将所述宏包装在配额包装器中,所述配额包装器作为所述宏与一个或多个对象之间的适配器进行操作,并且实现对所述宏的使用限制。
6.根据权利要求1所述的方法,进一步包括接收托管的计算机系统上的事件的通知,其中所述事件独立于所述托管的计算机系统上的用户状态;将所述事件与所述宏相关联以及将所述用户的账户与所述托管的计算机系统相关联;以及在所述用户的账户上执行所述宏。
7.根据权利要求1所述的方法,其中将所述宏中的命令从与所述宏以其创建的宏语言相关联的格式转换成与所述多个不同服务的被标识的一个服务相关联的命令格式包括:向存储在所述托管的计算机系统上的转译表应用所述宏的部分。
8.根据权利要求1所述的方法,将所述宏中的命令从与所述宏以其创建的所述语言相关联的格式转换成与应用相关联的命令格式,以使用所述宏来控制所述应用。
9.根据权利要求8所述的方法,进一步包括向所述用户传输消息,以向所述用户通知所述应用的操作。
10.根据权利要求9所述的方法,其中所述消息选自包括电子邮件消息、电话语音消息和文本消息的群组。
11.根据权利要求1所述的方法,其中多个不同服务的所述一个服务选自包括位置服务、电子邮件服务和SOAP服务的群组。
12.根据权利要求1所述的方法,其中将所述宏中的所述命令从与所述宏以其创建的所述宏语言相关联的所述格式转换成与所述多个不同服务的被标识的一个服务相关联的所述命令格式包括:使用Java对象来将访问方法包装至所述服务。
13.一种用于管理计算机宏的计算机实现的系统,所述系统包括:
多个托管的应用,其可从所述托管的计算机系统进行操作;
宏数据存储库,其存储多个宏,每个宏被指派至所述托管的计算机系统上的用户的账户,以及每个宏定义待由所述多个托管的应用的至少一个应用执行的一系列动作;以及
处理器,用于执行服务接口,当所述服务接口被执行时,其定义用于所述系统可访问的多个服务的每一个服务的一个或多个对象,其中所述一个或多个对象的每一个将来自第一语言的所述多个宏的通信转译成与所述第一语言不同的第二语言的所述多个服务的一个或多个服务。
14.根据权利要求13的系统,进一步包括事件处理器,其被编程以接收在所述多个托管的应用处发生的事件的通知,以及响应于接收到所述事件的通知,引起所述多个宏的执行。
15.根据权利要求13的系统,其中所述一个或多个对象的每一个包装访问方法,所述访问方法定义用于与所述多个服务的一个服务进行通信的通信机制。
16.根据权利要求13的系统,进一步包括一个或多个安全包装器,其作为执行宏与所述一个或多个对象之间的适配器进行操作,并且在不具有关于所述宏的肯定用户指示的情况下防止宏的运行。
17.根据权利要求13的系统,进一步包括一个或多个配额强制实施层,其被编程以防止高于确定水平的所述多个宏的一个或多个宏的执行。
18.根据权利要求17的系统,其中所述确定水平由在时段中代表特定用户的账户的宏的执行数量所定义。
19.一种用于管理计算机宏的计算机实现的系统,包括:
多个托管的应用,其可从所述托管的计算机系统操作;
宏数据存储库,其存储多个宏,每个宏被指派至所述托管的计算机系统上的用户的账户,以及每个宏定义待由所述多个托管的应用的至少一个应用执行的一系列动作;以及
用于执行第一格式的所述宏的一个或多个宏,以及将来自所述执行的信息转译成响应于来自所述宏的调用而提供与所述第一格式不同的第二格式的信息的一个或多个服务的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/540,927 | 2009-08-13 | ||
US12/540,927 US8826304B2 (en) | 2009-08-13 | 2009-08-13 | Virtual object indirection in a hosted computer environment |
PCT/US2010/045531 WO2011020066A2 (en) | 2009-08-13 | 2010-08-13 | Virtual object indirection in a hosted computer environment |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102549559A true CN102549559A (zh) | 2012-07-04 |
CN102549559B CN102549559B (zh) | 2015-09-09 |
Family
ID=43586883
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201080041735.9A Active CN102549559B (zh) | 2009-08-13 | 2010-08-13 | 托管的计算机环境中的虚拟对象间接化 |
Country Status (8)
Country | Link |
---|---|
US (1) | US8826304B2 (zh) |
EP (1) | EP2465046B1 (zh) |
JP (1) | JP5583769B2 (zh) |
KR (1) | KR101557322B1 (zh) |
CN (1) | CN102549559B (zh) |
AU (1) | AU2010282299B2 (zh) |
DE (1) | DE202010018488U1 (zh) |
WO (1) | WO2011020066A2 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103281311A (zh) * | 2013-05-12 | 2013-09-04 | 南京载玄信息科技有限公司 | 一种使用Protobuf描述的物联网协议解析方法 |
CN104077128A (zh) * | 2014-06-09 | 2014-10-01 | 中国建设银行股份有限公司 | 一种数据处理方法及装置 |
CN105516373A (zh) * | 2014-09-23 | 2016-04-20 | 中兴通讯股份有限公司 | 对象信息处理方法、装置及ors应用网关 |
CN107819876A (zh) * | 2017-11-27 | 2018-03-20 | 北京旷视科技有限公司 | 一种基于云平台的数据处理方法及系统 |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8301705B2 (en) * | 2008-02-29 | 2012-10-30 | Sap Ag | Subject line personalization |
US8775454B2 (en) | 2008-07-29 | 2014-07-08 | James L. Geer | Phone assisted ‘photographic memory’ |
US9128981B1 (en) | 2008-07-29 | 2015-09-08 | James L. Geer | Phone assisted ‘photographic memory’ |
US8527985B2 (en) | 2009-12-29 | 2013-09-03 | Oracle International Corporation | Techniques for rapid deployment of service artifacts |
US8924489B2 (en) * | 2011-01-05 | 2014-12-30 | Apple Inc. | Message push notification client improvements for multi-user devices |
US8671416B2 (en) * | 2011-01-14 | 2014-03-11 | Apple Inc. | Dynamic service discovery |
US8875161B2 (en) * | 2011-06-08 | 2014-10-28 | The Mathworks, Inc. | Methods and systems for setting access to a list of class entities |
US9262133B2 (en) * | 2012-01-27 | 2016-02-16 | Amx Llc | Mapping and formatting input commands to a third party protocol |
US9916545B1 (en) * | 2012-02-29 | 2018-03-13 | Amazon Technologies, Inc. | Portable network interfaces for authentication and license enforcement |
US9665382B2 (en) * | 2012-09-12 | 2017-05-30 | Change Healthcare Llc | Method and apparatus for providing a cross-device macro framework |
CN102946428A (zh) * | 2012-11-07 | 2013-02-27 | 浪潮电子信息产业股份有限公司 | 一种基于云存储的计费系统设计方法 |
US20140136936A1 (en) * | 2012-11-09 | 2014-05-15 | Microsoft Corporation | Spreadsheet functions to call rest api sources |
US9009741B2 (en) * | 2013-02-04 | 2015-04-14 | Futurewei Technologies, Inc. | Mechanism to initiate calls between browsers without predefined call signaling protocol |
US20140310681A1 (en) * | 2013-04-12 | 2014-10-16 | Microsoft Corporation | Assisted creation of control event |
US9171168B2 (en) * | 2013-09-30 | 2015-10-27 | Hewlett-Packard Development Company, L.P. | Determine anomalies in web application code based on authorization checks |
US20150100890A1 (en) * | 2013-10-04 | 2015-04-09 | Samsung Electronics Co., Ltd. | User interface management method and system |
US9762585B2 (en) | 2015-03-19 | 2017-09-12 | Microsoft Technology Licensing, Llc | Tenant lockbox |
US10931682B2 (en) | 2015-06-30 | 2021-02-23 | Microsoft Technology Licensing, Llc | Privileged identity management |
US9965618B1 (en) * | 2015-08-27 | 2018-05-08 | Amazon Technologies, Inc. | Reducing privileges for imported software packages |
US10063601B2 (en) * | 2016-03-21 | 2018-08-28 | Microsoft Technology Licensing, Llc | Client identification for enforcing computer resource quotas |
US10277529B2 (en) | 2016-03-21 | 2019-04-30 | Microsoft Technology Licensing, Llc | Visualization of computer resource quotas |
CN108965356B (zh) * | 2017-05-18 | 2022-06-07 | 腾讯科技(深圳)有限公司 | 一种信息交互方法及电子设备 |
US10936738B1 (en) * | 2017-06-26 | 2021-03-02 | Amazon Technologies, Inc. | Moderator to extend application functionality |
KR102617423B1 (ko) * | 2017-12-29 | 2023-12-26 | 주식회사 넥슨코리아 | 매크로의 생성을 적응적으로 추천하는 장치, 방법 및 컴퓨터 프로그램 |
US10747600B2 (en) * | 2018-06-12 | 2020-08-18 | commercetools GmbH | Extensibility for third party application programming interfaces |
US11120211B2 (en) | 2019-04-23 | 2021-09-14 | Microsoft Technology Licensing, Llc | Combining spreadsheet recorded operations |
US11204789B2 (en) | 2019-08-20 | 2021-12-21 | Hyland Software Inc. | Graphical user interface for macro generation, modification, and verification |
US11144338B2 (en) * | 2019-08-20 | 2021-10-12 | Hyland Software, Inc. | Computing system for macro generation, modification, verification, and execution |
CN110944018A (zh) * | 2019-12-27 | 2020-03-31 | 浪潮通用软件有限公司 | 一种基于注解和动态代理的rpc通信方法及设备、介质 |
US11550583B2 (en) | 2020-11-13 | 2023-01-10 | Google Llc | Systems and methods for handling macro compatibility for documents at a storage system |
CA3229641A1 (en) * | 2021-08-31 | 2023-03-09 | Nutcracker Therapeutics, Inc. | State machine based script applications and systems |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1126657A2 (en) * | 1999-11-24 | 2001-08-22 | Sharp Kabushiki Kaisha | Data communication network service providing system executing macro command |
US20020120672A1 (en) * | 2001-02-27 | 2002-08-29 | Butt Alan B. | Network management |
US20030070006A1 (en) * | 2001-10-10 | 2003-04-10 | Borland Software Corporation | Development system providing extensible remoting architecture |
US20070094372A1 (en) * | 2005-10-26 | 2007-04-26 | International Business Machines Corporation | Integration of legacy applications |
US20070150741A1 (en) * | 2005-12-12 | 2007-06-28 | Microsoft Corporation | Securely calling Web services from macros |
US7275240B2 (en) * | 2003-01-08 | 2007-09-25 | Microsoft Corporation | Method and system for recording macros in a language independent syntax |
US20080189235A1 (en) * | 2007-02-02 | 2008-08-07 | Microsoft Corporation | User-interface architecture for manipulating business models |
US20080301120A1 (en) * | 2007-06-04 | 2008-12-04 | Precipia Systems Inc. | Method, apparatus and computer program for managing the processing of extracted data |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1196009A (ja) | 1997-09-22 | 1999-04-09 | Toshiba Corp | オブジェクトインターフェース変換方法及び記録媒体 |
US6658453B1 (en) | 1998-05-28 | 2003-12-02 | America Online, Incorporated | Server agent system |
JP2002189841A (ja) * | 2000-12-20 | 2002-07-05 | Hitachi Ltd | ワークフロー管理方法およびシステム並びにその処理プログラムを格納した記録媒体 |
US20020082988A1 (en) * | 2000-12-27 | 2002-06-27 | Kazuyuki Ujiie | Server device for evaluating quality of service, service providing method and medium |
US6941337B2 (en) * | 2001-06-07 | 2005-09-06 | Nokia Corporation | Interaction arrangement for a sequence of interactions providing a service to a user |
US20030097649A1 (en) * | 2001-10-31 | 2003-05-22 | Terrence Jones | Embedded language interpretation for configuration of fixturing applications |
US20030236921A1 (en) * | 2002-06-19 | 2003-12-25 | Pitney Bowes Incorporated | Method and system for creation and use of webs of linked documents |
JP2004213529A (ja) * | 2003-01-08 | 2004-07-29 | Microsoft Corp | 言語非依存の構文でマクロを記録する方法およびシステム |
US20080104042A1 (en) * | 2006-10-25 | 2008-05-01 | Microsoft Corporation | Personalized Search Using Macros |
JP2008172725A (ja) * | 2007-01-15 | 2008-07-24 | Ricoh Co Ltd | 情報処理装置、画像処理装置、情報処理方法及び情報処理プログラム |
US7757040B2 (en) * | 2007-01-30 | 2010-07-13 | International Business Machines Corporation | Memory command and address conversion between an XDR interface and a double data rate interface |
JP5173388B2 (ja) | 2007-12-11 | 2013-04-03 | キヤノン株式会社 | 情報処理装置および情報処理方法 |
US8082494B2 (en) * | 2008-04-18 | 2011-12-20 | Microsoft Corporation | Rendering markup language macro data for display in a graphical user interface |
US8453126B1 (en) * | 2008-07-30 | 2013-05-28 | Dulles Research LLC | System and method for converting base SAS runtime macro language scripts to JAVA target language |
US20120131645A1 (en) * | 2010-11-18 | 2012-05-24 | Harm Michael W | User Scriptable Server Initiated User Interface Creation |
-
2009
- 2009-08-13 US US12/540,927 patent/US8826304B2/en active Active
-
2010
- 2010-08-13 EP EP10808847.7A patent/EP2465046B1/en active Active
- 2010-08-13 AU AU2010282299A patent/AU2010282299B2/en active Active
- 2010-08-13 KR KR1020127006600A patent/KR101557322B1/ko active IP Right Grant
- 2010-08-13 JP JP2012524920A patent/JP5583769B2/ja active Active
- 2010-08-13 DE DE202010018488.6U patent/DE202010018488U1/de not_active Expired - Lifetime
- 2010-08-13 CN CN201080041735.9A patent/CN102549559B/zh active Active
- 2010-08-13 WO PCT/US2010/045531 patent/WO2011020066A2/en active Application Filing
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1126657A2 (en) * | 1999-11-24 | 2001-08-22 | Sharp Kabushiki Kaisha | Data communication network service providing system executing macro command |
US20020120672A1 (en) * | 2001-02-27 | 2002-08-29 | Butt Alan B. | Network management |
US20030070006A1 (en) * | 2001-10-10 | 2003-04-10 | Borland Software Corporation | Development system providing extensible remoting architecture |
US7275240B2 (en) * | 2003-01-08 | 2007-09-25 | Microsoft Corporation | Method and system for recording macros in a language independent syntax |
US20070094372A1 (en) * | 2005-10-26 | 2007-04-26 | International Business Machines Corporation | Integration of legacy applications |
US20070150741A1 (en) * | 2005-12-12 | 2007-06-28 | Microsoft Corporation | Securely calling Web services from macros |
US20080189235A1 (en) * | 2007-02-02 | 2008-08-07 | Microsoft Corporation | User-interface architecture for manipulating business models |
US20080301120A1 (en) * | 2007-06-04 | 2008-12-04 | Precipia Systems Inc. | Method, apparatus and computer program for managing the processing of extracted data |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103281311A (zh) * | 2013-05-12 | 2013-09-04 | 南京载玄信息科技有限公司 | 一种使用Protobuf描述的物联网协议解析方法 |
CN103281311B (zh) * | 2013-05-12 | 2016-09-14 | 南京载玄信息科技有限公司 | 一种使用Protobuf描述的物联网协议解析方法 |
CN104077128A (zh) * | 2014-06-09 | 2014-10-01 | 中国建设银行股份有限公司 | 一种数据处理方法及装置 |
CN104077128B (zh) * | 2014-06-09 | 2017-07-11 | 中国建设银行股份有限公司 | 一种数据处理方法及装置 |
CN105516373A (zh) * | 2014-09-23 | 2016-04-20 | 中兴通讯股份有限公司 | 对象信息处理方法、装置及ors应用网关 |
CN107819876A (zh) * | 2017-11-27 | 2018-03-20 | 北京旷视科技有限公司 | 一种基于云平台的数据处理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
US20110041141A1 (en) | 2011-02-17 |
US8826304B2 (en) | 2014-09-02 |
AU2010282299B2 (en) | 2015-12-10 |
WO2011020066A2 (en) | 2011-02-17 |
AU2010282299A1 (en) | 2012-03-01 |
CN102549559B (zh) | 2015-09-09 |
EP2465046A2 (en) | 2012-06-20 |
JP2013502017A (ja) | 2013-01-17 |
KR20120068864A (ko) | 2012-06-27 |
WO2011020066A3 (en) | 2011-06-30 |
EP2465046B1 (en) | 2017-06-14 |
DE202010018488U1 (de) | 2017-01-23 |
JP5583769B2 (ja) | 2014-09-03 |
KR101557322B1 (ko) | 2015-10-06 |
EP2465046A4 (en) | 2013-10-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102549559B (zh) | 托管的计算机环境中的虚拟对象间接化 | |
CN102549560B (zh) | 共享服务器侧宏 | |
CN102498483B (zh) | 事件触发的服务器端宏 | |
US20230221851A1 (en) | System and Method for Application Program Interface or Page Processing | |
US11397520B2 (en) | Application program interface or page processing method and device | |
US20150293669A1 (en) | Apparatus, method, and computer system for generating contained, usable objects that are dynamically configurable | |
CN113988829A (zh) | 服务的费用支付方法及装置 | |
Securely | Cover Story An Approach for Robust Electronic Trading Platform 7 Cover Story Business Challenges of Multi Channel |
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 | ||
CP01 | Change in the name or title of a patent holder |
Address after: American California Patentee after: Google limited liability company Address before: American California Patentee before: Google Inc. |
|
CP01 | Change in the name or title of a patent holder |