(57)【特許請求の範囲】
【請求項１】
コンピュータマクロを管理するコンピュータ実装方法であって、
インターネットアクセス可能なホスティングされたコンピュータシステム（１００）中のロケーションに、マクロを保存するステップと、
前記ホスティングされたコンピュータシステムの登録されたユーザに前記マクロを関連付け、前記登録ユーザによって特定されるアクセス制限に従って、前記ホスティングされたコンピュータシステムの他のユーザが前記マクロを利用できるようにするステップと、
前記ホスティングされたコンピュータから遠隔にあるクライアントコンピュータ（２２６）上で動作しているアプリケーションから、前記マクロを実行する要求を受信するステップと、
前記ホスティングされたコンピュータシステム（１００）上で前記マクロを実行するステップと、
前記クライアントコンピュータ（２２６）上で動作している前記アプリケーションに前記マクロを実行した結果を提供するステップと、
前記ホスティングされたコンピュータシステム（１００）に登録された複数の異なるユーザの複数の異なるアカウントに、前記マクロを実行した前記結果を自動的に提供するステップと
を含むことを特徴とする方法。
【請求項２】
前記アクセス制限は、前記登録ユーザが前記ホスティングされたコンピュータシステム（１００）によって割り当てられる１つまたは複数のグループによって規定されることを特徴とする請求項１に記載の方法。
【請求項３】
前記ホスティングされたコンピュータから遠隔にある複数の異なるクライアントコンピュータ上で動作している複数のアプリケーションから前記マクロを実行する要求を受信するステップと、前記ロケーションから前記要求の各々について前記ホスティングされたコンピュータシステム上で前記マクロを自動的に実行するステップと、前記マクロを実行するステップに応答して、前記複数のアプリケーションのそれぞれ対応するアプリケーションに、前記マクロを実行した結果を提供するステップとをさらに含み、前記複数のアプリケーションは、単一のアカウント保有者または複数の異なるアカウント保有者に対応することを特徴とする請求項１に記載の方法。
【請求項４】
前記マクロを実行するステップは、前記ホスティングされたコンピュータシステムによって提供される複数の異なるホスティングされたサービス（１０８、１１０）を呼び出すステップを含み、前記マクロを実行するステップは、前記ホスティングされたコンピュータシステムとは無関係な第三者情報プロバイダによって提供されるウェブサービスを呼び出すステップを含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記ホスティングされたコンピュータシステム上で動作している第１のアプリケーションによって発生された情報を異なるフォーマットに変換するステップと、前記変換された情報を、前記ホスティングされたコンピュータシステム上で動作している第２のアプリケーションに提供するステップとをさらに含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記要求は、ブラウザに応答して、前記ホスティングされたコンピュータシステムのマクロ実行サブシステム上のＪａｖａＳｃｒｉｐｔ（登録商標）マクロへのポインタを有するウェブページをロードしている前記クライアントコンピュータ上で受信されることを特徴とする請求項１に記載の方法。
【請求項７】
ホスティングされたコンピュータシステム（１００）上でマクロを実行するためのコンピュータ実装システムであって、
前記ホスティングされたコンピュータシステムから動作可能な複数のホスティングされたアプリケーション（１０２）と、
前記ホスティングされたコンピュータシステムの登録されたユーザの前記ホスティングされたコンピュータシステム（１００）上のユーザアカウントにそれぞれ割り当てられる複数のマクロを保存するマクロデータストア（２０６）であって、前記マクロは前記複数のホスティングされたアプリケーション（１０２）のうちの少なくとも１つが実行すべき一連のアクションをそれぞれ規定し、前記マクロは、前記登録ユーザによって特定されるアクセス制限に従って、前記ホスティングされたコンピュータシステムの他のユーザが利用できるようにする、マクロデータストア（２０６）と、
実行要求に応答してマクロにアクセスし、ユーザアカウントがアクセスを有する１つまたは複数のネットワークアクセス可能なサービス（１０８、１１０）から情報を収集することによって、前記マクロを実行するスクリプトマネージャ（２０４）を実行するようにプログラムされるコンピュータサーバ（２０２）と
を含み、
前記マクロを実行した結果は、前記ホスティングされたコンピュータシステムに登録された複数の異なるユーザの複数の異なるアカウントに自動的に提供されることを特徴とするシステム。
【請求項８】
前記保存されたマクロは、前記マクロが割り当てられた前記ユーザアカウント以外の１つまたは複数のユーザアカウントに代わって操作されるアプリケーションからアクセス可能であることを特徴とする請求項７に記載のシステム。
【請求項９】
前記スクリプトマネージャ（２０４）は、前記マクロのうちのそれぞれ特定のマクロへのアクセスを有すると特定されたユーザアカウントに、前記マクロへのアクセスを選択的に許可するようにプログラムされることを特徴とする請求項７に記載のシステム。
【請求項１０】
前記ホスティングされたコンピュータシステムのオペレータとは異なる組織によって操作される１つまたは複数のホスティングされたサービス（１０８、１１０）をさらに含み、ホスティングされたサービスはそれぞれ、前記マクロの実行中に前記マクロに情報を提供するために、マクロによる呼び出しに応答してアクセス可能であることを特徴とする請求項７に記載のシステム。
【請求項１１】
前記複数のマクロのうちの１つを呼び出し、前記マクロの実行によって生成された結果を使用して、前記ホスティングされたコンピュータシステムのユーザにウェブページ（２２６ａ）を提供することをさらに含むことを特徴とする請求項７に記載のシステム。
【請求項１２】
前記マクロの各々は、前記データストアに前記マクロを発行したユーザのアカウントに関する一意のユーザ識別子を介してユーザアカウントに割り当てられることを特徴とする請求項７に記載のシステム。
【請求項１３】
前記ユーザによって特定されるアクセス許可または制限に従って、前記ユーザに対応するリソースへのアクセスを制御するために、マクロコードの周りにセキュリティラッパーを提供するためのラッピングされたサービスマネージャ（２１２、２１０）をさらに含むことを特徴とする請求項７に記載のシステム。
【請求項１４】
前記セキュリティラッパーは、前記ユーザのためのダイアログボックスを発生するように構成され、前記ダイアログボックスは、潜在的に信用できないマクロを特定可能であることを特徴とする請求項１３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、「ＳＨＡＲＥＤ  ＳＥＲＶＥＲ−ＳＩＤＥ  ＭＡＣＲＯＳ」と題する、２００９年８月１３日に出願された米国特許出願第１２／５４０，７８５号に基づき、米国特許法第１１９条（３）に定める優先権を主張するものであり、その開示は、本明細書に参照として組み込まれる。
【０００２】
本明細書は、電子コンテンツのネットワークベースの配信に関する。
【背景技術】
【０００３】
マクロとは、１つまたは複数のコンピュータアプリケーションとの対話性を強化し、自動化するために、それらのアプリケーションの内側で実行することができる命令のセットであり、他の場合には、マクロの少なくとも一部は、アプリケーションのユーザが手動で実行することができるステップを示す。たとえば、マクロは、スプレッドシートアプリケーション中のある特定の数から値を計算し、デスクトップコンピュータ上の関係するワードプロセシングアプリケーションにその値をコピーするように書くことができる。ユーザは、「ホットキー」コンビネーションをマクロに割り当てることができ、それにより、マクロは、そのホットキーコンビネーションを単に押すだけで、ユーザより簡単に実行できるようになる。また、別の例として、マクロは、ある特定の電子メッセージ（たとえば、配偶者、顧客、または上司からの電子メッセージ）の重要度を高くするように書くことができ、それにより、それらの電子メッセージは、コンピューティングデバイスのユーザにより、より簡単に閲覧できるようになる。１つのよく知られているマクロベースのシステムは、ＭＩＣＲＯＳＯＦＴ（登録商標）ＯＦＦＩＣＥ生産性スイートに関するＶｉｓｕａｌ  Ｂａｓｉｃ  ｆｏｒ  Ａｐｐｌｉｃａｔｉｏｎｓである。
【発明の概要】
【課題を解決するための手段】
【０００４】
本明細書は、口語的にはしばしば「クラウド」と呼ばれる、ホスティングされたコンピューティング環境においてマクロを作成し、使用するためのシステムおよび技法について論じる。マクロは、クライアントデバイスに保存され、そこから実行するのではなく、マクロサーバサブシステムに保存され、そこから実行することができる。これにより、すべて認定されたユーザがネットワークにアクセスし、自分のクレデンシャルを提供することができる限り、そのようなユーザが、任意のロケーションからマクロにアクセスすることができるので、ユーザの間で、マクロを簡単に共有できるようになる。さらに、マクロは、（たとえば、ユーザのモバイルデバイス上でＧＰＳにより判断される）様々なユーザのロケーションに関する情報を提供するサービス、ニュースフィードおよび気象フィードを提供するサービス、ならびに他のそのようなサービスを含む、複数のアプリケーションおよびサービスに容易にアクセスすることができる。アプリケーションは多種多様にわたることができ、電子メール、スプレッドシートおよびワードプロセッサなどの生産性アプリケーション、マッピングアプリケーション、ならびに（ユーザがアクセスすることができ、また、マクロからのカスタマイズされた出力を提供するために、ユーザが展開することもできる）単一のウェブページ上で一緒に提示することができる様々なアプリケーションのマッシュアップを含むことができる。このシステムには、標準的なウェブブラウザからアクセスすることができ、ユーザがマクロレコーダを起動する場合にはマクロの記録を行うことができる。マクロレコーダは、コンピュータ上のユーザのアクションを追跡し、後でユーザがマクロを実行するときに、ユーザのアクションを自動的に繰り返すことができるように、ユーザのアクションをマクロコードに変換する。
【０００５】
ある特定のマクロは、具体的なマクロが対象とするアプリケーションとユーザが対話していないときであっても生じるイベントから起動することができる。具体的には、マクロを保存し、サーバサブシステム上で実行するときに、サーバサブシステムは、マクロにダイレクトされるシステム全体で特定のイベントを監視するように確立することができる。次いで、そのようなイベントは、マクロの起動をトリガすることができ、サーバサブシステム上でそのマクロを実行することができる。マクロは、システムまたは第三者サービス上でサービスにアクセスすることができる。システム上でサービスは、システムに登録された特定のユーザに対応するデータストアへのアクセスを許可することができる。たとえば、電子メールメッセージがユーザのアカウントに着信したことに応答して、マクロを起動することができ、次いで、（たとえば、ユーザが、それらの着信メッセージのすべてから、件名を示すスプレッドシートを自動的にコンパイルすることができるように）メッセージから、ユーザのアカウントに割り当てられているスプレッドシートに情報をコピーすることができる。第三者サービスは、サービスを提供するドメインとは別のドメインからアクセスすることができ、インターネットを介して情報を共有するためのよく知られているメカニズムを提供する、ＳＯＡＰサービスまたは他の同様のサービスを含むことができる。たとえば、第三者サービスプロバイダは、最新の気象データをコンパイルすることができ、要求時に、他のサービスが利用可能なデータを作成することができる。
【０００６】
第１の態様では、コンピュータ実装方法は、コンピュータマクロを管理する。本方法は、インターネットアクセス可能なホスティングされたコンピュータシステム中のロケーションに、マクロに関するコードを保存することを含む。この方法は、ホスティングされたコンピュータから遠隔にあるクライアントコンピュータ上で動作しているアプリケーションから、マクロを実行したいという要求を受信するステップと、ホスティングされたコンピュータシステム上でマクロを実行するステップと、クライアントコンピュータ上で動作しているアプリケーションに、マクロを実行した結果を提供するステップとをさらに含む。マクロに関するコードは、マクロがその上で動作するようにプログラムされるドキュメントと別に保存され、アクセスされる。
【０００７】
実装形態は、以下の特徴のいずれか、またはすべてを含んでも、あるいは以下の特徴のいずれも含まなくてもよい。本方法は、マクロを、ホスティングされたコンピュータシステムの登録ユーザと関連付けるステップと、登録ユーザによって特定されるアクセス制限に従って、ホスティングされたコンピュータシステムの他のユーザがマクロを利用できるようにするステップとをさらに含むことができる。ホスティングされたコンピュータシステムによって登録ユーザがそこに割り当てられる、１つまたは複数のグループによって、アクセス制限を規定することができる。本方法は、ホスティングされたコンピュータから遠隔にある複数の異なるクライアントコンピュータ上で動作している複数のアプリケーションから、マクロを実行したいという要求を受信するステップと、当該ロケーションからの要求の各々について、ホスティングされたコンピュータシステム上でマクロを自動的に実行するステップと、マクロを実行するステップに応答して、複数のアプリケーションのそれぞれ対応するアプリケーションに、マクロを実行した結果を提供するステップとをさらに含むことができる。複数のアプリケーションは、単一のアカウント保有者に対応することができる。複数のアプリケーションは、複数の異なるアカウント保有者に対応することができる。マクロを実行するステップは、ホスティングされたコンピュータシステムによって提供される複数の異なるホスティングされたサービスを呼び出すステップを含むことができる。マクロを実行するステップは、ホスティングされたコンピュータシステムとは無関係な第三者情報プロバイダによって提供されるウェブサービスを呼び出すステップを含むことができる。
【０００８】
さらに、本方法は、ホスティングされたコンピュータシステム上で動作している第１のアプリケーションによって発生された情報を、異なるフォーマットに変換するステップと、変換された情報を、ホスティングされたコンピュータシステム上で動作している第２のアプリケーションに提供するステップとをさらに含むことができる。本方法は、また、マクロを実行した結果を、ホスティングされたコンピュータシステムに登録された複数の異なるユーザの複数の異なるアカウントに自動的に提供するステップを含むことができる。当該要求は、ブラウザに応答して、ホスティングされたコンピュータシステムのマクロ実行サブシステム上のＪａｖａＳｃｒｉｐｔ（登録商標）マクロへのポインタを有するウェブページをロードしているクライアントコンピュータ上で受信することができる。
【０００９】
別の実装形態では、ホスティングされたコンピュータシステム上でマクロを実行するためのコンピュータ実装システムは、ホスティングされたコンピュータシステムから動作可能な複数のホスティングされたアプリケーションと、マクロデータストアと、コンピュータサーバとを備える。マクロデータストアは、ホスティングされたコンピュータシステム上のユーザアカウントにそれぞれ割り当てられ、複数のホスティングされたアプリケーションのうちの少なくとも１つが実行すべき一連のアクションをそれぞれ規定する複数のマクロを保存する。複数のマクロへのアクセスは、本システムが複数のマクロの各々をそれに代わって実行するユーザアカウントを特定するように規定される。コンピュータサーバは、実行要求に応答してマクロにアクセスし、ユーザアカウントがアクセスできる１つまたは複数のネットワークアクセス可能なサービスから情報を収集することによって、マクロを実行するスクリプトマネージャを実行するようにプログラムされる。
【００１０】
実装形態は、以下の特徴のいずれか、またはすべてを含んでも、あるいは以下の特徴のいずれも含まなくてもよい。保存されたマクロは、マクロが割り当てられたユーザアカウント以外の１つまたは複数のユーザアカウントに代わって操作されるアプリケーションからアクセス可能とすることができる。スクリプトマネージャは、マクロのうちのそれぞれ特定のマクロにアクセスできると特定されたユーザアカウントに、マクロへのアクセスを選択的に許可するようにプログラムすることができる。本システムはさらに、ホスティングされたコンピュータシステムのオペレータとは異なる組織によって操作される１つまたは複数のホスティングされたサービスを含むことができ、ホスティングされたサービスはそれぞれ、マクロの実行中にマクロに情報を提供するために、マクロによる呼出しに応答してアクセス可能である。本システムは、また、複数のマクロのうちの１つを呼び出すためのコードを含む、ホスティングされたコンピュータシステムのユーザへの配信用のウェブページコードを含むことができる。マクロの各々は、マクロをデータストアに発行したユーザのアカウントに関する一意のユーザ識別子を介して、ユーザアカウントに割り当てることができる。
【００１１】
いくつかの態様では、本システムは、また、ユーザによって特定されるアクセス許可またはアクセス制限に従って、ユーザに対応するリソースへのアクセスを制御するために、マクロコードの周りにセキュリティラッパーを提供するためのラッピングされたサービスマネージャを備える。ユーザのためのダイアログボックスを発生するように、セキュリティラッパーを構成することができ、ダイアログボックスは、マクロに提供されるべきアクセスレベルに関して、マクロが最初に動作するときにユーザから入力を受信するように構成される。
【００１２】
別の実装形態では、コンピュータ実装システムが、ホスティングされたコンピュータシステム上でマクロを実行する。本システムは、ホスティングされたコンピュータシステムから動作可能な複数のホスティングされたアプリケーションと、ホスティングされたコンピュータシステム上でユーザアカウントにそれぞれ割り当てられ、複数のホスティングされたアプリケーションのうちの少なくとも１つによって実行すべき一連のアクションをそれぞれ規定する複数のマクロを保存するマクロデータストアと、複数のホスティングされたアプリケーションの１つまたは複数のインスタンシエーションにおける変化に影響を与えるために、マクロを実行するための手段を備えることができる。
【００１３】
１つまたは複数の実施形態の詳細が、以下の添付の図面および説明に記載される。他の特徴および利点は、説明および図面から、また、特許請求の範囲から明白である。
【図面の簡単な説明】
【００１４】
【図１】ホスティングされたコンピューティングシステムにおけるマクロ操作を示す概念図である。
【図２】共有マクロを操作することができるホスティングされたコンピュータシステムの概略図である。
【図３】ホスティングされたコンピューティングシステム上でマクロを実行するためのプロセスのフローチャートである。
【図４Ａ】ウェブページ上で動作しているアプリケーションから呼び出されたマクロを実行するためのプロセスのフローチャートである。
【図４Ｂ】ホスティングされたシステム上でマクロを記録し、実行するためのプロセスのスイムレーンフローチャートである。
【図５】マクロシステム中のオブジェクトの例示的な構造を示す図である。
【図６】マクロ構築システムの例示的なスクリーンショットを示す図である。
【図７】本明細書で論じられるアクションを実行するために使用することができる一般的なコンピュータデバイスの例を示す図である。
【発明を実施するための形態】
【００１５】
様々な図面における同様の参照符号は、同様の要素を示している。
【００１６】
図１は、ホスティングされたコンピューティングシステム１００におけるマクロ操作を示す概念図である。ホスティングされたコンピューティングシステム１００におけるマクロ操作は、クライアントデバイス上のマクロ操作と対比することができる。あるいは、マクロを作成し、および／または保存されたロケーションにマクロをコピーしたユーザが、自分のデスクトップコンピュータから、自分のネットブックコンピュータから、または、インターネットカフェのコンピュータなどの誰もが利用できるコンピュータからアプリケーションを実行しながら、マクロにアクセスしようとしているときに、様々なクライアントからのマクロの操作を可能にすることによって、単一のクライアントデバイスに（たとえば、リモートデスクトップ接続サービスまたはＶＰＮを介して）ダイレクトされたサーバ上のマクロ操作と、ホスティングされたコンピューティングシステム１００におけるマクロ操作を対比することができる。また、他のユーザ（たとえば、イニシャルユーザと同じドメインからシステムにアクセスするユーザ）に、自分のアプリケーションを使用するときにマクロを実行することを許可する、マクロ上の第１のユーザ定義アクセス制限によって、ユーザ間でマクロを簡単に共有することができる。また、ユーザおよびユーザのコンピュータの外部からの入力がマクロ実行をトリガするときなど、ユーザがオンラインでないときでも、そのユーザに対してマクロを実行することができる。さらに、ホスティングされたシステムに、互いに関連がある（たとえば、全員が同じ事業体のために働いている）複数の登録ユーザがいるとき、ホスティングされたシステムで動作しているマクロは、そのようなユーザのうちの複数に対応するアプリケーションおよび／またはデータストア全体に及ぶ複雑なワークフローを生成することができる。
【００１７】
上記のように、電子メールメッセージの受信などの外部イベントによって、マクロをトリガすることができる。マクロは、ユーザのクライアントシステムとは別の、かつ、他のサービスまたはアプリケーションが動作している任意のサブシステムとは別のマクロサーバサブシステム上で動作することができる。たとえば、他のサブシステム上のサービスは、メインシステムへの内部サービス（たとえば、ロケーションサービスおよび電子メールサービス）、ならびに（たとえば、オンラインショップまたはオークションサイト、気象サイトなどによる）第三者サービスを含む、マクロが情報を取得するためにアクセスするあらゆるサービスを含むことができる。
【００１８】
システムと関連付けられたマクロサーバサブシステムにより、マクロコードを書き込むユーザは、一元的で一貫した方法で、マクロを書き込むことができるようになり、これにより、エンドユーザのプログラミング経験が簡単になる。たとえば、スプレッドシートおよびカレンダーを操作すること、ウェブコンテンツをフェッチすること、電子メールを送ること、カレンダーにアクセスすること、テキストを翻訳することなど、エンドユーザに公開される様々なサービスについて、オブジェクトモデルを規定することができる。たとえば、Ｊａｖａ（登録商標）オブジェクトを使用して、オブジェクトモデルを表すことができる。各Ｊａｖａ（登録商標）オブジェクトは、基礎をなすサービスへのアクセス方法をラッピングすることができる。スプレッドシートおよび言語翻訳サービスは、内的ディレクトネットワークコール（たとえば、リモートプロシージャコール）を使用することができ、ウェブコンテンツフェッチングは、たとえば、ＳＯＡＰまたは同様のサービスを使用することができる。これらのサービスの多くは、エンドユーザに直接的に公開しなくてもよい。
【００１９】
システム１００は、基礎をなすＪａｖａ（登録商標）オブジェクトの周りに「ラッパー」または「デコレータ」のいくつかの層を作成することによって、エンドユーザに内部サービスを公開するリスクをなくすことができる。たとえば、システム１００は、所与のユーザが所与のサービスを呼び出すことができる回数を制限するクォータ強化層を含むことができる。システム１００は、ケーパビリティベースのセキュリティ（ｃａｐａｂｉｌｉｔｙ−ｂａｓｅｄ  ｓｅｃｕｒｉｔｙ）を使用することができるセキュリティ層を含むことがき、それにより、ファイングレインアクセス制御が可能になる（たとえば、基礎をなすデータへの書込みアクセスでなく読取りアクセスが可能になる）。システム１００は、また、すべてのユーザコールを捕捉し、それらのセッションのトランスクリプトを提供することができるロギング層を含むことができる。クォータおよびセキュリティを、アドホックサービスではなくサービス全体に一様に適用する場合、プログラマーエラー（および、結果として生じるセキュリティ違反）の機会を低減することができる。
【００２０】
システム１００は、コンピュータマクロを管理するための様々なコンピュータ実装メカニズムを含むことができ、そこに、インターネットアクセス可能なホスティングされたコンピュータシステム中のロケーションにあるマクロに関し、以下の関数を実行するように動作可能なコードが保存される。ホスティングされたコンピュータシステムから遠隔にあるクライアントコンピュータ上で動作しているアプリケーションなどから、マクロを実行したいという要求を受信すると、そのホスティングされたコンピュータシステム上で、マクロを実行することができる。たとえば、マクロは、マクロマネージャ、またはマクロの通信可能に結合された構成要素の内側で直接的に動作することができる。マクロを実行した結果は、クライアントコンピュータ上で動作しているアプリケーション（たとえば、ユーザのコンピュータ上のブラウザで動作しているスプレッドシートアプリケーション）に提供することができる。この状況におけるマクロに関するコードを保存することができ、そのマクロが動作するようにプログラムされたドキュメントと別々に、そのマクロのコードにアクセスすることができる。たとえば、ホスティングされたサービスサーバ上でマクロコードを実行することができる間、そのマクロコードによって更新されるスプレッドシートは、ユーザのラップトップコンピュータ上に、または、ホスティングされたサービスの別のロケーションに常駐することができ、ホスティングされたサービスに登録された任意の数のユーザに代わって、そのマクロに、実行している任意の数のアプリケーションを自由に指定し、そのマクロはそこから自由にアクセスされる。
【００２１】
いくつかの実装形態では、ホスティングされたコンピュータシステムの登録ユーザに、各マクロを関連付けることができ、登録ユーザ（または、より詳細には、他のユーザのアカウント上で動作するアプリケーション）が特定するアクセス制限に従って、ホスティングされたコンピュータシステムの他のユーザがマクロを利用できるようにすることができる。たとえば、マクロを「所有する」ユーザは、自分のユーザＩＤを介して、または、そのようなユーザが属するグループを介して、自分のマクロを使用する権限が与えられた他のユーザを特定することができる。他の場合には、ユーザは、マクロにリンクまたはＵＲＬを提供することができ、マクロを実行することと関連付けられたある特定の権利を含むことができる。
【００２２】
ホスティングされたコンピュータシステムによって登録ユーザが割り当てられた１つまたは複数のグループによって、アクセス制限を規定することができる。たとえば、ユーザは、「ＭｙＯｎｌｉｎｅＦｒｉｅｎｄｓ」と呼ばれるグループにマクロアクセスを許可することができ、そのグループのすべての人々に権利を割り当てることができ、それにより、ユーザのソーシャルネットワーキングサイト（たとえば、Ｆａｃｅｂｏｏｋ（登録商標）、Ｏｒｋｕｔなど（登録商標））上で特定されるユーザの「友人」を表すことができる。
【００２３】
いくつかの実装形態では、要求がホスティングされたコンピュータから遠隔にある複数の異なるクライアントコンピュータ上で動作している複数のアプリケーションから発したものである場合、マクロを実行するためにその要求を受信することができる。たとえば、アプリケーションは、マクロの定義において、マクロの実行を開始するか、あるいは待ち状態の経過後に、マクロの実行を再開または継続するように設計される「イベント」を発生させる、または始動させることができる。システム１００は、ロケーションからの要求の各々について、ホスティングされたコンピュータシステム上でマクロを自動的に実行することができる。システム１００は、さらに、マクロを実行したことに応答して、複数のアプリケーションのそれぞれ対応するアプリケーションに、マクロを実行した結果を提供することができる。いくつかの実装形態では、複数のアプリケーションは、一人のアカウント保有者に対応する。たとえば、マクロの実行を要求する各アプリケーションは、結果を受信することができる。いくつかの実装形態では、複数のアプリケーションは、複数の異なるアカウント保有者（たとえば、システム１００の複数の登録ユーザ）に対応する。
【００２４】
マクロを実行することは、ホスティングされたコンピュータシステムによって提供される複数の異なるホスティングされたサービスを呼び出すことを含むことができる。たとえば、マクロは、カレンダーサービス、コンタクトサービス、ロケーション提供サービス（たとえば、ユーザまたはユーザの友人の場所を示すサービス）などを呼び出すことができる。代替的に、またはそれに加えて、マクロを実行することは、（たとえば、ホスティングされたコンピュータシステムのドメインとは異なるドメインにあり、ホスティングされたコンピュータシステムのドメインとは異なる団体によって操作される）ホスティングされたコンピュータシステムとは無関係の第三者情報プロバイダによって提供されたウェブサービスを呼び出すことを含むことができる。
【００２５】
また、ホスティングされたコンピュータシステム上で実行している第１のアプリケーションによって発生された情報を、第１のフォーマットから第２のフォーマットに変換することができ、変換された情報を、ホスティングされたコンピュータシステム上で動作している第２のアプリケーションに提供することができる。たとえば、ワードプロセシングアプリケーションによって、カンマ区切りフォーマットでデータを作成することができ、次いで、スプレッドシートアプリケーションに固有のフォーマットでスプレッドシートセルにペーストするために、そのデータをスプレッドシートアプリケーションに提供することができる。
【００２６】
また、マクロを実行した結果を、ホスティングされたコンピュータシステムに登録された複数の異なるユーザに関する複数の異なるアカウントに自動的に提供することができる。たとえば、いくつかのコンピュータシステムの各々上で共通のスプレッドシートセルを更新するために、それらのシステム上の何人かのユーザに、マクロ実行結果を提供することができる。いくつかの実装形態では、クライアントコンピュータ上のブラウザが、ＪａｖａＳｃｒｉｐｔ（登録商標）マクロに対するポインタを有するウェブページを、ホスティングされたコンピュータシステム中のマクロ実行サブシステムにロードしたこと応答して、マクロを実行したいという要求を受信する。たとえば、マクロにリンクまたはＵＲＬをパスすることによってマクロを共有しているとき、リンクまたはＵＲＬの形態で、（たとえば、ＪａｖａＳｃｒｉｐｔ（登録商標）または任意の他の関連する言語で）マクロを実行したいという要求を提供することができる。
【００２７】
次に、上記に論じた関数の一部または全部を実装するための例として、図１をより詳細に参照すると、システム１００は、１つまたは複数のアプリケーション１０２（それぞれが、マクロフック１０４にアクセスしており、アクセスしたときにマクロが実行される）と、１つまたは複数の外部イベント１０５と、マクロサーバサブシステム１０６と、ソーシャルネットワーク１０８と、ロケーションサービス１１０と、マクロコード１１２とを含む。
【００２８】
アプリケーション１０２は、たとえば、電子メールアプリケーション、スプレッドシートアプリケーション、ワードプロセシングアプリケーション、写真共有アプリケーション、プレゼンテーションパッケージ、財務計画アプリケーションなど、ユーザが動作または実行させることができる任意の適用可能なアプリケーションを含むことができる。いくつかの場合では、ユーザは、たとえば、デスクトップ上の、またはアプリケーションのプルダウンリスト中のアプリケーション名の上でダブルクリックすることにより、実行すべきアプリケーションを選択することによって、明示的にアプリケーションを開始することができる。たとえば、ユーザがＥメール添付ファイル（たとえば、テキストファイルまたはスプレッドシート）をクリックすると、あるいはユーザが不明ファイルをクリックすると、他のアプリケーションを暗黙的に開始することができ、いずれの場合も、ファイルの拡張子名または他の定義された関連付けなどに基づいて、ファイルと関連付けられた対応するアプリケーションの実行を自動的に開始することができる。また、ユーザは、ホスティングされたアプリケーションなどのアプリケーションに宛てられたＵＲＬにナビゲートすることによって、そのアプリケーションを開始することができる。
【００２９】
さらに別のアプリケーションを開始または実行する例では、電子メールメッセージの受信などのイベント１０５が発生することがあり、それにより、ある特定のアプリケーションの実行を開始または再開することができる。たとえば、イベント１０５（たとえば、受信された電子メールメッセージ）は、（たとえば、スプレッドシートを更新し、件名を追加するための）マクロをトリガすることができる。ホスティングされたシステム上で動作し、システムに登録されているユーザの各々に関するイベントを追跡するイベントハンドラによって、イベントの発生を検出することができる。各イベントを報告し、次いで、マクロの実行などの特定のアクションと相関させ、そのアクションをトリガすることができる。
【００３０】
アプリケーション１０２の各々は、マクロフック１０４にアクセスしている。実装形態のうち最も単純な実装形態では、マクロフックは、単に、システム１００に保存され、かつシステム１００上で実行可能なマクロをコードに指定するＵＲＬとすることができる。たとえば、フック１０４はＪａｖａＳｃｒｉｐｔ（登録商標）コードを指定するＵＲＬとすることができ、フック１０４をウェブページ中に含めることができ、それにより、ウェブページがロードするとき、またはウェブページを操作することと関連付けられたある特定のイベントが生じたとき、コードにアクセスし、そのコードを実行することができる。そのアプリケーション１０２内でマクロを簡単に規定できるようにすることに加えて、または、それに代えて、マクロフック１０４は、イベント追跡を実行し、外部イベント１０５とマクロサーバサブシステム１０６との間に接続を提供することができる。たとえば、マクロフック１０４により、ユーザは、電子メールアプリケーション１０２において受信された電子メールに関係するイベントと関連付けられたマクロを規定することができるようになる。マクロは、電子メールアプリケーション１０２が提供することができるオブジェクトとは異なるオブジェクトを特定することができる。さらに、そのマクロのマクロコード１１２は、電子メールアプリケーション１０２中のマクロのネイティブ言語とは異なる言語であってもよい。また、マクロフック１０４は、そのマクロに関係する任意のイベントを追跡することができ、適時にマクロサーバサブシステム１０６と対話することができる。マクロフック１０４は、マクロを記録する、または既存のマクロを実行するためのオプションを選択することにより、ユーザによってインスタンス化または実現することができる。
【００３１】
外部イベント１０５は、（たとえば、電子メールアプリケーションにおける）電子メールメッセージの受信、ある特定の状態（たとえば、クォータが超過した、ユーザアクセスが拒否された、プロセスが完了したなど）が存在するという（たとえば、電子メールアプリケーションによる）判断などを含む、マクロの実行をトリガするための様々なイベントを含むことができる。イベントハンドラによってそのようなイベントを追跡することができ、システム１００において特定のイベントが生じると、追跡されるべき特定のイベントを、１つまたは複数のマクロが実行されることを希望する各ユーザについて、イベントハンドラに登録することができる。
【００３２】
いくつかの実装形態では、ある特定の条件（たとえば、変数がある特定の値に達している、またはアカウント更新が夜に行われるなど）を満たしているとコード行が判断したときなどに、イベントをコード内にトラップすることができる。外部イベント１０５は、また、たとえば、テキストメッセージ、ブログエントリ、着信ＲＳＳフィードなどのメッセージの検出を含むことができる。外部イベント１０５は、たとえば、オークションアイテムの表題または説明（たとえば、「ビンテージバチカンライセンスプレート」）によって判断することができるような特定のアイテムがオンラインオークションサイト上でポスティングされたことを検出することを含むことができる。
【００３３】
外部イベント１０５に関するトリガ条件は、様々な組合せの条件を含むことができる。たとえば、電子メールアプリケーションに関係するトリガイベントにおいて使用される条件として、電子メールの件名、送信者ＩＤ（たとえば、上司、配偶者、子供など）、受信者（たとえば、「Ｔｏ」と「Ｃｃ」と「Ｂｃｃ」との組合せを使用する）、受信者の数（たとえば、自分が唯一の受信者である場合に自分に通知する、など）、添付ファイルの有無、電子メールが送られた場所、メッセージ本文中のキーワード、または当該電子メールがスパムである可能性の有無を挙げることができる。ワードプロセシングアプリケーションに対応することができる条件として、ドキュメントのサイズ、ドキュメントのソース、ドキュメントの生成日および／または最新の変更日、ドキュメントの作成者などを挙げることができる。スプレッドシートアプリケーションの場合、トリガイベントについて使用することができる条件には、特定のスプレッドシートセルの値、セルの値が変更されたかどうか、スプレッドシートにおける実際のデータの行または列の数、スプレッドシートの作成者、スプレッドシートのサイズなどが含まれる。他のタイプのドキュメントに適用する条件には、そのドキュメントが変更されたばかりかどうかを含むことができる。たとえば、竜巻が特定の町のほうへ向かっていることを警告するオンライン気象観測サイトによって公表された警報など、ウェブ上のソースまたはサービスによって、他のトリガイベントを発生することができる。そのような場合、気象に関心の高いユーザは、外部の気象関連イベントを傍受し、自分の家族または隣人へのテキストおよび／または通話を発生させるためのマクロをすでに構築していることがある。
【００３４】
また、イベントは、複数の異なるソースからの組合せとすることができる。たとえば、特定のユーザから電子メールを受信することによって、最初に初期イベントをトリガすることができるが、そのイベントが生じた後にのみ、マクロを実行することができ、ロケーション追跡サービスを使用して、電子メールを送信または受信するユーザが特定の場所にいることが判断される。また、他のサービスからの情報を使用する追加のまたは代替的な条件を課してもよい。
【００３５】
マクロサーバサブシステム１０６は、アプリケーション１０２によって伝搬されるイベント（たとえば、電子メールメッセージなど）のような、システム１００における特定のイベントを監視することができる。マクロサーバサブシステム１０６の対象となる特定のイベントには、マクロサーバサブシステム１０６への命令（たとえば、「さらなる通知があるまで、ＸＹＺサーバ、アプリケーションＡＢＣまたはユーザ、Ｊｏｈｎ Ｄｏｅとの通信を中断する」）として機能することができるイベントだけでなく、マクロが対処することができる任意の関連するイベントを含むことができる。
【００３６】
様々なサービスは、トリガに応答して動作するマクロのための入力か、またはマクロからの出力のいずれかのイベントのトリガであることによって、システム１００と対話することができる。たとえば、ソーシャルネットワーク１０８は、どのようにイベントを処理するべきかを判断するために有用な情報をシステム１００に提供することができる。一例として、ベティに送られた電子メールを受信すると、ベティの友人のうちの（たとえば、１つまたは複数のソーシャルネットワーク上で規定された）１人から電子メールが送信された場合にのみ、操作を実行するように、マクロを定義することができる。別の例では、ベティの（たとえば、ソーシャルネットワーキングサイトまたはグループによって規定された）「友人」全員に、自動電子メールまたは他の通知を送るように、マクロを設計してもよい。ソーシャルネットワーク１０８を運営する団体は、サブシステム１０６を運営する団体とは異なっていてもよく、サブシステム１０６のオペレータに、ある特定の情報へのアクセスが提供されている限り、前記サブシステム１０６のオペレータは、その特定の情報に、ＡＰＩを介してアクセスすることができる。
【００３７】
別の例として、ロケーション追跡サービス１１０は、ユーザによって呼び起されると、ユーザと関連付けられたモバイルデバイスの場所を追跡することができ、したがってそれにより、ユーザは、自分の友人を発見することができ、またその逆も可能である。たとえば、ユーザに電子メールまたはテキストを送るように、マクロを定義することができ、電子メールまたはテキストの宛先は、その時のユーザの場所に左右されることがある。たとえば、セル式電話または他のモバイル（たとえばＧＰＳベースの）デバイスをユーザがもっている場合、ロケーション追跡サービス１１０によって、ユーザの場所を追跡する、また知ることができる。ユーザの場所に応じて、ユーザのモバイルデバイスか、または（たとえば、ユーザが自宅の近くにいる場合には、またはユーザがおそらく自宅の方に向かっているとロケーションサービス１１０が判断した場合には）自宅のデバイスに、マクロを実行することによって伝搬される電子メールを送ることができる。
【００３８】
たとえば、ユーザのＧＰＳ対応デバイスから送られた「どこに自分がいるのか？」というロケーション情報に加えて、ユーザは、ロケーション追跡サービス１１０を通じて「どこに自分が行くべきか？」という情報も受信することができる。この情報は、たとえば、ＧＰＳ座標または単純なテキストメッセージ（たとえば、「ここで曲がって、次いで１０１０７まで丘を登る」）を含むことができる。
【００３９】
サブシステム１０６は、マクロコードの様々な例を保存し、追跡し、そのマクロコードにアクセスし、そのマクロを共有し、実行することができる。マクロを作成するマクロコード１１２は、任意の適当な言語とすることができるが、典型的には、システム１００が使用する好ましいマクロ言語（たとえば、ＪａｖａＳｃｒｉｐｔ（登録商標）など）で書く、またはプログラムすることができる。よく知られている方法でマクロを実行するので、マクロサーバサブシステム１０６は、「ｇｅｔ  ｎａｍｅ」関数１１４、「ｃｈｅｃｋ  ｎａｍｅ」関数１１６、「ｇｅｔ  ｌｏｃａｔｉｏｎ」関数１１８、またはマクロサーバサブシステム１０６が検討すべき他の関数またはマクロなど、マクロコード１１２の関数関連セグメントおよびマクロ関連セグメントを構文分析する（または検索する）ことができる。マクロコード１１２中に埋め込まれた関数または操作の各々は、マクロサーバサブシステム１０６に、様々なタイプの処理、たとえば、ファイルにアクセスするためのユーザ認証を検査するための処理を実行させることができる。
【００４０】
マクロコード１１２は、中央マクロリポジトリのような様々なロケーションに、またはインターネットアクセス可能なホスティングされたコンピュータシステムに保存することができる。いくつかの実装形態では、マクロコード１１２の集合全体は、分散的な方法で保存することができ、１つまたは複数のネットワークによって論理的に１つに結合させることができる。いくつかの実装形態では、マクロコード１１２がセンシティブである（たとえば、ユーザの個人情報を含んでいる、または更新する）とき、あるいは国防上の理由により（たとえば、機密、最高機密などに）分類されるとき、マクロコード１１２を、セキュアなサーバ上などの別のロケーションに明示的に保存することができる。
【００４１】
いくつかの実装形態では、イベント追跡のために「リスナー（ｌｉｓｔｅｎｅｒ）」を使用することができる。たとえば、スプレッドシートがサーバにロードされ、そのＨＴＭＬがブラウザに送られたときに、新しいスプレッドシートが開かれたことを示すサーバ側イベントをトリガすることができる。次いで、そのスプレッドシートに関するスクリプトのリストを有するかどうかを確かめるために、イベントに関するスプレッドシートサーバ上のリスナーを検査することができる。該当するリストがない場合には、（たとえば、スクリプトサーバを）呼び出し、本質的には、「このスプレッドシートに関する任意のスクリプトがあるか？」と告げ、スプレッドシートキーをパスし、次いで、そのスクリプトのリストを保存することができる。次いで、スプレッドシートサーバ上のイベントハンドラは、スクリプト方法のうちのいずれかがいわゆる「ｏｎＯｐｅｎ」であるかどうかについて検査することができる。「ｏｎＯｐｅｎ」である場合には、（たとえば、Ｇｏｏｇｌｅ（登録商標）Ａｐｐｓ  Ｓｃｒｉｐｔサーバに）メッセージを送って、その方法を実行することができる。たとえば、編集イベントなどの他のシナリオにおいて、このフローを使用することができる。
【００４２】
別の例では、たとえば、件名、電子メールの送信者、電子メールメッセージに非常に大きいスプレッドシートファイルが添付されているかどうか、（任意の種類の）ファイルが添付されているかどうかなどに依存する特定のメッセージルーティングを実行するためにセットアップされた電子メールアプリケーションに、マクロを関連付けることができる。また、そのようにして定義されたマクロは、ロケーション追跡サービス１１０によって提供されるようなロケーション情報を使用することができる。たとえば、ユーザの仕事用電子メールを宛先とする電子メールメッセージに大きいスプレッドシートファイルが添付されており、（ユーザのモバイルデバイスからのＧＰＳ信号が、ユーザの自宅として登録されている場所に対応するので）ユーザが自宅にいると判断された場合、ユーザの家庭用電子メールにコピーを転送するように、マクロを確立することができる。このような状況では、添付ファイルは、翌日の仕事のプレゼンテーションまたはプロジェクトのために検討しなければならない仕事関連のスプレッドシートである可能性があることがある。代替的には、ユーザが、自宅の近くのいずれの場所にもいないことが分かった場合には、ユーザのモバイル電子メール対応デバイスにスモールメッセージを送って、電子メールが存在することをユーザに知らせるように、マクロを確立することができる。
【００４３】
いずれの場合にも、マクロサーバサブシステム１０６にマクロコード１１２を保存し、マクロを実行させる任意の電子メールアプリケーション１０２から除去することができる。着信電子メールメッセージを受信するたびに、電子メールアプリケーション１０２は、フック１０４を用いてマクロコードを指定することによって、マクロをトリガすることができる。マクロは、次いで、特定の送信者がアカウント保有者のソーシャルネットワークのメンバーであるかどうかなど、メッセージの様々な態様を識別することができる。ソーシャルネットワーク検査結果が肯定的なものである場合、マクロは、ロケーション追跡サービス１１０をさらに検査して、送信者またはアカウント保有者の地理的場所を判断することができ、その場所に基づいて、ある特定のアクションを実行させることができる。たとえば、マクロサーバサブシステム１０６は、アカウント保有者（またはユーザ）の場所に基づいて、ある特定の状況において、アカウント保有者に通知することができる。他の場合には、マクロサーバサブシステム１０６は、（たとえば、ＶＯＩＰを使用するユニバーサルコールルーティングシステムを介して）アカウント保有者を呼び出させる、および／または、ＳＭＳメッセージを送らせる、あるいは他のアクションをマクロによって定義させてもよい。
【００４４】
マクロは、１つまたは複数の認証ＡＰＩを介して、システム１００上で動作する様々なアプリケーションにアクセスすることによって、そのような情報を取得および提供することができる。複数の異なるＡＰＩがある場合、変換サービスは、サブシステム１０６を備えることでき、それにより、作成者は、サブシステム１０６のための単一のマクロ言語について書き込むことができる一方で、依然として異種アプリケーションを用いて動作する。
【００４５】
マクロが、ユーザクライアントコンピューティングデバイスとは別のマクロサーバサブシステム上でホスティングされると、いくつかの利点が生じることができる。たとえば、多くの異なるアプリケーションにわたって、マクロを使用することができる。また、ユーザが自分のデスクトップコンピュータ、他人のコンピュータ、ネットブックまたはスマートフォンなどの様々なアクセスポイントからオンラインである間に、マクロをトリガすることができる。ユーザがオンライン中でない、または自分のコンピュータにはいないときであっても、マクロをトリガすることができる。１つのタイプのアプリケーションにおけるイベント（たとえば、電子メール）と、別のアプリケーションにおける更新データ（たとえば、ユーザの着信電子メールメッセージの件名が自動的にスプレッドシート中にコンパイルされる場合には、スプレッドシート）とを傍受するためのマクロを定義することができる。
【００４６】
別の利点は、マクロを手動でコピーする必要なく、ユーザの間でマクロを完全に共有する機能とすることができる。代わりに、各マクロ上に１つまたは複数のセキュリティレベルを設定することができ、それにより、マクロを作成した、またはマクロを最初に保存したユーザが判断した際に、他のユーザへのアクセスが可能になる。たとえば、ユーザは、マクロのアクセスセキュリティレベルを設定し、たとえば、オンライン写真共有サイトなどの共通ウェブプロパティについて行われるのとちょうど同じように、別の人にマクロのＵＲＬを提供することができる。
【００４７】
また、ある特定の場合、マクロサーバサブシステム上でホスティングされるマクロは、様々なユーザからのデータに対してマクロを実行する能力、または様々なユーザとともにマクロを実行した結果を提供する能力を提供するという利点を有することがある。たとえば、共有マクロを使用して、何人か作成者による投稿を組み合わせて、より大きいボリューム、たとえば、何人かの人々によって書かれた詩または論文などのより大きい刊行物（ｖｏｌｕｍｅ）にすることができる。各寄稿者のドキュメントは、所定のロケーションに保存することができ、マクロは、寄稿者がそのロケーションにアクセスした場合に、そのドキュメントにアクセスすることができる。次いで、寄稿者および場合によってはさらなるユーザの各々が、組み合わされた刊行物を単一のドキュメントとして利用できるようにすることができる。別の例として、局所的にサーバシステム上にドキュメントを常に保存している場合には、たとえば、承認のためにドキュメントをルーティングするために、ホスティングされたサブシステム上のマクロを使用して、ビジネスワークフローアプリケーションを作成することができる。
【００４８】
図２は、共有マクロを操作することができるホスティングされたコンピュータシステム２００の概略図である。一般に、システム２００は、ユーザがマクロを作成し、保存し、共有し、そのマクロにアクセスし、ホスティングされたシステム上でそのマクロを実行することができる方法の１つの例を示す様々な構成要素を提供する。
【００４９】
このシステム２００において、マクロサーバサブシステム２０２は、スクリプト情報ストレージデータストア２０６中に永続的にマクロコードを保存するためのロケーションを提供し、保存された情報は、（たとえば、不明瞭なユーザＩＤまたは他の識別子を使用する）マクロ所有者のマクロライブラリ名、スクリプトコンテンツおよび識別子を含むことができる。マクロを動作させているとき、所与のマクロを実行するためのコマンドを、マクロサーバサブシステム２０２に送ることができる。次いで、スクリプト情報ストレージデータストア２０６からコードを取り出すことができ、スクリプトエンジンまたはスクリプトエグゼキュータ２０８中にインスタンスを作成することができる。
【００５０】
様々なサーバ側アプリケーションに関するプログラマティックＡＰＩを表すＪａｖａ（登録商標）オブジェクトを構築することができ、ケーパビリティベースのセキュリティラッパー中にラッピングすることができ、ラッピングされたＪａｖａ（登録商標）オブジェクトは、プログラマービジブル（ｐｒｏｇｒａｍｍｅｒ−ｖｉｓｉｂｌｅ）なラッピングされたサービス（または「ビーン」）になる。ラッピングされたサービス２１０は、マクロサーバサブシステム２０２が、たとえば、マクロ実行に関係するラッピングされたサービスの消費者にサービスすることができる関連するサービスのすべてを含むことができる。ラッピングされたサービス２１０は、簡単にパスすることができるようにパッケージングされた、他のオブジェクトの集合である任意の関連するオブジェクトとすることができる。
【００５１】
ラッピングされたサービスは、バックエンドサービスと対話するパブリックメソッドを公開するＪａｖａ（登録商標）ビジネスデリゲートを含むことができる。このパブリックメソッドは、様々なコンピュータ言語（たとえば、Ｊａｖａ（登録商標）など）によって提供されるメソッド、クラス、ストリング、スプレッドシート、アプリケーションプログラミングインターフェース（ＡＰＩ）および他のツールをパッケージングするためのパッケージまたは他のメカニズムに含まれ得る。パブリックメソッドは、たとえば、マクロを定義および実行するために使用することができるリソースを公開する（または、公にする）ことができる。パブリックメソッドの実装形態のある特定の詳細は、個人的に保持することができ、好適なレベルの情報隠蔽および抽象化を行うことができる。パブリックメソッドは、いくつかの異なるタイプのオブジェクトにわたって同様に見え、マクロユーザにいくらか一貫した操作性を公開し、したがって、一定のレベルのポリモルフィズムを提供することができる。その結果、ラッピングされたサービスの集合により、オブジェクト指向のイベント駆動型環境において、ユーザは容易にマクロを使用できるようになる。
【００５２】
この例示的なシステム２００では、これらのラッピングされたサービスまたはビーンは、プロパティ（たとえば、スプレッドシート、カレンダーなど）ごとに、パブリックメンバーメンバーを有するトップレベルのＪａｖａ（登録商標）オブジェクトに添付される。このトップレベルのＪａｖａ（登録商標）オブジェクトは、標準的で所定のラベルとともに、スクリプトエグゼキュータの環境のための範囲に挿入される。いくつかの実装形態では、スクリプトエグゼキュータは、パブリックメンバー（パブリックメンバーのみ）をスクリプティング環境に反映する。
【００５３】
したがって、ユーザのＪａｖａＳｃｒｉｐｔ（登録商標）コードが
ｖａｒ  ｄｏｃ＝ｇｏｏｇｌｅ．ｓｐｒｅａｄｓｈｅｅｔｓ．ｃｒｅａｔｅ（”ｍｙ  ｎｅｗ  ｄｏｃ”）；  （１）
を実行すると、トップレベルのオブジェクトの「スプレッドシート」フィールド中のＪａｖａ（登録商標）オブジェクトに対して「作成」Ｊａｖａ（登録商標）メソッドが呼び出される。このメソッドのＪａｖａ（登録商標）実装形態は、「ＣＲＥＡＴＥ」コマンドを用いて、スプレッドシートサーバへのリポートプロシージャコールを作成し、スクリプトランナーの不明瞭な識別子を用いて、新しい表題（たとえば、「ｍｙ  ｎｅｗ  ｄｏｃ」）に対応する引数を作成する。スプレッドシートサーバは、新しいスプレッドシートを作成し、リモートプロシージャコールに応答してそのキーを戻す。マクロサーバは、新たに作成されたスプレッドシートを表し、新しいキーを含んでいる新しいＪａｖａ（登録商標）オブジェクトを生成する。Ｊａｖａ（登録商標）オブジェクトは、たとえば、「ｒｅｎａｍｅ（新しく名前をつける）」、「ｉｎｓｅｒｔＳｈｅｅｔ（シートを挿入する）」など、いくつかのスプレッドシート操作のためのメソッドを含む。また、そのオブジェクトは、ケーパビリティベースのセキュリティラッパー中にラッピングされ、戻される。スクリプトエグゼキュータは、このオブジェクトを内部的にラッピングしてネイティブＪａｖａ（登録商標）オブジェクトラッパーにし、それを上記の変動し得る「ｄｏｃ（ドキュメント）」に戻す。
【００５４】
オブジェクトをラッピングするいくつかの実装形態では、任意の適当なサービス（たとえば、スプレッドシート、カレンダー、電子メールなど）は、Ｊａｖａ（登録商標）動的プロキシ中にラッピングされるオブジェクトを戻すことができる。セキュリティ、ロギングおよびクォータなどについて、固有のプロキシは存在することができる。各プロキシは、どんなサービスを公開しているかに関する説明（たとえば、「Ｓｐｒｅａｄｓｈｅｅｔ」、「ＳｐｒｅａｄｓｈｅｅｔＲａｎｇｅ」、「ＥｍａｉｌＳｅｒｖｉｃｅ」などのようなＪａｖａ（登録商標）インターフェース）を組み込む、または使用することができ、その説明により、パブリックメソッドを定義することができる。インターフェース上に、様々なラッパーに適した注釈が存在することがある。
【００５５】
たとえば、スプレッドシートサービス上の「ｃｒｅａｔｅ」メソッドは、新しいスプレッドシートを作成することができる。このメソッドが、たとえば、スクリプトが、スプレッドシートドキュメントのそれらの集合に書き込もうとしている（および、ユーザがスクリプトにＷＲＩＴＥ特権を与えなかった場合には、スクリプトは、ランタイムにおいて失敗する）旨をユーザに警告するためのメカニズムを提供するＷＲＩＴＥメソッドであると表明する１つの注釈を有することができる。基本的には、セキュリティラッパーは、所与のメソッドの表明された必要なパーミッション（ＷＲＩＴＥなど）が、確実にユーザの認証トークン中にあるようにするのに役立つ。メソッドが許可される場合、次の層に呼出しをパスする。
【００５６】
また、特定のユーザが、マクロに関する操作にアクセスすることができる回数を制限することによって、セキュリティを提供することができる。そのような関数を実行するために、クォータ注釈は、「ｃｒｅａｔｅ」メソッドに存在することができ、つまり、このメソッドの呼び出しを、エンドユーザの「ｃｒｅａｔｅ  ｓｐｒｅａｄｓｈｅｅｔ」クォータに不利に作用させなければならない。クォータラッパーは、所与のユーザに何回操作させるかを追跡し続けるクォータサービスを呼び出す、または使用することができる。たとえば、ユーザがクォータを超える場合には、メソッドは失敗することがあり、ユーザがクォータを超えない場合には、次の層に再びパスする。１日、１週間または１ヶ月などの設定された時間期間にわたって、ユーザの関するクォータを測定することができ、そのクォータは、複数の時点で周期的にリセットまたは減少させることができる。
【００５７】
また、呼び出された各メソッドのストリングバージョン、および提供された引数を記録するロギング層によって、マクロ実行のトランスクリプトを提供することができる。
【００５８】
ラッピングされたサービスのクリエータ２１２はトップレベルのラッピングされたサービスを作成することができ、そのサービスの範囲は、マクロおよびその環境に左右される。たとえば、ラッピングされたサービスのクリエータ２１２は、マクロを実行しているエンドユーザがマクロを明示的に許可する能力を有していることを調査することができ、マクロの状態に対応して、トップレベルのビーンを作成することができる。その状態は、たとえば、存在する場合には現在のドキュメント（たとえば、電子メール、テキスト文書、図面、スプレッドシート）およびユーザ認証を含むことができる。ラッピングされたサービスのクリエータ２１２は、環境に基づくケーパビィティを有する、トップレベルのラッピングされたサービスを発生することができ、ラッピングされたサービス２１０をスクリプトエグゼキュータ２０８の実行環境に注入することができ、その環境において、ユーザは、たとえば、マクロを定義し、実行することができる。ある意味では、ラッピングされたサービスのクリエータ２１２を、ビーンの製作者またはビーンのファクトリ、つまり「ビーンファクトリ」と見なすことができる。
【００５９】
作成することができるラッピングされたサービス２１０のタイプとしては、たとえば、スプレッドシートアプリケーション、カレンダーアプリケーションなど、ケーパビリティラッピングされた（ｃａｐａｂｉｌｉｔｙ−ｗｒａｐｐｅｄ）インスタンスを挙げることができる。このＪａｖａ（登録商標）オブジェクトを、実行範囲に挿入することができる。オブジェクトのソースを使用して、（たとえば、ラベル「ＴｏｐＬｅｖｅｌ」で）それを特定することができる。したがって、たとえば、「ＴｏｐＬｅｖｅｌ．ｓｐｒｅａｄｓｈｅｅｔｓ」は、ケーパビリティラッピングされたオブジェクト（たとえば、ＳｐｒｅａｄｓｈｅｅｔＡｐｐｌｉｃａｔｉｏｎＡｐｉオブジェクト）に対する基準になり得る。オブジェクトのパブリックメソッドを、ＪａｖａＳｃｒｉｐｔ（登録商標）プログラミング環境に、Ｊａｖａ（登録商標）オブジェクトとして反映させることができ、マクロがそれを利用できるようになる。
【００６０】
たとえば、
ｖａｒ  ｄｏｃ＝ｇｏｏｇｌｅ．ｓｐｒｅａｄｓｈｅｅｔｓ．ｇｅｔＡｃｔｉｖｅＳｐｒｅａｄｓｈｅｅｔ（）；
ｖａｒ  ｏｔｈｅｒＤｏｃ＝ｇｏｏｇｌｅ．ｓｐｒｅａｄｓｈｅｅｔｓ．ｏｐｅｎＢｙＮａｍｅ（”ＭｙＯｔｈｅｒＤｏｃ”）；
ｖａｒ  ｖａｌｕｅ＝ｄｏｃ．ｆｉｎｄ（”Ａ１”）．ｇｅｔＶａｌｕｅ（）；
ｏｔｈｅｒＤｏｃ．ｆｉｎｄ（”Ｂ２”）．ｓｅｔＶａｌｕｅ（ｖａｌｕｅ）；  （３）
などのＪａｖａＳｃｒｉｐｔ（登録商標）コードは、既存のスプレッドシート（たとえば、「ＭｙＯｔｈｅｒＤｏｃ」と呼ばれるスプレッドシート）を開くことができ、セルＡ１の値を、現在のスプレッドシートから新しいスプレッドシートのセルＢ２にコピーすることができる。「ｆｉｎｄ」メソッドによって戻されるＲａｎｇｅオブジェクトなどのＪａｖａ（登録商標）オブジェクトは、他のすべてのオブジェクトと同様に、ラッピングされたケーパビリティであり、認証されたユーザが関連するスプレッドシートにアクセスできない場合、発見することができない。たとえば、前述のコピー／ペーストセルの例では、正常な実行に必要なアクセスは、アクティブスプレッドシート上の（たとえば、ｇｅｔＶａｌｕｅが必要とする）読取りアクセス、およびターゲットスプレッドシート（たとえば、スプレッドシート「ＭｙＯｔｈｅｒＤｏｃ」）上の（たとえば、ｓｅｔＶａｌｕｅが必要とする）書込みアクセスである。
【００６１】
スクリプトエグゼキュータ２０８は、マクロに関するコンテキストの作成と、トップレベルのラッピングされたサービス２１０の実際の挿入の実行とを担当することができる。たとえば、１つの実行しているスクリプトが、他のスクリプトに関するグローバルな範囲を「ポイズニング」する可能性を防止するように、マクロ実行ごとに、新しいトップレベル範囲を作成することができる。マクロコンテキストには、承認されていない（たとえば、許容できるクラスのホワイトリストにはない）任意のＪａｖａ（登録商標）クラスの生成を防止するクラスシャッタまたはフィルタの実装形態をロードすることができる。さらに、スクリプトエグゼキュータ２０８は、たとえば、いつスクリプトが無限ループに入ったかを検出するために、スロットリング制御不能なスクリプトに関する命令カウンタを作成することができる。いくつかの実装形態では、スクリプトマネージャ２０４によって、制御不能なスクリプトを早期に終了することができる。
【００６２】
スクリプトエグゼキュータ２０８は、構文分析、チェックシンタックス、関数呼出し、マクロ実行および再開を含む様々な関数を担当することができる。構文解析機能は、スクリプトを調査することができ、スクリプトストレージで発見された関数およびマクロのリストを、スクリプト情報データストア２０６などのデータストアに戻すことができる。たとえば、図１を参照すると、構文解析機能の結果として検出された関数およびマクロは、ｇｅｔ  ｎａｍｅ関数１１４、ｃｈｅｃｋ  ｎａｍｅ関数１１６、ｇｅｔ  ｌｏｃａｔｉｏｎ関数１１８、あるいはスクリプトまたはマクロコード（たとえば、マクロコード１１２）中に埋め込むことができる任意の他の関数、マクロなどを含むことができる。
【００６３】
また、システムがサポートする他の関数を使用して、サーバ側システム２００上のマクロの集合の管理を補助することができる。たとえば、構文チェック関数は、スクリプトを保存する前に、そのスクリプト中にエラーがあるかどうか（たとえば、構文エラー、言語コンパイルエラー、キーワードの誤用など）を判断することができる。構文エラーまたは他のエラーが検出された場合、そのエラーを通信し、ユーザまたはスクリプトプログラマーに警告することができる。
【００６４】
ｃａｌｌ関数は、マクロ中の関数を「呼び出す」（または、マクロ中の関数の実行を開始する）ことができる。このｃａｌｌ関数は、（たとえば、スプレッドシート中の）セル内関数呼出しに関して許可された特権を有するバージョンなど、マクロを実行する制限されたバージョンであってもよい。たとえば、マクロの制限されたバージョンを、値を戻すことのみに制限することができるが、悪影響が生じることはあり得ない。
【００６５】
ｍａｃｒｏ  ｅｘｅｃｕｔｉｏｎ関数およびｍａｃｒｏ  ｒｅｓｕｍｅ関数を使用して、マクロを開始および再開することができる。たとえば、ｍａｃｒｏ  ｅｘｅｃｕｔｉｏｎ関数は、マクロの初期実行を開始することができる。いくつかの場合、マクロの実行は、ユーザからのさらなる入力を必要とすることがある。この場合には、ユーザからの入力が得られるまで、マクロの実行を中断したり、待ち状態に入ったりすることができる。ユーザ入力が提供されると、ｍａｃｒｏ  ｒｅｓｕｍｅ関数は、休止していたマクロの実行を継続することができる。
【００６６】
スクリプト情報リポジトリ２０６は、たとえば、スクリプト／マクロ作成、保存、検索、更新、削除などの操作を行い、および／またはサポートするデータストアとして働くことができる。スクリプト情報リポジトリ２０６に保存されたスクリプトは、ユーザライブラリ、個別のスクリプト、またはアプリケーション（たとえば、電子メール、スプレッドシート、ワードプロセシングドキュメントなどのためのアプリケーション）によって構成することができる。操作は、ユーザのライブラリ全体の上で、または、ライブラリ中の個別の要素上で実行することができる。たとえば、１つの操作は、そのＩＤ（たとえば、ライブラリの名前に基づくプライマリキールックアップ）によって、ユーザライブラリを検索することができる。別の操作は、マクロまたはスクリプトを表すドキュメントのような所与のドキュメントにリンクされたすべてのユーザライブラリを検索することができる。
【００６７】
スクリプト情報リポジトリ２０６によって行われる検索操作として、所与のユーザライブラリ上の所与のユーザの認証を検索する操作、所与のユーザが所有するすべてのユーザライブラリを検索する操作、そのＩＤによって継続レコードを検索する操作などを挙げることができる。
【００６８】
スクリプト情報リポジトリ２０６が行う作成／更新操作として、ユーザライブラリを作成／更新するための操作、ライブラリから抽象的なオブジェクトキー（たとえば、ドキュメントＩＤ）への関連付けを作成するための操作、所与のライブラリ上の所与のユーザの認証を作成／更新するための操作、（たとえば、所与のユーザに関するシリアライズされたバイナリデータをもつ）新しい継続レコードおよびライブラリを作成する操作、ならびに他の作成／更新操作を挙げることができる。
【００６９】
削除を実行するスクリプト情報リポジトリ２０６が行う操作として、継続レコードを削除する操作、ライブラリから抽象的なオブジェクトへの関連付けを削除する操作、ならびに認証およびリンク継続と関連付けられた子オブジェクトを含むすべての子オブジェクトを除去する、ライブラリを削除する操作を挙げることができる。図５に関して、スクリプト情報リポジトリ２０６の例示的な論理構造について以下に説明する。
【００７０】
スクリプトマネージャ２０４は、マクロサーバサブシステム２０２の基礎をなす構成要素２０６〜２１９にコマンドを委任することができる。特定の例示的なコマンドについて以下に説明するが、基礎をなす構成要素２０６〜２１９へのデリゲーション制御パスは、一連の文字を付したプロセス矢印１〜６でマークされている。１〜６の文字は、一般には、時系列に文字を付したものであるが、特定のアクションは、可能な場合には、別の順序で生じることがある。
【００７１】
スクリプトマネージャ２０４が（たとえば、デリゲーションによって）実行することができる１つのコマンドは、ユーザライブラリを保存することである。たとえば、ユーザ特権または他のセキュリティに基づいて、このコマンドをその実行に制限することができる。たとえば、ユーザライブラリ表現（たとえば、プロトコルバッファ）がライブラリＩＤを含んでいる場合、スクリプトマネージャ２０４は、実行しているユーザがライブラリを確実に修正できるようにする。認証が行われた場合、スクリプトマネージャ２０４は、ストレージ層に認証を書き込み、ライブラリの新しい表現を戻すことができる。ＩＤが１つも存在しない場合、新しいＩＤを作成し、新しく発生したIＤを含んでいる表現を戻すことができる。たとえば、ライブラリを保存することは、（たとえば、スクリプトエグゼキュータ２０８を使用して）ライブラリ中の関数を構文分析すること、ライブラリＤＡＯオブジェクトに関数を追加すること、（たとえば、スクリプトエグゼキュータ２０８を使用して）構文エラーを検出すること、ライブラリコンテンツを保存すること、および所有者を保存することに関与し得る。図２を参照すると、ユーザライブラリを保存することに関与する構成要素を、たとえば、プロセス矢印１、２および６によって示すことができる。
【００７２】
プロトコルバッファは、たとえば、ユーザライブラリ表現のための使用されるときには、有線でシリアライゼーションすることができる、またはデータベース中にバイナリ形態で持続することができるデータ構造を含むことができる。このデータ構造は、通信プロトコルを実施するために、強く入力されたフィールドを使用することができる。
【００７３】
スクリプトマネージャ２０４が実行することができる別のコマンドは、ライブラリをインポートしている。このコマンドは、所与のドキュメント（たとえば、スプレッドシート、電子メールカレンダーまたは任意の他の添付可能なコンテキスト）へのライブラリのリンクまたは他の関連付けを作成することができる。たとえば、電子メールメッセージを、ユーザの所与のメールアカウントに関連付けることができる。リンクの目的は、たとえば、「実行」メニューに表示するために、基礎をなすドキュメントは、どのマクロが関連付けられているかについて迅速に見分けることができるようにすることである。たとえば、ライブラリインポートコマンドは、データストア中に「リンク」テーブルエントリを作成することができる。図２を参照すると、ライブラリをインポートすることに関与する構成要素は、たとえば、プロセス矢印１および２によって示すことができる。
【００７４】
ｃｏｐｙコマンドは、スクリプトマネージャ２０４が実行することができる別のコマンドであり、既存のライブラリをコピーし、そのコンテンツの複製を作成する。たとえば、ライブラリ中に含まれているスクリプトおよびマクロのすべてを、新しいライブラリ名にコピーすることができる。コピーする行為により、ライブラリコンテンツの複製が作成されるが、関連付けはコピーされない。新しく作成されたライブラリの所有者は、現在の所有者に設定される。コピー操作が完了すると、新しいライブラリのＩＤが戻される。たとえば、コピーコマンドは、任意のリンク、継続または認証全体をコピーすることなく、新しい「ＵｓｅｒＬｉｂｒａｒｙ」テーブルエントリをデータストア中に作成することができる。図２を参照すると、ライブラリをコピーすることに関与する構成要素を、たとえば、プロセス矢印１および２によって示すことができる。
【００７５】
ｄｅｌｅｔｅ  ｌｉｂｒａｒｙコマンドは、たとえば、許可を検査することができ、次いで、許可されている場合には、（たとえば、スクリプト情報２０６中の）データストアからライブラリを削除することができる。たとえば、ｄｅｌｅｔｅ  ｌｉｂｒａｒｙコマンドは、「ＵｓｅｒＬｉｂｒａｒｙ」テーブルおよびすべて子テーブルから、エントリを除去することができる。フロントエンドは、たとえば、任意の「よろしいですか？」という問合せを行うことを担当する。ライブラリを削除することに関与する構成要素を、たとえば、プロセス矢印１および２によって示すことができる。
【００７６】
ユーザがライブラリを取得するためのコマンドは、ユーザのＩＤに基づいて、所与のユーザが所有するライブラリを戻すことができる。たとえば、コマンドは、所有者フィールドが現在のユーザであるスクリプト情報２０６に保存された（たとえば、ＵｓｅｒＬｉｂｒａｒｙまたは他のテーブル中の）ユーザライブラリをエントリに戻すことができる。図２を参照すると、ユーザのライブラリを取得することに関与する構成要素を、たとえば、プロセス矢印１、２および４によって示すことができる。
【００７７】
ドキュメントによってライブラリを取得するためのコマンドは、所与のドキュメントによってインポートされる任意のライブラリを戻すことができる。たとえば、ｇｅｔ  ｌｉｂｒａｒｉｅｓコマンドは、親「ＵｓｅｒＬｉｂｒａｒｙ」とマッチングし、それを戻す「文書化された」フィールドに関するＬｉｎｋテーブルをスキャンすることができる。図２を参照すると、ドキュメントに関するライブラリを取得することに関与する構成要素を、たとえば、プロセス矢印１、２および４によって示すことができる。
【００７８】
ｃａｔｅｇｏｒｉｚｅ  ｌｉｂｒａｒｙコマンドは、「ＳＡＭＰＬＥＳ」などの「仮想」ドキュメントに関連付けを追加することができる。たとえば、ｃａｔｅｇｏｒｉｚｅ  ｌｉｂｒａｒｙコマンドは、所与の名前（ＳＡＭＰＬＥＳなど）をもつエントリをＬｉｎｋテーブル中に作成することができる。図２を参照すると、ライブラリをカテゴリ分類することに関与する構成要素を、たとえば、プロセス矢印１および２によって示すことができる。
【００７９】
ｇｅｔ  ｌｉｂｒａｒｉｅｓ  ｆｏｒ  ｃａｔｅｇｏｒｙコマンドは、所与のカテゴリ分類をもつすべてのライブラリを戻すことができる。たとえば、ｇｅｔ  ｌｉｂｒａｒｉｅｓ  ｆｏｒ  ｃａｔｅｇｏｒｙコマンドは、ドキュメントに関するライブラリを取得することと同様とすることができる。図２を参照すると、カテゴリによってライブラリを検索することに関与する構成要素を、たとえば、プロセス矢印１および２によって示すことができる。
【００８０】
ｅｖａｌｕａｔｅ  ｆｕｎｃｔｉｏｎコマンドは、ライブラリから関数を取り出し、その関数を実行のためにスクリプトエグゼキュータ２０８にパスすることができる。図２を参照すると、関数を評価することに関与する構成要素を、たとえば、プロセス矢印１、２、３、５および６によって示すことができる。
【００８１】
ｅｖａｌｕａｔｅ  ｍａｃｒｏコマンドは、入力パラメータ（たとえば、存在する場合には、現在のドキュメントに関するライブラリＩＤ、マクロ名およびコンテキスト情報）が提供されると、ラッパーを用いてプログラマティックビーンを作成し、ラッピングされたサービスを、スクリプトエグゼキュータ２０８にパスして実行することができる。図２を参照すると、マクロを評価することに関与する構成要素を、たとえば、プロセス矢印１、２、３、５および６によって示すことができる。
【００８２】
ｃｏｎｔｉｎｕｅ  ｍａｃｒｏコマンドは、マクロライブラリＩＤおよび継続ＩＤを与えられると、継続操作をスクリプトエグゼキュータ２０８上で起動することができる。たとえば、そのようなコマンドは、休止中の実行しているマクロを、アクティブに実行し続けるようすることができる。図２を参照すると、マクロを継続することに関与する構成要素を、たとえば、プロセス矢印１、２、３および６によって示すことができる。
【００８３】
ｕｐｄａｔｅ  ａｕｔｈｏｒｉｚａｔｉｏｎｓコマンドは、所与のユーザおよび所与のマクロライブラリのための認証のセットについて、データストア中のエントリを更新する（または追加する）ことができる。図２を参照すると、認証を更新することに関与する構成要素を、たとえば、プロセス矢印１および２によって示すことができる。いくつかの実装形態では、「ｇｅｔ  ｌｉｂｒａｒｙ」コマンドおよび他のコマンドは、典型的には、スクリプトストレージ層に対してのみ作用することができ、スクリプトエグゼキュータ２０８を起動することはできない。
【００８４】
次に、システム２００の別の構成要素を参照すると、コマンドサーブレット２１６は、マクロコントローラ（たとえば、ＪａｖａＳｃｒｉｐｔ（登録商標）マクロコントローラ「ＭａｃｒｏＣｏｎｔｒｏｌｌｅｒ．ｊｓ」）からの要求に応答することによって、マクロコマンドを実行させることができる。ユーザに対して透過性で自動的なリダイレクションのようなリダイレクションとして、応答を行うことができる。１つの例示的なリダイレクション技法では、ブラウザクライアントが特定のＵＲＬに要求を出すときに、リダイレクションルールは、マクロサーバサブシステム２０２などのマクロサーバにその要求をダイレクトすることができる。コマンドサーブレット２１６が処理することができる要求のタイプとして、たとえば、ＧＥＴ＿ＡＤＭＩＮ＿ＰＡＮＥＬ、ＳＥＴ＿ＳＣＲＩＰＴなどのような名前をもつ、いくつかの要求を挙げることができる。
【００８５】
たとえば、ＧＥＴ＿ＡＤＭＩＮ＿ＰＡＮＥＬ要求は、マクロアドミンパネルの完全なＨＴＭＬを戻すことができ、マクロコントローラ（たとえば、ＭａｃｒｏＣｏｎｔｒｏｌｌｅｒ．ｊｓ）は、そのＨＴＭＬをクロージャダイアログに挿入することができる。ＳＥＴ＿ＳＣＲＩＰＴ要求は、スクリプトコンテンツおよびユーザライブラリＩＤを、コマンドサーブレット２１６に送ることができる。コマンドサーブレット２１６は、ユーザライブラリを作成／更新するために、スクリプトマネージャ２０４を起動することができ、その結果、（カテゴリ名およびライブラリ名を含んでいる）パネルの左手側に関する（たとえば、ＧＸＰによって発生された）ＨＴＭＬが戻される。ｍａｃｒｏｃｏｎｔｒｏｌｌｅｒ．ｊｓは、左手側パネルに関するｄｉｖ中に、そのＨＴＭＬをレンダリングすることができる。
【００８６】
ＧＥＴ＿ＳＣＲＩＰＴ要求は、ＳｃｒｉｐｔＭａｎａｇｅｒから所与のライブラリに関するスクリプトコンテンツをフェッチすることができ、そのスクリプトを編集するために、（ＧＸＰを介して発生した）コンテンツペインを戻すことができる。ｍａｃｒｏｃｏｎｔｒｏｌｌｅｒ．ｊｓは、そのＨＴＭＬをパネルのコンテンツｄｉｖに入れることができる。
【００８７】
ＩＭＰＯＲＴ＿ＬＩＢ要求は、インポートライブラリコマンドを用いてＳｃｒｉｐｔＭａｎａｇｅｒを起動することができる。この要求は、ｇｘｐを介してパネルの左側をレンダリングし、それをｍａｃｒｏｃｏｎｔｒｏｌｌｅｒ．ｊｓに戻すことができる。
【００８８】
ＣＯＰＹ＿ＬＩＢ要求は、ＩＭＰＯＲＴ＿ＬＩＢコマンドと同様とすることができるが、ｉｍｐｏｒｔコマンドではなくｃｏｐｙコマンドを使用する。ＤＥＬＥＴＥ＿ＬＩＢ要求は、ＩＭＰＯＲＴ＿ＬＩＢと同様とすることができるが、たとえば、ｇｘｐを介してアドミンパネルＨＴＭＬ全体を戻すように、ｄｅｌｅｔｅコマンドを使用してもよい。ＣＡＴＥＧＯＲＩＺＥ＿ＬＩＢ要求を、「ａｄｄ  ｔｏ  ｓａｍｐｌｅｓ」フィーチャとして使用してもよい。ｉｍｐｏｒｔ＿ｌｉｂのように、ＣＡＴＥＧＯＲＩＺＥ＿ＬＩＢは、ｃａｔｅｇｏｒｉｚｅ  ｌｉｂコマンドを用いてＳｃｒｉｐｔＭａｎａｇｅｒを起動することができ、再描画のためにパネルの左側を戻す。
【００８９】
ＲＵＮ＿ＭＡＣＲＯ要求は、マクロ名、ライブラリｉｄおよびドキュメントの状態（たとえば、現在の選択など）のシリアライズされた表現を取り、所与のマクロを実行するために、スクリプトエグゼキュータ２０８を起動することができる。エラーが生じた場合、エラーメッセージをｍａｃｒｏｃｏｎｔｒｏｌｌｅｒ．ｊｓへ戻して、ユーザに表示する。ユーザがマクロに許可しなければならない場合、ユーザにプロンプトを出すために、メッセージを、ｍａｃｒｏｃｏｎｔｒｏｌｌｅｒ．ｊｓへと返送することができる。
【００９０】
マクロサーバサブシステム２０２は、ネットワーク２２４を介して、アプリケーション２２０およびロケーションサーバ２２２と対話する。アプリケーション２２０は、ユーザのラップトップコンピュータ上で動作しているウェブブラウザなど、ユーザデバイス２２６を採用しているユーザによって実行されているアプリケーションとすることができる。ユーザデバイス２２６は、（たとえば、スプレッドシートサーバを使用して）たとえば、ウェブページ２２６ａを表示することができる。ユーザのウェブブラウザは、ユーザのユーザデバイス２２６上におけるマクロの実行を制御するために、マクロコントローラ２２６ｂを採用することができる。
【００９１】
第三者プロセスおよびウェブページ２２８からの外部イベントは、マクロサーバサブシステム２０２内で定義されているマクロのためのトリガメカニズムとして働くことができる。インターネットなどのネットワーク２３０を介して、外部イベントを受信することができる。これらの外部イベントは、図１に関して記載された外部イベント１０５に対応することができる。
【００９２】
このシステムは、マクロレコーダをインスタンス化し、マクロレコーダによって追跡される複数のアクションを実行し、アクションを自動的に実行するためにユーザが後で起動することができるそれらのアクションの表現を保存することによって、ユーザがマクロを記録できるようにすることができる。この実装形態では、典型的には、サーバ側でマクロ記録を実行することができる。記録可能なコマンド（たとえば、セル値を設定する、シートを挿入するなど）をユーザが実行すると、スプレッドシートサーバにコマンドを送ることができる。そのサーバは、「記録」モードであるか否かについて留意することができ、「記録」モードである場合には、コマンドをルックアップし、同じ効果を有することになるスクリプト記述コードに対応する実行中のストリングバッファに、テキストを書き込むことができる。
【００９３】
たとえば、ユーザがスプレッドシートのセルＡ１に「ｈｅｌｌｏ」と入力する場合について考察されたい。（たとえば、最初のシートである場合）「ｈｅｌｌｏ」の値、行＝０、列＝０、およびシートＩＤ＝０の「範囲を設定する」ことを意味するコマンドＩＤを用いて、スプレッドシートサーバに、コマンドを送ることができる。これは、レコーダのためだけではなく、スプレッドシートサーバ上でセルに対して変更を実際に実行するコマンドであり、したがって、このコマンドは、記録が行われているかどうかにかかわらず送られることに留意されたい。したがって、レコーダは、基本的には、スプレッドシートに動作させる既存のコマンドフロー上のワイヤタップの等価物とすることができる。
【００９４】
レコーダは、コマンドＩＤをルックアップすることができ、「ｓｅｔ  ｒａｎｇｅ」コマンドであることが分かる。発生すべき適当なコードが、「ｒａｎｇｅ」オブジェクト上の「ｓｅｔＶａｌｕｅ」呼出しであることが分かると、レコーダは、対応するテキストを発生するために、行および列をルックアップし、使用することができる。次いで、レコーダは、シート識別子をルックアップし、使用することができ、そのシートに関する変数がすでに存在するかどうかを判断することができる。その結果、マクロレコーダは、
ｓｈｅｅｔ．ｇｅｔＲａｎｇｅ（’ａ１’）．ｓｅｔＶａｌｕｅ（’ｈｅｌｌｏ’）；  （２）
のようにテキストを発生することができる。
【００９５】
したがって、これらの構造によって、コンピュータユーザは、ホスティングされたコンピュータサービスにログオンし、複数の異なるアプリケーションおよびサービスにアクセスすることができる。ユーザは、マクロを実行することを明示的に選択することができ、または、マクロを自動的にトリガすることができる。自動的にインスタンス化することができるアプリケーションおよび他の関連するアプリケーションをマクロが参照する場合には、マクロは、それらのアプリケーションおよび他の関連するアプリケーション中で実行することができる。その結果、ユーザは、ロバストなオンラインサービスを生成するために、多種多様なデータおよびプログラミングメカニズムにアクセスできることができる。
【００９６】
図３は、ホスティングされたコンピューティングシステム上でマクロを実行するためのプロセス３００のフローチャートである。プロセス３００は、たとえば、システム１００および２００中でマクロを実行するために使用することができる。一般に、図示されたプロセスは、関連するマクロコードを特定することと、そのコードを実行するためにオブジェクトを作成することと、ホスティングされたコンピュータシステム上の１つまたは複数のアプリケーションと対話するためにそのコードを実行することを含む。
【００９７】
この例におけるプロセス３００は、ボックス３０２において開始し、マクロを実行するコマンドを受信する。このコマンドは、図１に関して説明したように、外部イベント１０５の結果として生じることができ、または、ユーザは、動作すべきマクロを手動で選択することができる。たとえば、前者の場合、外部イベント１０５は、電子メールの受信とすることができ、動作するように指令されたマクロは、電子メールの受信に応答して、スプレッドシートを電子メールの件名で更新するなどの操作を実行するためのマクロとすることができる。マクロフック１０４は、外部イベント１０５を検出することに関与することができ、次いで、たとえば、マクロサーバサブシステム１０６と通信することによって、動作すべきマクロを再びトリガすることを担当する。
【００９８】
ボックス３０４において、マクロコードを特定し、検索し、実行する。たとえば、図２を参照すると、スクリプトマネージャ２０４は、スクリプト情報２０６に対して、実行すべきマクロコードを特定することができる。次いで、スクリプト情報２０６は、要求されたマクロコードをスクリプトマネージャ２０４に戻すことができ、次いで、その実行を開始することができる。
【００９９】
マクロコードの実行の一部として、（ボックス３０６において）マクロが対話するアプリケーションに関するプログラマティックＡＰＩを表すＪａｖａ（登録商標）オブジェクトを有するインスタンスを作成する。このＡＰＩは、マクロコードが対話するアプリケーションに対応することができる。たとえば、マクロコードがスプレッドシートを更新するように設計される場合、作成されるインスタンスは、対応するスプレッドシートアプリケーションに関するプログラマティックＡＰＩを表すＪａｖａ（登録商標）オブジェクトを含む。
【０１００】
ボックス３０８において、これらのオブジェクトをセキュリティラッパー中にラッピングする。たとえば、セキュリティラッパーは、それ自体でマクロコードを取り囲む、さらなるコードとすることができ、たとえば、ユーザが肯定的なアクションを取らない限り、マクロコードを動作することはできない。いくつかの実装形態では、アクションは、「ＯＫ」をクリックすることでも、または何らかの他の方法で、明示的にマクロを承認することでもよい。
【０１０１】
セキュリティラッパーは、たとえば、トロイの木馬による攻撃、フィッシング攻撃または他の悪意のあるコードから、様々な方法でエンドユーザを保護することができる。いくつかの実装形態では、ダイアログボックスをユーザに配信した後に、セキュリティラッパーを構築することができる。ダイアログボックス中に含まれるメッセージは、そのマクロを潜在的に信用できないマクロと特定することができ、さらに、マクロを実行している場合に何が起こり得るかについて特定する。いくつかの実装形態では、ダイアログボックスは、そのマクロに固有な潜在的に有害な行為のリストを特定することができ、そのリストはマクロのスキャンに基づく。マクロをスキャンすることは、たとえば、悪意のあった過去のマクロのコンテンツに対応するマクロまたはいくつかの他の情報中のテキストストリングに部分的に基づいて、固有の潜在的な有害な効果を特定するのを補助することができる。
【０１０２】
ユーザは、マクロが有し得るアクセスを承認または拒否することができる。ユーザの承認を使用して、上記で参照されたケーパビリティベースのセキュリティラッパーを構築することができ、それにより、マクロは、特権を読み取ることできるようになるが、マクロは、ある特定のファイルを更新することはできない。この場合、ユーザによってマクロに許可され、セキュリティラッパー中に反映される特権または権利は、ユーザが承認したアクションのようなタイプに制限される。
【０１０３】
いくつかの実装形態では、セキュリティラッパーを発生するためのプロセスは、悪意のあるコードを検出するためのメカニズムをミスリードしようとする悪意のあるコードを検出することができる。たとえば、マクロ中の「ｄｅｌｅｔｅ」を符号化する代わりに、サブストリング「ｄｅ」および「ｌｅｔｅ」を、本来の削除操作の意図（たとえば、「削除する」）を隠す試みに連鎖させる。ここで説明されるプロセスは、そのようなインスタンスを特定し、ユーザがマクロへの承認を削除することを許可しなかった場合に削除を防止するようにプログラムすることができる。
【０１０４】
ボックス３１０において、マクロがダイレクトされる各アプリケーションについて関連するサーバを呼び出す。それらの呼出しは、マクロが対話するアプリケーションと関連付けられたメソッドまたは他のプログラマティックＡＰＩを含んでいるオブジェクトの実行に関与する。たとえば、呼出しは、スプレッドシートを更新し、電子メールを転送し、ファイルをコピーするマクロコードなどの実行を含むことができる。
【０１０５】
次いで、（ボックス３１２において）各アプリケーションおよびアクセスサービスからのフィードバックとの対話を行う。たとえば、対話は、マクロが動作し始めたばかりのアプリケーションとのユーザ対話を含むことができる。ユーザは、たとえば、マクロが、別のユーザから電子メールを転送した結果、ユーザが受信したばかり電子メールを読み取る（およびその電子メールとの他の対話を実行する）ことができる。
【０１０６】
このようにして、マクロは、中央システム中の別のサブシステム上で動作している複数のアプリケーションにわたって、中央システム上で実行することができる。マクロは、セキュリティメカニズムを含むことができ、様々な方法でマクロをトリガすることができる。さらに、マクロは、システム内の、またはインターネットなどのネットワークを介して他のシステムからアクセス可能な多種多様なサービスから、情報を取得することができる。
【０１０７】
図４Ａは、ウェブページ上で動作しているアプリケーションから起動されるマクロを実行するためのプロセス４００のフローチャートである。一般に、プロセスは含む。一般に、図４Ａに示すプロセスは、図３に示すプロセスと同様であり、複数の構成要素からなるシステムにおけるそれぞれ異なる構成要素間でプロセスを共有することができる方法に関する例を示している。
【０１０８】
例示的なプロセス４００は、ブラウザ４０１ａとマクロサーバ４０１ｂとの間の対話に対応するステップを含む。たとえば、プロセスのブラウザ側における対話は、スプレッドシートアプリケーションを実行しているクライアントデバイスを採用するユーザに関与することができるが、実行されたマクロデータは、マクロサーバ４０１ｂなどサーバシステムにおいて実行する（および、そのサーバシステムによってデータを取得する）ことができる。ブラウザ側に示されたプロセス４００の各ステップは、一般的な対話であるだけではなく、ユーザと（たとえば、スプレッドシートサーバシステムによって提供される）スプレッドシートアプリケーションとの間に生じ得るマクロには関係しない。たとえば、マクロサーバサブシステム２０２によって、マクロサーバ側で実行されるプロセス４００の各ステップを実行してもよい。また、プロセス４００は、図１および図２に関して上述したシステム１００および２００上のマクロ実行を表すことができる。一般に、マクロサーバ４０１ｂ側のプロセス４００の各ステップは、スクリプトマネージャ２０４によって制御することができる。
【０１０９】
ボックス４０２において、マクロを実行したいという要求が生じる。たとえば、クライアントデバイス上でブラウザアプリケーションを実行しているユーザによって、その要求を発生させることができる。ユーザは、マクロの実行をトリガするためにキー組合せを実行することができ、あるいは、アプリケーションにおける特定のドキュメントを開くことによって、アプリケーション上における制御のユーザ選択によって、または、システムとのユーザの対話は別のメカニズムによって（たとえば、サブシステムによって受信される外部信号によって）、マクロの実行を開始することができる。
【０１１０】
ステップ４０４において、マクロの実行を開始する。マクロの実行の開始は、たとえば、マクロサーバサブシステム２０２内で開始してもよい。たとえば、クライアントデバイスによってパスまたは特定され得るアドレスに対応するマクロコードを、サブシステム上でロードすることができ、その実行は、通常の方法で開始することができる。
【０１１１】
ステップ４０６において、マクロを実行するための認証をユーザが与えたかどうかに関する判断がなされる。マクロコード実行の初めに、そのようなアクションを行うことができる。たとえば、ユーザ認証は、上記で説明したように、悪意のあるコードが動作しないようにするための実践的な方法の一部とすることができる。
【０１１２】
ユーザ認証が存在しない場合、ステップ４１０において、ユーザ認証要求をフェッチし、ステップ４１２において、ユーザに、認証に関してプロンプトを出す。ステップ４１４においてユーザが認証を与える場合には、ステップ４１６においてユーザの認証を保存し、ステップ４１４においてユーザが認証を与えない場合には、プロセス４００はステップ４１８において終了する。たとえば、ユーザ認証要求は、マクロが実行することを許可される場合に生じる得る悪意のある結果のタイプのリストを含むことができる。ステップ４１２において、このリストをユーザに提示することができる。
【０１１３】
ユーザ認証が存在する場合、ステップ４０８において、ラッピングされたサービスを作成する。たとえば、ラッピングされたサービスのクリエータ２１２によって、ラッピングされたサービス（または「ビーン」）を作成することができる。そのようなアクションは、任意選択とすることができ、上記で説明したように、そのようなアクションを使用して、実行しているコードを悪意のある干渉から保護することができる。
【０１１４】
ステップ４２０において、スクリプトエグゼキュータ中でスクリプト（またはマクロ）を実行する。たとえば、図２を参照すると、スクリプトエグゼキュータ２０８によって、スクリプトを実行することができる。たとえば、クライアント上で局所的に行われるマクロ実行とは対照的に、マクロサーバサブシステム２０２内で実行する。スクリプト実行は、通常の方法で行うことができ、サブシステムの一部分は、スクリプト中の各ステップを通って進み、各ステップを遂行する際に、それらのアクションが実行される。ステップ４２２において、継続を経験したかどうかに関する判断が行われる。継続を経験した場合には、ステップ４２８において、継続を保存する。実際には、継続は、特定の時間まで、またはイベントが生じるまで、スクリプトを休止するために使用することができる。継続を全く経験しない場合、ステップ４２４において処理を再開し、エラーを経験したかどうかに関する判断が行われる。エラーを全く経験しない場合、ステップ４３０においてマクロの実行は正常に終了する。ステップ４２４においてエラーを経験する場合、ステップ４３０においてマクロ実行が終了する前に、ステップ４２６において、ユーザに警告する。したがって、このプロセスによって、クライアントデバイス上のユーザによって（または他のイベントによって）アクションによりトリガされるマクロによって提供される関数を、ユーザに与えられることができ、クライアントデバイスとは別個のサブシステム上で、マクロを実行することができる。いくつかの例では、ユーザはオンラインでないときに実行は行うことができ、マクロ実行の結果を、ユーザおよびシステムに登録されている他のユーザが利用できるようにすることができる。
【０１１５】
継続は、スクリプトインタプリタの実行状態の「スナップショット」として働き、後で実行を再開することができるように、実行をフリーズさせることができる。これは、デバッガまたは標準ブラウザ側実行（たとえば、ＪａｖａＳｃｒｉｐｔ（登録商標））における「警報」コールにおいて、ブレークポイントがどのように動作するか、と概念的に同様である。継続は、インタープリタ中のすべてのオブジェクトのバイナリシリアライゼーション（たとえば、すべてローカル変数およびビーン）および現在の実行ポイントに対するポインタとして実装することができる。スクリプトエグゼキュータ２０８内に継続を実装することができ、それにより、公開されているフィーチャとして継続を使用可能にすることができる。（たとえば、「ビーン」を含む）すべてのオブジェクトは、たとえば、Ｊａｖａ（登録商標）の標準的な特徴であるＪａｖａ（登録商標）シリアライゼーションを使用して、スクリプトエグゼキュータ２０８によりシリアライズすることができる。Ｊａｖａ（登録商標）シリアライゼーションを使用すると、オブジェクト（およびその子オブジェクトのすべて）を、すべてのフィールドのオブジェクト識別子および現在の値を含んでいるバイナリストリームに書き出すことができる。マクロが再開すると、スクリプトエグゼキュータ２０８は、たとえば、新しいライブＪａｖａ（登録商標）オブジェクトへのデシリアライゼーションで使用することができる継続バイナリデータを与えられることができる。
【０１１６】
いくつかの実装形態では、データベースに継続を保存することができる。継続は、たとえば、マクロが再開されるまで、サーバメモリ中にではなく、データベースに保存される。データベースストレージのための１つの理由は、継続がトリガされる時間と、ユーザが実行を再開する時間との間に（たとえば、ダイアログまたはいくつかの他の再開アクション上で「ｏｋ」ボタンを打つことによって）サーバが再開することができるからである。いくつかの実装形態では、継続は所定の寿命（たとえば、６時間）を有することができ、その後に、継続を処分することができる。このようにして、ユーザが「ｏｋ」ボタンを打つことに決して回避しないような場合には、継続がディスク領域を占有し続けることはない。
【０１１７】
図４Ｂは、ホスティングされたシステム上でマクロを記録し、実行するためのプロセス４３１のスイムレーンフローチャートである。例示的なプロセス４３１は、ブラウザと、マクロレコーダと、マクロサーバと、アプリケーションとの間の対話を含む。一般に、このプロセスは、サーバサブシステムから、マクロ記録制御のセットをユーザに提供し、それにより、ユーザはその制御を採用して、ユーザおよびシステムが取るアクションをいつ記録しなければならないかを示すことができ、次いで、そのようなアクションを再フォーマッティングして、マクロを呼び出すときにアクションを再実行するマクロに関するコードにすることができる。
【０１１８】
プロセスはボックス４３２で開始し、ユーザがマクロレコーダを選択する。たとえば、ユーザは、マクロを記録し始めるための制御を選択するときに、ブラウザ上で選択を行う。ステップ４３４において、マクロレコーダをサービスする。マクロレコーダは、ユーザのブラウザ上で実行していてもよく、あるいは、マクロレコーダは、たとえば、マクロサーバサブシステム２０２において、リモートで実行してもよい。たとえば、ユーザのクライアントデバイス上にアプリケーションを現在表示しているウィンドウとは別のボーダレスなブラウザウィンドウ中に、マクロレコーダを表示することができる。また、レコーダは、他の方法で、たとえば、ｉＦｒａｍｅ、またはアプリケーションを表示している同じページの一部である同様の要素中に提供され得る。
【０１１９】
ステップ４３６において、アプリケーションを用いてマクロレコーダを表示する。たとえば、ユーザが自分のラップトップコンピュータの自分のブラウザ内でスプレッドシートアプリケーションを実行している場合、ポップアップまたは他のディスプレイが現れ、マクロレコーダを表すことができる。マクロレコーダは、ユーザが選択し得る記録ボタン、休止ボタン、および停止ボタンのように、レコーダの操作を制御するための様々な制御とともに表示され得る。ステップ４３８においてレコーダを開始するが、これは、ユーザがマクロを定義するキーストロークなどを開始することができることを意味する。レコーダを表示するレコーダビアコードを提供するサーバサブシステムに送られるメッセージによって、そのような記録をトリガすることができ、ユーザがレコーダ上で記録制御を選択したことを示す。
【０１２０】
ステップ４４０において、ユーザは（１つまたは複数の）アプリケーションと対話し、これは、ユーザが、自分が使用している（１つまたは複数の）アプリケーション内のマクロの関数を定義すべき操作（キーストローク、選択など）を実行することを意味する。たとえば、ユーザは、スプレッドシート中の様々なセルを選択することができ、（たとえば、セルをコピーアンドペーストする、セル中に式に入力する、などのために、）それらのセル上でコマンドを実行することができ、他のそのようなアクションを実行することができる。
【０１２１】
ステップ４４２において、ユーザがアプリケーションと対話している間、マクロレコーダは、ユーザのアクションを記録し始める。ユーザのアクションには、記録プロセス中にユーザが記録する際のコマンドを表示することが含まれ得る。上記のように、レコーダは、（１つまたは複数の）アプリケーションがユーザ入力を解釈するのと同じ方法で、ユーザ入力を解釈することができ、次いで、これらの解釈されたアクションを、マクロが動作するときに後でアプリケーションに供給し得るコマンドに変換することができる。また、レコーダは、ユーザがコマンドを実行するアプリケーション（たとえば、ブラウザウィンドウ）を追跡することができ、それにより、マクロは、動作するときに、それらの様々な異なるアプリケーションにコマンドを提供すべきであるとわかる。
【０１２２】
ユーザがアプリケーションと対話し、アクションが記録されている間、ステップ４４４において、ユーザのアクションの標準的な実行を行う。実行は、ユーザが対話している（１つまたは複数の）アプリケーション内で行われ得る。したがって、ユーザのアクションを、アプリケーションとマクロレコーダとに並行して提供することができ、それにより、アクションが記録されるとともに、アプリケーションが適当な方法でアクションに作用する。
【０１２３】
マクロの定義が完了すると、たとえば、レコーダの「Ｄｏｎｅ」キー、「ｓｔｏｐ」ボタンまたは他の制御を押すことによって、保存コマンドをユーザから受信する。ステップ４４８において、マクロに関する情報を送る。コマンドがユーザによって実行される記録時間に、そのような情報を解釈してマクロコマンドとしても、またはマクロ記録が停止したときに、解釈し、変換してもよい。次いで、マクロレコーダは、その情報を、たとえば、マクロストアに送ることができ、後でコードに容易にアクセスすることができるように、マクロコードへの（たとえば、ＵＲＬの）１つまたは複数のポインタを発生することができる。たとえば、マクロレコーダは、ユーザに、後でマクロを起動するために使用すべきキー組合せを特定するように要求することができる。
【０１２４】
ステップ４５０において、（マクロを保存する）ライブラリ名、（マクロレコーダによって記録されるような）スクリプトまたはマクロコンテンツ、およびユーザＩＤを含むマクロ情報を保存する。また、他の情報を、適宜、マクロに保存し、相関させることができる。
【０１２５】
数秒後、または数日から数年後、ユーザがマクロを実行する決定したときに、ユーザは、動作すべきマクロを特定することができる。マクロの選択は、たとえば、ユーザが現在対話している（１つまたは複数の）アプリケーションについて定義されたマクロのリストから、マクロ名を選択することによって達成することができる。たとえば、ユーザがアクセス可能なマクロのリストは、ユーザのアカウントに関連付けて保存することができ、（各マクロのメーカーがマクロに分かりやすい名前を与えた場合）リストでユーザに表示することができる。代替的には、たとえば、別のマクロの実行によって、特定のユーザによるアクションとは無関係なシステム上のイベントの発生によって、または他の方法で、自動的にマクロを選択することができる。また、ユーザは、たとえば、第１のユーザがマクロにアクセスできるように望む他のユーザの電子メールアドレスまたは他のアカウント識別子についてプロンプトを受けることによって、他のユーザが、保存されたマクロを利用できるようにすることができる。また、ユーザは、たとえば、メッセージンググループ（たとえば、電子メールリスト）、あるいは特定のドメインまたはサブドメインに関するすべてユーザ（たとえば、ユーザの雇用者からシステムにアクセスしているすべてユーザ）を指定することによって、他のユーザのグループを提供することができる。
【０１２６】
たとえば、ステップ４５２ａにおいて、マクロを実行するための入力を、たとえば、ユーザから任意選択で受信する。代替的には、ステップ４５２ｂにおいて、マクロを実行するためのトリガイベントが生じる。いずれかのメカニズムによっても、ステップ４５４において、マクロに対応するマクロコードを受信し、実行する。
【０１２７】
マクロ実行の初期段階で、ステップ４５６において、マクロと関連付けられた（１つまたは複数の）アプリケーションに対応するＡＰＩに関するオブジェクトを作成する。そのようなオブジェクトは、マクロを実行するために必要なオブジェクトを表すことができ、たとえば、１つのフォーマットから別のフォーマットにコマンドを変換するオブジェクト、他のオブジェクトをラッピングするオブジェクト、オブジェクトに課されたクォータ、および他のそのようなオブジェクトを含むことができる。
【０１２８】
ステップ４５８において、オブジェクトをセキュリティラッパー中にラッピングする。上述したメカニズムによって、そのようなラッピングを行うことができ、そのようなラッピングを使用して、システム上の悪意のあるコードの実行からユーザを保護することができる。
【０１２９】
ステップ４６０において、ユーザＩＤを用いてアプリケーションを呼び出す（または起動する、もしくは実行する）。アプリケーションを呼び出すことは、マクロサーバサブシステム２０２によって実行することができる。認証を検査するために、たとえば、ユーザが特定のファイルを読み取る、更新する、または削除することなどを許可されていることを保証することによって、ユーザＩＤがコール中に含められる。
【０１３０】
ステップ４６２において、呼び出されたアプリケーションにおいて実行されるステップに関係するアクションを実行する。たとえば、これらのアクションは、記録されたマクロ中に記録された個別の命令またはステップに対応することができる。ステップの実行は、マクロが記録されたブラウザから物理的に遠隔であり得るアプリケーション中で行われる。実際には、マクロは、いくつかの例では異なるブラウザ上の完全に異なるユーザによって記録され、保存されていることがあった。そのような場合、異なるユーザとは、最初に記録したユーザによってマクロを使用することを許可された友人または家族の一員であり得る。
【０１３１】
ステップ４６４において、さらなる実行のために必要なキーを戻す。これらのキーは、たとえば、ユーザによって与えられた入力、またはアプリケーション自体によってパスされたパラメータを含むことができる。ターゲットアプリケーション（たとえば、スプレッドシートアプリケーション）から戻される「キー」は、所与のコマンドの結果としてその状態を変化させ得る任意の項目を特定することができる。たとえば、コマンドＩＮＳＥＲＴ＿ＳＨＥＥＴは、「現在の」シートである新しいシートを生じることができる。このマクロは、新しい現在のシートを反映するように動作可能である他のコマンド（たとえば、ｇｅｔＡｃｔｉｖｅＳｈｅｅｔ）を有することができる。他のコマンド（たとえば、ＩＮＳＥＲＴ＿ＲＯＷ）は現在の選択を変更することができ、どのセルが現在アクティブなセルであるかを変える。任意の後続のコマンド（たとえば、ｇｅｔＡｃｔｉｖｅＳｅｌｅｃｔｉｏｎ）が情報を必要とする場合には、現在の状態および選択データをストレージのためにマクロに戻すことができる。
【０１３２】
ステップ４６０、４６２および４６４は、マクロが完了するまで、比較的同時に動作を継続することができる。ステップ４６２において最後の命令が経験され、実行されるときに、またはマクロの実行中にイベントがマクロの実行を休止するときに終了する。
【０１３３】
図５は、マクロシステム、具体的には、図２のスクリプト情報リポジトリ２０６のような構造の情報に関する例示的な論理構造におけるオブジェクトのための例示的な構造を示す。論理構造５００は、ノード５０２から５０８によって表され得る。スクリプト情報リポジトリ２０６に保存された任意の１つのマクロの場合、たとえば、少なくとも１つの構造５００またはその一部分が存在し得る。継続ノード５０４、リンクノード５０６およびユーザ認証ノード５０８はすべて、ユーザライブラリノード５０２と０〜Ｎ関係を有し、ユーザライブラリ（またはヘッダ）ノードごとに、（０を含む）任意の数の継続、リンクおよびユーザ認証が存在し得ることを意味する。
【０１３４】
構造のルートノードは、ユーザライブラリノード５０２であり、たとえば、マクロおよび／またはライブラリの名前（たとえば、「Ｄａｎ’ｓ  Ｃｌｏｕｄ−ｂａｓｅｄ  ＭａｃｒｏＬｉｂ」の「Ｍａｃｒｏ＿ＸＹＺ」）、マクロライブラリの所有者（たとえば、「Ｄａｎ」）、およびマクロと関連付けられたスクリプト（たとえば、マクロコード）を定義する。各マクロライブラリは、６４ビット擬似乱数など、一意の識別子を有することができ、また、データベース１次キーとして働くことができる。いくつかの実装形態では、ライブラリ名およびライブラリ内に含まれる関数のセットなど、フィールドは、データベースからマクロを検索するときには使用されず、厳密には、マクロライブラリを動作／表示するとき使用するためのものである。「所有者」フィールドは、たとえば、「ＸＹＺユーザによって所有されるすべてのマクロを取得する」というような操作とともに、外来キーとして使用され得る。リンク表は、たとえば、「ＸＹＺドキュメントによって使用されるすべてのマクロを得る」というような操作とともに使用され得る。
【０１３５】
継続ノード５０４は、継続ＩＤ、（たとえば、マクロが待ち状態になった後に、さらなる入力とともにマクロを再開することなどのためのさらなるエントリポイントからの）継続データ、およびユーザ名（たとえば、継続ノード５０４を作成したユーザ）を含むことができる。所与のマクロについて、複数の継続ノード５０４が存在し得る。たとえば、ユーザＸが、動作していたマクロをユーザＹとして再開することができないように、セッションハイジャックを防ぐために、継続の「所有者」を最初に記録することができる。このようにすると、操作により、ユーザＸしか、ユーザＸが開始したマクロを再開することができないことを保証することができる。１人のユーザが、いくつかの継続を有することができるので、複数のそのような記録を可能にすることができる（たとえば、３人が、各々、アクティブプロンプトダイアログボックスを用いて、別々のウィンドウでスプレッドシートを開く）。また、複数のユーザが、各々、ユーザ自身のダイアログプロンプトを用いて、マクロのユーザ自身のインスタンスを同時に実行していることもある。
【０１３６】
リンクノード５０６は、外部のエンティティがマクロにリンクすることを可能にする。リンクノード５０６は、マクロを「示す」ＵＲＬまたはいくつかの他の経路名であり得るドキュメントＩＤを含むことができる。同じマクロ（および同じマクロへのいくつかの異なるＵＲＬ経路または他の経路）について、いくつかの異なる名前が存在することがあるので、複数のリンクノード５０６が存在し得る。
【０１３７】
ユーザ認証ノード５０８は、マクロへの制限付きアクセスを許可する情報を含んでいることがある。たとえば、制限ｐｒｏｔｏｂｕｆｆｅｒフィールドは、値のプロトコルパターンを使用してアクセスを制御することができるが、ユーザフィールドは、ユーザＩＤに基づいてアクセスを制御することができる。各ノード５０８において、いずれかを、または両方を使用することができる。所与のマクロについて、複数のユーザ認証ノード５０８が存在することがあり、それらの各々１つが、異なる認証レベルを特定する。ユーザ認証ノード５０８により、認証記録が、ユーザごとに、またマクロごとに、１つしかの存在できないよう実施することができる。実施は、そのマクロをユーザが実行するためのユーザのスタンプ、およびマクロが何を行うことができるかに関する表現を採用することができる。複数の異なるユーザがマクロをそれぞれ許可していることのみを理由として、複数の記録が許可されることがあり、それらの各々が、各々に関する複数の異なるアクションを実行することを許可していることがあった。ユーザＸがマクロを実行するとき、そのマクロに関する彼らの認証記録がプルアップされ、すべての他の記録は、無視される。
【０１３８】
（たとえば、作成者がブロガーへの呼出しを追加する場合に）要求を変えるマクロ変更に関する要求が、マクロを動作させる必要があるという要求を変更する場合、既存のユーザ認証を無効であるとしてマークすることができる。その結果、さらなる要求が追加された後にユーザがマクロを再実行しようとするときに、それらは、認証のための再プロンプトを出されることができる。たとえば、以前にマクロが「このマクロは、カレンダーにアクセスを必要とする」と単に告げたことがあり得る場合に、プロンプトは「このマクロは、カレンダーおよびブロガーへのアクセスを必要とする」と告げることができる。サービスが削除される場合にプロンプトを出すことは、要求が増加する場合にのみ、再認証のために必要でないことがある
【０１３９】
図６は、マクロ構築システム６００の例示的なスクリーンショットを示す。たとえば、ユーザは、このシステムを使用して、たとえば、外部イベントに基づいて、その後実行し得るマクロに関するパラメータおよびルールを確立することができ、または、ユーザが選定するとき、手動で実行することができる。一般に、システムは、マクロ構成をスクリーンショットの列にそれぞれ示される３つの位相に編成し、（各位相内のサブフェーズを含む）各位相は、その前の位相が構成される際に変化し得る。このようなシステムを使用すると、ユーザは、マクロのためのトリガ、選択されたトリガに関係する利用可能なパラメータのうちマクロを実行するためのパラメータ、および選択されたパラメータに対応するマクロの結果を迅速に特定することができる。
【０１４０】
１つの例では、ユーザは、電子メール関連イベントに基づいて、電子メール機能を実行するマクロを構築することができる。別の例では、マクロは、非電子メール関連アプリケーション（たとえば、スプレッドシート、ワードプロセシングアプリケーションなど）における操作を実行するために構築することができる。さらに別の例では、ユーザは、出力を有するマクロを構築することができるが、任意のトリガイベントには依存しない。トリガまたは出力であるアプリケーションのタイプにかかわらず、単にスクリーン上でユーザ選択を行った結果として、対応するマクロの構成を自動的に生じることができる。スクリーンの「背後」で動作しているソフトウェアアプリケーションは、たとえば、図６のスクリーンショットに示されるインターフェース上でユーザの入力および選択を処理することができ、適当なマクロシンタックス、様々なアプリケーション固有のＡＰＩコールおよび言語固有のＡＰＩコール、ならびにマクロを実行するために必要なマクロの他の構成要素を挿入することを含むマクロを自動的に構築することができる。このすべては、意味を成すいくつかのフィールドに、いくつかの入力を単に入力するユーザには分かりやすいことがある。
【０１４１】
スクリーンショット６００は、（たとえば、ユーザによって最初に定義された、または後で更新されるような）現在構築されているマクロを特定するマクロ名フィールド６０１を含む。上記のように、マクロの定義は、３つの一般的なエリア、すなわち、マクロトリガデータエリア６０２と、マクロ処理データエリア６０４と、マクロ出力データエリア６０６とにおいて行われ得る。マクロトリガデータエリア６０２は、マクロがトリガされる条件またはイベントをユーザが決定および特定するために採用することができるフィールドおよび制御を含むことができる。マクロ処理データエリア６０４は、マクロが動作するときに行われる処理を定義するために使用され得る。マクロ出力データエリア６０６は、マクロが作用するアプリケーションデータのタイプ、およびそのデータ上で行われるアクション（または操作）など、マクロの出力を特定することができる。データエリア６０２〜６０６に加えて、複数のアプリケーション中のデータが同じマクロによって更新すべき場合の、複数のマクロ出力データエリア６０６など、他のデータ定義エリアが存在することがある。いくつかの実装形態では、コミット／ロールバック技法を使用して、すべての更新がなされること、あるいは、１つも更新がなされないことを保証することができるが、これは、データの完全性を維持するのに役立ち得る。
【０１４２】
３つのデータエリア６０２、６０４および６０６は、一般的には、順に完了されるように設計することができる。いくつかの実装形態では、１つのエリアにおいてユーザが選択する値は、そのエリアの下の、またはそのエリアの右のフィールドまたは制御に、何が表示されるかについて影響を与えることがある。たとえば、マクロトリガデータエリア６０２に入力されたデータは、他のエリア（たとえば、データエリア６０４および６０６）に表示される（かつ、ユーザが選択可能な）フィールドおよびデータ選択のタイプに影響を与えることがある。たとえば、ユーザが（たとえば、プロパティフィールド６０８において「電子メール」を特定する、または選択することによって）、「電子メール」をマクロのトリガメカニズムとして選択する場合、マクロ処理データエリア６０４において利用可能なオプションを、電子メールプロパティに適合させることができる。
【０１４３】
マクロトリガデータエリア６０２は、この例において図示されるように、プロパティフィールド６０８と、アクティビティフィールド６１０と、パラメータフィールド６１１とを含む。アクティビティフィールド６１０に表示される（かつ、ユーザによって選択可能な）値は、プロパティフィールド６０８におけるユーザの選択に依存し得る。たとえば、プロパティフィールド６０８において「電子メール」を選択することによって、アクティビティフィールド６１０中の値は、電子メール関連オプション（たとえば、着信メッセージ、インボックスサイズ、タグサイズなど）を含む。異なるプロパティ（たとえば、オンラインオークション）を選択した結果、アクティビティフィールド６１０中のエントリ（たとえば、項目量、項目カテゴリなど）の異なるリストを作成することができる。パラメータフィールド６１１を使用して、アクティビティに値を割り当てることができる。ユーザがパラメータフィールド６１１に入力する、またはパラメータフィールド６１１において選択することができる潜在的な値は、たとえば、サイズ、色、ドル総額、時間期間、言語、性別、あるいは、特定のアプリケーションについて適当な任意の量的な値または質的な値に関するもの含むことができる。いくつかの実装形態では、パラメータフィールド６１１上のラベルは、アクティビティボックス６１０の値に応じて自動的にラベル（たとえば、サイズ、色、価格、など）を付すことができる。
【０１４４】
マクロ処理データエリア６０４は、条件フィールド６１２と、検査サービスフィールド６１４と、サービス値フィールド６１６とを含む。条件フィールド６１２は、（たとえば、ある特定の方法で着信電子メールを転送することのような）ある特定のアクションを、マクロによってトリガする条件を特定するためのオプションを表示する。条件フィールド６１２に表示される正確な値（たとえば、「ユーザから」、または「グループ内のユーザから」など）は、たとえば、プロパティフィールド６０８におけるユーザのエントリ（たとえば、「電子メール」）に依存し得る。ユーザが、プロパティフィールド６０８（たとえば、「スプレッドシート」）について異なる値を選択する場合、（たとえば、スプレッドシートに関係する）条件フィールド６１２に、値の異なるセットが表示され得る。
【０１４５】
検査サービスフィールド６１４は、マクロの実行のために情報を収集する際に、マクロが検査すべきアプリケーションおよびマクロの外部のサービスを特定することができる。たとえば、検査サービスフィールド６１４において「ロケータ」を選択することによって、ユーザは、そのマクロは、その実行中に、送信者の場所、ユーザＸの場所、または電子メールのカーボンコピー列に列挙された特定のユーザの場所、あるいは他の選択肢を検査しなければならないことを定義していることがある。サービス値フィールド６１６は、参照される１つまたは複数のサービスから、どのような具体的な値をマクロに戻すべきかを特定する。場所は、この場合、たとえば、ほぼ実時間のＧＰＳロケーション、セルラー電話三角測量によって追跡される場所、ストリートアドレス、郵便番号、または任意の他の適当な位置特定基準に基づくことができる。
【０１４６】
いくつかの実装形態では、マクロ処理データエリア６０４は、マクロにおいてブール演算子を使用するための様々なメカニズムを含むことができる。これらのメカニズムは、さらに、条件フィールド６１２および（ＡＮＤ）検査サービスフィールド６１４を有することによって示唆される暗示的「ＡＮＤ」とすることができる。たとえば、条件フィールド６１２は、ラジオボタンとして示される任意の／すべての制御６１７のセットとともに使用されることができ、それにより、明示的ＡＮＤ／ＯＲオペレータおよび論理の仕様を容易にすることができる。たとえば、ユーザは、検査サービスフィールド６１４において検査される個別のオプションのうちのいずれか（またはすべて）が、マクロについて考慮されるべきであることを特定するために、任意の／すべての制御６１７の「ＡＮＹ（いずれか）」（または「ＡＬＬ（全部）」）オプションを選択することができる。
【０１４７】
いくつかの実装形態では、フィールド名、フィールド値、ブール演算子および適切に配置されている丸括弧のストレートなテキスト入力のようなさらなるブール制御およびフィールドを、マクロ構築システム６００上の他のフィールドなどに与えることができる。より高度なタイプの制御のそれらのタイプは、たとえば、高度なブール制御６１８を選択することによって到達可能であり得るスクリーンまたは他のインターフェース上に含まれ得る。いくつかの実装形態では、高度なブール制御６１８にアクセスすることにより、ユーザは、マクロ全体に関する既存の論理を参照できるようになり、たとえば、データエリア６０２〜６０６で行われた更新されたユーザ選択および入力によって表される現在の論理が含まれ得る。システム６００は、自動的なシンタックス検査を実行することができ、ユーザによって入力される（またはリストから選択される）フィールドは、それらのフィールドが照合される値と互換性のあることを確認することができる。
【０１４８】
マクロ出力データエリア６０６は、プロパティフィールド６２０と、アクションフィールド６２２と、パラメータフィールド６２４とを含む。これらのフィールドは、たとえば、マクロの特定の出力（たとえば、これを行って、それを送って、特定のファイル、フィールドまたはスプレッドシートセルを更新する）を指定するために使用されることができる。図６に示す例では、プロパティフィールド６２０に関して「電子メール」が選択され、その結果、アクションフィールド６２２に表示されている電子メール関連エントリが生じる。したがって、このマクロに関する出力は、何らかの１つまたは複数のアドレスに、何らかの形態の電子メールを送ることになる。
【０１４９】
パラメータフィールド６２４は、必要なときに（たとえば、その上にある選択およびフィールドに基づいて）、フィールドまたは選択に値を割り当てるために使用され得る。いくつかの実装形態では、フィールドの値を、フィールドの「背後」で定義することができ、それにより、フィールド名上でダブルクリックすることにより、フィールドに関する値を定義するためのポップアップを表示することができ、フィールドにわたってホバリングすることにより、フィールドの現在の値を表示することができる。
【０１５０】
図６に示す例示的なマクロ構成スクリーンでは、マクロトリガデータエリア６０２は、（たとえば、アクティビティフィールド６１０において特定された）「着信メッセージ」が、電子メールアプリケーションによって（たとえば、プロパティフィールド６０８ごとに）受信されるとき、マクロをトリガするように定義されている。マクロ処理データエリア６０４は、特定のユーザを特定し、電子メールの本文中に特定のワードを含み、ユーザＸの場所に基づく条件６１２を含む。これらの条件に関する値は、たとえば、他のパラメータフィールド（図６には図示されない）で定義されることができる。したがって、そのような条件が満たされる場合、マクロは完了に実行する。マクロ出力データエリア６０６は、「電子メール」が現在のマクロの出力のタイプであること、および実行すべきアクションが（たとえば、アクションフィールド６２２において定義される）「ｔｅｘｔ  ｍｅ」であることを示す。特定のユーザからの着信電子メールメッセージのトリガイベントの検出時、件名中に特定のワードを含んでおり、ユーザＸの場所に基づいて、データエリア６０２から６０６中に値を入力した結果、マクロは、メッセージングアプリケーションを使用して、着信電子メールのターゲットにテキストメッセージを送り、そのような電子メールが受信されたことを伝える。例示的なマクロ構成スクリーンの利点は、関数を実行する基礎をなすマクロを隠しながら、簡潔なＧＵＩフォーマットでユーザにこの情報を与えるということであり、ユーザは、どのようにマクロを書き込むか、またはどのようにマクロを認識するかさえ知らなくてもよい。スクリーンを使用して、完全なマクロを構築する、またはマクロの一部を構築することができ、ユーザは、スクリーンによって与えられることができないマクロに、他のコードを追加することができる。
【０１５１】
マクロを定義するためのユーザインターフェースは、たとえば、入力または更新されたマクロを「保存」するための、マクロへの１つまたは複数の更新または変更を「戻す」ための、得られたマクロを「表示」するための、あるいは保存せずに編集を「キャンセル」するためのボタンまたは制御６２６を含むことができる。「コピー元」フィールド６２８は、ユーザが、既存のマクロをコピーすること、または既存のマクロに関するパラメータをコピーすることによって、新しいマクロを作成し、定義することを可能にし、それにより、ユーザが次いで変更することができる初期状態のスクリーンがプリセットされる。説明フィールド６３０は、ユーザが、マクロの目的を記録する、またはマクロの名前に取り込まれなかったマクロに対する何らかのレベルの意味の提供することを可能にする。
【０１５２】
いくつかの実装形態では、マクロ定義は、マクロがいつ最初に効果を生じるかに関する発効日６３２、マクロがいつ実行しななくなるかに関する失効日６３４、および、たとえば、マクロが実行する日（平日、月曜日、週末など）を特定するために使用され得るスケジュールまたは「実行」フィールド６３６など、それらと関連付けられた時間要素、を有することができる。日付フィールドは、特定の日付もしくは日付範囲および／または時間を含み得、あるいは列挙型（たとえば、現在、定義なし、平日など）を含むことができる。
【０１５３】
いくつかの実装形態では、システム６００によって提供されるユーザインターフェースは、スマートフォンのように、より小さいディスプレイを有するユーザデバイス上で実行するように適合することができる。たとえば、データエリア６０２〜６０６および他のフィールドは、順に提供することができる。いくつかの実装形態では、スクロールバーをスクリーン全体に提供することができ、それにより、ユーザが、同時に１つの一般的なエリアにナビゲートすることができるようになる。
【０１５４】
システム６００を使用して構築されるマクロは、システム１００および２００ならびに図１および図２に関して上述したセキュリティ態様とともに使用されることができる。具体的には、構築されたマクロはそれぞれ、ケーパビリティベースのセキュリティラッパー中にラッピングされ得る。システム６００は、たとえば、マクロを使用することができる他のユーザの名前、ならびに他のユーザが操作（たとえば、電子メールを送る、スプレッドシートを更新するなど）を実行することができる範囲を含んで、セキュリティを可能にすることができるセキュリティ関連フィールド（図示せず）を含むことができる。
【０１５５】
そのようなケーパビリティベースのセキュリティは、コードが実行することを許可するときに、ユーザの意図を考慮に入れることによって利点を提供することができる。そのようなシステムでは、例として、実行しているユーザは、ケーパビリティと呼ばれる、ユーザが許可したいと望む各操作をカプセル化するオブジェクトを作成し、実行することになっている信頼できないコードに、これらのオブジェクトをパスする。これらのオブジェクトは、信頼できないコードがシステムによって実行されるとき、ペイロードの一部（たとえば、ラッパーの一部）になり、信頼できないコードによって修正または作成することができない。信頼できないコードが、基礎をなす信用できるリソース（たとえば、従来の方法では、ファイルシステムなど）にアクセスしようとするとき、信用できるリソースをラッピングする、ユーザが作成したオブジェクトのみを介してアクセスすることができる。ケーパビリティは、信頼できないコードに許可されるアクセスを介したファイングレイン制御を可能にすることができ、最小特権に原理に準拠する実行環境を構築するために使用され得る。これは、任意の所与のモジュールが、その関数を行うことができるようにするために必要な、また、その関数を行うことができなくするために必要なアクションの最小セットのみ実行をすることができることを意味する。
【０１５６】
ホスティングされたマクロベースのシステムに関する例示的なシステムおよびプロセスについて記載してきたが、そのようなシステムおよびプロセスを採用するための一連の例について、以下の段落に記載する。以下の記載のうちの多くは、これらの場合の各々を処理するために、どのようにシステムがケーパビリティベースのセキュリティを使用することができるか、また、そのような例の一部であり得る何らかのリスクをどのように緩和するかについて論じている。
【実施例１】
【０１５７】
実施例１：販売ポリシーエンフォースメント
組織に対する販売部門が、潜在顧客に関する提案をスプレッドシートに作成しているシナリオについて考察されたい。スプレッドシートには、企業が作り出すすべての製品および機能の費用が含まれている。販売員は、スプレッドシートを下に向かって見ながら、アクティブであるか非アクティブ（すなわち、現在販売可能か）どうかにしたがって、特徴の隣の列に機能に１または０のマーク付すことができる。スプレッドシートは、様々な割引額および価格乗数を含む、価格設定を計算するための式を含むことができる。
【０１５８】
列項目の間には、たとえば、相反することがあるいくつかの特徴を含む多くの依存関係が存在することがある。これらのルールを、マクロと表すことができる。代替的には、これらのルールを、ルールを実施するためにスプレッドシートに添付されたマクロへとコンパイルされるルール言語で表すことができる。さらなるルールは、エラー検査および他の整合性検査で表すことができる。さらに、領域または他のファクタに基づく、販売促進と関連付けられたルールまたはトリガされたイベントが存在することがある。
【０１５９】
そのようなルールについて考察すべき１つの点は、それらをどのように管理するかということである。たとえば、マクロを有すること、および／またはルールは、シートが参照する共有されたライブラリに存在することが役立つことあり、それにより、管理者は、シート中の値を容易に更新することができる。また、マクロは、様々な小企業所有者にシステム管理者が提供するツールのスイートの一部でなければならず、そのようなユーザの各々が、マクロにアクセスし、実行することを可能にする。管理者は、マクロを、ホスティングされたシステム上でセントラルロケーションから更新できるようにしておくことができ、ユーザは、セントラルロケーションからマクロをすべて実行することができる。
【０１６０】
したがって、マクロは、マクロにアクセスする各スプレッドシートに対する単一の「スロット」との共有モードで発行することができる。別のユーザは、自分のスプレッドシート中のマクロを示すＵＲＬを含むことによって、自分のスプレッドシートにマクロをインポートすることができ、該当するスプレッドシートに書き込むための権限をマクロに許可することができる。
【実施例２】
【０１６１】
実施例２：投資ユーザインターフェース
投資会社がスプレッドシートの価格設定モデルを有し、外部サービスから株価情報を引き、勧告（たとえば、購入する、保持するなど）を発生するために、その株価情報をスプレッドシートに注入したいと希望しているシナリオについて考察されたい。
【０１６２】
スクリプトは、スプレッドシートから読み取り、スプレッドシートに書き込み、かつ、外部の株価情報サービスにアクセスする必要があることがある。作成者は、スクリプトを特定の株価情報サービスのみに制限するスクリプトアクセスを許可することができる。作成者がそのスロットを空のままにする場合、サービスを起動するユーザに、サービスに接触するための権限をスクリプトに許可しているかどうかだけでなく、どの特定のサービスに接触するかについて尋ねなければならない。そのように、ユーザは、スクリプトが行うことができることを抑制することができ、スクリプトは、任意の他のサービスに接触することができなくなる。
【０１６３】
ユーザが、自分自身のスプレッドシートに含めるために、このマクロを（たとえば、それを参照するのではなく、コピーするために）他のユーザと共有したいと希望する場合、他のユーザは、外部の株価情報サービスにアクセスするために、自分自身の権限を必要とする。他のユーザにセントラルロケーションのマクロを指定させることによって、ユーザがマクロを共有する場合、複数のユーザは、自身で外部の株価情報サービスに接触するための権限を有しないとしても、マクロを使用できることがある。複数のユーザに、そのような状況において、（複数のユーザは、自分自身のスクリプトからサービスにアクセスすることができないが）スクリプト自体が有する権限を許可することがある。
【実施例３】
【０１６４】
実施例３：事故報告
バス輸送業者は、その事故報告を自動化することに関心があるシナリオについて考察されたい。事故に遭ったドライバは、たとえば、バスの場所などの情報を記録するスプレッドシートのフォームをすべて記入するために、ホスティングされたサービスにアクセスすることができる。マクロを使用して、様々な監督者が検討するために、報告を監督者にルーティングすることができる。
【０１６５】
マクロは、（たとえば、マクロがアクセスできる別のスプレッドシート、データベースクエリなどを介して）監督者を特定し、法務部の正確な電子メールアドレスを発生し、法務部の人員とドキュメントを共有するだけでなく、電子メールを送り、他のスプレッドシート（たとえば、事故報告が処理の最中である記録を含むスプレッドシート）にアクセスすることが必要なことがある。法務部の人員は、さらにスプレッドシートを編集し、次いで、マクロを先に進めるイベントをトリガしなければならなくなることがある。マクロは、特定のユーザがアドレスを有する時間ごとに、マクロの位相を休止し、次いで、次のユーザがマクロを選び出すのを待つように、継続モードで動作することができる。イベントによってアウェイクされると、誰が（たとえば、ドキュメント自体に記録される、またはマクロに送られたイベントの情報に記録される）ドキュメントをサインオフしたかを確かめるために検査することができ、サインオフする必要がある誰もが、サインオフするまで待つことができ、その時点で、マクロは、次いで、他の誰かに通知し、事故が完全に処理されたとことを（たとえば、さらに別のスプレッドシート中に）記録することができる。いくつかの実装形態では、２つのイベントが同時に着信する場合、それらのイベントをキューイングすることができ、それにより、マクロは、一度に１つの継続のみを処理する。ワークフロー状態を、マクロのローカル可変コンテキストに単に保持するだけでなく、スプレッドシートに部分的に記録することができる。
【０１６６】
関係するシナリオでは、（たとえば、ワークフローに基づいて）完全には処理されておらず、クローズしていない事故報告を問い合わせることができる。このクエリは、事故報告に関する状態情報を含むスプレッドシートにアクセスすること（または、単にスプレッドシートを開くこと）を必要とすることがある。
【実施例４】
【０１６７】
実施例４：バス運行予定報告
バス輸送事業者は、ある特定のバス路線の遅延を顧客に通知できるようにしたいと考えるがシナリオについて考察されたい。事業者は、自社のバスの予想時間／場所を更新するためにスプレッドシートを編集することができる。そのような編集は、たとえば、バスのロケーションデータを受信し、そのような情報に基づいて（たとえば、バスがバス停Ｘを出たことを特定し、時間Ｙを追加してバス停Ｘ＋１への到達時刻を計算することによって）推定到着時間を計算するマクロによって、自動的に行うことができる。スプレッドシート中のマクロは、ある特定のバス路線が、いつ著しく遅延するか特定することができ、著しく遅延した場合、サインアップした顧客にテキストメッセージを送って通知することができる。たとえば、ユーザが中心部にいて、自分の通常のバス停から２区画以内にいるときはいつでも、ユーザは、テキストメッセージを受信するようにサブスクライブすることができ、ユーザのルート上のバス（ｅｎ  ｒｏｕｔｅ  ｂｕｓｅｓ）（たとえば、バス番号６９２、６９８など）のうちいずれかは、５分超遅れてそのコーナーに到着する可能性がある。ユーザのモバイルデバイス上のアプリケーションは、ホスティングされたサービスに、ユーザの記録のフラグをアクティブ化させるように、ユーザが適当な場所にいるときにトリガすることができ、それにより、ユーザは、（たとえば、ユーザのＧＰＳ座標を最寄りのバス停の場所に変換することによって）ユーザが手動で場所を入力する必要なく、ユーザの現在の場所を対象とする更新を受信する。
【０１６８】
セキュリティを目的として、マクロの作成者は、ユーザの制限されたセット（たとえば、管理者が制御する別のスプレッドシートに列挙されるもの）にテキストメッセージを送るためのケーパビリティを許可することができ、このマクロをシートにのみローカルとなり、公にはアクセス可能でないように発行する可能性がある。作成者は、シートへの書込みのケーパビリティをマクロに許可しない。このシナリオは、ドキュメントまたは他の集合で定義されるグループ（たとえば、スプレッドシートまたはいくつかの他のグループ定義）を参照することによって、ケーパビリティの広さを特定する可能性を提起するものである。
【実施例５】
【０１６９】
実施例５：ロケーションベースのイベントトリガ
あるユーザが、各コンサートの住所および日付／時間を含めて、スプレッドシートのコンサート推薦のセットを更新するシナリオについて考察されたい。他のユーザは、これらのコンサートのうちの１つの近隣にいて、コンサートの時間が近づいているときにはいつでも、当該ユーザに通知するように要請することによって、このスプレッドシートからの通知に加入することができる。この場合の通知は、たとえば、マッピングサービス、（推薦を行うユーザの友人を特定するための）ソーシャルネットワーキングサービス、（友人がいつ特定の場所にいるかについて特定するための）ロケーションサービス、および通知を送るためのテキストメッセージングサービスのようなサービスを使用することができる。したがって、ホスティングされたマクロは、このようなシナリオに特に適している。
【実施例６】
【０１７０】
実施例６：調査
ユーザが、調査または他のデータエントリフォームを作成し、複数の他のユーザに電子メールフォームを送り、各ユーザがどのようにフォームに記入するかを示す線をスプレッドシートに加えるシナリオについて考察されたい。
【０１７１】
マクロは、人々のセットに、ある特定のアドレスから、ユーザによって提供されるアドレスのセットに電子メールを送るためのケーパビリティを許可されなければならない。マクロは、たとえば、ホスティングされたサービスからユーザ識別情報フィーチャにアクセスすることによって、または、応答中にユーザＩＤ（たとえば、電子メールアドレス）を特定することによって、各ユーザからのフォームのデータの受信を追跡することができる。次いで、マクロは、スプレッドシートにアクセスし、スプレッドシートの１つの列にユーザＩＤを、また、スプレッドシートの他の列にユーザの１つまたは複数の回答を入力することができる。このようにして、第１のユーザは、（たとえば、既存の友人リストまたは電子メールリストから判断される）グループにフォームを迅速に送り、そのグループからのコメントを自動的に表にすることができる。
【実施例７】
【０１７２】
実施例７：購入注文書承認
ユーザが、購入注文書（たとえば、「私はＱティップスがＸ千ケース欲しい。売り手はＸＹＺが好ましい」）を起動するシナリオについて考察されたい。ユーザが購入注文書（ＰＯ）を提出すると、マクロは、品目などのデータに基づいて、合計代金、部門、だれがＰＯを承認しなければならないか、などを判断することができる。たとえば、合計額が定められたしきい値よりも高額である場合、ＰＯは責任者承認（ｃｈａｉｒ  ａｐｐｒｏｖａｌ）を必要とすることがある。承認者がＰＯを承認すると、マクロで定義されるユーザのリスト、データベースまたはスプレッドシートなどのワークフローに沿って進めることができ、マクロは、誰がＰＯを承認して、誰がＰＯを承認しなかったかを記憶するためにローカル状態を保つことになり、すべての承認者が承認したときに、ＰＯは購買に送られる。
【０１７３】
このマクロは、継続に関して最も良好に動作することができる。マクロは、所与の購入注文書を承認または拒否するためにそれらのユーザがクリックすることができるフォームまたはＵＲＬをもつドキュメントへのリンクまたは添付ファイルを用いて、ある特定のユーザに電子メールを送るためのケーパビリティを有し、たとえば、部門責任者などの情報を備えた他のスプレッドシートまたはデータベースにアクセスできることになる。
【実施例８】
【０１７４】
実施例８：メールマージ
ユーザは、名前、アドレス、電子メールアドレスなどの名前スプレッドシートと、別のドキュメント（たとえば、電子メール、スプレッドシートなど）を有し、そして、後者のドキュメント中のフィールドをリストからのフィールドと交換し、名前シート中で特定される受信者に、マージされたドキュメントを電子メールで送りたいと希望するシナリオについて考察されたい。
【０１７５】
セキュリティの場合、これは、特定のドキュメントおよび名前のリストのコンテキストにおいて完全に動作することができるマクロである。ケーパビリティは、「このテーブルの第１の列において指定されているように、リストに電子メールを送ることを可能にする」こと、ならびにテンプレートドキュメントにアクセスすることである。マクロ自体は、スプレッドシート列およびいくつかのテンプレートから計算されるデータを用いて、リスト中にある人々に電子メールを送る。メールマージマクロ（ｍａｉｌ  ｍｅｒｇｉｎｇ  ｍａｃｒｏ）に関する特定のフォームは、よく知られている。
【実施例９】
【０１７６】
実施例９：医師のシフトスケジュール
複数の医師が、同じスプレッドシートにアクセスし、そのシートを編集しているシナリオについて考察されたい。マクロは、各医師が、スプレッドシートについて、フォーマッティングまたはスケジュールルール（たとえば、ある時間期間におけるシフトの最大数または最小数）にしたがっていたかを確認するために、スプレッドシートを検査することができる。各ユーザは、たとえば、より直観的なアクセスのために（たとえば、反復する時刻表を作成するために）、カレンダーアプリケーションを用いてシートを同期させるために、ボタンをクリックしてマクロを実行することができることがある。
また、双方向同期を行うこともできる。
【０１７７】
マクロを拡張して、様々な他のカレンダーアプリケーションとインターフェースできるようにすることができる。また、マクロは、医師がどのくらい多くのシフトにサインアップしているかを追跡し続けるのを補助するために、また、カレンダーアプリケーションを用いてスプレッドシートを同期させるために、医師がルールに従っているかを、医師が検証するのを補助することがある。
【実施例１０】
【０１７８】
実施例１０：電子メールプラグイン
ユーザは、自分のアカウントへの着信電子メールの各インスタンスを特定し、電子メールの送信者識別情報および件名を、電子メールからコピーさせる、およびユーザのアカウントと関連付けられたスプレッドシートの次の開いた行にコピーさせるためのマクロを定義することができる。このようにして、ユーザは、自分のアカウントへの着信電子メールの最新のログを自動的に保有することができる。
【実施例１１】
【０１７９】
実施例１１：ブログプラグイン
サービス上でブロガーであるユーザは、ブログへのユーザコメントを処理することのためのマクロを展開することができる。たとえば、コメンターに関する情報は、たとえば、コメントの隣にコメンターのロケーションを（たとえば、ユーザからのコメントに対応するＩＰアドレスを使用して）示すために使用され得る。さらに、ユーザは、すべてコメントを、冒涜のようなトリガワードのブラックリストと比較させることができ、それにより、不適当な言葉を含んでいるコメントが投稿されるといつでも、ユーザは、テキストメッセージ警報を受信する。次いで、ユーザは、不適当な言葉を削除するために、ブログにログインすることができる。
【実施例１２】
【０１８０】
実施例１２：料金請求可能時間
コンサルタントであるユーザは、カレンダーアプリケーションにおいて、自分の料金請求可能時間を追跡することができる。ユーザは、周期的に（たとえば、１週間に１度、または１ヶ月に１度）、そのようなエントリを（たとえば、フォームｘ．ｘの時間エントリを認識することによって）解析するためのマクロを使用することができる。次いで、マクロは、時間を課金されなければならないプロジェクト番号を特定するために、エントリと関連付けられたテキスト（たとえば、特定の別個のプロジェクトにキーワードおよびクライアント名を相関させるリスト）を使用することができ、次いで、課金操作を実行するために、スプレッドシート中のセルにデータを加えることができる。次いで、マクロは、（１時間当たりの課金レートを適用した後に）スプレッドシートからの値を、ワード処理プログラムによって発生される請求書にマージすることができ、次いで、得られたドキュメントをクライアントに電子メールで送ることができる。クライアントが、ホスティングされたシステムの登録ユーザである場合、マクロは、（クライアントが請求額を支払う意図を示すために使用することができる選択可能なメカニズムを含むフォームなどを介して）直接的に支払要求を行うことができ、その後、クライアントは、クライアント口座からコンサルタント口座に送金するための制御を選択することができる。
【実施例１３】
【０１８１】
実施例１３：運転方向メールマージ
ホスティングされたシステムのユーザは、複数の自分の友人に、来るべきパーティーの招待状を送りたいと希望することがある。したがって、ユーザは、パーティーへの招待状の外装を準備することがある。次いで、ユーザは、実際に招待状へのメールマージを実行するために、（たとえば、ホスティングされたシステム上の連絡先アプリケーション中の）友人および友人の住所のリストにマクロを指定することができる。しかしながら、ユーザは、また、ユーザ自身の住所（パーティーの場所）と、招待状が現在準備されている友人の、リストから得た住所とを、マッピングサービスに供給することができ、それにより、友人の家とパーティーとの間の運転方向を上に重ね合わせた地図を示すイメージを、標準的なＡＰＩに従って戻すことができる。マクロは、イメージを招待状に組み込むことができ、次いで、その招待状を、自動的に注文通り発生した方向とともに友人に送ることができる。
【０１８２】
図７は、一般的なコンピュータデバイス７００および一般的なモバイルコンピュータデバイス７５０の一例を示し、これらのデバイスは、本明細書に記載される技法とともに使用することができる。コンピューティングデバイス７００は、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、および他の適当なコンピュータなど、様々な形態のデジタルコンピュータを表すことが意図される。コンピューティングデバイス７５０は、携帯情報端末、セルラー電話、スマートフォン、および他の同様のコンピューティングデバイスなど、様々な形態のモバイルデバイスを表すことが意図される。本明細書に示される構成要素、それらの接続および関係、ならびにそれらの機能は、単に例示的なものにすぎず、本明細書に記載され、および／または特許請求される発明の実装形態を制限するものではない。
【０１８３】
コンピューティングデバイス７００は、プロセッサ７０２と、メモリ７０４と、ストレージデバイス７０６と、メモリ７０４および高速拡張ポート７１０に接続している高速インターフェース７０８と、低速バス７１４およびストレージデバイス７０６に接続している低速インターフェース７１２とを含む。構成要素７０２、７０４、７０６、７０８、７１０、および７１２の各々は、様々なバスを使用して相互接続され、適宜に、共通のマザーボード上に、または他の方法で取り付けることができる。プロセッサ７０２は、高速インターフェース７０８に結合されたディスプレイ７１６のような外部の入出力デバイス上に、ＧＵＩに関するグラフィカル情報を表示するための、メモリ７０４またはストレージデバイス７０６に保存された命令を含む、コンピューティングデバイス７００内の実行の命令を処理することができる。他の実装形態では、複数のプロセッサおよび／または複数のバスは、適宜に、複数のメモリおよびメモリのタイプとともに使用することができる。また、複数のコンピューティングデバイス７００を（たとえば、サーババンク、ブレードサーバのグループ、またはマルチプロセッサシステムとして）、必要な操作の一部分を提供する各デバイスと接続してもよい。
【０１８４】
メモリ７０４は、コンピューティングデバイス７００内の情報を保存する。一実装形態では、メモリ７０４は、揮発性メモリユニットまたはユニットである。別の実装形態では、メモリ７０４は、不揮発性メモリユニットまたはユニットである。また、メモリ７０４は、磁気または光学ディスクなどの別の形態のコンピュータ可読媒体でもよい。
【０１８５】
ストレージデバイス７０６は、コンピューティングデバイス７００に大容量ストレージを提供することができる。一実装形態では、ストレージデバイス７０６は、コンピュータ可読媒体（たとえば、フロッピー（登録商標）ディスクデバイス、ハードディスクデバイス、光学ディスクデバイスまたはテープデバイス）、フラッシュメモリまたは他の同様の固体メモリデバイス、あるいはストレージエリアネットワークまたは他の構成のデバイスを含むデバイスのアレイであり得、またはそれらを含むことができる。コンピュータプログラム製品は、情報キャリヤ中に有形で実施され得る。また、コンピュータプログラム製品は、上述したもののように、実行時に、１つまたは複数のメソッドを実行する命令を含むことができる。情報キャリヤは、メモリ７０４、ストレージデバイス７０６、プロセッサ７０２上のメモリ、または伝播された信号のようなコンピュータ可読媒体または機械可読媒体である。
【０１８６】
高速コントローラ７０８は、コンピューティングデバイス７００に対する帯域幅を大量に使用する（ｂａｎｄｗｉｄｔｈ−ｉｎｔｅｎｓｉｖｅ）操作を管理し、低速コントローラ７１２はより低い帯域幅を大量に使用する（ｌｏｗｅｒ  ｂａｎｄｗｉｄｔｈ−ｉｎｔｅｎｓｉｖｅ）操作を管理する。機能のそのような割振りは、例示的なものにすぎない。一実装形態では、高速コントローラ７０８は、（たとえば、グラフィックスプロセッサまたはアクセラレータを介して）メモリ７０４、ディスプレイ７１６に、および、様々な拡張カード（図示せず）を受け付けることができる高速拡張ポート７１０に結合される。この実装形態では、低速コントローラ７１２は、ストレージデバイス７０６と低速拡張ポート７１４とに結合されている。低速拡張ポートには、様々な通信ポート（たとえば、ＵＳＢ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、イーサネット（登録商標）、ワイヤレスイーサネット（登録商標））が含まれるが、これは、たとえば、キーボード、ポインティングデバイス、スキャナ、またはスイッチもしくはルータなどのネットワークデバイスなど、１つまたは複数の入出力デバイスに、たとえばネットワークアダプタを介して、結合することができる。
【０１８７】
コンピューティングデバイス７００は、図示のように、複数の異なる形態で実装することができる。たとえば、コンピューティングデバイス７００は、標準的なサーバ７２０として、またはそのようなサーバのグループにおいて複数台、実装することができる。また、コンピューティングデバイス７００は、ラックサーバシステム７２４の一部として実装することもできる。さらに、コンピューティングデバイス７００は、ラップトップコンピュータ７２２などのパーソナルコンピュータに実装することができる。代替的には、コンピューティングデバイス７００の構成要素は、デバイス７５０などのモバイルデバイス（図示せず）の他の構成要素と組み合わせることができる。このようなデバイスの各々は、コンピューティングデバイス７００、７５０のうち１つまたは複数を含むことができ、互いと通信する複数のコンピューティングデバイス７００、７５０から、システム全体を構成することができる。
【０１８８】
コンピューティングデバイス７５０は、他の構成要素のうち、プロセッサ７５２と、メモリ７６４と、ディスプレイ７５４などの入出力デバイスと、通信インターフェース７６６と、トランシーバ７６８とを含む。また、デバイス７５０は、追加のストレージを提供するために、マイクロドライブまたは他のデバイスなどのストレージデバイスを備えてもよい。構成要素７５０、７５２、７６４、７５４、７６６、および７６８の各々は、様々なバスを使用して相互接続され、構成要素のうちのいくつかは、適宜、共通のマザーボード上に、または他の方法で取り付けることができる。
【０１８９】
プロセッサ７５２は、メモリ７６４に保存された命令を含む、コンピューティングデバイス７５０内の命令を実行することができる。プロセッサは、別々の複数のアナログプロセッサとデジタルプロセッサを含むチップのチップセットとして実装することができる。プロセッサは、たとえば、ユーザインターフェース、デバイス７５０によって実行されるアプリケーション、およびデバイス７５０による無線通信の制御など、デバイス７５０の他の構成要素の調整を行うことができる。
【０１９０】
プロセッサ７５２は、ディスプレイ７５４に結合された制御インターフェース７５８およびディスプレイインタフェース７５６を介して、ユーザと通信することができる。ディスプレイ７５４は、たとえば、ＴＦＴ  ＬＣＤディスプレイ（薄膜トランジスタ液晶ディスプレイ）またはＯＬＥＤ（有機発光ダイオード）ディスプレイ、あるいは他の適切なディスプレイ技術であり得る。ディスプレイインタフェース７５６は、グラフィカル情報および他の情報をユーザに提示するようにディスプレイ７５４を駆動するための適切な回路を備えることができる。制御インターフェース７５８は、ユーザからコマンドを受信し、プロセッサ７５２へのサブミッションのためにそれらを変換することができる。さらに、外部インターフェース７６２は、プロセッサ７５２と通信しており、それにより、他のデバイスとのデバイス７５０の近距離通信が可能になる。外部インターフェース７６２は、たとえば、いくつかの実装形態では有線通信を、または他の実装形態では無線通信を行うことができ、また、複数のインターフェースを使用してもよい。
【０１９１】
メモリ７６４は、コンピューティングデバイス７５０内の情報を保存する。メモリ７６４は、１つまたは複数のコンピュータ可読な媒体、１つまたは複数の揮発性メモリユニット、１つまたは複数の不揮発性メモリユニットとして実装することができる。また、拡張メモリ７７４が提供され、たとえば、ＳＩＭＭ（シングルインラインメモリモジュール）カードインタフェースを含むことができる拡張インターフェース７７２を介してデバイス７５０に接続され得る。このような拡張メモリ７７４は、デバイス７５０に追加のストレージスペースを提供することができ、またはデバイス７５０のアプリケーションまたは他の情報を保存することができる。具体的には、拡張メモリ７７４は、上述の処理を実行または補足するための命令を含むことができ、安全な情報も含むことができる。したがって、たとえば、デバイス７５０のセキュリティモジュールとして、拡張メモリ７７４を提供することができ、デバイス７５０の安全な使用を可能にする命令を用いて、拡張メモリ７７４をプログラムすることができる。さらに、たとえば、ハッカー行為が不可能な様式でＳＩＭＭカード上に識別情報を配置することによって、ＳＩＭＭカードを介して、安全なアプリケーションを追加の情報と共に提供することができる
【０１９２】
メモリは、後述のように、たとえば、フラッシュメモリおよび／またはＮＶＲＡＭメモリを含むことができる。一実装形態では、コンピュータプログラム製品は情報キャリヤ中に有形が実施される。コンピュータプログラム製品は、上述のしたもののように、実行時に、１つまたは複数の方法を実行する命令を含む。情報キャリヤは、メモリ７６４、拡張メモリ７７４、プロセッサ７５２上のメモリ、またはトランシーバ７６８および外部インターフェース７６２を介して受信され得る伝播された信号のようなコンピュータ可読媒体なまたは機械可読媒体である。
【０１９３】
デバイス７５０は、必要な場合には、デジタル信号処理回路を含むことができる通信インターフェース７６６を介して、ワイヤレス通信することができる。通信インターフェース７６６は、とりわけ、ＧＳＭ（登録商標）音声通話、ＳＭＳメッセージング、ＥＭＳメッセージングまたはＭＭＳメッセージング、ＣＤＭＡ、ＴＤＭＡ、ＰＤＣ、ＷＣＤＭＡ（登録商標）、ＣＤＭＡ２０００、あるいはＧＰＲＳなどの、様々なモードまたはプロトコルに基づく通信を行うことができる。このような通信は、たとえば無線周波数トランシーバ７６８を介して行うことができる。さらに、短距離通信は、Ｂｌｕｅｔｏｏｔｈ（登録商標）、ＷｉＦｉ、または他のそのようなトランシーバ（図示せず）などを使用して行うことができる。さらに、ＧＰＳ（全地球測位システム）受信器モジュール７７０は、さらなるナビゲーション関連ワイヤレスデータおよびロケーション関連ワイヤレスデータを、デバイス７５０に提供することができ、これらの情報は、デバイス７５０上で実行されるアプリケーションによって必要に応じて使用可能である。
【０１９４】
また、デバイス７５０は、音声コーデック７６０を使用して可聴通信することができる。音声コーデック７６０は、話された情報をユーザから受信して、それを使用可能なデジタル情報に変換することができる。音声コーデック７６０は同様に、たとえば、デバイス７５０のハンドセット中のスピーカなどを介して、ユーザが聞き取れる可聴音を発生することができる。このような音声は、音声電話通話からの音声を含み、記録された音声（たとえば、ボイスメッセージ、音楽ファイルなど）を含むことができ、また、デバイス７５０上で動作するアプリケーションによって発生された音声を含むことができる。
【０１９５】
コンピューティングデバイス７５０は、図７に示されるように、複数の異なる形態で実装することができる。たとえば、コンピューティングデバイス７５０は、セルラー電話７８０として実装することができる。コンピューティングデバイス７５０は、スマートフォン７８２、携帯情報端末、または他の同様のモバイルデバイスの一部として実装してもよい。
【０１９６】
また、デバイス７５０は、動きを感知することが可能な１つまたは複数の異なるデバイスを含むことができる。例としては、限定はされないが、加速度計およびコンパスが挙げられる。加速度計およびコンパス、あるいは、動きまたは位置を検出することが可能な他のデバイスは、任意の数の売り手から入手可能であり、様々な方法で動きを感知することができる。たとえば、加速度計は、加速中に変化を検出することができ、コンパスは、北磁点または南磁点に対する向きの変化を検出することができる。これらの動きの変化は、デバイス７５０によって検出することができ、本明細書で説明するプロセスおよび技法に従って、それぞれのデバイス７５０のディスプレイを更新するために使用されることができる。
【０１９７】
本明細書で説明したシステムおよび技法の種々の実装形態は、デジタル電子回路、集積回路、専用に設計されたＡＳＩＣ（特定用途向け集積回路）、コンピュータハードウェア、ファームウェア、ソフトウェア、および／またはその組合せにおいて実現することができる。これらの様々な実装形態は、ストレージシステム、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスとデータおよび命令を送受信するように結合された、専用または汎用とすることができる少なくとも１つのプログラム可能プロセッサを含むプログラム可能システム上で実行可能および／または解釈可能な１つまたは複数のコンピュータプログラムにおける実装形態を含むことができる。
【０１９８】
これらのコンピュータプログラム（プログラム、ソフトウェア、ソフトウェアアプリケーション、またはコードとしても知られる）は、プログラム可能なプロセッサに対する機械語命令を含み、高レベル手続き言語および／またはオブジェクト指向プログラミング言語で、ならびに／あるいはアセンブリ／機械言語で実装することができる。本明細書で使用される場合、用語「機械可読媒体」「コンピュータ可読媒体」は、機械語命令をマシン可読な信号として受け取るマシン可読な媒体を含む、機械語命令および／またはデータをプログラム可能なプロセッサに提供するために使用される任意のコンピュータプログラム製品、装置、および／またはデバイス（たとえば、磁気ディスク、光ディスク、メモリ、プログラマーブル論理デバイス（ＰＬＤ））を指す。用語「機械可読信号」は、機械語命令および／またはデータをプログラム可能なプロセッサに提供するために使用される任意の信号を指す。
【０１９９】
ユーザとの対話を行うために、本明細書で説明するシステムおよび技法は、情報をユーザに表示するための表示デバイス（たとえば、ＣＲＴ（陰極線管）モニタまたはＬＣＤ（液晶ディスプレイ）モニタ）と、ユーザがそれによりコンピュータに入力することのできるキーボードおよびポインティングデバイス（たとえば、マウスまたはトラックボール）とを有するコンピュータ上で実装することができる。ユーザとの対話を行うために、他の種類のデバイスも同様に使用することができ、たとえば、ユーザに提供されるフィードバックは、任意の形態の感覚的なフィードバック（たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック）とすることができ、ユーザからの入力は、音響入力、音声入力または触覚入力を含む任意の形態で受信することができる。
【０２００】
本明細書で説明するシステムおよび技法は、（たとえば、データサーバとして）バックエンドコンポーネントを含む、またはミドルウェアコンポーネント（たとえば、アプリケーションサーバ）を含む、またはフロントエンドコンポーネント（たとえば、ユーザが、本明細書で説明したシステムおよび技法の実装形態とそれを介して対話できるグラフィカルユーザインタフェースまたはウェブブラウザを有するクライアントコンピュータ）を含むコンピューティングシステム、あるいはこのようなバックエンドコンポーネント、ミドルウェアコンポーネント、またはフロントエンドコンポーネントの任意の組合せで実装することができる。このシステムの構成要素は、デジタルデータ通信（たとえば、通信ネットワーク）の任意の形態または媒体により相互接続することができる。通信ネットワークの例としては、ローカルエリアネットワーク（「ＬＡＮ」）、ワイドエリアネットワーク（「ＷＡＮ」）、およびインターネットが挙げられる。
【０２０１】
コンピューティングシステムは、クライアントとサーバとを含むことができる。クライアントおよびサーバは、一般に、互いに遠隔にあり、典型的には、通信ネットワークを介して対話する。クライアントとサーバの関係は、それぞれ対応するコンピュータ上で実行され、互いにクライアントサーバ関係を有するコンピュータプログラムにより生ずる。
【０２０２】
複数の実装形態について説明してきた。それにもかかわらず、本発明の精神および範囲から逸脱することなく、様々な変更をなし得ることが理解されよう。たとえば、本明細書の大部分は、特定のタイプのマクロに関して説明してきたが、他の形態のマクロならびにマクロの実行および記録に対する手法も対象とされる。
【０２０３】
さらに、各図に示された論理フローは、望ましい結果を達成するために、図示された特定の順序または連続する順序である必要はない。さらに、他のステップは設けても、または記載されたフローから複数のステップをなくしてもよく、また、記載されたシステムに他の構成要素を加えても、またはそこから除去してもよい。したがって、他の実施形態は、添付の特許請求の範囲に含まれる
【符号の説明】
【０２０４】
１００  ・・・  ホスティングされたコンピューティングシステム
１０２  ・・・  アプリケーション
１０４  ・・・  マクロフック
１０５  ・・・  外部イベント
１０６  ・・・  マクロサーバサブシステム
１０８  ・・・  ソーシャルネットワーク
１１０  ・・・  ロケーション（追跡）サービス
１１２  ・・・  マクロコード
１１４  ・・・  ｇｅｔ  ｎａｍｅ関数
１１６  ・・・  ｃｈｅｃｋ  ｎａｍｅ関数
１１８  ・・・  ｇｅｔ  ｌｏｃａｔｉｏｎ関数
２００  ・・・  ホスティングされたコンピュータシステム／サーバ側システム
２０２  ・・・  マクロサーバサブシステム
２０４  ・・・  スクリプトマネージャ
２０６  ・・・  スクリプト情報（ストレージ）データストア／スクリプト情報リポジトリ／スクリプト情報
２０８  ・・・  スクリプトエグゼキュータ
２１０  ・・・  ラッピングされたサービス
２１２  ・・・  ラッピングされたサービスのクリエータ
２１６  ・・・  コマンドサーブレット
２２０  ・・・  アプリケーション
２２２  ・・・  ロケーションサーバ
２２４  ・・・  ネットワーク
２２６  ・・・  ユーザデバイス
２２６ａ  ・・・  ウェブページ
２２６ｂ  ・・・  マクロコントローラ
２２８  ・・・  第三者プロセスおよびウェブページ
３００  ・・・  プロセス
４００  ・・・  プロセス
４０１ａ  ・・・  ブラウザ
４０１ｂ  ・・・  マクロサーバ
４３１  ・・・  プロセス
５００  ・・・  論理構造
５０２  ・・・  ユーザライブラリノード
５０４  ・・・  継続ノード
５０６  ・・・  リンクノード
５０８  ・・・  ユーザ認証ノード
６００  ・・・  マクロ構築システム
６０２  ・・・  マクロトリガデータエリア
６０４  ・・・  マクロ処理データエリア
６０６  ・・・  マクロ出力データエリア
６０８  ・・・  プロパティフィールド
６１０  ・・・  アクティビティフィールド
６１１  ・・・  パラメータフィールド
６１２  ・・・  条件フィールド
６１４  ・・・  検査サービスフィールド
６１６  ・・・  サービス値フィールド
６１８  ・・・  高度なブール制御
６２０  ・・・  プロパティフィールド
６２２  ・・・  アクションフィールド
６２４  ・・・  パラメータフィールド
６２６  ・・・  ボタンまたは制御
６２８  ・・・  コピー元フィールド
６３０  ・・・  説明フィールド
６３２  ・・・  発効日
６３４  ・・・  失効日
６３６  ・・・  実行フィールド
７００  ・・・  コンピュータデバイス／コンピューティングデバイス
７０２  ・・・  プロセッサ
７０４  ・・・  メモリ
７０６  ・・・  ストレージデバイス
７０８  ・・・  高速インターフェース／高速コントローラ
７１０  ・・・  高速拡張ポート
７１２  ・・・  低速インターフェース／低速コントローラ
７１４  ・・・  低速バス／低速拡張ポート
７１６  ・・・  ディスプレイ
７２２  ・・・  ラップトップコンピュータ
７２４  ・・・  ラックサーバシステム
７５０  ・・・  モバイルコンピュータデバイス／コンピューティングデバイス
７５２  ・・・  プロセッサ
７５４  ・・・  ディスプレイ
７５６  ・・・  ディスプレイインタフェース
７５８  ・・・  制御インターフェース
７６０  ・・・  音声コーデック
７６２  ・・・  外部インターフェース
７６４  ・・・  メモリ
７６６  ・・・  通信インターフェース
７６８  ・・・  （無線周波数）トランシーバ
７７０  ・・・  受信器モジュール
７７２  ・・・  拡張インターフェース
７７４  ・・・  拡張メモリ
【図１】
0006055015.tif 000002
【図２】
0006055015.tif 000003
【図３】
0006055015.tif 000004
【図４Ａ】
0006055015.tif 000005
【図４Ｂ】
0006055015.tif 000006
【図５】
0006055015.tif 000007
【図６】
0006055015.tif 000008
【図７】
0006055015.tif 000009