CN102549560A - 共享服务器侧宏 - Google Patents

共享服务器侧宏 Download PDF

Info

Publication number
CN102549560A
CN102549560A CN2010800420629A CN201080042062A CN102549560A CN 102549560 A CN102549560 A CN 102549560A CN 2010800420629 A CN2010800420629 A CN 2010800420629A CN 201080042062 A CN201080042062 A CN 201080042062A CN 102549560 A CN102549560 A CN 102549560A
Authority
CN
China
Prior art keywords
grand
user
computer system
application
trustship
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
Application number
CN2010800420629A
Other languages
English (en)
Other versions
CN102549560B (zh
Inventor
M·W·哈姆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of CN102549560A publication Critical patent/CN102549560A/zh
Application granted granted Critical
Publication of CN102549560B publication Critical patent/CN102549560B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45529Embedded in an application, e.g. JavaScript in a Web browser

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Information Transfer Between Computers (AREA)
  • Stored Programmes (AREA)

Abstract

公开一种管理计算机宏的计算机实现的方法。该方法包括:在因特网可访问的托管计算机系统中的位置存储用于宏的代码;以及从在与该托管计算机远离的客户端计算机上运行的应用接收对执行该宏的请求。该方法还包括:在该托管计算机系统上执行宏,并且向在该客户端计算机上运行的该应用提供执行该宏的结果,其中与该宏被编程为对其操作的文件分开存储和访问用于该宏的该代码。

Description

共享服务器侧宏
相关申请的交叉引用
本申请按照35U.S.C.§119(3)要求于2009年8月13日提交的、题为SHARED SERVER-SIDE MACROS的第12/540,785号美国申请的优先权,其公开内容通过引用并入于此。
技术领域
本文献涉及电子内容的基于网络的递送。
背景技术
宏是如下指令集,可以在一个或者多个计算机应用内执行该指令集以提供与那些应用的增强和自动的交互,其中宏的至少一部分代表原本可以由应用的用户人工执行的步骤。例如,可以编写宏以便根据电子表格应用中的某些数计算值并且将该值复制到台式计算机上的有关文字处理应用。用户可以向宏分配“热键”组合,从而使得用户可以简单地通过按压热键组合来容易地运行宏。作为另一示例,也可以编写宏以使某些电子消息(例如,来自配偶、客户或者老板的电子消息)在重要性上有所提高,从而使得它们可以由计算设备的用户更容易地看见。一种熟悉的基于宏的系统是用于MICROSOFT OFFICE生产率套件的Visual Basic for Applications。
发明内容
本文献讨论用于在托管计算环境(常俗称为“云”)中创建和使用宏的系统和技术。可以存储并且从宏服务器子系统而不是从客户端设备执行宏,因此允许在用户之间容易地共享宏,因为所有合格用户可以从任何位置访问宏,只要他们可以接入网络并且可以提供他们的证书。此外,宏可以容易地访问多个应用和服务(包括提供关于各种用户的位置(如例如从他们的移动设备上的GPS确定)的信息的服务、提供新闻和天气订阅的服务以及其他此类服务。应用可以广泛变化并且可以包括电子邮件、生产率应用(诸如电子表格和文字处理器)、映射应用以及可以在单个网页(该网页可以由用户访问并且甚至由用户开发以从宏提供定制输出)上一起呈现的各种应用的混搭(mash-up)。可以从标准web浏览器访问系统,并且该系统可以提供宏记录,其中用户调用宏记录器并且该记录器追踪用户对计算机的动作并且将那些动作转换成宏代码,从而使得可以在用户运行宏时的以后时间自动重复该动作。
可以从甚至在用户未与由特定宏寻址的应用交互时发生的事件调用特定宏。具体而言,当在服务器子系统上存储和执行宏时,可以建立服务器子系统以监视整个系统中的涉及宏的特定事件。此类事件继而可以触发对宏的调用,并且宏可以在服务器子系统上执行。宏可以访问系统上的服务或者第三方服务。系统上的服务可以授予对与向系统注册的特定用户对应的数据存储库(data store)的访问。例如,可以响应于进入用户的账户中的电子邮件消息来调用宏,并且该宏转而可以将来自消息的信息复制到向用户的账户分配的电子表格(例如,从而使得用户可以自动编译如下电子表格,该电子表格示出来自所有他们的传入消息的主题行)中。第三方服务可以包括SOAP服务或者其他如下类似服务,可以从与提供服务的域分离的域访问这些类似服务,并且这些类似服务提供用于通过因特网共享信息的公知机制。例如,第三方服务提供者可以编译最新天气数据并且可以在请求时使数据可用于其他服务。
在第一方面中,一种计算机实现的方法管理计算机宏。该方法包括在因特网可访问的托管计算机系统中的位置存储用于宏的代码。该方法还包括:从在与该托管计算机远离的客户端计算机上运行的应用接收对执行该宏的请求,在该托管计算机系统上执行该宏,以及向在该客户端计算机上运行的该应用提供执行该宏的结果。可以与该宏被编程为对其操作的文档分开存储和访问用于该宏的该代码。
实现方式可以包括以下特征中的任何、所有特征或者不包括以下特征。该方法还可以包括:将该宏与该托管计算机系统的注册用户相关联,以及根据由该注册用户标识的访问限制使该宏可用于该托管计算机系统的其他用户。该访问限制可以由该托管计算机系统将该注册用户分配到的一个或者多个分组进行定义。该方法还可以包括:从在与该托管计算机远离的多个不同客户端计算机上运行的多个应用接收对执行该宏的请求,从该位置针对每个该请求在该托管计算机系统上自动执行该宏,以及响应于执行该宏向该多个应用中的每个相应应用提供执行该宏的结果。该多个应用可以对应于单个账户持有者。该多个应用可以对应于多个不同账户持有者。执行该宏可以包括对由该托管计算机系统提供的多个不同托管服务进行调用。执行该宏可以包括对由独立于该托管计算机系统的第三方信息提供者提供的web服务进行调用。
此外,该方法还可以包括:将由在该托管计算机系统上运行的第一应用生成的信息转译成不同格式,并且向在该托管计算机系统上运行的第二应用提供该经转译的信息。该方法也可以包括:向针对向该托管计算机系统注册的多个不同用户的多个不同账户提供执行该宏的结果。可以响应于该客户端计算机上的浏览器加载具有指针的网页来接收该请求,该指针指向该托管计算机系统中的宏执行子系统上的JavaScript宏。
在另一实现方式中,一种用于在托管计算机系统上执行宏的计算机实现的系统包括可从该托管计算机系统操作的多个托管应用、宏数据存储库和计算机服务器。该宏数据存储库存储多个宏,每个宏分配给该托管计算机系统上的用户账户并且每个宏定义将由该多个托管应用中的至少一个托管应用执行的一系列动作。定义对该多个宏的访问以便标识用户账户,该系统将代表这些用户账户执行该多个宏中的每个宏。该计算机服务器被编程为运行脚本管理器,该脚本管理器响应于执行请求来访问宏并且通过从用户账户有权访问的一个或者多个网络可访问服务收集信息来执行该宏。
实现方式可以包括以下特征中的任何、所有特征或者不包括以下特征。可以从代表除了将存储的宏分配到的用户账户之外的一个或者多个用户账户操作的应用访问该宏。脚本管理器可以被编程为向标识为有权访问该宏中的每个特定宏的用户账户有选择地允许对该宏的访问。该系统还可以包括由与该托管计算机系统的运营商不同的组织运营的一个或者多个托管服务,其中每个托管服务可响应于宏的调用来访问以在执行该宏期间向该宏提供信息。该系统也可以包括用于向该托管计算机系统的用户递送的网页代码,该网页代码包括用于调用该多个宏之一的代码。每个该宏可以经由用于向该数据存储库公布该宏的用户的账户的唯一用户标识符分配给用户账户。
在一些方面中,该系统也包括:包裹服务管理器,用于在宏代码周围提供安全包裹器,以根据由用户标识的访问允许或者限制来控制对与该用户对应的资源的访问。安全包裹器可以被布置成生成用于该用户的对话框,该对话框被布置成在该宏首次运行时从该用户接收与将向该宏提供的访问级别有关的输入。
在另一实现方式中,一种计算机实现的系统在托管计算机系统上执行宏。该系统包括:多个托管应用,可从该托管计算机系统操作,宏数据存储库,存储多个宏,每个宏分配给该托管计算机系统上的用户账户并且每个宏定义将由该多个托管应用中的至少一个托管应用执行的一系列动作,以及用于执行宏以实现该多个托管应用的一个或者多个实例化中的改变的装置。
在附图和以下描述中阐述一个或者多个实施方式的细节。从说明书和附图中以及从权利要求中,其他特征和优点将变得明显。
附图说明
图1是示出了在托管计算系统中的宏操作的概念图。
图2是能够操作共享宏的托管计算机系统的示意图。
图3是用于在托管计算系统上执行宏的过程的流程图。
图4A是用于执行从在网页上运行的应用调用的宏的过程的流程图。
图4B是用于在托管系统上记录并且执行宏的过程的泳道流程图。
图5示出了用于宏系统中的对象的示例结构。
图6示出了宏构造系统的示例屏幕截图。
图7示出了可以用来执行在本文献中讨论的动作的通用计算机设备的示例。
在各种附图中的相似标号指示相似单元。
具体实施方式
图1是示出了在托管计算系统100中的宏操作的概念图。此类操作可以通过在创建和/或复制宏到其存储位置的用户在从他们的台式计算机、他们的上网本计算机或者从公用可用计算机(诸如因特网咖啡吧中的计算机)运行应用之时尝试访问宏时支持从各种客户端操作宏来与在客户端设备上或者在涉及单个客户端设备的服务器(例如,经由远程桌面连接服务或者VPN)上的宏操作形成对照。也可以通过第一用户定义对宏的如下访问限制来在用户之间容易地共享宏,这些访问限制允许其他用户(例如,从与初始用户相同的域访问系统的用户)在使用他们自己的应用时运行宏。即使在用户未在线时(诸如在用户和用户的计算机外部的输入触发宏执行时)也可以针对该用户执行宏。另外,当托管系统具有相互有关的多个注册用户(例如,他们都为相同企业组织工作)时,在托管系统中运行的宏可以产生跨越应用和/或与多个此类用户对应的数据存储库的复杂工作流程。
如前所言,宏可以由外部事件(诸如接收电子邮件消息)触发。宏可以在与用户的客户端系统分离并且与供其他服务或者应用在其上运行的任何子系统分离的宏服务器子系统上运行。例如,在其他子系统上的服务可以包括供宏访问以获得信息的任何服务,包括主系统的内部服务(例如,位置服务和电子邮件服务)和第三方服务(例如,来自商业在线商店或者拍卖站点、天气站点等)。
与系统相关联的宏服务器子系统可以允许编写宏代码的用户按照统一和一致方式编写宏,从而使编程体验对于终端用户而言容易。例如,可以针对揭示给终端用户的诸如操纵电子表格和日历、提取web内容、发送电子邮件、访问他们的日历、转译文本等不同服务定义对象模型。可以例如使用Java对象来代表对象模型。每个Java对象可以包裹(wrap)对底层服务的访问方法。电子表格和语言转译服务可以使用内部直接网络调用(例如,远程过程调用),并且web内容提取可以例如使用SOAP或者类似服务。这些服务中的许多服务无需直接揭示给终端用户。
系统100可以通过在底层Java对象周围创建若干层“包裹器”或者“装饰器(decorator)”来消除使内部服务揭示给终端用户的风险。例如,系统100可以包括如下配额实施层,该层限制给定服务可以由给定用户调用的次数。系统100可以包括如下安全层,该层可以使用基于能力的安全性,从而允许细粒度访问控制(例如,允许对底层数据的读取访问、但是不允许写入访问)。系统100也可以包括如下登录层(logging layer),该层可以捕获所有用户调用并且提供对他们的会话的转录。当统一地而不是跨越服务特定地应用配额和安全性时,可以减少程序员错误(并且因而违反安全性)的可能性。
系统100可以包括用于管理计算机宏的各种计算机实现的机制,其中在因特网可访问的托管计算机系统中的位置存储用于宏的代码并且该代码可操作用于执行以下功能。响应于诸如从在与托管计算机系统远离的客户端计算机上运行的应用接收对执行宏的请求,可以在托管计算机系统上执行宏。例如,宏可以直接在宏管理器或者其通信地耦合的部件内运行。可以向在客户端计算机上运行的应用(例如,在用户的计算机上的浏览器中运行的电子表格应用)提供执行宏的结果。可以与宏被编程为对其进行操作的文档分开存储和访问在这一情形中用于宏的代码。例如,尽管代码可以在托管服务服务器上执行,但是由宏代码更新的电子表格可以驻留于用户的膝上型计算机上或者托管服务的另一如下位置中,在该位置从代表向托管服务注册的任何数目的用户运行的任何数目的应用自由指向和访问宏。
在一些实现方式中,每个宏可以与托管计算机系统的注册用户相关联,并且可以根据由注册用户标识的访问限制(或者更具体地,根据在其他用户的账户上运行的应用)使宏可用于托管计算机系统的其他用户。例如,“拥有”宏的用户可以经由被授权使用他的宏的其他用户的用户ID或者经由那些用户所属的分组标识该其他用户。在其他情况下,用户可以提供指向宏的链接或者URL并且包括与运行宏相关联的某些权限。
访问限制可以由托管计算机系统将注册用户分配到的一个或者多个分组进行定义。例如,用户可以向命名为“我的在线好友”的分组授予宏访问权并且向该分组(该分组可以代表他的在他的社交网站(例如,Facebook、Orkut等)上标识的“好友”)中的所有人分配权限。
在一些实现方式中,可以接收对执行宏的请求,其中请求源于在与托管计算机远离的多个不同客户端计算机上运行的多个应用。例如,应用可以生成或者激发如下“事件”,这些事件在宏的定义中被设计成启动宏的执行或者在处于等待状态之后恢复或者继续宏的执行。系统100可以从该位置针对每个请求在托管计算机系统上自动执行宏。系统100还可以响应于执行宏来向多个应用中的每个相应应用提供执行宏的结果。在一些实现方式中,多个应用对应于单个账户持有者。例如,请求执行宏的每个应用可以接收结果。在一些实现方式中,多个应用对应于多个不同账户持有者(例如,系统100的多个注册用户)。
执行宏可以包括对由托管计算机系统提供的多个不同托管服务进行调用。例如,宏可以调用日历服务、联系人服务、位置提供服务(例如,表明用户或者用户好友的位置的服务)等。备选地或者附加地,执行宏可以包括对由独立于托管计算机系统(例如,在与托管计算机系统的域不同的域并且由与托管计算机系统的组织不同的组织运营)的第三方信息提供者提供的web服务进行调用。
由在托管计算机系统上执行的第一应用生成的信息也可以从第一格式转译成第二格式,并且可以向在托管计算机系统上运行的第二应用提供经转译的信息。例如,文字处理应用可以按照逗号界定格式创建数据,并且继而可以向电子表格应用提供该数据以用于粘贴到按照电子表格应用专属格式的电子表格单元中。
也可以向用于向托管计算机系统注册的多个不同用户的多个不同账户自动提供执行宏的结果。例如,可以向若干计算机系统上的若干用户提供宏执行结果,以诸如更新每个他们的系统上的共同电子表格单元。在一些实现方式中,响应于客户端计算机上的浏览器加载具有如下指针的网页来接收对运行宏的请求,该指针指向托管计算机系统中的宏执行子系统上的JavaScript宏。例如,当通过传递指向宏的链接或者URL来共享宏时,可以按照链接或者URL的形式提供对执行宏的请求(例如,按照JavaScript或者任何其他相关语言)。
现在更具体地参照图1,并且作为用于实施刚刚讨论的功能中的一些或者所有功能的示例,系统100包括一个或者多个应用102(各自有权访问宏钩(macro hook)104,该宏钩使得在其被访问时执行宏)、一个或者多个外部事件105、宏服务器子系统106、社交网络108、位置服务110和宏代码112。
应用102可以包括任何适用的诸如电子邮件应用、电子表格应用、文字处理应用、照片共享应用、演示包、财务规划应用等如下应用,用户可以使该应用运行或者执行。在一些情况下,用户可以通过选择运行的应用(诸如通过双击桌面上或者应用的下拉列表中的应用名称)来显式启动该应用。诸如在用户点击电子邮件附件(例如,文本文件或者电子表格)时或者在用户点击未知文件时(任一种都可以诸如基于文件的扩展名或者其他定义的关联性来自动启动对与文件相关联的对应应用的执行)可以隐式启动其他应用。用户也可以通过导航到涉及应用(诸如托管应用)的URL来启动该应用。
在启动或者执行应用的又一示例中,事件105可以发生(诸如接收电子邮件消息),该事件可以启动或者恢复执行某些应用。例如,事件105(例如,接收的电子邮件消息)可以触发宏(以例如更新电子表格、添加主题行)。事件的发生可以由如下事件句柄检测,该事件句柄在托管系统上运行并且针对向系统注册的每个用户追踪事件。可以报告每个事件,继而可以将每个事件与特定动作(诸如执行宏)关联,并且可以触发动作。
每个应用102有权访问宏钩104。在最简单的实现方式中,宏钩可以简单地是如下URL,该URL指向存储于系统100上并且在系统100上可执行的用于宏的代码。例如,钩104可以是指向JavaScript代码的URL并且可以包含在网页中,从而使得当网页加载或者与操作网页关联的某一事件发生时,可以访问和运行代码。除了有助于定义应用102内的宏之外或者备选地,宏钩104可以执行事件追踪并且提供在外部事件105与宏服务器子系统106之间的连接。例如,宏钩104可以允许用户定义与如下事件相关联的宏,这些事件与在电子邮件应用102中接收的电子邮件有关。宏可以标识与电子邮件应用102可以提供的对象不同的对象。另外,宏的宏代码112可以按照与电子邮件应用102中的宏的本机语言不同的语言。宏钩104也可以追踪与该宏有关的任何事件并且可以在恰当时间与宏服务器子系统106交互。用户可以通过选择用于记录宏或者执行现有宏的选项来实例化或者实现宏钩104。
外部事件105可以包括用于触发执行宏的多种事件(包括接收电子邮件消息(例如,在电子邮件应用中)、确定某些条件(例如,超过限额、拒绝用户访问、过程已经完成等)等等)存在(例如,由应用)。此类的事件可以由事件句柄追踪,并且可以针对希望在系统100中发生特定事件时执行一个或者多个宏的每个用户向事件句柄注册待追踪的特定事件。
在一些实现方式中,诸如在代码行确定满足某些条件(例如,变量已经达到某个值或者针对夜间完成记账更新等)时可以在代码中俘获事件。外部事件105也可以包括检测诸如文本消息、博客条目、传入RSS订阅等消息。外部事件105可以包括检测在在线拍卖站点上发布如可以例如由拍卖项目的标题或者描述(例如,“梵蒂冈珍藏牌照(vintage Vatican license plate)”)确定的特定项目。
用于外部事件105的触发条件可以包括不同条件组合。例如,在触发与电子邮件应用有关的事件时使用的条件可以包括电子邮件主题行、发件人ID(例如,老板、配偶、孩子等)、收件人(例如,使用“收件人”比对“抄送”比对“密送”的组合)、收件人数(例如,当我是唯一收件人时告诉我等)、是否有附件、从其发送电子邮件的位置、消息主体中的关键词或者电子邮件是否很可能是垃圾邮件。可以与文字处理应用对应的条件可以包括文档的大小、文档的来源、文档的创建日期和/或最近修改日期、文档的作者等。对于电子表格应用,可以用于触发事件的条件包括特定电子表格单元的值、单元的值是否已经改变、电子表格的实际数据的行数或者列数、电子表格的作者、电子表格的大小等。应用于其他类型的文档的条件可以包括是否仅该文档已经发生改变。其他触发事件可以由web上的来源或者服务(诸如例如由在线天气服务站点发布的如下警报,该警报预告龙卷云逼近特定城镇)生成。在这样的情况下,对天气谨慎的用户可以已经构造宏以截获与外部天气有关的事件并且向他的家人或者邻居生成文字和/或电话呼叫。
事件也可以是来自多个不同来源的组合。例如,从特定用户接收电子邮件起初可以触发初始事件,但是可以仅在该事件发生并且使用位置追踪服务来确定发送或者接收电子邮件的用户在特定位置之后执行宏。也可以施加使用来自其他服务的信息的附加或者备选条件。
宏服务器子系统106可以监视系统100中的特定事件(诸如由应用102传播的事件(例如,电子邮件消息等))。除了可以充当给宏服务器子系统106的指令(例如,“中止与服务器XYZ、应用ABC或者用户John Doe的通信直至进一步通知”)的事件之外,宏服务器子系统106感兴趣的特定事件还可以包括宏可以寻址的任何相关事件。
各种服务可以与系统100交互(通过作为用于事件的触发、用于响应于触发而运行的宏的输入或者来自宏的输出)。例如,社交网络108可以向系统100提供用于确定如何处理事件的信息。作为一个示例,宏可以被定义成响应于接收向Betty发送的电子邮件、但是仅如果电子邮件来自(例如,如在一个或者多个社交网络上定义的)Betty的好友之一时才执行操作。在另一示例中,宏可以被设计成向(例如,如由社交网站或者分组定义的)Betty的所有好友发送自动电子邮件或者其他通知。运行社交网络108的组织可以不同于运行子系统106的组织,前一系统108的运营商可以经由API并且在已经向子系统106的运营商给予这样的访问权的范围内提供对某些信息的访问。
作为另一示例,位置追踪服务110可以在用户邀请时追踪与用户相关联的移动设备的位置,从而使得诸如用户可以发现他们的好友并且反之亦然。例如,宏可以被定义成向用户发送电子邮件或者文本,并且电子邮件或者文本的目的地可以依赖于用户在该时间的位置。例如,如果用户有蜂窝电话或者其他移动(例如,基于GPS的)设备,则位置追踪服务110可以追踪或者已知用户的位置。根据用户的位置,可以向用户的移动设备或者在家里的设备(例如,如果用户更接近他的住所或者如果位置服务110确定用户很可能奔赴该方向)发送通过执行宏来传播的电子邮件。
除了例如从用户的支持GPS的设备发送的“我在哪里?”位置信息之外,用户也可以通过位置追踪服务110接收“我应当去往哪里”信息。这一信息可以例如包括GPS坐标或者简单文本消息(例如,“这里转弯,并且继而爬山前往10107”)。
子系统106可以存储、追踪、访问、共享和执行宏代码的各种实例。组成宏的宏代码112可以按照任何适当语言、但是通常可以按照由系统100使用的优选宏语言(例如,JavaScript等)来编写或者编程。在按照熟悉方式执行宏时,宏服务器子系统106可以解析(或者搜寻)宏代码112的与功能和宏有关的段(诸如“获得名称”功能114、“校验名称”功能116、“获得位置”功能118或者宏服务器子系统106将考虑的任何其他功能或者宏)。在宏代码112中嵌入的每个功能或者操作可以使宏服务器子系统106执行诸如校验用于访问文件的用户授权等不同类型的处理。
宏代码112可以存储于多种位置中(诸如中央宏储存库或者因特网可访问的托管计算机系统中)。在一些实现方式中,宏代码112的整个汇集可以按照分布方式来存储并且在逻辑上由一个或者多个网络联系在一起。在一些实现方式中,当宏代码112敏感(例如,它包含或者更新用户的个人信息)或者出于国防考虑而被分类(例如,秘密、绝密等)时,宏代码112可以显式存储在单独位置(诸如安全服务器上)。
在一些实现方式中,“收听器”可以用于事件追踪。例如当,在服务器上加载电子表格并且向浏览器下发它的HTML时,它可以触发如下服务器侧事件,该事件表明已经打开新电子表格。在用于这一事件的电子表格服务器上的收听器继而可以校验以查看它是否具有用于该电子表格的脚本列表。如果没有,则它可以(例如,向脚本服务器)进行如下调用,该调用实质上表示“有用于这一电子表格的脚本吗?”并且传递电子表格键、继而存储该脚本的列表。在电子表格服务器上的事件句柄继而可以校验是否任何脚本方法被称为“onOpen”。如果是这样,则它可以(例如,向Google Apps Script服务器)发送用于执行该方法的消息。这一流程也可以使用于诸如编辑事件等其他场景中。
在另一示例中,宏可以与如下电子邮件应用相关联,该电子邮件应用已经被设置成执行某一如下消息路由,该消息路由例如依赖于主题行、电子邮件的发件人、电子邮件消息是否有很大的电子表格附件、是否有(任何种类的)附件等。以这一方式定义的宏也可以使用诸如由位置追踪服务110提供的位置信息。例如,如果去往用户的工作电子邮件的电子邮件消息具有大的电子表格附件并且确定用户在家里(因为来自他们的移动设备的GPS信号对应于已经注册为用户的家的位置),则宏可以被建立成向用户的家庭电子邮件转发副本。在这样的情形中,附件可能很可能是需要回顾以便第二天在工作时演示或者投影的与工作有关的电子表格。备选地,对于其中可能发现用户未位于他的住所附近的那些实例中,宏可以被建立成向用户的支持电子邮件的移动设备发送小的如下消息,该消息向用户通知存在电子邮件。
在任一情况下,可以在宏服务器子系统106上存储、从使宏执行的任何电子邮件应用102去除宏代码112。对于接收的每个传入电子邮件消息,电子邮件应用102可以通过用钩104指向宏代码来触发宏。宏继而可以标识消息的各种方面(诸如特定发件人是否为账户持有者的社交网络的成员)。如果社交网络校验结果是肯定的,则宏可以进一步校验位置追踪服务110以确定账户持有者或者发件人的地理位置,并且可以使某些动作基于此类位置来执行。例如,宏服务器子系统106可以在某些情形中基于账户持有者(或者用户)的位置通知账户持有者。在其他情况下,宏服务器子系统106可以使账户持有者被呼叫(例如,经由使用VOIP的通用呼叫路由系统)和/或使SMS消息被发送,或者由宏定义的其他动作。
宏可以通过经由一个或者多个确认的API访问在系统100上运行的各种应用来获得和提供这样的信息。当存在多个不同API时,可以向转译服务提供子系统106,从而使得作者可以针对用于子系统106的单个宏语言编写而又仍然与相异应用一起工作。
当在与用户的客户端计算设备分离的宏服务器子系统上托管宏时可以获得若干益处。例如,可以跨越许多不同应用来使用宏。也可以在用户从各种接入点(诸如他们的桌面计算机、别人的计算机、上网本计算机或者智能电话)在线之时触发宏,并且甚至可以在用户未在线或者未在他们的计算机旁时触发宏。这样的宏可以被定义成截获一个类型的应用(例如,电子邮件)中的事件并且更新另一应用(例如,电子表格,其中在电子表格中自动编译用于用户的传入电子邮件消息的主题行)中的数据。
另一益处可以是有能力在用户之间完全共享宏而无需人工复制它们。可以代之以对每个宏设置一个或者多个安全级从而向其他用户允许如由创建或者首次保存宏的用户确定的访问。例如,恰如可以例如针对共同web财产(诸如在线照片共享站点)完成的那样,用户可以设置用于宏的访问安全级并且可以向另一个人提供宏的URL。
在宏服务器子系统上托管的宏也可以在某些实例中具有提供如下能力益处,该能力用于针对来自多种用户的数据运行宏或者向多种用户提供运行宏的结果。例如,共享宏可以用来将若干作者的投稿组合成更大卷(诸如由若干人编写的诗作或者文章)。每个投稿人的文档可以保存在预定位置,并且如果投稿人已经提供对该位置的访问,则宏可以访问该文档。继而可以使组合的卷作为单个文档可用于每个投稿人并且可能可用于附加用户。作为另一示例,可以使用托管子系统上的宏来创建企业工作流程应用,以诸如对文档进行路由用于准许,其中该文档一直本地存储在服务器系统上。
图2是能够操作共享宏的托管计算机系统200的示意图。通常,系统200提供各种如下部件,这些部件示出了可以由用户在托管系统上创建、保存、共享、访问并且执行宏的方式的一个示例。
在这一系统200中,宏服务器子系统202提供用于在脚本信息储存器数据存储库206中以持续方式保存宏代码的位置,其中保存的信息可以包括宏库名称、脚本内容和宏所有者的标识符(例如,使用混乱用户ID(obfuscated user ID)或者其他标识符)。当运行宏时,可以向宏服务器子系统202发送用于执行给定宏的命令。继而可以从脚本信息储存器数据存储库206取回代码,并且可以在脚本引擎或者脚本执行器208中创建实例。
可以构造并且可以在基于能力的安全包裹器中包裹代表用于不同服务器侧应用的编程API的Java对象,并且这些对象变成程序员可见的包裹服务(或者“bean”)。包裹服务210可以包括宏服务器子系统202可以例如向与宏执行有关的包裹服务的消费者供应的所有相关服务。包裹服务210可以是任何如下相关对象,该对象是其他如下对象的汇集,封装这些对象从而使得可以容易地到处传递它们。
包裹服务可以包括如下Java业务委托,该业务委托揭示与后端服务交互的公用方法。可以在封装或者其他如下机制中包括公用方法,这些机制用于封装方法、类、串、电子表格、应用编程接口(API)和由各种计算机语言(例如,Java等)提供的其他工具。公用方法可以揭示例如可以用来定义和执行宏的资源(或者使这些资源公用)。可以将公用方法的某些实现方式的细节保持为私有,这可以提供适当水平的信息隐藏和抽象。公用方法可以跨越若干不同类型的对象看来相似从而向宏用户揭示有些一致的观感并且因此提供某一水平的多态性。因而,包裹服务的汇集可以有助于用户在面向对象、事件驱动的环境中使用宏。
这些包裹服务或者bean在这一示例系统200中附着到如下顶级Java对象,该对象具有用于每个财产(例如,电子表格、日历等)的公用成员。这一顶级Java对象与标准和预定标签一起插入到用于脚本执行器的环境的范围中。在一些实现方式中,脚本执行器向脚本化环境反映公用成员(并且仅反映公用成员)。
因此,当用户的JavaScript代码执行以下语句时
var doc=google.spreadsheets.create(“my new doc”);(1)对顶级对象的“spreadsheets”字段中的Java对象调用“create”Java方法。这一方法的Java实现方式向电子表格服务器进行具有“CREATE”命令和与新标题(例如,“my new doc”)对应的自变量以及脚本运行器的混乱标识符的远程过程调用。电子表格服务器创建新电子表格并且在对远程过程调用的响应中返回它的键。宏服务器创建如下新Java对象,该对象代表新创建的包含新键的电子表格。Java对象包括用于诸如“rename”、“insertSheet”等若干电子表格操作的方法。该对象也被包裹在基于能力的安全包裹器中并被返回。脚本执行器在内部将这一对象包裹到NativeJavaObject包裹器中并且将它返回到上述变量“doc”。
在包裹对象的一些实现方式中,任何适当服务(例如,电子表格、日历、电子邮件等)可以返回在Java动态代理中包裹的对象。可以存在诸如用于安全、登录和限额的相异代理。每个代理可以并入或者使用对它揭示什么服务(例如,Java接口(诸如“Spreadsheet”、“SpreadsheetRange”、“EmailService”等))的如下描述,该描述可以定义公用方法。注释可以存在于适合于不同包裹器的接口上。
例如,对电子表格服务的“create”方法可以创建新电子表格。它可以具有一个如下注释,该注释声明该方法是WRITE方法,从而提供例如用于向用户警告脚本将尝试向他们的电子表格文档汇集写入(并且如果用户尚未授权用于脚本的WRITE特权则脚本将在运行时失败)的机制。基本上,安全包裹器有助于保证给定方法的已声明所需许可(WRITE等)在用户的授权令牌中。如果授权该方法,则它向下一层传递调用。
也可以通过限制特定用户可以访问关于宏的操作的次数来提供安全性。为了执行这样的功能,对“create”方法可以存在如下限额注释,该限额注释表示应当按照终端用户的“创建电子表格”限额对这一方法的调用计数。限额包裹器可以调用或者使用如下限额服务,该限额服务保持对给定用户使操作执行多少次的追踪。例如,如果用户超过限额,则该方法可能失败;如果不是这样,则它再次将它下传至下一层。可以跨越设置的时间段(诸如一天、一周或者一个月)测量并且可以在定期时间点重置或者递减用于用户的限额。
宏执行的转录也可以由如下登录层提供,该登录层记录调用的每个方法的串版本和提供的自变量。
包裹服务创建器212可以创建顶级包裹服务,这些服务的范围依赖于宏及其环境。例如,包裹服务创建器212可以检查运行宏的终端用户已经向宏显式授予的能力,并且可以创建与宏的状态对应的顶级bean。该状态可以例如包括当前文档(例如,电子邮件、文本文档、绘图、电子表格等)(如果有)和用户认证。包裹服务创建器212可以生成具有基于环境的能力的顶级包裹服务,并且可以向脚本执行器208的执行环境(用户可以在该环境中例如定义和执行宏)中注入包裹服务210。在某种意义上,包裹服务创建器212可以视为用于bean的生产者或者工厂或者“bean工厂”。
可以创建的包裹服务210的类型例如包括电子表格应用的能力包裹实例、日历应用等。可以向执行范围中插入这一Java对象。对象的来源可以用来标识它(例如,利用标签“TopLevel”)。因此,“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”的电子表格)并且将来自当前电子表格的单元A1的值复制到新电子表格的单元B2。Java对象(诸如由“find”方法返回的Range对象)如所有其他对象那样被能力包裹并且如果认证用户无权访问相关电子表格则可能失败。例如,在先前呈现的复制/粘贴单元示例中,为了成功执行而需要的访问是对活跃电子表格的读取访问(例如,getValue所需)和对目标电子表格(例如,电子表格“MyOtherDoc”)的写入访问(例如,setValue所需)。
脚本执行器208可以负责创建用于宏的上下文并且执行对顶级包裹服务210的实际插入。可以针对每个宏执行创建新顶级范围,以诸如防止一个执行脚本“危害”用于其他脚本的全局范围这样的可能性。可以利用类快门或者过滤器的实现方式来加载宏上下文,这防止创建未准许(例如,未在可允许类的白名单上)的任何Java类。此外,脚本执行器208可以创建用于扼制失控脚本的指令计数器,以诸如检测脚本何时进入无限循环。在一些实现方式中,脚本管理器204可能过早地终止失控脚本。
脚本执行器208可以负责各种功能(包括解析、校验语法、功能调用、宏执行和恢复)。解析功能可以检查脚本并且返回在数据存储库(诸如脚本信息数据存储库206)中的脚本储存器中发现的功能和宏的列表。例如,参照图1,由于解析功能而检测到的功能和宏可以包括获得名称功能114、校验名称功能116、获得位置功能118或者可以嵌入脚本或者宏代码(例如,宏代码112)中的任何其他功能、宏等。
系统支持的其他功能也可以用来有助于管理服务器侧系统200上的宏汇集。例如,语法校验功能可以在存储脚本之前确定在脚本中是否有错误(例如,句法错误、语言编译错误、关键词误用等)。如果检测到句法或者其他错误,则可以传达错误从而通知用户或者脚本程序员。
调用功能可以“调用”(或者启动执行)宏中的功能。这一调用功能可以是执行宏的受限版本(诸如如下版本,该版本具有针对单元内(例如,电子表格内)的函数调用而授予的特权)。例如,宏的受限版本可以限于仅返回值而未被允许产生副作用。
宏执行和恢复功能可以用来启动和恢复宏。例如,宏执行功能可以启动对宏的初始执行。在一些情况下,执行宏可以需要来自用户的附加输入。在这一情况下,执行宏可以中止或者进入等待状态,从而使来自用户的输入未决。一旦已经提供了用户输入,则恢复宏功能就可以继续已经暂停的对宏的执行。
脚本信息仓库206可以充当数据存储库从而提供和/或支持诸如脚本/宏创建、存储、取回、更新、删除等操作。可以按照用户库、个别脚本或者应用(例如,用于电子邮件、电子表格、文字处理文档等的应用)组织在脚本信息仓库206中存储的脚本。可以对整个用户的库或者对库中的个别要素执行操作。例如,一个操作可以按照用户库的ID取回用户库(例如,基于库名称的主键查找)。另一操作可以取回链接到给定文档(诸如代表宏或者脚本的文档)的所有用户库。
由脚本信息仓库206提供的取回操作可以包括如下操作,这些操作取回关于给定用户库的针对给定用户的授权、取回由给定用户拥有的所有用户库、按照继续记录的ID取回该继续记录等。
由脚本信息仓库206提供的创建/更新操作可以包括用于创建/更新用户库的操作、用于创建从库到抽象对象的键(例如,文档ID)的关联性的操作、用于创建/更新关于给定库的针对给定用户的授权的操作、用于创建新继续记录(例如,具有用于给定用户的串行二进制数据)和库的操作,以及其他创建/更新操作。
由脚本信息仓库206提供的执行删除的操作可以包括用于删除继续记录的操作、用于删除从库到抽象对象的关联性的操作,以及删除库从而去除所有子对象(包括与授权和链接继续相关联的子对象)的操作。以下参照图5描述脚本信息仓库206的示例逻辑结构。
脚本管理器204可以向宏服务器子系统202的底层部件206至219委托命令。对具体示例命令的描述如下,并且用一系列带字母的过程箭头1至6(这些箭头一般按时间顺序带有字母)标记通向底层部件206至209的委托控制路径,尽管某些动作可以在可能时按照另一顺序出现。
脚本管理器204可以执行(例如,通过委托)的一个命令是存储用户库。可以例如基于用户特权或者其他安全性在执行命令时限制命令。例如,如果用户库表示(例如,原型缓冲器(protobuffer)或者协议缓冲器)包含库ID,则脚本管理器204可以保证允许执行用户修改库。如果授权发生,则脚本管理器204可以将它写入到存储层并且返回库的新表示。如果无ID存在,则可以创建新ID,并且可以返回包含新生成的ID的表示。存储库可以例如涉及到解析库中的功能(例如,使用脚本执行器208)、向库DAO对象添加功能、检测语法错误(例如,使用脚本执行器208)、存储库内容,以及存储所有者。参照图2,在存储用户库时涉及到的部件可以例如由过程箭头1、2和6指示。
例如,在用于用户库表示时,协议缓冲器可以包括可以通过接线串行化或者在数据库中以二进制形式持续的数据结构。该数据结构可以使用强型字段(strongly typed field)以便实施通信协议。
脚本管理器204可以执行的另一命令是导入库。这一命令可以创建库到给定文档(例如,电子表格、电子邮件日历或者任何其他可附加上下文)的链接或者其他关联性。例如,电子邮件消息可以与用户的给定邮件账户相关联。链接的目的在于使得底层文档可以快速辨认哪些宏与它相关联,以例如显示在“Run”菜单中。例如,库导入命令可以在数据存储库中创建“Link”表条目。参照图2,在导入库时涉及到的部件可以例如由过程箭头1和2指示。
复制命令(这是脚本管理器204可以执行的另一命令)复制现有库从而产生它的内容的复制品。例如,可以向新库名称复制包含在库中的所有脚本和宏。尽管复制动作产生库的内容的复制品,但是并未复制关联性。向当前所有者设置新创建的库的所有者。响应于完成复制操作,返回新库的ID。例如,复制命令可以在数据存储库中创建新“UserLibrary”表条目而不复制任何链接、继续或者授权。参照图2,在复制库时涉及到的部件可以例如由过程箭头1和2指示。
删除库命令可以例如校验权限,继而如果允许,则它可以从数据存储库(例如,在脚本信息206中)删除库。例如,删除库命令可以从“UserLibrary”表和所有子表去除条目。前端可以例如负责完成任何“你确定吗?”询问。在删除库时涉及到的部件可以例如由过程箭头1和2指示。
用于按照用户获得库的命令可以基于给定用户的ID返回由给定用户拥有的库。例如,命令可以向用户库(例如,在UserLibrary或者其他表中)返回在其中所有者字段为当前用户的脚本信息206中存储的条目。参照图2,在获得用于用户的库时涉及到的部件可以例如由过程箭头1、2和4指示。
用于按照文档获得库的命令可以返回由给定文档导入的任何库。例如,获得库命令可以扫描Link表寻找匹配的“documented”字段,并且反馈父代“UserLibrary”。参照图2,在获得用于文档的库时涉及到的部件可以例如由过程箭头1、2和4指示。
库分类命令(categorize library command)可以向“虚拟”文档(诸如“SAMPLES”)添加关联性。例如,库分类命令可以在具有给定名称(SAMPLES等)的Link表中创建条目。参照图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指示。在一些实现方式中,“getlibrary”和其他命令通常可以仅作用于脚本存储层而不调用脚本执行器208。
现在参照系统200的另一部件,命令伺服小程序216可以使宏命令通过响应于来自宏控制器(例如,JavaScript宏控制器“MacroController.js”)的请求而被执行。该响应可以作为重定向(诸如对于用户而言透明和自动的重定向)而出现。在一种示例重定向技术中,在浏览器客户端对具体URL进行请求时,重定向规则可以将请求引向宏服务器(诸如宏服务器子系统202)。命令伺服小程序216可以处置的请求类型包括例如具有诸如GET_ADMIN_PANEL、SET_SCRIPT等名称的若干请求。
例如,GET_ADMIN_PANEL请求可以返回宏管理面板的完整HTML,并且宏控制器(例如,MacroController.js)可以向关闭对话中插入HTML。SET_SCRIPT请求可以向命令伺服小程序216发送脚本内容和用户库ID。命令伺服小程序216可以调用脚本管理器204以创建/更新用户库,这可以造成返回用于面板的左手侧(包含类别和库名称)的HTML(例如,由GXP生成)。macrocontroller.js可以在用于左手侧面板的分区(div)中表现该HTML。
GET_SCRIPT请求可以从脚本管理器提取用于给定库的脚本内容,并且可以返回用于编辑该脚本的内容面板(经由GXP生成)。macrocontroller.js可以将该HTML放入面板的内容分区中。
IMPORT_LIB请求可以利用导入库命令调用脚本管理器。该请求可以经由gxp表现面板的左手侧并且将它返回到macrocontroller.js。
COPY_LIB请求可以与IMPORT_LIB命令类似,但是使用复制命令而不是导入命令。DELETE_LIB请求可以与IMPORT_LIB类似,但是可以使用删除命令以便例如经由gxp返回整个管理面板HTML。CATEGORIZE_LIB请求可以用作“添加到样本”特征。类似于import_lib,CATEGORIZ_ELIB可以利用库分类命令调用脚本管理器并且返回面板的左手侧以用于重绘(redrawing)。
RUN_MACRO请求可以采用宏名称、库id和文档状态的串行化表示(例如,当前选择等)并且调用脚本执行器208以执行给定宏。如果出现错误,则将错误消息返回到macrocontroller.js以用于向用户显示。如果用户必须授权宏,则可以将消息发送回到macrocontroller.js以提示用户。
宏服务器子系统202通过网络224来与应用220和位置服务器222交互。应用220可以是由运用用户设备226的用户执行的应用(诸如在用户的膝上型计算机上运行的web浏览器)。用户设备226可以例如显示网页226a(例如,使用电子表格服务器)。用户的web浏览器可以运用宏控制器226b以便控制在用户的用户设备226上的宏的执行。
来自第三方过程和网页228的外部事件可以充当用于在宏服务器子系统202内定义的宏的触发机制。可以经由网络230(诸如因特网)接收外部事件。这里的外部事件可以对应于关于图1描述的外部事件105。
这里的系统也可以允许用户通过对宏记录器进行实例化、执行由宏记录器追踪的多个动作,并且保存那些动作的如下表示来记录宏,用户以后可以调用该表示以用于自动执行动作。通常可以在这一实现方式中在服务器侧上执行宏记录。当用户执行可记录命令(例如,设置单元值、插入表格等)时,可以向电子表格服务器发送命令。该服务器可以指出它是否处于“记录”模式中,并且如果是这样,则可以查找命令并且将文本写入到与将具有相同效果的脚本化代码对应的运行串缓冲器中。
例如,考虑如果用户向电子表格的单元A1中键入“hello”。可以向电子表格服务器发送如下命令,该命令具有意味着“设置范围”的命令ID、“hello”值、为0的行、为0的列和为0的表格ID(例如,如果它是第一电子表格)。注意,这不仅用于记录器;这是在电子表格服务器上实际地执行对单元的改变的命令,因而无论记录是否发生都发送这一命令。记录器因此可以实质上等效于对使电子表格操作的现有命令流程的窃听。
记录器可以查找命令ID并且发现它是“设置范围”命令。知道了将生成的适当代码是对“范围”对象的“setValue”调用,记录器可以查找和使用行和列以生成对应文字。记录器继而可以查找和使用电子表格标识符,从而确定用于该表格的变量是否已经存在。因而,宏记录器可以生成诸如以下文本:
sheet.getRange(′a1′).setValue(′hello′);(2)
因此,通过这些结构,计算机用户可以登录托管计算机服务并且访问多个不同应用和服务。用户可以显式选择执行宏或者宏可以被自动触发,并且宏可以在应用和其他如下相关应用中运行,如果宏引用这些应用则可以自动对这些应用进行实例化。因而,用户可以有权访问多种数据和编程机制以产生鲁棒的在线服务。
图3是用于在托管计算系统上执行宏的过程300的流程图。过程300可以例如用于在系统100和200中运行宏。通常,所示过程涉及到标识相关宏代码、创建用于执行代码的对象,以及执行代码以与托管计算机系统上的一个或者多个应用交互。
在这一示例中,过程300开始于框302,其中接收用于运行宏的命令。命令可以是如关于图1描述的外部事件105的结果,或者用户可以人工选择将运行的宏。例如,在前一种情况下,外部事件105可以是接收电子邮件,并且命令运行的宏可以是用于响应于接收电子邮件来执行操作(诸如用电子邮件的主题行更新电子表格)的宏。可以在检测外部事件105时涉及到宏钩104,该宏钩继而再次负责诸如通过与宏服务器子系统106通信来触发将运行的宏。
在框304处,标识、取回和执行宏代码。例如,参照图2,脚本管理器204可以向脚本信息206标识将被执行的宏代码。脚本信息206继而可以向脚本管理器24返回请求的宏代码,该脚本管理器继而可以发起它的执行。
作为执行宏代码的义部分,(在框306处)创建具有如下Java对象的实例,这些对象代表用于宏与之交互的应用的编程API。API可以对应于宏代码与之交互的应用。例如,如果宏代码被设计成更新电子表格,则创建的实例包括如下Java对象,这些对象代表用于对应电子表格应用的编程API。
在框308处,在安全包裹器中包裹对象。例如,安全包裹器可以是如下附加代码,该代码包围宏代码本身,从而例如不允许宏代码运行,除非用户采取肯定动作。在一些实现方式中,动作可以是点击“OK”或者以某一其他方式显式准许宏。
安全包裹器可以按照各种方式保护终端用户诸如免受来自木马的攻击、钓鱼攻击或者其他恶意代码的攻击。在一些实现方式中,可以在向用户递送对话框之后构造安全包裹器。在对话框中包括的消息可以将宏标识为潜在非信任宏,并且还标识如果运行宏则可能发生什么。在一些实现方式中,对话框可以标识该宏专属的潜在有害动作的列表,该列表基于对宏的扫描。扫描宏可以例如有助于至少部分基于宏中的文本串或者与已经恶意的以往宏的内容对应的一些其他信息来标识具体潜在有害影响。
用户可以准许或者不准许宏可以具有的访问权。用户的准许可以用来构造上文引用的基于能力的安全包裹器(诸如允许宏具有读取特权、但是不允许宏更新某些文件)。在这一情况下,用户向宏授予的并且在安全包裹器中反映的特权或者权限限于用户已经准许的那些类型的动作。
在一些实现方式中,用于生成安全包裹器的过程可以检测如下恶意代码,该恶意代码试图误导用于检测恶意代码的机制。例如,可以连结宏中的子串“de”和“lete”而不是对“delete”编码,以试图隐藏真实删除操作的意图(例如,“delete”)。这里描述的过程可以被编程为标识这样的实例并且防止如下删除,其中用户未向宏授予删除准许。
在框310处,针对宏涉及的每个应用向相关服务器进行调用。调用涉及到执行如下对象,这些对象包含与宏与之交互的应用相关联的方法或者其他编程API。例如,调用可以包括执行如下宏代码,该宏代码更新电子表格、转发电子邮件、复制文件等。
继而发生(在框312处)与来自每个应用和访问服务的反馈的交互。例如,交互可以包括用户与宏刚才已经对其操作的应用的交互。用户可以例如读取用户由于宏转发来自另一用户的电子邮件而刚才接收的电子邮件(并且执行与该电子邮件的其他交互)。
以这一方式,可以跨越在系统中的单独子系统上运行的多个应用在中央系统上执行宏。宏可以包括安全机制,并且可以用多种方式来触发。此外,宏可以从在系统内可访问的多种不同服务或者通过网络(诸如因特网)从其他系统获得信息。
图4A是过程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内实施继续,该脚本执行器可以支持继续作为公用可用特征。脚本执行器208可以例如使用Java串行化(Java的标准特征)来对所有对象(例如,包括“bean”)进行串行化。使用Java串行化,可以向如下二进制流写出对象(及其所有子对象),该二进制流包含对象标识符和所有字段的当前值。当宏恢复时,可以向脚本执行器208给予可以例如在解串行化成新实况Java对象时使用的继续二进制数据。
在一些实现方式中,继续可以存储在数据库中。继续存储于数据库中(例如,直至恢复宏),而不是服务器存储器中。数据库存储的一个原因可以是因为服务器可以在触发继续的时间与用户恢复执行(例如,通过点击对话上的“ok”按钮或者某一其他恢复动作)的时间之间重启。在一些实现方式中,继续可以具有预定寿命(例如,六个小时),此后可以丢弃它们。以这一方式,诸如如果用户从未着手点击“ok”按钮,则继续未保持占用磁盘空间。
图4B是用于在托管系统上记录和执行宏的过程431的泳道流程图。示例过程431包括在浏览器、宏记录器、宏服务器和应用之间的交互。通常,该过程从服务器子系统向用户提供宏记录控制集,其中用户可以运用控件以表明应当何时记录由用户和系统采取的动作,并且此类动作继而可以重新格式化成用于宏的如下代码,该代码在调用宏时重新执行动作。
该过程始于块432,其中用户选择宏记录器。该选择可以在例如用户选择用于开始记录宏的控件时在浏览器上出现。在步骤434处,供应宏记录器。宏记录器可以在用户的浏览器上执行,或者宏记录器可以诸如在宏服务器子系统202远程执行。宏记录器可以例如显示在与如下窗口分离的无边界浏览器窗口中,该窗口当前显示用户的客户端设备上的应用。也可以用诸如在iFrame或者如下类似要素中的其他方式供应记录器,该要素是显示应用的相同页面的一部分。
在步骤436处,与应用一起显示宏记录器。例如,如果用户在他的膝上型计算机上在他的浏览器内执行电子表格应用,则弹出菜单或者其他显示可以出现并且代表宏记录器。宏记录器可以与用于控制记录器的操作的各种控件(诸如用户可以选择的记录、暂停和停止按钮)一起显示。在步骤438处开始记录,这意味着用户可以开始如下键击等,这些键击定义宏。这样的记录可以由向如下服务器子系统发送的如下消息触发,该服务器子系统经由显示记录器的代码服务于记录器,该消息表明用户已经选择了记录器上的记录控件。
在步骤440处,用户与应用交互,这意味着用户执行如下操作(键击、选择等),这些操作用于定义宏在用户使用的应用内的功能。例如,用户可以选择电子表格中的单元范围、可以对那些单元执行命令(例如,复制和粘贴它们、在它们中输入公式等),并且可以执行其他此类动作。
在步骤422处,在用户与应用交互的时间期间,宏记录器开始记录用户的如下动作,这些动作可以包括在用户在记录过程期间记录命令时显示命令。如上文所言,记录器可以用与应用解译用户输入的方式相同的方式解译用户输入,并且继而可以将此类解译动作转换成宏以后可以在它运行时向应用馈送的命令。记录器也可以追踪用户在其内执行命令的应用(例如,浏览器窗口),从而使得宏可以知道在它运行时向那些各种不同应用提供命令。
在用户与应用交互并且记录动作之时,在步骤444处提供对用户的动作的标准执行。该执行可以出现于用户与之交互的应用内。因此,可以并行向应用和宏记录器提供用户的动作,从而使得记录动作,并且也使得应用以适当方式对动作起反应。
响应于完成定义宏,诸如通过按压“完成”键、在记录器中的“停止”按钮或者其他控件从用户接收保存命令。在步骤448处,发送用于宏的信息。这样的信息可以在用户执行命令时的记录时间解译成宏命令,或者可以在宏记录已经停止时被解译和转换。宏记录器继而可以例如向宏存储库发送信息并且可以生成指向宏代码的一个或者多个指针(例如,URL),从而使得可以在以后时间容易地访问代码。例如,宏记录器可以请求用户标识将用来在以后时间启动(launch)宏的键组合。
在步骤450处,保存包括(将在其中存储宏的)库名称、(如由宏记录器记录的)脚本或者宏内容和用户ID的宏信息。也可以视情况保存其他信息并且将其与宏相关。
以后(瞬间以后或者数天或者数年以后),当用户决定运行宏时,用户可以指定将运行的宏。可以例如通过从针对用户当前与之交互的应用而定义的宏列表选择宏名称来实现对宏的选择。例如,用户可访问的宏列表可以与用户的账户关联存储,并且可以在列表(其中每个宏的制作者已经提供了用于宏的可理解名称)中显示给用户。备选地,可以诸如通过执行另一个宏、通过在系统上出现独立于特定用户的动作的事件或者以其他方式自动进行对宏的选择。用户也可以诸如通过被提示第一用户想要其有权访问宏的其他用户的电子邮件地址或者其他账户标识符来使保存的宏可用于其他用户。用户也可以诸如通过指向消息发送分组(例如,电子邮件列表)或者用于特定域或者子域的所有用户(例如,从用户的雇员访问系统的所有用户)来提供一组其他用户。
例如,可以可选地在步骤452a处诸如从用户接收用于运行宏的输入。备选地,用于运行宏的触发事件可以在步骤452b处发生。通过任一机制,在步骤454处接收和执行与宏对应的宏代码。
在宏执行的初始阶段,在步骤456处针对与宏相关联的应用对应的API创建对象。此类对象可以代表为了执行宏而需要的对象,并且可以例如包括将命令从一个格式转译成另一格式的对象、包裹其他对象的对象、施加限额的对象以及其他此类对象。
在步骤458处,在安全包裹器中包裹对象。这样的包裹可以通过上文描述的机制发生,并且可以用来保护用户免于在系统上执行恶意代码。
在步骤460处,利用用户ID调用(或者援引或者执行)应用。调用应用可以由宏服务器子系统202执行。在调用中包括用户ID以便诸如通过保证用户被授权读取、更新或者删除特定文件等来校验授权。
在步骤462处,执行与将在调用的应用中执行的步骤有关的动作。例如,动作可以对应于在记录的宏中记录的个别指令或者步骤。对步骤的执行出现于可以在与宏记录于其上的浏览器在物理上远离的应用中。事实上,在一些示例中,宏可以已经由完全不同的用户记录和保存于不同浏览器上。在这样的情况下,不同用户可以是被原先记录宏的用户授权使用宏的好友或者家庭成员。
在步骤464处,返回为了进一步执行而必需的键。这些键可以例如包括由用户提供的输入或者由应用本身传递的参数。从目标应用(例如,电子表格应用)返回的“键”可以标识其状态可能由于给定命令而已经改变的任何项目。例如,命令INSERT_SHEET可以导致新表格是“当前”表格。宏可以具有可操作用于反映新当前表格的其他命令(例如,getActiveSheet)。其他命令(例如,INSERT_ROW)可以改变当前选择从而改变哪些单元当前是活跃单元。可以在任何后续命令(例如,getActiveSelection)需要当前状态和选择数据的情况下向宏反馈该信息以用于存储。
步骤460、462和464可以继续相对同时地运行直至宏完成。可以在步骤464处遇到和执行最后指令时或者在执行宏时的事件暂停执行宏时出现结束。
图5示出了用于宏系统中的对象的示例结构(具体为用于结构(诸如图2中的脚本信息仓库206)中的信息的示例逻辑结构)。逻辑结构500由节点502至508代表。例如,对于存储在脚本信息仓库206中的任一个宏可以有至少一个结构500或者其部分。继续节点504、链接节点506和用户授权节点508都具有与用户库节点502的0..N关系,这意味着对于每个用户库(或者表头部)节点可以存在任何数目(包括零个)继续、链接和用户授权。
该结构的根节点是用户库节点502,该节点例如定义宏和/或库的名称(例如,在“Dan’s Cloud-based MacroLib”中的“Macro_XYZ”)、宏库的所有者(例如,“Dan”)和与宏相关联的脚本(例如宏代码)。每个宏库可以具有也可以充当数据库主键的唯一标识符(诸如64位伪随机数)。在一些实现方式中,当从数据库取回宏时未使用诸如库名称和包含在库内的功能集这样的字段;它们严格地用于在运行/显示宏库时使用。“所有者”字段例如可以作为外来键来与诸如“获得由用户XYZ拥有的所有宏”这样的操作一起使用。链接表可以例如与诸如“获得由文档XYZ使用的所有宏”这样的操作一起使用。
继续节点504可以包括继续ID、继续数据(例如,来自诸如用于在宏已经进入等待状态之后利用附加输入恢复宏的附加入口点)和用户名称(例如,创建了继续节点504的用户)。对于给定宏可以存在多个继续节点504。可以记录继续的“所有者”以主要防止会话劫持,从而使得例如用户X无法恢复用户Y已经运行的宏。以这一方式,操作可以保证仅用户Y可以恢复他们发起的宏。可以允许多个此类记录,因为一个用户可以具有若干继续(例如,在单独窗口中的三个打开电子表格,每个电子表格具有活跃的提示对话框)。多个用户也可以同时运行它们自己的宏实例,每个实例具有它们自己的对话提示。
链接节点504允许外界实体链接到宏。链接节点504可以包括如下文档ID,该文档ID可以是“指向”宏的URL或者某一其他路径名称。可以存在多个链接节点506,因为可以有用于相同宏的若干不同名称(和通向相同宏的若干不同URL路径或者其他路径)。
用户授权节点508可以包含允许对宏的限制访问的信息。例如,限制原型缓冲器字段可以使用协议值模式(protocol pattern ofvalue)来控制访问,而用户字段可以基于用户ID控制访问。可以在每个节点508中使用任一个或者这两个字段。对于给定宏可以存在多个用户授权节点508,每个节点标识不同授权级。用户授权节点508可以实施对每个宏每个用户存在仅一个授权记录。该实施可以将用户的准许戳记的表示用于他们对该宏的执行以及宏可以完成的操作。之所以可以允许多个记录仅因为多个不同用户可能各自已经授权宏,并且各自可以已经授权不同动作以用于让它执行。当用户X执行宏时,上拉他们的用于该宏的授权记录;忽略所有其他授权记录。
如果针对宏的要求改变(例如,如果作者添加向博主的调用),这变更宏需要运行的要求,则可以将现有用户授权标记为无效。因而,当用户试图在添加附加要求之后重新执行宏时,可以重新提示他们授权。例如,提示可以表示“这一个宏需要访问日历和博主”,其中宏先前可能已经简单地表示了“这一个宏需要访问日历”。如果删除服务,则可以无需提示重新授权;唯有要求增加才需要提示。
图6示出了宏构造系统600的示例屏幕截图。用户可以使用系统以例如基于外部事件建立用于可以随后执行的或者可以在用户选择时人工运行的宏的参数和规则。通常,系统将宏构造组织成各自在屏幕截图的列中示出的三个阶段,并且每个阶段(包括每个阶段内的子阶段)可以在配置它之前随阶段改变。使用这样的系统,用户可以快速地标识用于宏的触发、来自与所选触发有关的可用参数中的用于操作宏的参数,以及与所选参数对应的宏结果。
在一个示例中,用户可以构造如下宏,该宏基于与电子邮件有关的事件执行电子邮件功能。在另一示例中,宏可以被构造成在不与电子邮件有关的应用(例如,电子表格、文字处理应用等)中执行操作。在又一示例中,用户可以构造如下宏,该宏具有输出而未依赖于任何触发事件。无论作为触发或者输出的应用类型如何,在屏幕上简单地进行用户选择可以自动导致构造对应宏。在屏幕“后面”运行的软件应用可以例如在图6的屏幕截图中所示界面上处理用户的输入和选择,并且可以自动构造宏(包括插入适当宏语法、各种应用和语言专属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中录入或者选择的潜在值可以例如包括大小、颜色、美元数额、时间段、语言、性别或者仅关于适合于特定应用的任何定量或者定性值。在一些实现方式中,可以根据活动框610的值自动标记参数字段611上的标签(例如,大小、颜色、价格等)。
宏处理数据区域604包括条件字段612、校验服务字段614和服务值字段616。条件字段612显示用于标识如下条件的选项,这些条件将触发宏的某些动作(例如,诸如以某一方式转发传入电子邮件)。在条件字段612中显示的确切值(例如“来自用户”或者“来自分组中的用户”等等)可以例如依赖于用户在属性字段608中的条目(例如,“电子邮件”)。如果用户选择用于属性字段608的不同值(例如,“电子表格”),则可以在条件字段612中显示(例如,与电子表格有关的)不同值集。
校验服务字段614可以标识应用和宏外部的将在收集用于运行宏的信息时由宏校验的服务。例如,通过在校验服务字段614中选择“定位器”,用户可以定义宏应当在它的执行期间校验发件人的位置、用户X的位置或者在电子邮件的副本行(carbon copy line)中列举的具体用户的位置或者其他选择。服务值字段616标识将从引用的一个或者多个服务向宏返回什么特定值。在这一情况下的位置可以例如基于接近实时GPS位置、通过蜂窝电话三角测量来追踪的位置、街道地址、邮政编码或者任何其他适当定位标准。
在一些实现方式中,宏处理数据区域604可以包括用于在宏中使用布尔算符的各种机制。这些机制可以是通过将条件字段612与校验服务字段614相与(AND)来暗示的隐含“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包括指定具体用户的条件612,这些条件包含电子邮件的主体中的具体文字并且基于用户X的位置。可以例如在其他参数字段(在图6中未示出)定义用于这些条件的值。因此,如果满足了此类条件,则宏将执行至完成。宏输出数据区域606示出了“电子邮件”是当前宏的输出类型,并且将执行的动作是“发文字给我”(例如,如在动作字段622中定义的那样)。由于在数据区域602至606中录入的值,响应于检测到来自特定用户的传入电子邮件消息(该消息包含主题行中的具体文字,并且基于用户X的位置)的触发事件,宏使用消息发送应用向传入电子邮件的目标发送如下文本消息,该消息告诉他们收到了这样的电子邮件。示例宏构造屏幕的优点在于它按照简洁GUI格式向用户提供这一信息,而又隐藏执行功能的底层宏,并且用户甚至无需知道如何编写宏或者甚至如何识别宏。屏幕可以用来构造完全宏或者构造宏的一部分,其中用户可以向宏添加屏幕不能提供的其他代码。
用于定义宏的其他接口可以包括例如用于“保存”输入或者更新的宏、用于“撤消”对宏的一个或者多个更新或者改变、用于“显示”所得宏或者“取消”编辑而不保存的按钮或者控件626。“从……复制”字段628可以允许用户通过复制现有宏或者复制用于现有宏的参数以便将屏幕预设于用户继而可以变更的初始状态来创建和定义新宏。描述字段630可以允许用户记录宏的目的或者向宏提供在宏的名称中未捕获的某一级含义。
在一些实现方式中,宏定义可以具有与它们相关联的时间要素(诸如用于何时宏将首先生效的生效日期632、用于何时宏将不再执行的截止日期634,以及可以例如用来指定宏将执行的日子(工作日、周一、周末等)的时间表或者“运行于”字段636)。数据字段可以包括具体日期或者日期范围和/或时间,或者可以包括枚举类型(例如,现在、从未、工作日等)。
在一些实现方式中,由系统600提供的用户接口可以适于在具有更小显示器的诸如智能电话等用户设备上执行。例如,可以依次提供数据区域602至606和其他字段。在一些实现方式中,可以针对整个屏幕提供滚动条,从而允许用户一次导航到一个总体区域。
使用系统600构造的宏可以与上文关于系统100和200以及图1和图2描述的安全方面一起使用。具体而言,可以在基于能力的安全包裹器中包裹每个构造的宏。系统600可以包括可以有助于安全性的与安全有关的字段(未示出),例如包括可以使用宏的其他用户的名称以及他们可以执行操作的范围(例如,发送电子邮件、更新电子表格等)。
这样的基于能力的安全性可以通过在授权执行代码时考虑用户的意图来提供益处。在这样的系统中,并且举例而言,执行用户创建称为能力的如下对象,这些对象封装用户希望允许的每个操作,并且用户向将执行的非信任代码传递这些对象。这些对象在非信任代码由系统执行时变成净荷(payload)的一部分(例如,包裹器的一部分),并且不可由非信任代码修改或者创建。当非信任代码尝试访问底层可信资源(例如,常规地为文件系统等)时,它仅可以经由用户创建的包裹可信资源的对象来这样做。能力可以允许对将向非信任代码授予的访问的细粒度控制并且可以用来构造服从最少特权原理的执行环境。这意味着任何给定模块可以仅执行为了它能够执行它的功能而必需的最小动作集,而无更多动作。
已经描述关于基于宏的托管系统的示例系统和过程,以下段落描述用于运用此类系统和过程的如下一系列示例,这些示例中的许多示例讨论系统可以如何使用基于能力的安全性来处置这些情况中的每个情况,以及如何减轻如下一些风险,这些风险可能是此类示例的一部分。
例1:销售策略实施
考虑如下场景,在该场景中,用于组织的销售部门在电子表格中创建用于潜在客户的提议。电子表格包含公司生产的所有产品和特征的成本。在销售员遍历电子表格时,他或者她可以在特征旁边的列中用1或者0将特征标记为活跃或者不活跃(即当前可用于销售)。电子表格可以包含用于计算定价的公式(包括各种折扣和价格乘数)。
在(例如,包括可能互斥的一些特征)的行项目之间可以存在多个依赖性。这些规则可以表达为宏。备选地,可以按照规则语言表达如下规则,这些规则将编译成如下宏,这些宏附着到表格以实施规则。附加规则可以包括错误校验和其他一致性校验。此外还可以存在与基于地区或者其他因素的促销或者触发事件相关联的规则。
关于此类规则考虑的一个事项是将如何管理它们。例如,让宏和/或规则驻留于表格引用的共享库中可能是有帮助的,从而使得管理员可以容易更新表格中的值。宏也应当是系统管理员向各种小型企业所有者提供的工具套件的一部分,并且可以允许那些用户中的每个用户访问和执行宏。管理员可以保持从托管系统上的中心位置上传的宏,并且用户都可以从该位置执行宏。
因此,可以在共享模式中公布宏,而单个“时隙”用于每个访问宏的电子表格。另一用户可以通过在他们的电子表格中包括指向宏的URL来向他们的电子表格中导入宏,并且可以向它授予用于向该电子表格写入的权限。
例2:投资用户界面
考虑如下场景,在该场景中,投资公司在电子表格中具有定价模型并且想要从外部服务拉取股票报价并且将它们注入到电子表格中以生成推荐(例如,买入、持有等)
脚本可能需要从电子表格读取和向电子表格写入,以及访问外部股票报价服务。作者可以向脚本授予如下脚本访问权,该访问权使脚本仅限于具体股票报价服务。如果作者将使该时隙留空,则应当向调用服务的用户不仅询问是否向脚本授予用于联络服务的权限,而且询问将联络哪个具体服务。这样,用户可以约束脚本可以完成的操作;脚本将不能联络任何其他服务。
如果用户想要与其他用户共享这一个宏以用于包含在他们自己的电子表格中(例如,复制宏而不是引用它),则其他用户将需要他们自己的用于访问外部股票报价服务的权限。如果用户通过让其他用户指向在中心位置的宏来共享它,则用户即使他们本身没有用于联络外部股票报价服务的权限,也仍然可以能够使用宏。可以在这样的情形中向他们授予脚本本身具有的权限(尽管他们可能不能从他们自己的脚本访问服务)。
例3:事故报告
考虑如下场景,在该场景中,公共汽车运输公司对自动化它的事故报告感兴趣。卷入事故的驾驶员可以访问托管服务以填写电子表格中的记录诸如公共汽车的位置等信息的表单。宏可以用来向各种监督者传送报告以供他们审核。
宏可能需要标识监督者(例如,经由它有权访问的另一电子表格、数据库查询等)、生成法律部门的正确电子邮件地址,以及与那些人共享文档,以及发送电子邮件,并且访问其他电子表格(例如,如下电子表格,该电子表格包括哪些事故报告未决的记录)。可能的是那些人将需要进一步编辑电子表格,继而触发使宏进展的事件。宏可以在继续模式中运行,从而使得它每当特定用户已经解决宏的阶段时暂停,并且继而等待下一用户挑选它。当由事件唤醒时,它可以进行校验以查看谁已经对文档签核(例如,如在文档本身中记录或者在向宏发送的事件中的信息中记录的那样),并且可以等待直至需要签核的每个人已经这样做,在这一点,宏继而可以通知某一其他人并且记录已经完全处理了事故(例如,在又一电子表格中)。在一些实现方式中,如果两个事件同时到达,则它们可以被排入队列,因而宏一次仅处理一个继续。工作流程状态可以简单地保持在宏的局部变量上下文中以及部分地记录在电子表格中。
在有关场景中,可以查询尚未完全处理和完结(例如,基于工作流程)的事故报告。这一查询可能需要访问如下电子表格,该电子表格包含关于事故报告的状态信息(或者简单地打开电子表格)。
例4:公共汽车时间表报告
考虑如下场景,在该场景中,公共汽车运输公司想要能够向客户通知某些公共汽车线路上的延迟。公司可以编辑电子表格以更新它们的公共汽车的预计时间/位置,并且这样的编辑诸如可以通过如下宏自动发生,该宏接收关于公共汽车的位置数据并且基于这样的信息计算估计到达时间(例如,通过将公共汽车标识为离开车站X,并且添加时间Y以计算到达车站X+1的时间)。在电子表格中的宏可以标识某些公汽线路何时异常延迟,并且如果是这样,则它可以向已经签约参加通知的客户发送文本消息。例如,用户可以预订无论用户何时在市区并且在他的正常汽车车站的两个街区内而且用户的任何路线公共汽车(例如,692路、698路等公共汽车)很可能晚点多于五分钟到达该街角都接收文本消息。用户的移动设备上的应用可以在用户处于适当位置时触发,以便使托管服务激活用户的记录上的标志,从而使得用户接收涉及用户的当前位置的更新,而用户无需人工录入位置(例如,通过将用户的GPS坐标转换成最近公汽车站位置)。
出于安全目的,宏的作者可以授予用于向用户的有限集合(例如,在由管理员控制的另一电子表格中列举的用户)发送文本消息的能力,并且很可能公布这一个宏为仅在表格本地而不是公共可访问的。作者不会向宏授予向表格写入的能力。这一场景带来通过参考在文档或者其他汇集(例如,电子表格或者某一其他分组定义)中定义的分组来指定能力的广度这样的可能性。
例5:基于位置的事件触发
考虑如下场景,在该场景中,一个用户更新电子表格中的一组音乐会推荐(包括,每场音乐会的地址和日期/时间)。其他用户可以通过要求无论他们何时在这些音乐会之一的附近并且音乐会的时间迫近都被通报来预订来自这一电子表格的通知。在这一情况下的通知可以例如使用诸如映射服务、社交网络服务(用于标识做出推荐的用户的好友)、位置服务(用于标识好友何时处于特定位置)以及用于发送通知的文本消息发送服务此类服务。因此,托管宏尤其适合于在这样的场景中。
例6:调查
考虑如下场景,在该场景中,用户创建调查或者其他数据录入表单、向多个其他用户发送电子邮件表单,并且向电子表格添加如下行,该行表明每个用户如何填写表单。
应当向宏授予用于从某个地址向由用户提供的一组地址发送电子邮件给一组人的能力。宏可以诸如通过访问来自托管服务的用户标识特征或者通过标识响应中的用户ID(例如,电子邮件地址)来追踪从每个用户接收表单中的数据。宏继而可以访问电子表格、向电子表格的一列中录入用户ID,并且向电子表格的其他列中录入一个或者多个用户答案。以这一方式,第一用户可以向(例如,如从现有好友列表或者电子邮件列表确定的)分组快速发送表单并且将来自该分组的评论自动列表。
例7:购置订单准许
考虑如下场景,在该场景中,用户发起购置订单(例如,“我想要X千盒Q-tip并且我比较喜欢销售商XYZ”)。当用户提交购置订单(PO)时,宏可以基于诸如项目、总价、部门等数据确定需要谁准许PO。例如,如果总价大于固定阈值,则PO可能需要主管准许。当准许者准许PO时,它可以沿着工作流程(诸如在宏、数据库或者电子表格中定义的用户列表)移动;宏将保持本地状态以记住谁已经批准PO以及谁尚未准许PO;当所有准许者都已经准许时,向购置发送PO。
这个宏可以在继续方面最好地运行。宏将有能力利用指向如下文档的链接或者附件向某些用户发送电子邮件,该文档具有如下表单或者URL,那些用户可以点击这些表单或者URL以准许或者不准许给定购置订单,宏将有权访问具有诸如部门主管等信息的其他电子表格或者数据库。
例8:邮件合并
考虑如下场景,在该场景中,用户具有名称、地址、电子邮件地址等的名称电子表格,以及另一文档(例如,电子邮件、电子表格等)并且想要用来自列表的字段替换后一个文档中的字段,并且向名称电子表格中指定的收件人用电子邮件发送合并的文档。
为了安全性,这是可以完全在具体文档和名称列表的上下文内运行的宏。能力是“允许向如在这一表格的第一列中指定的列表发送电子邮件”以及访问模板文档。宏本身利用根据电子表格行和一些模板计算的数据向列表中的个人发送电子邮件。用于邮件合并宏的特定形式众所周知。
例9:医生轮班调度
考虑如下场景,在该场景中,多个医生访问相同电子表格并且编辑它。宏可以校验电子表格以保证每个医生遵循用于电子表格的格式化或者调度规则(例如,在时间段中的最多或者最少轮班次数)。每个用户可以能够点击按钮以运行宏,从而对电子表格与日历应用进行同步,以求例如更直观访问(例如,用于创建重复时间表)。也可以出现双向同步。
宏可以被扩展成能够与多种其他日历应用交互。宏也可以有助于医生验证他们遵循规则,以有助于他们保持对他们已经报名了多少次轮班的追踪,并且对电子表格与日历应用进行同步。
例10:电子邮件插件
用户可以定义宏以标识到达他们的账户的传入邮件的每个实例,以及使电子邮件的发件人标识和主题行从电子邮件复制到与用户的账户相关联的电子表格的下一打开行中。以这一方式,用户可以自动保持对到达他们的账户的传入邮件的最新日志。
例11:博客插件
在服务上的作为博主的用户可以开发用于处置用户对博客的评论的宏。例如,可以使用关于评论者的信息,以诸如在评论旁边示出评论者的位置(例如,使用与来自用户的评论对应的IP地址)。此外,用户可以让所有评论与触发文字(诸如亵渎)的黑名单比较,从而使得无论何时发表包含不当文字的评论,用户都接收文本消息告警。用户继而可以登录博客以清除它。
例12:可记账小时
作为顾问的用户可以在日历应用中追踪他的或者她的可记账小时。他们可以使用宏以定期(例如,每周或者每月)解析出此类条目(例如,通过识别形式为x.x的时间录入)。宏继而可以使用与条目相关联的文本以标识时间应当被记账的项目编号(例如,如下列表,该列表将关键词和客户名称与某些相异项目相关)并且继而可以向电子表格中的单元添加数据以执行记账操作。宏继而可以(在将每小时费率用于记账之后)将来自电子表格的值合并成由文字处理程序生成的发票,并且继而可以向客户用电子邮件发送所得文档。如果客户是托管系统的注册用户,则宏可以产生针对付款的直接请求额(包括经由如下表单,该表单包括如下可选机制,客户端可以使用该机制来表明为账单付款的意图),并且客户可以随后选择控件以让资金从客户账户向顾问账户转账。
例13:行车路线邮件合并
托管系统的用户可能希望向他的或者她的多个好友发送针对即将到来的聚会的邀请。用户因此可以预备用于聚会邀请的电子表格。用户继而可以将宏指向好友及其地址的列表(例如,在托管系统上的联系人应用中)以实际上执行将邮件合并成邀请。然而,用户也可以向如下映射服务供应他们自己的地址(聚会的位置)以及当前正预备其邀请的好友的来自列表的地址,该映射服务可以根据标准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的图形信息的指令)。在其他实现方式中,可以视情况使用多个处理器和/或多个总线以及多个存储器和存储器类型。也可以连接多个计算设备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可以通过控制接口758和耦合到显示器754的显示器接口756来与用户通信。显示器754可以例如是TFT LCD(薄膜晶体管液晶显示器)或者OLED(有机发光二极管)显示器或者其他适当显示器技术。显示器接口756可以包括用于驱动显示器754以向用户呈现图形和其他信息的适当电路。控制接口758可以从用户接收命令并且转换它们以用于向处理器752提交。此外,外部接口762可以提供为与处理器752通信,以便支持设备750与其他设备的近区域通信。外部接口762可以例如在一些实现方式中提供有线通信或者在其他实现方式中提供无线通信,并且也可以使用多个接口。
存储器764存储计算设备750内的信息。存储器764可以实施为一个或者多个计算机可读介质、一个或者多个易失性存储器单元或者一个或者多个非易失性存储器单元中的一项或者多项。也可以提供扩展存储器774并且通过可以例如包括SIMM(单输入线存储器模块)卡接口的扩展接口772连接到设备750。这样的扩展存储器774可以提供用于设备750的额外存储空间,或者也可以存储用于设备750的应用或者其他信息。具体而言,扩展储存器774可以包括用于实现或者补充上文描述的过程的指令,并且也可以包括安全信息。因此,例如,可以提供扩展储存器774作为用于设备750的安全模块,并且可以用允许安全使用设备750的指令对扩展存储器774编程。此外可以经由SIMM卡以及附加信息(诸如以黑客不可攻击的方式将标识信息放置于SIMM卡上)提供安全应用。
如下文讨论的那样,存储器可以例如包括闪存和/或NVRAM存储器。在一种实现方式中,计算机程序产品有形地体现在信息载体中。计算机程序产品包含在执行时执行一种或者多种方法(诸如上文描述的方法)的指令。信息载体是计算机或者机器可读介质(诸如存储器764、扩展存储器774、处理器752上的存储器或者可以例如通过收发器768或者外部接口762接收的传播信号)。
设备750可以通过在必需时可以包括数字信号处理电路的通信接口766进行无线通信。通信接口766可以提供在各种模式或者协议(诸如GSM语音呼叫、SMS、EMS或者MMS消息发送、CDMA、TDMA、PDC、WCDMA、CDMA2000或者GPRS以及其他模式或者协议)之下的通信。这样的通信可以例如通过射频收发器768发生。此外还可以发生近程通信(诸如使用蓝牙、WiFi或者其他这样的收发器(未示出))。此外,GPS(全球定位系统)接收器模块770可以向设备750提供与导航和位置有关的附加无线数据,该数据可以视情况由在设备750上运行的应用使用。
设备750也可以使用音频编码解码器760来可听地通信,该编码解码器可以从用户接收口头信息并且将它转换成可用数字信息。音频编码解码器760可以类似地诸如通过例如设备750的头戴式受话器中的扬声器生成用于用户的可听声音。这样的声音可以包括来自语音电话呼叫的声音、可以包括记录的声音(例如,语音消息、音乐文件等)并且也可以包括由在设备750上操作的应用生成的声音。
如图中所示,可以用多种不同形式实施计算设备750。例如,它可以实施为蜂窝电话780。它也可以实施为智能电话782、个人数字助理或者其他类似移动设备的一部分。
设备750也可以包括能够感测运动的一个或者多个不同设备。示例包括但不限于加速度计和罗盘。加速度计和罗盘或者能够检测运动或者位置的其他设备可从任何数目的销售商获得并且可以用多种方式感测运动。例如,加速度计可以检测加速度改变而罗盘可以检测相对于磁北极或者南极的定向改变。这些运动改变可以由设备750检测并且用来根据这里描述的过程和技术更新相应设备750的显示。
这里描述的系统和技术的各种实现方式可以实现在数字电子电路、集成电路、专门设计的ASIC(专用集成电路)、计算机硬件、固件、软件和/或其组合中。这些各种实现方式可以包括一个或者多个如下计算机程序中的实现方式,该计算机程序在如下可编程系统上可执行和/或可解译,该可编程系统包括可以专用或者通用的至少一个可编程处理器(该处理器被耦合成从存储系统接收数据和指令并且向存储系统发送数据和指令)、至少一个输入设备和至少一个输出设备。
这些计算机程序(也称为程序、软件、软件应用或者代码)包括用于可编程处理器的机器指令,并且可以用高级过程和/或面向对象的编程语言和/或用汇编/机器语言来实施。如这里使用的那样,术语“机器可读介质”、“计算机可读介质”是指用来向可编程处理器提供机器指令和/或数据的任何计算机程序产品、装置和/或设备(例如,磁盘、光盘、储存器、可编程逻辑器件(PLD))(包括接收机器指令作为机器可读信号的机器可读介质)。术语“机器可读信号”是指用来向可编程处理器提供机器指令和/或数据的任何信号。
为了提供与用户的交互,这里描述的系统和技术可以实施于如下计算机上,该计算机具有用于向用户显示信息的显示设备(例如CRT(阴极射线管)或者LCD(液晶显示器)监视器)以及用户可以用来向计算机提供输入的键盘和指示设备(例如鼠标或者追踪球)。其他种类的设备也可以用来提供与用户的交互;例如向用户提供的反馈可以是任何形式的感官反馈(例如视觉反馈、听觉反馈或者触觉反馈);并且可以用任何形式(包括听觉、话音或者触觉输入)接收来自用户的输入。
这里描述的系统和技术可以实施于如下计算系统中,该计算系统包括后端部件(例如作为数据服务器)或者包括中间件部件(例如应用服务器)或者包括前端部件(例如具有如下图形用户界面或者web浏览器的客户端计算机,用户可以通过该图形用户界面或者web浏览器来与这里描述的系统和技术的实现方式交互)或者这样的后端、中间件或者前端部件的任何组合。可以通过任何数字数据通信形式或者介质(例如通信网络)互连系统的部件。通信网络的示例包括局域网(“LAN”)、广域网(“WAN”)和因特网。
计算系统可以包括客户端和服务器。客户端和服务器一般相互远离并且通常通过通信网络交互。客户端和服务器的关系借助如下计算机程序而产生,这些计算机程序在相应计算机上运行并且相互具有客户端-服务器关系。
已经描述多个实施方式。然而将理解可以进行各种修改而未脱离本发明的精神实质和范围。例如已经参照特定类型的宏描述本文献的大量内容,但是也可以解决其他形式的宏以及宏执行和记录方式。
此外,图中所示逻辑流程无需所示特定顺序或者依次顺序以实现所需结果。此外还可以提供其他步骤或者可以从描述的流程去除步骤并且可以向描述的系统添加或者从该系统去除其他部件。因而其他实施方式在所附权利要求的范围内。

Claims (20)

1.一种管理计算机宏的计算机实现的方法,包括:
在因特网可访问的托管计算机系统中的位置存储用于宏的代码;
从在与所述托管计算机远离的客户端计算机上运行的应用接收对执行所述宏的请求;
在所述托管计算机系统上执行所述宏;以及
向在所述客户端计算机上运行的所述应用提供执行所述宏的结果,
其中与所述宏被编程为对其操作的文件分开存储和访问用于所述宏的所述代码。
2.根据权利要求1所述的方法,还包括:将所述宏与所述托管计算机系统的注册用户相关联,以及根据由所述注册用户标识的访问限制使所述宏可用于所述托管计算机系统的其他用户。
3.根据权利要求2所述的方法,其中所述访问限制由所述托管计算机系统将所述注册用户分配到的一个或者多个分组进行定义。
4.根据权利要求1所述的方法,还包括:从在与所述托管计算机远离的多个不同客户端计算机上运行的多个应用接收对执行所述宏的请求,从所述位置针对每个所述请求在所述托管计算机系统上自动执行所述宏,以及响应于执行所述宏向所述多个应用中的每个相应应用提供执行所述宏的结果。
5.根据权利要求4所述的方法,其中所述多个应用对应于单个账户持有者。
6.根据权利要求4所述的方法,其中所述多个应用对应于多个不同账户持有者。
7.根据权利要求1所述的方法,其中执行所述宏包括对由所述托管计算机系统提供的多个不同托管服务进行调用。
8.根据权利要求7所述的方法,其中执行所述宏包括对由独立于所述托管计算机系统的第三方信息提供者提供的web服务进行调用。
9.根据权利要求1所述的方法,还包括:将由在所述托管计算机系统上运行的第一应用生成的信息转译成不同格式,以及向在所述托管计算机系统上运行的第二应用提供所述经转译的信息。
10.根据权利要求1所述的方法,还包括:向针对向所述托管计算机系统注册的多个不同用户的多个不同账户提供执行所述宏的结果。
11.根据权利要求1所述的方法,其中响应于所述客户端计算机上的浏览器加载具有指针的网页来接收所述请求,所述指针指向所述托管计算机系统中的宏执行子系统上的JavaScript宏。
12.一种用于在托管计算机系统上执行宏的计算机实现的系统,包括:
多个托管应用,可从所述托管计算机系统进行操作;
宏数据存储库,存储多个宏,其中每个宏分配给所述托管计算机系统上的用户账户并且每个宏定义将由所述多个托管应用中的至少一个托管应用执行的一系列动作,其中定义对所述多个宏的访问以便标识用户账户,所述系统将代表所述用户账户执行所述多个宏中的每个宏;以及
计算机服务器,编程为运行脚本管理器,所述脚本管理器响应于执行请求来访问宏并且通过从用户账户有权访问的一个或者多个网络可访问服务收集信息来执行所述宏。
13.根据权利要求12所述的系统,其中从代表除了将所述存储的宏分配到的所述用户账户之外的一个或者多个用户账户操作的应用中可访问所述宏。
14.根据权利要求12所述的系统,其中所述脚本管理器被编程为向标识为有权访问所述宏中的每个特定宏的用户账户有选择地允许对所述宏的访问。
15.根据权利要求12所述的系统,还包括由与所述托管计算机系统的运营商不同的组织运营的一个或者多个托管服务,每个托管服务响应于宏的调用可访问以在执行所述宏期间向所述宏提供信息。
16.根据权利要求12所述的系统,还包括:用于向所述托管计算机系统的用户递送的网页代码,包括用于调用所述多个宏之一并且用于使用通过执行所述宏来生成的结果的代码。
17.根据权利要求12所述的系统,其中每个所述宏经由用于向所述数据存储库公布所述宏的用户的账户的唯一用户标识符分配给用户账户。
18.根据权利要求12所述的系统,还包括:包裹服务管理器,用于在所述宏代码周围提供安全包裹器以根据由所述用户标识的访问允许或者限制来控制对与所述用户对应的资源的访问。
19.根据权利要求18所述的系统,其中所述安全包裹器被布置成生成用于所述用户的对话框,所述对话框被布置成在所述宏首次运行时从所述用户接收与将向所述宏提供的访问级别有关的输入。
20.一种用于在托管计算机系统上执行宏的计算机实现的方法,包括:
多个托管应用,可从所述托管计算机系统进行操作;
宏数据存储库,存储多个宏,每个宏分配给所述托管计算机系统上的用户账户并且每个宏定义将由所述多个托管应用中的至少一个托管应用执行的一系列动作;以及
用于执行宏以实现所述多个托管应用的一个或者多个实例化中的改变的装置。
CN201080042062.9A 2009-08-13 2010-08-13 共享服务器侧宏 Active CN102549560B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/540,785 US20110040824A1 (en) 2009-08-13 2009-08-13 Shared Server-Side Macros
US12/540,785 2009-08-13
PCT/US2010/045514 WO2011020050A2 (en) 2009-08-13 2010-08-13 Shared server-side macros

Publications (2)

Publication Number Publication Date
CN102549560A true CN102549560A (zh) 2012-07-04
CN102549560B CN102549560B (zh) 2016-10-26

Family

ID=43586879

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201080042062.9A Active CN102549560B (zh) 2009-08-13 2010-08-13 共享服务器侧宏

Country Status (8)

Country Link
US (1) US20110040824A1 (zh)
EP (1) EP2465045B1 (zh)
JP (2) JP2013502014A (zh)
KR (1) KR20120051070A (zh)
CN (1) CN102549560B (zh)
AU (1) AU2010282283A1 (zh)
DE (1) DE202010018480U1 (zh)
WO (1) WO2011020050A2 (zh)

Families Citing this family (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2695470C (en) 2007-08-28 2014-08-26 Commvault Systems, Inc. Power management of data processing resources, such as power adaptive management of data storage operations
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’
US8209341B2 (en) * 2008-09-30 2012-06-26 International Business Machines Corporation Configurable transformation macro
US8086618B2 (en) * 2008-09-30 2011-12-27 International Business Machines Corporation Configuration rule translation mapper
US8756407B2 (en) * 2008-09-30 2014-06-17 International Business Machines Corporation Configuration rule prototyping tool
US20100333116A1 (en) 2009-06-30 2010-12-30 Anand Prahlad Cloud gateway system for managing data storage to cloud storage sites
TWI472717B (zh) * 2010-02-24 2015-02-11 私立中原大學 Help with active navigation system
US10430180B2 (en) * 2010-05-26 2019-10-01 Automation Anywhere, Inc. System and method for resilient automation upgrade
US20120131645A1 (en) * 2010-11-18 2012-05-24 Harm Michael W User Scriptable Server Initiated User Interface Creation
US9898454B2 (en) * 2010-12-14 2018-02-20 Microsoft Technology Licensing, Llc Using text messages to interact with spreadsheets
US9244707B2 (en) * 2011-01-25 2016-01-26 Microsoft Technology Licensing, Llc Transforming user interface actions to script commands
JP5691605B2 (ja) * 2011-02-17 2015-04-01 株式会社リコー 画像処理装置、画面制御方法、画面制御プログラム及び記録媒体
US10559000B2 (en) 2011-08-19 2020-02-11 Google Llc Advertiser campaign script execution management
US8850313B2 (en) * 2012-02-08 2014-09-30 Mehernosh Mody Systems and methods for increasing relevancy of search results in intra web domain and cross web domain search and filter operations
US9916545B1 (en) * 2012-02-29 2018-03-13 Amazon Technologies, Inc. Portable network interfaces for authentication and license enforcement
US8950009B2 (en) * 2012-03-30 2015-02-03 Commvault Systems, Inc. Information management of data associated with multiple cloud services
US9262496B2 (en) 2012-03-30 2016-02-16 Commvault Systems, Inc. Unified access to personal data
EP2875442B1 (en) * 2012-07-17 2017-09-06 Good Technology Holdings Limited Systems and methods for facilitating service provision between applications
CA2887305C (en) * 2012-10-10 2017-07-25 Landmark Graphics Corporation Method and system of knowledge transfer between users of a software application
US20140136936A1 (en) * 2012-11-09 2014-05-15 Microsoft Corporation Spreadsheet functions to call rest api sources
US20140173269A1 (en) * 2012-12-18 2014-06-19 Apple Inc. Event Sharing Protocol for Data Processing Devices
US10346259B2 (en) 2012-12-28 2019-07-09 Commvault Systems, Inc. Data recovery using a cloud-based remote data recovery center
KR101471424B1 (ko) * 2013-01-29 2014-12-11 한국산업기술대학교산학협력단 시각장애인용 점자 페이스북 지원 방법 및 그 시스템
US9231898B2 (en) * 2013-02-08 2016-01-05 Machine Zone, Inc. Systems and methods for multi-user multi-lingual communications
US9575636B2 (en) * 2013-06-28 2017-02-21 Vmware, Inc. Graphical user interface for tracking context
US9171168B2 (en) * 2013-09-30 2015-10-27 Hewlett-Packard Development Company, L.P. Determine anomalies in web application code based on authorization checks
TWM489320U (en) * 2014-04-28 2014-11-01 Giga Byte Tech Co Ltd Distal operating system
CN104317606A (zh) * 2014-05-05 2015-01-28 技嘉科技股份有限公司 远程操作系统
CN104199879B (zh) * 2014-08-21 2018-07-24 广州华多网络科技有限公司 一种数据处理方法和数据处理装置
US10628800B2 (en) * 2014-10-28 2020-04-21 Sugarcrm Inc. Meeting launcher
JP6997096B2 (ja) * 2015-11-27 2022-01-17 カデンス イマジュリー メディカル インコーポレイテッド サーバを使用してデータを処理するための関数を実行する方法およびシステム
US10765956B2 (en) 2016-01-07 2020-09-08 Machine Zone Inc. Named entity recognition on chat data
US11108858B2 (en) 2017-03-28 2021-08-31 Commvault Systems, Inc. Archiving mail servers via a simple mail transfer protocol (SMTP) server
US11074138B2 (en) 2017-03-29 2021-07-27 Commvault Systems, Inc. Multi-streaming backup operations for mailboxes
US11221939B2 (en) 2017-03-31 2022-01-11 Commvault Systems, Inc. Managing data from internet of things devices in a vehicle
US10552294B2 (en) 2017-03-31 2020-02-04 Commvault Systems, Inc. Management of internet of things devices
US11294786B2 (en) 2017-03-31 2022-04-05 Commvault Systems, Inc. Management of internet of things devices
KR101966177B1 (ko) 2017-09-19 2019-04-05 이강돈 다중 다차원 속성을 가진 스프레드 시트 처리 방법 및 시스템
WO2019060353A1 (en) 2017-09-21 2019-03-28 Mz Ip Holdings, Llc SYSTEM AND METHOD FOR TRANSLATION OF KEYBOARD MESSAGES
JP7225554B2 (ja) 2018-04-02 2023-02-21 富士通株式会社 情報処理装置、情報処理システムおよび情報処理プログラム
US10891198B2 (en) 2018-07-30 2021-01-12 Commvault Systems, Inc. Storing data to cloud libraries in cloud native formats
KR102032084B1 (ko) * 2019-01-22 2019-10-14 이강돈 다중 다차원 속성을 가진 스프레드 시트 처리 방법 및 시스템
US10768971B2 (en) 2019-01-30 2020-09-08 Commvault Systems, Inc. Cross-hypervisor live mount of backed up virtual machine data
US11120211B2 (en) * 2019-04-23 2021-09-14 Microsoft Technology Licensing, Llc Combining spreadsheet recorded operations
US11494273B2 (en) 2019-04-30 2022-11-08 Commvault Systems, Inc. Holistically protecting serverless applications across one or more cloud computing environments
US11461184B2 (en) 2019-06-17 2022-10-04 Commvault Systems, Inc. Data storage management system for protecting cloud-based data including on-demand protection, recovery, and migration of databases-as-a-service and/or serverless database management systems
US11561866B2 (en) 2019-07-10 2023-01-24 Commvault Systems, Inc. Preparing containerized applications for backup using a backup services container and a backup services container-orchestration pod
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
CN110866256A (zh) * 2019-11-12 2020-03-06 深信服科技股份有限公司 一种宏代码检测方法、装置、设备及存储介质
US11467753B2 (en) 2020-02-14 2022-10-11 Commvault Systems, Inc. On-demand restore of virtual machine data
US11321188B2 (en) 2020-03-02 2022-05-03 Commvault Systems, Inc. Platform-agnostic containerized application data protection
US11422900B2 (en) 2020-03-02 2022-08-23 Commvault Systems, Inc. Platform-agnostic containerized application data protection
US11442768B2 (en) 2020-03-12 2022-09-13 Commvault Systems, Inc. Cross-hypervisor live recovery of virtual machines
US11201925B2 (en) 2020-04-28 2021-12-14 Caterpillar Inc. Communicating parameters based on a change
US11500669B2 (en) 2020-05-15 2022-11-15 Commvault Systems, Inc. Live recovery of virtual machines in a public cloud computing environment
US11848976B2 (en) * 2020-06-30 2023-12-19 Oracle International Corporation Custom action invocation in a speadsheet integrated with web services
US11314687B2 (en) 2020-09-24 2022-04-26 Commvault Systems, Inc. Container data mover for migrating data between distributed data storage systems integrated with application orchestrators
US11934175B2 (en) * 2020-10-02 2024-03-19 Sap Se Robotic process automation for remote assistance
US11604706B2 (en) 2021-02-02 2023-03-14 Commvault Systems, Inc. Back up and restore related data on different cloud storage tiers
US20220291932A1 (en) * 2021-03-10 2022-09-15 Microsoft Technology Licensing, Llc Computer-Generated Macros and Voice Invocation Techniques
KR102531620B1 (ko) * 2022-12-30 2023-05-11 주식회사 에스티씨랩 디지털 기반 에이전트 소스코드 삽입을 통한 서비스 제공 방법 및 서버, 및 에이전트 서버

Citations (3)

* Cited by examiner, † Cited by third party
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
US20060155812A1 (en) * 2004-12-15 2006-07-13 Looman Jeffrey M Management of network devices via email
CN1932817A (zh) * 2006-09-15 2007-03-21 陈远 通用互联网内容关键词交互系统

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4935870A (en) * 1986-12-15 1990-06-19 Keycom Electronic Publishing Apparatus for downloading macro programs and executing a downloaded macro program responding to activation of a single key
JPH0668046A (ja) * 1992-08-19 1994-03-11 Toshiba Corp コンピュータシステムのプログラム連携機構
US5666500A (en) * 1992-12-24 1997-09-09 International Business Machines Corporation Workstation user interface for use in conjunction with a host data processing system
CA2295757C (en) * 1997-06-25 2003-08-19 Samsung Electronics Co., Ltd. Improved home network, browser based, command and control
JP4035872B2 (ja) * 1997-10-27 2008-01-23 株式会社日立製作所 ファイルフォーマット変換方法とこれを用いたファイルシステム及び情報システム及び電子商取引システム
US6823522B1 (en) * 1999-07-15 2004-11-23 International Business Machines Corporation Methods, systems and computer program products for chaining integration objects to provide web access for legacy data sources
US6529784B1 (en) * 2000-02-29 2003-03-04 Caldera Systems, Inc. Method and apparatus for monitoring computer systems and alerting users of actual or potential system errors
WO2001075549A2 (en) * 2000-03-30 2001-10-11 Cygent, Inc. System and method for establishing electronic business systems for supporting communications services commerce
US20020065947A1 (en) * 2000-07-13 2002-05-30 Clayton Wishoff Software application agent interface
US20020082988A1 (en) * 2000-12-27 2002-06-27 Kazuyuki Ujiie Server device for evaluating quality of service, service providing method and medium
ATE419574T1 (de) * 2001-01-10 2009-01-15 Cisco Tech Inc Computersicherheits- und verwaltungssystem
US7024256B2 (en) * 2002-06-27 2006-04-04 Openpeak Inc. Method, system, and computer program product for automatically managing components within a controlled environment
US8443045B2 (en) * 2002-10-01 2013-05-14 Honda Motor Co., Ltd. Storage of selected e-mails including attachments in document management system
US6941134B2 (en) * 2002-12-19 2005-09-06 Cingular Wireless Ii, Llc Automated device behavior management based on preset preferences
US7284054B2 (en) * 2003-04-11 2007-10-16 Sun Microsystems, Inc. Systems, methods, and articles of manufacture for aligning service containers
US20050033855A1 (en) * 2003-08-05 2005-02-10 Ahmad Moradi Method and apparatus for generating and marketing video e-mail and an intelligent video streaming server
JP2006012333A (ja) * 2004-06-28 2006-01-12 Shinano Kenshi Co Ltd 光ディスク装置制御プログラム、光ディスク制御システム、ホストコンピュータおよび光ディスク装置
JP2006040096A (ja) * 2004-07-29 2006-02-09 Dainippon Printing Co Ltd スケジュール情報収集装置、スケジュール情報収集方法、スケジュール情報収集処理プログラム等
US7596598B2 (en) * 2005-10-21 2009-09-29 Birthday Alarm, Llc Multi-media tool for creating and transmitting artistic works
US8255818B2 (en) * 2005-11-17 2012-08-28 Oracle International Corporation System and method for providing drag and drop functionality in a communities framework
US7831600B2 (en) * 2005-12-28 2010-11-09 Sap Ag Cluster communication manager
US9407662B2 (en) * 2005-12-29 2016-08-02 Nextlabs, Inc. Analyzing activity data of an information management system
US8175936B2 (en) * 2006-03-31 2012-05-08 Sap Ag Method and system for identifying reusable development components
US20090006996A1 (en) * 2006-08-07 2009-01-01 Shoumen Saha Updating Content Within A Container Document For User Groups
JP2008046911A (ja) * 2006-08-17 2008-02-28 Securia Co Ltd 双方向型コミュニケーションサービスにおけるグループ管理システム、及びグループ管理方法。
US20080104042A1 (en) * 2006-10-25 2008-05-01 Microsoft Corporation Personalized Search Using Macros
US20080172219A1 (en) * 2007-01-17 2008-07-17 Novell, Inc. Foreign language translator in a document editor
JP5239341B2 (ja) * 2008-01-08 2013-07-17 日本電気株式会社 ゲートウェイ、中継方法及びプログラム
US8249627B2 (en) * 2009-12-21 2012-08-21 Julia Olincy “I am driving/busy” automatic response system for mobile phones

Patent Citations (3)

* Cited by examiner, † Cited by third party
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
US20060155812A1 (en) * 2004-12-15 2006-07-13 Looman Jeffrey M Management of network devices via email
CN1932817A (zh) * 2006-09-15 2007-03-21 陈远 通用互联网内容关键词交互系统

Also Published As

Publication number Publication date
JP6055015B2 (ja) 2016-12-27
KR20120051070A (ko) 2012-05-21
CN102549560B (zh) 2016-10-26
US20110040824A1 (en) 2011-02-17
JP2013502014A (ja) 2013-01-17
EP2465045B1 (en) 2017-04-26
EP2465045A2 (en) 2012-06-20
EP2465045A4 (en) 2013-10-16
DE202010018480U1 (de) 2017-01-17
WO2011020050A3 (en) 2011-06-16
WO2011020050A2 (en) 2011-02-17
AU2010282283A1 (en) 2012-02-23
JP2015158923A (ja) 2015-09-03

Similar Documents

Publication Publication Date Title
CN102549560A (zh) 共享服务器侧宏
US11589691B2 (en) System and method for locational image processing
US10292011B2 (en) System and method for location based exchange network
CN102498483B (zh) 事件触发的服务器端宏
CN102549559B (zh) 托管的计算机环境中的虚拟对象间接化

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
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.