專利名稱:事件觸發(fā)的服務(wù)器端宏的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及基于網(wǎng)絡(luò)的電子內(nèi)容傳送。
技術(shù)背景
宏是可在一個或多個計(jì)算機(jī)應(yīng)用內(nèi)執(zhí)行以提供與這些應(yīng)用的增強(qiáng)且自動交互的一組指令,其中,至少一部分宏代表可另由應(yīng)用的用戶手動執(zhí)行的步驟。例如,可以寫一個宏來根據(jù)臺式計(jì)算機(jī)上的電子表格應(yīng)用中的某些數(shù)計(jì)算一個值并將該值復(fù)制到相關(guān)文字處理應(yīng)用。用戶可以給宏分配一個“熱鍵”組合,從而用戶可以通過簡單地按下熱鍵組合來運(yùn)行宏。又例如,可以寫一個宏以使得某些電子消息(例如來自配偶、客戶或上司的消息) 的重要性提高,從而計(jì)算裝置的用戶可以更容易地看到這些消息。一個熟知的基于宏的系統(tǒng)是用于微軟OFFICE產(chǎn)品套件應(yīng)用的Visual Basic。發(fā)明內(nèi)容
本文討論用于在通常稱為“云”的托管計(jì)算系統(tǒng)中創(chuàng)建并使用宏的系統(tǒng)和技術(shù)??梢詮暮攴?wù)器子系統(tǒng)而不是從客戶機(jī)設(shè)備存儲并執(zhí)行宏,由于只要合格的用戶可以上網(wǎng)并提供他們的證書,所有的合格用戶就可以從許多位置訪問宏,因而允許在用戶之間輕易地共享宏。
此外,宏可以容易地訪問由托管計(jì)算系統(tǒng)或來自獨(dú)立于托管計(jì)算機(jī)系統(tǒng)的第三方系統(tǒng)的多個應(yīng)用和服務(wù)。這些服務(wù)可包括提供有關(guān)多個用戶位置的信息(例如根據(jù)用戶移動裝置上的GPS確定的信息)的服務(wù)、提供新聞和天氣供給的服務(wù)以及其他這種服務(wù)。這些應(yīng)用可包括例如電子郵件和其他消息傳送應(yīng)用、如電子表格和文字處理器的生產(chǎn)應(yīng)用、 地圖應(yīng)用以及可以用單個呈現(xiàn)方式一起呈現(xiàn)的各種應(yīng)用的混合(可由用戶訪問,甚至由用戶開發(fā),以提供來自宏的自定義輸出)。
可由用網(wǎng)絡(luò)瀏覽器顯示的一個或多個網(wǎng)頁把應(yīng)用呈現(xiàn)給用戶。系統(tǒng)還可提供宏的記錄,其中用戶可以調(diào)用宏記錄器,記錄器可跟蹤用戶在計(jì)算機(jī)上的動作并將這些動作變成宏代碼,從而以后用戶運(yùn)行宏時(shí)可以自動重復(fù)這些動作。
即便在用戶未和特定宏處理的應(yīng)用交互時(shí),包括用戶未登錄托管系統(tǒng)的情況,也可由出現(xiàn)的事件調(diào)用某些宏。具體而言,如果宏在服務(wù)器子系統(tǒng)上存儲并執(zhí)行,可將服務(wù)器子系統(tǒng)設(shè)置用于監(jiān)控宏處理的整個系統(tǒng)中的特定事件。然后,這些事件可以觸發(fā)宏的調(diào)用, 宏可在服務(wù)器子系統(tǒng)上執(zhí)行。
宏可訪問系統(tǒng)上的服務(wù)或第三方服務(wù)。系統(tǒng)上的服務(wù)可授權(quán)訪問對應(yīng)于注冊到該系統(tǒng)的特定用戶的數(shù)據(jù)存儲,同時(shí)對訪問施加某些用戶可配置的安全措施。例如,可響應(yīng)于進(jìn)入用戶賬號的電子郵件消息調(diào)用宏,進(jìn)而把信息從消息復(fù)制到分配給該用戶賬號的電子表格(例如,這樣用戶可自動編譯顯示他們的所有到來消息的標(biāo)題行的電子表格)。該宏還可檢查一個或多個服務(wù),例如位置服務(wù)、天氣相關(guān)網(wǎng)站的數(shù)據(jù),或者該宏可采取使用托管系統(tǒng)或托管系統(tǒng)外部的系統(tǒng)的資源的動作,以為宏收集數(shù)據(jù)并用宏作出決策。然后,該宏可在用戶不在系統(tǒng)活動的情況下(例如未登錄到托管系統(tǒng),或者在用戶的客戶計(jì)算設(shè)備)采取動作,例如把消息信息放入電子表格、打電話給對應(yīng)于用戶賬號的號碼或其他這類動作。
宏可訪問的第三方服務(wù)可包括SOAP服務(wù)或可從與提供該服務(wù)的域分離的域訪問的、且提供用于通過互聯(lián)網(wǎng)共享信息的公知機(jī)制的其他類似服務(wù)。例如,第三方服務(wù)提供者可編譯最新天氣數(shù)據(jù),并根據(jù)請求使該數(shù)據(jù)為其他服務(wù)可用。
一個實(shí)現(xiàn)方式中,公開了管理計(jì)算機(jī)宏的計(jì)算機(jī)實(shí)現(xiàn)的方法。該方法包括在互聯(lián)網(wǎng)可訪問的托管計(jì)算機(jī)系統(tǒng)存儲計(jì)算機(jī)宏的代碼;將所存儲的代碼和托管計(jì)算機(jī)系統(tǒng)上的用戶賬號關(guān)聯(lián);并且,無論和用戶賬號關(guān)聯(lián)的用戶目前是否在托管計(jì)算機(jī)系統(tǒng)上活動,自動用托管計(jì)算機(jī)系統(tǒng)識別定義為指向宏的觸發(fā)事件。該方法還包括使用托管計(jì)算機(jī)系統(tǒng)上運(yùn)行的應(yīng)用執(zhí)行宏來產(chǎn)生宏結(jié)果,并把宏結(jié)果存儲在托管計(jì)算機(jī)系統(tǒng)上。該方法還可包括產(chǎn)生消息給和用戶賬號關(guān)聯(lián)的通信地址,通知用戶宏結(jié)果。
一些方面中,觸發(fā)事件包括定向到用戶賬號的到來數(shù)字通信。而且,觸發(fā)事件可包括確定和賬號所有人關(guān)聯(lián)的計(jì)算機(jī)設(shè)備用戶的位置。該方法還可包括把宏和托管計(jì)算機(jī)系統(tǒng)的登記用戶關(guān)聯(lián),并且根據(jù)登記用戶確立的訪問限制使宏為托管計(jì)算機(jī)系統(tǒng)的其他用戶可用。此外,可響應(yīng)于來自多個不同用戶賬號的觸發(fā)事件訪問宏。
一些其他方面中,該方法還包括從托管計(jì)算機(jī)遠(yuǎn)程的多個不同客戶計(jì)算機(jī)上運(yùn)行的多個應(yīng)用接收執(zhí)行宏的請求;在托管計(jì)算機(jī)系統(tǒng)上為來自該位置的每個請求自動執(zhí)行宏,并且響應(yīng)于執(zhí)行宏把執(zhí)行宏的結(jié)果提供給多個應(yīng)用的每個相應(yīng)應(yīng)用。執(zhí)行宏可包括調(diào)用托管計(jì)算機(jī)系統(tǒng)提供的多個不同托管服務(wù)。而且,執(zhí)行宏可包括調(diào)用獨(dú)立于托管計(jì)算機(jī)系統(tǒng)的第三方信息提供者提供的網(wǎng)絡(luò)服務(wù)。該方法還可包括把運(yùn)行在托管計(jì)算機(jī)系統(tǒng)上的第一應(yīng)用產(chǎn)生的信息轉(zhuǎn)換成不同格式并把轉(zhuǎn)換后的信息提供給托管計(jì)算機(jī)系統(tǒng)上運(yùn)行的第二應(yīng)用,而且自動把執(zhí)行宏的結(jié)果提供給在托管計(jì)算機(jī)系統(tǒng)登記的多個不同用戶的多個不同賬號。
另一實(shí)現(xiàn)方式中,公開了用于在托管計(jì)算機(jī)系統(tǒng)上執(zhí)行宏的計(jì)算機(jī)實(shí)現(xiàn)的系統(tǒng)。 該系統(tǒng)包括可從托管計(jì)算機(jī)系統(tǒng)操作的多個托管應(yīng)用;存儲多個宏的宏數(shù)據(jù)存儲,每個宏被分配給托管計(jì)算機(jī)系統(tǒng)上的用戶賬號,而且每個宏定義要由多個托管應(yīng)用中的至少一個執(zhí)行的一系列動作;以及操作調(diào)度(scheduling)模塊的處理器,調(diào)度模塊識別系統(tǒng)中的觸發(fā)事件并且響應(yīng)于和多個宏中的一個對應(yīng)的所識別的觸發(fā)事件開始執(zhí)行多個宏中的該宏。系統(tǒng)還可包括操作接口的處理器,該接口被編程以產(chǎn)生給和用戶賬號關(guān)聯(lián)的通信地址的消息,通知用戶宏結(jié)果。
一些方面中,觸發(fā)事件包括定向到用戶賬號的到來數(shù)字通信。系統(tǒng)還可包括跟蹤系統(tǒng)的賬號所有人位置的位置服務(wù),而且,其中觸發(fā)事件包括確定和代表他執(zhí)行宏的第一賬號所有人關(guān)聯(lián)的第二賬號所有人的位置。可響應(yīng)于來自多個不同用戶賬號的觸發(fā)事件訪問宏,而且系統(tǒng)還可包括與系統(tǒng)的多個賬號所有人關(guān)聯(lián)的多個文檔,其中多個文檔包括指向宏數(shù)據(jù)存儲中存儲的宏的指針。此外,系統(tǒng)可包括位置服務(wù),用于響應(yīng)于來自宏的調(diào)用提供與在托管計(jì)算機(jī)系統(tǒng)登記的用戶位置有關(guān)的信息。而且,只有在系統(tǒng)確定宏正在其賬號運(yùn)行的用戶和要提供其位置信息的用戶關(guān)聯(lián)時(shí),位置服務(wù)才可提供關(guān)于位置的信息。
另一實(shí)現(xiàn)方式中,用于在托管計(jì)算機(jī)系統(tǒng)上執(zhí)行宏的計(jì)算機(jī)實(shí)現(xiàn)的系統(tǒng)包括可從托管計(jì)算機(jī)系統(tǒng)操作的多個托管應(yīng)用;存儲多個宏的宏數(shù)據(jù)存儲,每個宏被分配給托管計(jì)算機(jī)系統(tǒng)上的用戶賬號,而且每個宏定義要由多個托管應(yīng)用中的至少一個執(zhí)行的一系列動作;以及用于響應(yīng)于識別到和特定賬號所有人關(guān)聯(lián)的觸發(fā)事件執(zhí)行多個宏的裝置,其中觸發(fā)事件的出現(xiàn)與特定賬號所有人是否登錄到系統(tǒng)中無關(guān)。
下文的附圖和說明書闡述了一個或多個實(shí)施例的具體內(nèi)容。根據(jù)說明書和附圖以及權(quán)利要求,其他特征和益處是顯而易見的。
圖1是示出托管計(jì)算系統(tǒng)中的宏操作的概念圖。
圖2是可以操作共享宏的托管計(jì)算機(jī)系統(tǒng)的示意圖。
圖3A是在托管計(jì)算系統(tǒng)上執(zhí)行宏的過程的流程圖。
圖;3B是管理事件觸發(fā)的宏的過程的流程圖。
圖4A是執(zhí)行從網(wǎng)頁上運(yùn)行的應(yīng)用調(diào)用的宏的過程的流程圖。
圖4B是用于在托管系統(tǒng)上記錄并執(zhí)行宏的過程的泳道流程圖。
圖5示出宏系統(tǒng)中的對象的示例結(jié)構(gòu)。
圖6示出宏構(gòu)建系統(tǒng)的示例截屏。
圖7示出可用于執(zhí)行本文所述動作的通用計(jì)算機(jī)裝置的示例。
各附圖中的類似參考標(biāo)記指示類似的元素。
具體實(shí)施方式
圖1是示出托管計(jì)算系統(tǒng)100中的宏操作的概念圖。該操作可以和如下客戶機(jī)設(shè)備或服務(wù)器上的宏操作相比,其中,在創(chuàng)建宏和/或把宏復(fù)制到宏的存儲位置的用戶從他們的臺式計(jì)算機(jī)、上網(wǎng)本計(jì)算機(jī)或者從諸如網(wǎng)吧中的計(jì)算機(jī)的公用計(jì)算機(jī)運(yùn)行應(yīng)用的同時(shí)試圖訪問宏時(shí),通過從各種客戶機(jī)啟動宏操作來將該客戶機(jī)設(shè)備或服務(wù)器定向至單個客戶端設(shè)備(例如,通過遠(yuǎn)程桌面連接服務(wù)或者VPN)。而且,可以通過第一用戶限定對宏的訪問限制而輕易的在用戶之間共享宏,訪問限制允許其他用戶(例如,和初始用戶從同一域訪問系統(tǒng)的用戶)在使用自己的應(yīng)用時(shí)運(yùn)行宏。而且,即便在用戶不在線時(shí)也可為用戶執(zhí)行宏,例如當(dāng)用戶和用戶計(jì)算機(jī)以外的輸入觸發(fā)宏執(zhí)行時(shí)。此外,托管系統(tǒng)具有彼此相關(guān)的多個注冊用戶時(shí)(例如他們?yōu)橥簧虡I(yè)組織工作),托管系統(tǒng)中運(yùn)行的宏可以產(chǎn)生復(fù)雜的工作流程,這些工作流程分布在對應(yīng)于多個這種用戶的應(yīng)用和/或數(shù)據(jù)存儲上。
如所指出的,可以通過外部事件觸發(fā)宏,例如通過收到電子郵件消息。宏可以運(yùn)行在與用戶的客戶端系統(tǒng)以及運(yùn)行其他服務(wù)或應(yīng)用的任何子系統(tǒng)分離的宏服務(wù)器子系統(tǒng)上。 例如,其他子系統(tǒng)上的服務(wù)可包括宏訪問以獲得信息的任何服務(wù),包括主系統(tǒng)的內(nèi)部服務(wù) (例如位置服務(wù)和電子郵件服務(wù))和第三方服務(wù)(例如,來自商業(yè)的在線商店或拍賣站點(diǎn)、 天氣預(yù)報(bào)站點(diǎn)等)。
和系統(tǒng)關(guān)聯(lián)的宏服務(wù)器子系統(tǒng)可允許寫宏代碼的用戶以統(tǒng)一一致的方式寫宏,這使編程體驗(yàn)對終端用戶來說是容易的。例如,可以為展示給終端用戶的不同服務(wù)定義對象模型,服務(wù)例如操作電子表格和日歷、獲得網(wǎng)絡(luò)內(nèi)容、發(fā)送電子郵件、訪問他們的日歷、翻譯文本等。對象模型例如使用Java對象代表。每個Java對象可以包裝訪問底層服務(wù)的方法。 電子表格和語言翻譯服務(wù)可使用內(nèi)部直接網(wǎng)絡(luò)調(diào)用(例如遠(yuǎn)程過程調(diào)用),網(wǎng)絡(luò)內(nèi)容獲取例如可使用SOAP或類似服務(wù)。很多這些服務(wù)不需直接展示給終端用戶。
系統(tǒng)100可通過在底層Java對象周圍創(chuàng)建幾層“包裝”或“裝飾”來消除把內(nèi)部服務(wù)展示給終端用戶的風(fēng)險(xiǎn)。例如,系統(tǒng)100可包括限額強(qiáng)制層,其限制給定用戶可調(diào)用給定服務(wù)的次數(shù)。系統(tǒng)100可包括允許細(xì)粒度的訪問控制的安全層(例如允許對底層數(shù)據(jù)進(jìn)行讀訪問但不允許寫訪問),安全層可使用基于能力的安全策略。系統(tǒng)100還可包括日志層, 其可捕獲所有用戶調(diào)用并提供用戶會話的記錄。統(tǒng)一地而不是特別對于所有服務(wù)應(yīng)用限額和安全策略,從而可減少程序員錯誤的機(jī)會(即最終的安全漏洞)。
系統(tǒng)100可包括用于管理計(jì)算機(jī)宏的各種計(jì)算機(jī)實(shí)現(xiàn)的機(jī)制,其中宏的代碼存儲在可通過互聯(lián)網(wǎng)訪問的托管計(jì)算機(jī)系統(tǒng)內(nèi)的位置處,并且宏是可操作的以執(zhí)行下述功能。 接收到例如來自運(yùn)行在托管計(jì)算機(jī)系統(tǒng)遠(yuǎn)程的客戶計(jì)算機(jī)上的應(yīng)用的執(zhí)行宏的請求后,可以在托管計(jì)算機(jī)系統(tǒng)上執(zhí)行宏。例如,宏可以直接在宏管理器或其通信耦合部件內(nèi)運(yùn)行??梢园褕?zhí)行宏的結(jié)果提供給運(yùn)行在客戶計(jì)算機(jī)上的應(yīng)用(例如,運(yùn)行在用戶計(jì)算機(jī)的瀏覽器中的電子表格應(yīng)用)。這種情況下,可以從編程宏以操作的文件外存儲和訪問宏代碼。例如, 雖然代碼可以在托管服務(wù)服務(wù)器上執(zhí)行,但宏代碼更新的電子表格可以位于用戶的筆記本電腦上或托管服務(wù)的其他位置處,在這些地方可以自由地指向宏并且從代表注冊托管服務(wù)的任何多個用戶運(yùn)行的任意多個應(yīng)用訪問宏。
一些實(shí)現(xiàn)方式中,每個宏可以和托管計(jì)算機(jī)系統(tǒng)的注冊用戶關(guān)聯(lián),而且可以根據(jù)注冊用戶確定的訪問限制使宏成為托管計(jì)算機(jī)系統(tǒng)的其他用戶可用的(具體而言,使宏對其他用戶的賬號上運(yùn)行的應(yīng)用可用)。例如,“擁有”宏的用戶可通過其他用戶的用戶ID或者通過這些用戶所屬的組確定被授權(quán)使用他的宏的其他用戶。其他情況下,用戶可提供到宏的鏈接或URL并包括和運(yùn)行宏關(guān)聯(lián)的某些權(quán)限。
可以由托管計(jì)算機(jī)系統(tǒng)為注冊用戶分配的一個或多個組定義訪問限制。例如,用戶可以授權(quán)名為“MyOnlineFriends (在線好友)”的組對宏的訪問,并把權(quán)限分給該組內(nèi)的所有人,這可代表該用戶在他的社交網(wǎng)站上(例如hcebook、Orkut等)識別的“好友”。
一些實(shí)現(xiàn)方式中,可以接收執(zhí)行宏的請求,這些請求來自托管計(jì)算機(jī)遠(yuǎn)程的多個不同客戶計(jì)算機(jī)上運(yùn)行的多個應(yīng)用。例如,應(yīng)用可生成或啟動“事件”,在宏的定義中,這些事件設(shè)計(jì)用于開始宏執(zhí)行,或者在等待狀態(tài)后恢復(fù)或繼續(xù)宏執(zhí)行。系統(tǒng)100可在托管計(jì)算機(jī)系統(tǒng)上為來自該位置的每個請求自動執(zhí)行宏。系統(tǒng)100還可響應(yīng)于執(zhí)行宏把執(zhí)行宏的結(jié)果提供給多個應(yīng)用中的每個相應(yīng)應(yīng)用。一些實(shí)現(xiàn)方式中,多個應(yīng)用對應(yīng)于單個賬號所有人。 例如,請求執(zhí)行宏的每個應(yīng)用可接收結(jié)果。一些實(shí)現(xiàn)方式中,多個應(yīng)用對應(yīng)于多個不同賬號所有人(例如,系統(tǒng)100的多個注冊用戶)。
執(zhí)行宏可包括調(diào)用托管計(jì)算機(jī)系統(tǒng)提供的多個不同托管服務(wù)。例如,宏可調(diào)用日歷服務(wù)、聯(lián)系服務(wù)、位置提供服務(wù)(例如指示用戶位置或用戶好友位置的服務(wù))等。作為替代,或者作為附加,執(zhí)行宏可包括調(diào)用獨(dú)立于托管計(jì)算機(jī)系統(tǒng)的第三方信息提供者所提供的網(wǎng)絡(luò)服務(wù)(例如,與托管計(jì)算機(jī)系統(tǒng)位于不同的域,和由與托管計(jì)算機(jī)系統(tǒng)不同的組織操作)。
還可以把托管計(jì)算機(jī)系統(tǒng)上執(zhí)行的第一應(yīng)用所產(chǎn)生的信息從第一格式轉(zhuǎn)換成第二格式,所轉(zhuǎn)換的信息可以被提供給托管計(jì)算機(jī)系統(tǒng)上運(yùn)行的第二應(yīng)用。例如,可以由文字處理應(yīng)用創(chuàng)建逗號劃界格式的數(shù)據(jù),然后可以把數(shù)據(jù)提供給電子表格應(yīng)用,以使用電子表格應(yīng)用特有的格式粘貼到電子表格單元格。
執(zhí)行宏的結(jié)果也可以自動提供給在托管計(jì)算機(jī)系統(tǒng)注冊的多個不同用戶的多個不同賬號。例如,可以把宏執(zhí)行結(jié)果提供給若干計(jì)算機(jī)系統(tǒng)上的若干用戶,例如更新他們系統(tǒng)的每個上的共同的電子表格單元格。一些實(shí)現(xiàn)方式中,響應(yīng)于加載網(wǎng)頁的客戶計(jì)算機(jī)上的瀏覽器而接收運(yùn)行宏的請求,所加載的網(wǎng)頁具有指向托管計(jì)算機(jī)系統(tǒng)中的宏執(zhí)行子系統(tǒng)上的JavMcript宏的指針。例如,通過傳遞鏈接或URL給宏來共享宏時(shí),可以鏈接或URL 形式提供執(zhí)行宏的請求(例如使用JavMcript或者任何其他相關(guān)語言)。
現(xiàn)在更具體地參看圖1,作為實(shí)現(xiàn)上述全部或部分功能的示例,系統(tǒng)100包括一個或多個應(yīng)用102(每個應(yīng)用訪問宏鉤子104,這在訪問宏時(shí)引起宏的執(zhí)行)、一個或多個外部事件105、宏服務(wù)器子系統(tǒng)106、社交網(wǎng)絡(luò)108、位置服務(wù)110和宏代碼112。
應(yīng)用102可包括可由用戶激發(fā)運(yùn)行或執(zhí)行的任何可應(yīng)用的應(yīng)用,例如電子郵件應(yīng)用、電子表格應(yīng)用、文字處理應(yīng)用、照片共享應(yīng)用、文稿演示包、財(cái)務(wù)計(jì)劃應(yīng)用等。一些情況下,用戶可以通過選擇要運(yùn)行的應(yīng)用明確地開始應(yīng)用,例如,通過雙擊桌面上或者應(yīng)用的下拉式列表中的應(yīng)用名稱。也可以隱含地開始其他應(yīng)用,例如用戶點(diǎn)擊電子郵件附件時(shí)(例如文本文件或電子表格),或者用戶點(diǎn)擊未知文件時(shí),這兩種情況中的任何一個都會自動開始執(zhí)行和文件關(guān)聯(lián)的相應(yīng)應(yīng)用,例如基于文件的擴(kuò)展名或者其他定義的關(guān)聯(lián)。用戶還可以通過導(dǎo)航到定向到應(yīng)用的URL來開始應(yīng)用,例如托管的應(yīng)用。
開始或執(zhí)行應(yīng)用的另一示例中,可以發(fā)生事件105,例如接收電子郵件消息,事件 105可開始或恢復(fù)執(zhí)行某個應(yīng)用。例如,事件105(例如接收的電子郵件消息)可觸發(fā)宏(例如,更新電子表格,增加標(biāo)題行)??梢杂猛泄芟到y(tǒng)上運(yùn)行的、跟蹤在系統(tǒng)進(jìn)行注冊的每個用戶的事件的事件句柄檢測事件的發(fā)生??梢詧?bào)告每個事件,然后事件可以和特定動作關(guān)聯(lián), 例如執(zhí)行宏的動作,然后可以觸發(fā)動作。
每個應(yīng)用102都可訪問宏鉤子104。最簡單的實(shí)現(xiàn)方式中,宏鉤子可以簡單地是指向系統(tǒng)100上存儲的且在系統(tǒng)100上可執(zhí)行的宏代碼的URL。例如,鉤子104可以是指向 JavMcript代碼的URL,可以包括在網(wǎng)頁中,這樣,加載網(wǎng)頁或者發(fā)生和操作網(wǎng)頁關(guān)聯(lián)的某個事件時(shí),可以訪問并運(yùn)行代碼。除了有助于定義應(yīng)用102中的宏外,或者替代地,宏鉤子 104可以執(zhí)行事件跟蹤并提供外部事件105和宏服務(wù)器子系統(tǒng)106之間的連接。例如,宏鉤子104可允許用戶定義與電子郵件應(yīng)用102中接收的電子郵件有關(guān)的事件相關(guān)聯(lián)的宏。宏可以識別與電子郵件應(yīng)用102可提供的對象不同的對象。此外,宏的宏代碼112的語言可以和電子郵件應(yīng)用102中的宏本身的語言不同。宏鉤子104也可以跟蹤與宏有關(guān)的任何事件,并且可以適時(shí)地與宏服務(wù)器子系統(tǒng)106交互。宏鉤子104可以通過用戶選擇記錄宏或執(zhí)行已有宏的選項(xiàng)來實(shí)例化或?qū)崿F(xiàn)。
外部事件105可包括用于觸發(fā)宏執(zhí)行的多種事件,包括接收到電子郵件消息(例如,在電子郵件應(yīng)用中)、確定(例如由應(yīng)用確定)某個條件存在(例如超過限額,拒絕用戶訪問、過程已完成等)等等。可以用事件句柄跟蹤這樣的事件,可以用事件句柄為希望系統(tǒng) 100中出現(xiàn)特定事件時(shí)執(zhí)行一個或多個宏的每個用戶注冊要跟蹤的特定事件。
—些實(shí)現(xiàn)方式中,事件可以嵌入在代碼中,例如一行代碼確定滿足某個條件時(shí) (例如,變量達(dá)到某個值,或者晚上完成記賬更新等)。外部事件105還可包括對消息的檢測,例如文本消息、博客條目、到來的RSS訂閱等。外部事件105可包括檢測在線拍賣站點(diǎn)上發(fā)布特定物品,例如通過拍賣物品的標(biāo)題或描述(例如老式梵蒂網(wǎng)牌照)來確定。
外部事件105的觸發(fā)條件可包括不同條件組合。例如,觸發(fā)和電子郵件應(yīng)用有關(guān)事件所用的條件可包括電子郵件標(biāo)題行、發(fā)件人ID(例如老板、配偶、孩子等)、收件人(例如使用“發(fā)送”、“抄送”和“密送”的組合、收件人個數(shù)(例如,我是唯一收件人時(shí)通知我等)、 是否有附件、發(fā)送電子郵件的位置、消息正文關(guān)鍵字或者電子郵件是否有可能是垃圾郵件。 和文字處理應(yīng)用對應(yīng)的條件可包括文檔大小、文檔源、文檔創(chuàng)建日期和/或最近修改日期、 文檔作者等。對于電子表格應(yīng)用,可用于觸發(fā)事件的條件包括特定電子表格單元格的值、單元格的值是否改變、電子表格中實(shí)際數(shù)據(jù)的行數(shù)或列數(shù)、電子表格作者、電子表格大小等。 適用于其他類型文檔的條件可包括文檔是否剛剛改變等??捎删W(wǎng)絡(luò)上的源或服務(wù)產(chǎn)生其他觸發(fā)事件,例如在線天氣服務(wù)站點(diǎn)發(fā)布的向特定城鎮(zhèn)的龍卷風(fēng)警報(bào)。這種情況下,關(guān)心天氣的用戶可能已經(jīng)構(gòu)建了宏來截取與天氣有關(guān)的外部事件并向其家人或鄰居發(fā)送文本和/ 或致電。
事件也可以是多個不同源的組合。例如,最初可由從特定用戶接收電子郵件觸發(fā)初始事件,但是,只有在發(fā)生該事件且使用位置跟蹤服務(wù)確定發(fā)送或接收電子郵件的用戶處于特定位置時(shí)才執(zhí)行宏。也可以利用使用來自其他服務(wù)的信息的附加或替代條件。
宏服務(wù)器子系統(tǒng)106可監(jiān)控系統(tǒng)100中的特定事件,例如應(yīng)用102傳播的事件(例如電子郵件消息等)。除了可用作到宏服務(wù)器子系統(tǒng)106的指令的事件外(例如延緩和服務(wù)器XYZ、應(yīng)用ABC或用戶約翰多伊的通信,直到收到進(jìn)一步的通知),宏服務(wù)器子系統(tǒng)106 感興趣的特定事件可包括可用宏處理的任何相關(guān)事件。
各種服務(wù)可以事件觸發(fā)器、響應(yīng)于觸發(fā)器而運(yùn)行的宏的輸入或者宏輸出的形式和系統(tǒng)100交互。例如,社交網(wǎng)絡(luò)108可向系統(tǒng)100提供對確定如何處理事件有用的信息。舉例來說,宏可定義成在接收到發(fā)送給貝蒂的電子郵件時(shí)執(zhí)行操作,但是只有在郵件來自貝蒂的一個好友(例如,如一個或多個社交網(wǎng)絡(luò)中所定義的)時(shí)才執(zhí)行操作。在另一個示例中,宏可設(shè)計(jì)成向貝蒂的所有“好友”(如社交網(wǎng)站或社交組所定義的)發(fā)送自動電子郵件或其他通知。運(yùn)營社交網(wǎng)絡(luò)108的組織可以和運(yùn)營子系統(tǒng)106的組織不同,前一系統(tǒng)108 的運(yùn)營商可通過API提供對一些信息的訪問,以及提供對已經(jīng)給了子系統(tǒng)106的運(yùn)營商這樣訪問的內(nèi)容的訪問。
在另一個示例中,位置跟蹤服務(wù)110可以在用戶邀請時(shí)跟蹤和用戶關(guān)聯(lián)的移動設(shè)備的位置,例如這樣用戶可以找到他們的好友,反之亦然。例如,宏可定義成發(fā)送電子郵件或文本給用戶,電子郵件或文本的目的地可取決于用戶當(dāng)時(shí)所處位置。例如,如果用戶持有蜂窩電話或其他移動設(shè)備(例如基于GPS的設(shè)備),那么位置跟蹤服務(wù)110可以跟蹤或知道用戶位置。根據(jù)用戶位置,通過執(zhí)行宏而傳播的電子郵件可被發(fā)送給用戶的移動設(shè)備或者家里的設(shè)備(例如,如果用戶離家近,或者位置服務(wù)110確定用戶可能在去往該方向)。
除了例如用戶支持GPS的設(shè)備發(fā)送的“我在哪? ”位置信息外,用戶還可通過位置跟蹤服務(wù)110接收到“我該向哪去? ”信息。該信息例如可包括GPS坐標(biāo)或簡單的文本消息 (例如,“在此轉(zhuǎn)彎,然后上山到10107”)。
子系統(tǒng)106可存儲、跟蹤、訪問、共享并執(zhí)行宏代碼的各種實(shí)例。構(gòu)成宏的宏代碼 112可采用任何適當(dāng)?shù)恼Z言,但是典型地用系統(tǒng)100使用的優(yōu)選宏語言(例如JavMcript 等)編寫或編程。由于宏是以熟悉方式執(zhí)行的,宏服務(wù)器子系統(tǒng)106可解析(或搜索)宏代碼112的、關(guān)于函數(shù)或關(guān)于宏的片斷,例如“得到名稱”函數(shù)114、“檢查名稱”函數(shù)116、 “得到位置”函數(shù)118或者宏服務(wù)器子系統(tǒng)106要考慮的任何其他函數(shù)或宏。嵌入在宏代碼 112中的任何函數(shù)或操作可引起宏服務(wù)器子系統(tǒng)106執(zhí)行不同類型的處理,例如檢查用戶訪問文件的授權(quán)等。
宏代碼112可存儲在各種位置,例如中央宏倉庫或者可通過互聯(lián)網(wǎng)訪問的托管服務(wù)器系統(tǒng)。一些實(shí)現(xiàn)方式中,宏代碼112的整個集合可分布式存儲并通過一個或多個網(wǎng)絡(luò)在邏輯上綁定在一起。一些實(shí)現(xiàn)方式中,宏代碼112敏感時(shí)(例如其包括或更新用戶的個人信息)或者由于國防原因進(jìn)行分類時(shí)(例如,機(jī)密、最高機(jī)密等),宏代碼112可明確地存儲在獨(dú)立的位置,例如位于安全服務(wù)器上。
一些實(shí)現(xiàn)方式中,可使用“監(jiān)聽器”進(jìn)行事件跟蹤。例如,在服務(wù)器上加載電子表格并將其HTML發(fā)送給瀏覽器時(shí),可以觸發(fā)指示已經(jīng)打開了新電子表格的服務(wù)器端事件。然后,監(jiān)聽該事件的電子表格服務(wù)器上的監(jiān)聽器可以查看它是否有該電子表格的腳本列表。 如果沒有腳本列表,監(jiān)聽器可以打電話(例如,給腳本服務(wù)器),主要說,“有用于該電子表格的任何腳本么? ”,并且傳遞電子表格關(guān)鍵詞,然后保存腳本列表。然后,電子表格服務(wù)器上的事件句柄可以檢查是否存在名為“onOpen”的任何腳本方法。如果存在該腳本方法,服務(wù)器可以發(fā)送消息(例如給Google應(yīng)用腳本服務(wù)器)執(zhí)行該方法。該流程也可用于其他情況,例如編輯事件等。
在又一示例中,宏可以和電子郵件應(yīng)用關(guān)聯(lián),該電子郵件應(yīng)用設(shè)置用于執(zhí)行例如取決于標(biāo)題行、電子郵件發(fā)件人、電子郵件消息是否有非常大的電子表格附件、是否有(任何類型)的附件等的某種消息路由。以這種方式定義的宏還可以使用位置信息,例如由位置跟蹤服務(wù)110提供的位置信息。例如,如果發(fā)送給用戶工作電子郵件的電子郵件消息有大的電子表格附件,并且確定用戶在家(由于來自用戶的移動設(shè)備的GPS信號對應(yīng)于登記成用戶家的位置),則宏可被建立成轉(zhuǎn)發(fā)副本到用戶的家庭電子郵件。這種情況下,附件可能是與工作有關(guān)的電子表格,需要為第二天工作中用的演示或項(xiàng)目進(jìn)行審閱。備選地,在發(fā)現(xiàn)用戶不在家附近的這些情況下,可以把宏建立成發(fā)送小的消息給用戶的支持電子郵件的移動設(shè)備,提醒用戶該郵件的存在。
這兩種情況下,宏代碼112可以從引起宏執(zhí)行的任何電子郵件應(yīng)用102上刪去并存儲在宏服務(wù)器子系統(tǒng)106上。對接收到的每個到來的電子郵件消息,電子郵件應(yīng)用102可以通過用鉤子104指向宏代碼來觸發(fā)宏。然后,宏可以識別消息的各方面,例如特定發(fā)件人是否是賬號所有人社交網(wǎng)絡(luò)的成員。如果社交網(wǎng)絡(luò)檢查結(jié)果是肯定的,宏可以進(jìn)一步檢查位置跟蹤服務(wù)110以確定賬號所有人或發(fā)件人的地理位置,并且可以基于這樣位置引起某些動作的執(zhí)行。例如,某些情況下,宏服務(wù)器子系統(tǒng)106可以基于賬號所有人(或用戶)的位置通知賬號所有人。其他情況下,宏服務(wù)器子系統(tǒng)106可使賬號所有人被呼叫(例如通過使用VOIP的全球通話路由系統(tǒng)),并/或引起SMS消息的發(fā)送,或者宏定義的其他動作。
宏可以經(jīng)由一個或多個經(jīng)認(rèn)證的API、通過訪問系統(tǒng)100上運(yùn)行的各種應(yīng)用來獲得并提供這種信息。子系統(tǒng)106可具有多個不同的API轉(zhuǎn)換服務(wù),這樣,作者可以為子系統(tǒng) 106寫單個宏語言,但是仍可以用于不同應(yīng)用。
宏在獨(dú)立于用戶客戶計(jì)算設(shè)備的宏服務(wù)器子系統(tǒng)上托管可帶來若干益處。例如, 可以在許多不同應(yīng)用上使用宏。而且,可以在用戶從各種接入點(diǎn)在線時(shí)觸發(fā)宏,接入點(diǎn)例如為他們的臺式計(jì)算機(jī)、他人的計(jì)算機(jī)、上網(wǎng)本或者智能電話,而且即便用戶不在線或在他們的計(jì)算機(jī)上時(shí)也可觸發(fā)宏。這種宏可被定義成截取一類應(yīng)用(例如電子郵件)的事件并更新其他應(yīng)用中的數(shù)據(jù)(例如電子表格,其中自動在電子表格中編譯用戶的到來電子郵件消息的標(biāo)題行)。
另一益處是可以無需手工復(fù)制宏而在用戶之間完全共享宏的能力。相反,可以對每個宏設(shè)置一個或多個安全級別,允許如創(chuàng)建或首先保存宏的用戶所確定的其他用戶的訪問。例如,用戶可以像例如在線照片共享站點(diǎn)的公共網(wǎng)頁屬性所做的那樣設(shè)定宏的訪問安全級別并把宏的URL提供給另一人。
某些情況下,在宏服務(wù)器子系統(tǒng)上托管的宏的益處還在于提供了針對來自各種用戶的數(shù)據(jù)運(yùn)行宏的能力,或者把運(yùn)行宏的結(jié)果提供給各種用戶的能力。例如,共享的宏可用于把多個作者的貢獻(xiàn)組合成較大的書卷,例如多人所寫的詩歌或文章。每個貢獻(xiàn)者的文檔可以保存在預(yù)定位置,如果貢獻(xiàn)者提供了訪問該位置的權(quán)限,宏就可以訪問該位置。然后, 可以把組合后的書卷作成每個貢獻(xiàn)者以及可能更多用戶可用的單個文檔。如另一示例,可以使用托管子系統(tǒng)上的宏創(chuàng)建商業(yè)流程應(yīng)用,其中文檔一直本地保存在服務(wù)器系統(tǒng)上,例如傳送文檔進(jìn)行審批。
圖2是可以操作共享的宏的托管計(jì)算機(jī)系統(tǒng)200的示意圖。一般而言,系統(tǒng)200 提供示出用戶可以創(chuàng)建宏并且在托管系統(tǒng)上保存、共享、訪問并執(zhí)行該宏的一個示例的各個部件。
該系統(tǒng)200中,宏服務(wù)器子系統(tǒng)202提供在腳本信息存儲數(shù)據(jù)存儲206上以一致方式保存宏代碼的位置,其中所保存的信息可包括宏庫名稱、腳本內(nèi)容以及宏所有人的標(biāo)識符(例如,使用模糊的用戶ID或其他標(biāo)識符)。運(yùn)行宏時(shí),可以向宏服務(wù)器子系統(tǒng)202發(fā)送命令以執(zhí)行給定宏。然后,可以從腳本信息存儲數(shù)據(jù)存儲206獲得代碼,而且可以在腳本引擎或腳本執(zhí)行器208中創(chuàng)建實(shí)例。
可以構(gòu)建代表不同服務(wù)器端應(yīng)用的編程API的Java對象,并且可以包裝在基于能力的安全包裝中,并且成為程序員可見的經(jīng)包裝服務(wù)(或“程序節(jié)(bean)”)。經(jīng)包裝的服務(wù)210可以包括宏服務(wù)器子系統(tǒng)202可以例如向和宏執(zhí)行有關(guān)的經(jīng)包裝服務(wù)的消費(fèi)者提供的所有相關(guān)服務(wù)。經(jīng)包裝的服務(wù)210可以是一組其他對象的任何相關(guān)對象,經(jīng)封裝以使得它們?nèi)菀妆粋鬟f。
經(jīng)包裝的服務(wù)可包括展示和后端服務(wù)交互的公共方法的Java業(yè)務(wù)代理。公共方法可包括在用于封裝方法、類、字符串、電子表格、應(yīng)用編程接口(API)和各種計(jì)算機(jī)語言 (例如Java等)提供的其他工具的封裝或其他機(jī)制中。公共方法可展示(或使其成為公共的)例如可用于定義并執(zhí)行宏的資源。公共方法的實(shí)現(xiàn)方式的某些細(xì)節(jié)可以保密,這可提供適當(dāng)級別的信息隱藏和抽象。公共方法在多個不同類型的對象之間看來是類似的,向宏用戶展示某種程度一致的外觀和感覺,因而提供一種級別的多態(tài)性。結(jié)果,這組經(jīng)包裝的服務(wù)可有助于面向?qū)ο?、事件?qū)動環(huán)境中的用戶的宏的使用。
該示例系統(tǒng)200中,這些經(jīng)包裝的服務(wù)或程序節(jié)可以附加到頂層Java對象,該對象具有每個屬性的公共成員(例如電子表格、日歷等)。該頂層Java對象用標(biāo)準(zhǔn)的預(yù)定標(biāo)簽插入到腳本執(zhí)行器的環(huán)境范圍內(nèi)。一些實(shí)現(xiàn)方式中,腳本執(zhí)行器把公共成員(而且僅僅是公共成員)反映給腳本環(huán)境。
因而,用戶的Javakript代碼執(zhí)行以下代碼時(shí),
var doc = google, spreadsheets, create (" my new doc" ) ; (1)調(diào)用頂層對象的“spreadsheets”字段中Java對象上的“create” Java方法。該方法的Java實(shí)現(xiàn)使用“CREATE”命令和對應(yīng)于新標(biāo)題的自變量(例如“my new doc”)以及腳本運(yùn)行者的模糊標(biāo)識符向電子表格服務(wù)器進(jìn)行遠(yuǎn)程過程調(diào)用。電子表格服務(wù)器響應(yīng)于遠(yuǎn)程過程調(diào)用創(chuàng)建新的電子表格并返回其關(guān)鍵詞。宏服務(wù)器創(chuàng)建代表包括新關(guān)鍵詞的新創(chuàng)建的電子表格的新 Java對象。Java對象包括用于多個電子表格操作的方法,例如“rename”、“insertaieet” 等。該對象還包裝在基于能力的安全包裝中并且被返回。腳本執(zhí)行器把該對象內(nèi)部包裝在 NativeJavaObject包裝中并將其返回給上述變量“doc”。
包裝對象的一些實(shí)現(xiàn)方式中,任何適當(dāng)?shù)姆?wù)(例如電子表格、日歷、電子郵件等)可返回包裝在Java動態(tài)代理中的對象。可存在不同代理,例如用于安全、日志和限額。每個代理可接合或使用展示哪個服務(wù)的描述(例如,Java接口,例如“Spreadsheet”、 “SpreadsheetRange”、“Emailkrvice”等),這可定義公共方法。接口上可存在注解,適用于不同包裝。
例如,電子表格服務(wù)上的“create”方法可以創(chuàng)建新的電子表格。該方法可具有一個如下注解,聲明該方法是WRITE方法,提供例如用于警告用戶腳本會試圖向他們的電子表格文檔組寫入(而且如果用戶沒有授權(quán)給腳本W(wǎng)RITE特權(quán),則運(yùn)行時(shí)腳本會失敗)的機(jī)制?;旧?,安全包裝有助于保證給定方法聲明的所需權(quán)限(WRITE等)在用戶的授權(quán)令牌中。如果方法被授權(quán),就把調(diào)用傳遞給下一層。
還可以通過限制特定用戶能夠訪問關(guān)于宏的操作的次數(shù)來提供安全。為了執(zhí)行該功能。“create”方法上可存在限額注解,說明應(yīng)根據(jù)終端用戶“create spreadsheet”限額計(jì)數(shù)該方法的調(diào)用。限額包裝可以調(diào)用或使用限額服務(wù)來跟蹤給定用戶引起操作執(zhí)行的次數(shù)。例如如果用戶超過限額,該方法會出錯,如果沒有超過限額,就再次將其傳遞給下一層。 可以在設(shè)定的時(shí)間段內(nèi)計(jì)算用戶限額,例如一天、一周或一個月,而且限額可以在時(shí)間周期重置或遞減。
記錄所提供的自變量以及所調(diào)用的每個方法的字符串版本的日志層還可以提供宏執(zhí)行記錄。
包裝服務(wù)創(chuàng)建器212可以創(chuàng)建頂層包裝服務(wù),其程度取決于宏及其環(huán)境。例如,包裝服務(wù)創(chuàng)建器212可以檢查運(yùn)行宏的終端用戶明確賦予宏的能力,并且可以創(chuàng)建對應(yīng)于宏?duì)顟B(tài)的頂層程序節(jié)。狀態(tài)例如可包括當(dāng)前文檔(如果存在)(例如電子郵件、文本文檔、畫圖、電子表格等)以及用戶認(rèn)證。包裝服務(wù)創(chuàng)建器212可以產(chǎn)生能力基于環(huán)境的頂層包裝服務(wù),并且可以把經(jīng)包裝的服務(wù)210注入到腳本執(zhí)行器208的執(zhí)行環(huán)境中,在該環(huán)境中用戶例如可以定義并執(zhí)行宏。某種意義上來說,可以認(rèn)為包裝服務(wù)創(chuàng)建器212是程
可以創(chuàng)建的經(jīng)包裝的服務(wù)210的類型例如包括電子表格應(yīng)用、日歷應(yīng)用等的包裝能力的示例??梢园言揓ava對象插入執(zhí)行范圍??梢杂脤ο蟮脑磥碜R別對象(例如,用標(biāo)記"TopLevel,,)。因而,例如"TopLevel. spreadsheets〃可成為對包裝能力對象的參考 (例如SpreadsheetApplicationApi對象)。對象的公共方法可以作為Java對象反映在 JavaScript編程環(huán)境中并且可使之成為宏可用的。
例如,如下Javakript代碼可打開已有的電子表格(例如,稱為“MyOtherDoc”的電子表格)并且把當(dāng)前電子表格單元格Al的值復(fù)制到新的電子表格的單元格B2。
var doc = google, spreadsheets. getActiveSpreadsheet();
var otherDoc = google, spreadsheets. openByName (" MyOtherDoc");
var value = doc. find (〃 Al" ). getValue ();
otherDoc. find (〃 B2〃 ). setValue (value) ;(3)和所有其他對象一樣,如“find”方法返回的Range對象的Java對象是能力包裝的,如果驗(yàn)證的用戶沒有權(quán)限訪問相關(guān)電子表格則該對象會出錯。例如,前述復(fù)制/粘貼單元格的示例,成功執(zhí)行所需的訪問是對活動電子表格的讀訪問(例如getValue所需)和對目標(biāo)電子表格(例如電子表格“MyOtherDoc”)的寫訪問(例如setValue所需)。
腳本執(zhí)行器208可以負(fù)責(zé)為宏創(chuàng)建上下文并執(zhí)行頂層經(jīng)包裝的服務(wù)210的實(shí)際插入??梢詾槊總€宏執(zhí)行創(chuàng)建新的頂層范圍,例如防止一個執(zhí)行的腳本“毒害”其他腳本的全局范圍的可能性??梢酝ㄟ^實(shí)現(xiàn)類開閉器或過濾器來加載宏上下文,類開閉器或過濾器防止創(chuàng)建任何未批準(zhǔn)的Java類(例如,不在允許類的白名單上)。此外,腳本執(zhí)行器208可創(chuàng)建用于阻止失控腳本的指令計(jì)數(shù)器,以檢測腳本何時(shí)進(jìn)入了無限循環(huán)。一些實(shí)現(xiàn)方式中,可以用腳本管理器204提前中斷失控腳本。
腳本執(zhí)行器208可負(fù)責(zé)各種功能,包括解析、檢查句法、函數(shù)調(diào)用、宏執(zhí)行和恢復(fù)。 解析功能可檢查腳本并返回在如腳本信息數(shù)據(jù)存儲206的數(shù)據(jù)存儲中的腳本存儲中發(fā)現(xiàn)的函數(shù)和宏列表。例如,參看圖1,作為解析功能的結(jié)果所檢測到的函數(shù)和宏可包括得到名稱函數(shù)114、檢查名稱函數(shù)116、得到位置函數(shù)118或可嵌入在腳本或宏代碼(例如宏代碼 112)中的任何其他函數(shù)、宏等。
系統(tǒng)支持的其他功能可用于幫助管理服務(wù)器端系統(tǒng)200的一組宏。例如,存儲腳本之前,句法檢查功能可以確定腳本中是否有錯誤(例如句法錯誤、語言編譯錯誤、關(guān)鍵詞誤用等)。如果檢測到句法錯誤或其他錯誤,可以通信該錯誤,提醒用戶或腳本程序員。
調(diào)用功能可以“調(diào)用”(或開始執(zhí)行)宏中的函數(shù)。該調(diào)用功能可以是執(zhí)行宏的限制版本,諸如授予(例如電子表格中的)單元格內(nèi)的函數(shù)調(diào)用特權(quán)的版本。例如,宏的限制版本可以僅限于返回值,而不允許創(chuàng)建副作用。
宏執(zhí)行和恢復(fù)功能可用于開始和恢復(fù)宏。例如,宏執(zhí)行功能可以開始宏的初始執(zhí)行。一些情況下,宏的執(zhí)行需要用戶的額外輸入。這種情況下,等待用戶進(jìn)行輸入的時(shí)候, 可以暫緩宏的執(zhí)行,或者進(jìn)入等待狀態(tài)。一旦提供用戶輸入后,恢復(fù)宏功能可以繼續(xù)執(zhí)行暫停了的宏。
腳本信息倉庫206可以用作數(shù)據(jù)存儲,提供并/或支持如腳本/宏創(chuàng)建、存儲、檢索、更新、刪除等操作。存儲在腳本信息倉庫206中的腳本可以被組織成用戶庫、單個腳本或應(yīng)用(例如,用于電子郵件、電子表格、文字處理文檔的應(yīng)用等)??梢詫φ麄€用戶庫執(zhí)行操作,或者對庫中的單個元素執(zhí)行操作。例如,一個操作可以用用戶庫的ID檢索用戶庫 (例如基于庫名稱的主鍵查找)。另一操作可以檢索鏈接到給定文檔的所有用戶庫,例如代表宏或腳本的文檔。
腳本信息倉庫206提供的檢索操作可包括以下操作檢索給定用戶對給定用戶庫的授權(quán)、檢索給定用戶擁有的所有用戶庫、用ID檢索繼續(xù)記錄等。
腳本信息倉庫206提供的創(chuàng)建/更新操作可包括如下操作創(chuàng)建/更新用戶庫、創(chuàng)建從庫到抽象對象的關(guān)鍵字(例如文檔ID)的關(guān)聯(lián)、創(chuàng)建/更新給定用戶對給定庫的授權(quán)、 創(chuàng)建新的繼續(xù)記錄(例如用給定用戶的序列化的二進(jìn)制數(shù)據(jù))和庫,以及其他創(chuàng)建/更新操作。
腳本信息倉庫206提供的執(zhí)行刪除的操作可包括如下操作刪除繼續(xù)記錄、刪除從庫到抽象對象的關(guān)聯(lián)以及刪除庫、移除所有子對象,所有子對象包括和授權(quán)以及鏈接繼續(xù)關(guān)聯(lián)的子對象。下文參考圖5描述腳本信息倉庫206的示例邏輯結(jié)構(gòu)。
腳本管理器204可將命令派遣到底層部件206-219。具體示例命令的描述遵循用標(biāo)號從1到6標(biāo)注的一系列進(jìn)程過程,且到底層部件206-219的派遣控制路徑被標(biāo)記為上述過程,這些標(biāo)號是按時(shí)間標(biāo)注的,但是可能的情況下某些動作可以其他順序發(fā)生。
腳本管理器204可執(zhí)行的一個命令(例如通過派遣)是存儲用戶庫。命令執(zhí)行例如基于用戶特權(quán)或其他安全策略而受限。例如,如果用戶庫表示(例如協(xié)議緩沖器)包括庫ID,腳本管理器204可保證允許執(zhí)行用戶修改庫。如果存在授權(quán),那么腳本管理器204可將其寫入存儲層,并返回庫的新表示。如果沒有ID存在,那么可以創(chuàng)建新ID,可以返回包括新產(chǎn)生的ID的表示。存儲庫可包括例如解析庫中的函數(shù)(例如使用腳本執(zhí)行器208)、向庫 DAO對象增加函數(shù)、檢測句法錯誤(例如使用腳本執(zhí)行器208)、存儲庫內(nèi)容和存儲所有人。 參看圖2,存儲用戶庫所涉及的部分可例如用過程1、2和6指示。
例如,協(xié)議緩沖器用于用戶庫表示時(shí)可包括可以在線上序列化或者以二進(jìn)制形式存留于數(shù)據(jù)庫中的數(shù)據(jù)結(jié)構(gòu)。該數(shù)據(jù)結(jié)構(gòu)可使用強(qiáng)類型的字段以強(qiáng)制執(zhí)行通信協(xié)議。
腳本管理器204可執(zhí)行的另一命令是導(dǎo)入庫。該命令可創(chuàng)建庫到給定文檔(例如電子表格、電子郵件日歷或者任何其他可附上下文)的鏈接或其他關(guān)聯(lián)。例如,電子郵件消息可以和用戶的給定郵件賬號關(guān)聯(lián)。鏈接的目的是底層文件可以快速辨明自己和哪個宏關(guān)聯(lián),例如,以在“運(yùn)行”菜單中顯示。例如,庫導(dǎo)入命令可以在數(shù)據(jù)存儲中創(chuàng)建“鏈接”表?xiàng)l目。參看圖2,導(dǎo)入庫所涉及的部分例如可以用過程1和2指示。
腳本管理器204可執(zhí)行的另一命令是復(fù)制命令,該命令復(fù)制已有的庫,制作其內(nèi)容的復(fù)本。例如,可以把庫中包括的所有腳本和宏復(fù)制到一個新庫名下。復(fù)制動作制作庫的內(nèi)容的復(fù)本,但是沒有復(fù)制關(guān)聯(lián)。將新創(chuàng)建的庫的所有人設(shè)為當(dāng)前所有人。復(fù)制操作完成后,返回新庫的ID。例如,復(fù)制命令可以在數(shù)據(jù)存儲中創(chuàng)建新的“herLibrary”表?xiàng)l目, 而不復(fù)制任何鏈接、繼續(xù)或授權(quán)。參看圖2,復(fù)制庫所涉及的部分例如可以用過程1和2指7J\ ο
例如,刪除庫命令可以檢查權(quán)限,然后如果允許的話,該命令可從數(shù)據(jù)存儲中(例如在腳本信息206中)刪除庫。例如,刪除庫命令可以從“herLibrary”表格和所有子表格中移除條目。前端可以負(fù)責(zé)例如給出任何“你確定嗎?”這樣的詢問。刪除庫所涉及的部分例如可以用過程1和2指示。
用戶得到庫的命令可以根據(jù)用戶ID返回給定用戶擁有的庫。例如,命令可以返回腳本信息206中保存的、用戶字段是當(dāng)前用戶的用戶庫(例如,在^erLibrary或其他表格中)條目。參看圖2,獲得用戶的庫所涉及的部分例如可以用過程1、2和4指示。
通過文檔得到庫的命令可以返回給定文檔導(dǎo)入的任何庫。例如,得到庫命令可以掃描Link表格中匹配的“documented”字段并返回父IserLibrary”。參看圖2,獲得文檔的庫所涉及的部分例如可以用過程1、2和4指示。。
分類庫命令可以向如“樣本”的“虛擬”文檔增加關(guān)聯(lián)。例如,分類庫命令可以在 Link表格中創(chuàng)建具有給定名稱(樣本等)的條目。參看圖2,分類庫所涉及的部分例如可以用過程1和2指示。
得到分類庫命令可返回具有給定分類的所有庫。例如,得到分類庫命令可和得到文檔庫命令類似。參看圖2,通過分類搜索庫所涉及的部分例如可以用過程1和2指示。
評估功能命令可從庫中檢索函數(shù)并將函數(shù)傳遞給腳本執(zhí)行器208進(jìn)行執(zhí)行。參看圖2,評估功能所涉及的部分例如可以用過程1、2、3、5和6指示。
給評估宏命令提供輸入?yún)?shù)(例如庫ID、宏名稱以及有關(guān)當(dāng)前文檔的上下文信息 (如果存在))時(shí),該命令可創(chuàng)建具有包裝的編程程序節(jié)并將包裝服務(wù)傳遞給腳本執(zhí)行器 208進(jìn)行執(zhí)行。參看圖2,評估宏所涉及的部分例如可以用過程1、2、3、5和6指示。
給定宏庫ID和繼續(xù)ID時(shí),繼續(xù)宏命令可調(diào)用腳本執(zhí)行器208上的繼續(xù)操作。例如,該命令可使暫停執(zhí)行的宏繼續(xù)活動執(zhí)行。參看圖2,繼續(xù)宏所涉及的部分例如可以用過程1、2、3和6指示。
更新授權(quán)命令可以更新(或增加)給定的宏庫以及給定用戶的一組授權(quán)在數(shù)據(jù)存儲中的條目。參看圖2,更新授權(quán)所涉及的部分例如可以用過程1和2指示。一些實(shí)現(xiàn)方式中,“得到庫”和其他命令可典型地僅在腳本存儲層工作,而不調(diào)用腳本執(zhí)行器208。
現(xiàn)在參看系統(tǒng)200的另一部分,命令servlet 216可使得響應(yīng)于來自宏控制器 (例如Javakript宏控制器“MacroController. js”)的請求而執(zhí)行宏命令。響應(yīng)可作為重定向而出現(xiàn),例如對用戶透明且自動的重定向。一個重定向技術(shù)示例中,瀏覽器客戶機(jī)發(fā)出到特定URL的請求時(shí),重定向規(guī)則可把請求定向到宏服務(wù)器,例如宏服務(wù)器子系統(tǒng)202。 命令servlet 216可處理的請求類型包括例如名稱為GET_ADMIN_PANEL、SET_SCRIPT等的幾個請求。
例如,GET_ADMIN_PANEL請求可返回宏管理面板的完整HTML,宏控制器(例如 MacroController. js)可把HTML插入封閉對話中。SET_SCRIPT請求可把腳本內(nèi)容和用戶庫ID發(fā)送給命令servlet 216。命令servlet 216可調(diào)用腳本管理器204以創(chuàng)建/更新用戶庫,這會造成返回HTML(例如由GXP生成)用于面板左手側(cè)(包括分類和庫名稱)。 macrocontroller. js可在左手側(cè)面板的div (部分)中呈現(xiàn)HTML。
GET_SCRIPT可從腳本管理器獲取給定庫的腳本內(nèi)容,并返回用于編輯腳本的內(nèi)容窗格(由GXP生成)。macrocontroller. js可把HTML置于面板的內(nèi)容div中。
IMP0RT_LIB請求可用導(dǎo)入庫命令調(diào)用腳本管理器。請求可通過gxp呈現(xiàn)面板的左手側(cè)并將其返回給macrocontroller. js。
C0PY_LIB請求可以和IMP0RT_LIB命令類似,但是使用復(fù)制命令而不是導(dǎo)入命令。 DELETE_LIB請求可以和IMP0RT_LIB類似,但是使用刪除命令,例如以通過gxp返回整個管理面板HTML。CATEG0RUE_LIB請求可用作“增加到樣本”特征。和IMP0RT_LIB—樣, CATEGORIZE_LIB可用分類庫命令調(diào)用腳本管理器并返回面板的左手側(cè)進(jìn)行重繪。
RUN_MACR0請求可使用宏名稱、庫ID和文檔狀態(tài)的序列化表示(例如當(dāng)前選擇等)并調(diào)用腳本執(zhí)行器208以執(zhí)行給定宏。如果發(fā)生錯誤,把錯誤消息發(fā)回給macrocontroller. js以顯示給用戶。如果用戶必須給宏授權(quán),可以把消息發(fā)回給 macrocontroller. js 以提不用戶。
宏服務(wù)器子系統(tǒng)202通過網(wǎng)絡(luò)2 和應(yīng)用220以及位置服務(wù)器222交互。應(yīng)用 220可以是用戶采用用戶裝置2 執(zhí)行的應(yīng)用,例如為用戶筆記本電腦上運(yùn)行的網(wǎng)絡(luò)瀏覽器。用戶裝置2 可以顯示例如網(wǎng)頁226a(例如使用電子表格服務(wù)器)。用戶網(wǎng)絡(luò)瀏覽器可采用宏控制器226b以控制宏在用戶的用戶裝置2 上的執(zhí)行。
來自第三方進(jìn)程和網(wǎng)頁2 的外部事件可作為在宏服務(wù)器子系統(tǒng)202上定義的宏的觸發(fā)機(jī)制??梢酝ㄟ^如互聯(lián)網(wǎng)的網(wǎng)絡(luò)230接收外部事件。這里的外部事件可對應(yīng)于參考圖1所述的外部事件105。
除了內(nèi)部事件外,如位置接收器218接收的位置信息的外部事件也可以由事件 servlet 214跟蹤并報(bào)告。事件servlet 214可以實(shí)現(xiàn)基于服務(wù)器的事件注冊表,其用作系統(tǒng)200中出現(xiàn)的事件的通信集線器。
可以用系統(tǒng)上運(yùn)行的如宏相關(guān)進(jìn)程的所感興趣進(jìn)程或訂閱進(jìn)程來訪問事件注冊表,而且事件注冊表可向這些進(jìn)程提供提醒從而出現(xiàn)某些事件時(shí)這些進(jìn)程可被實(shí)例化。為此,事件注冊表提供可由事件消費(fèi)者調(diào)用的方法。事件注冊表可展示各種方法,例如“監(jiān)聽 (listen) ”方法、“不監(jiān)聽(imlisten) ”方法以及可用于管理事件的其他方法。
監(jiān)聽方法用作系統(tǒng)內(nèi)事件監(jiān)控和跟蹤的基礎(chǔ),可具有自變量和參數(shù),例如用戶名、 事件過濾器和目標(biāo)。因而,監(jiān)聽方法調(diào)用的一個示例格式可如下
listen(userName, eventFilter, target);
調(diào)用監(jiān)聽方法會通知事件注冊表代表經(jīng)驗(yàn)證的用戶(例如通過“username”識別的用戶)去監(jiān)聽特定事件,并將在出現(xiàn)這些事件時(shí)將其路由到一個或多個特定目標(biāo)(例如通過"target"參數(shù)識別的目標(biāo))。例如,可以用事件過濾器(例如"eventFilter"參數(shù)) 識別特定事件。事件過濾器可包括服務(wù)標(biāo)識符(例如電子郵件服務(wù)、日歷服務(wù)等)和其他服務(wù)特有的過濾器(例如“電子郵件收件人”、“文件夾創(chuàng)建”等)。目標(biāo)例如可以是遠(yuǎn)程過程調(diào)用(RPC)回?fù)堋@?,發(fā)生或出現(xiàn)事件時(shí),事件注冊表可把事件細(xì)節(jié)發(fā)送給該端點(diǎn)(例如目標(biāo))。一些實(shí)現(xiàn)方式中,目標(biāo)可以是宏服務(wù)器子系統(tǒng)202的部件,其具有標(biāo)識事件觸發(fā)時(shí)運(yùn)行哪個宏的標(biāo)識符。
對應(yīng)的“不監(jiān)聽”方法可用于取消接收有關(guān)事件的通知的請求。調(diào)用不監(jiān)聽方法的調(diào)用形式可如下
unlisten(userName, eventFilter, target);
調(diào)用不監(jiān)聽方法可等價(jià)于取消或停止“監(jiān)聽器”。同樣地,該命令的參數(shù)與最開始用于開始監(jiān)聽事件的參數(shù)相反。
還可以通過事件servlet 214應(yīng)用復(fù)合事件條件。例如,可以定義事件過濾器從而只有在到來的電子郵件到達(dá)并且電子郵件的發(fā)件人或收件人位于某個位置時(shí)才觸發(fā)通知。這種復(fù)合標(biāo)準(zhǔn)可以用單獨(dú)的宏實(shí)現(xiàn),例如,由這樣的宏實(shí)現(xiàn),該宏由電子郵件到達(dá)而觸發(fā),然后檢查位置服務(wù)以得到收件人或發(fā)件人的位置,只有在位置和特定值匹配時(shí)才繼續(xù)執(zhí)行。標(biāo)準(zhǔn)還可通過事件servlet 214實(shí)現(xiàn),例如通過提供servlet 214可執(zhí)行的進(jìn)程,從而在通知訂閱服務(wù)開始執(zhí)行宏之前收集信息以確定是否已經(jīng)滿足復(fù)合條件。
某些情況下,事件條件可以彼此聯(lián)合,如采用級聯(lián)或串聯(lián)方式那樣。例如,事件出現(xiàn)可通過事件servlet 214發(fā)送消息給腳本管理器204來觸發(fā)宏的啟動。然后,該宏可運(yùn)行并提供涉及由事件servlet 214定義的其他事件的輸出。作為響應(yīng),事件servlet 214 可發(fā)送另一消息給腳本管理器204,以使腳本管理器204啟動不同的宏。使用類似方式,單個事件可同時(shí)觸發(fā)兩個不同宏的執(zhí)行。例如,用戶可能希望響應(yīng)于用戶賬號接收到任何電子郵件而運(yùn)行一個宏(例如,從電子郵件提取標(biāo)題信息并將該信息放入電子表格),而且還希望在收到來自社交網(wǎng)絡(luò)系統(tǒng)(可獨(dú)立于操作子系統(tǒng)202的系統(tǒng)和組織)中定義成第一用戶的好友的用戶的郵件的任何時(shí)刻且當(dāng)該好友位于第一用戶的特定距離內(nèi)時(shí)運(yùn)行另一宏。 因而,來自該位置的該好友的電子郵件到達(dá)時(shí),可以并行地同時(shí)觸發(fā)并執(zhí)行兩個宏。
可用幾種不同方式啟動事件通知。例如,可利用程序啟動事件通知。一些實(shí)現(xiàn)方式中,可以創(chuàng)建“安裝器”腳本或其他程序代碼,其利用程序在事件注冊表內(nèi)注冊事件類型。 例如,企業(yè)內(nèi)的包裹跟蹤應(yīng)用可在部署或初始安裝時(shí)在郵件列表上注冊事件監(jiān)聽器,其是可操作的以通知客戶包裹已到達(dá)、包裹已寄出、已收到運(yùn)費(fèi)、貨物已到達(dá)X處等。然后,當(dāng)在郵件列表上檢測到活動時(shí),可以自動運(yùn)行腳本庫(例如包裹跟蹤腳本庫)內(nèi)的其他動作。利用程序啟動的該示例中,很少需要、甚至無需終端用戶干預(yù)來“建立”事件監(jiān)聽器,這是由于已經(jīng)事先確立監(jiān)聽,例如作為包裹跟蹤應(yīng)用安裝的一部分。一些實(shí)現(xiàn)方式中,可以提供另外的用戶接口以調(diào)整監(jiān)聽器或者定義新的監(jiān)聽器。
啟動事件通知的另一示例機(jī)制中,提供事件的目標(biāo)應(yīng)用可以創(chuàng)建并展示自己的接口以允許用戶把事件類型和特定腳本調(diào)用綁定。例如,一些電子郵件應(yīng)用(例如蘋果的 Mail.app)可使用用戶可采用的自定義過濾器,例如在發(fā)生特定事件時(shí)指定運(yùn)行某個應(yīng)用 (例如AppleScript)。其他應(yīng)用(例如Gmail等)可包括允許用戶定義電子郵件屬性準(zhǔn)則 (例如包括字符串ABC的電子郵件、電子郵件來自/發(fā)送給特定地址等)以及被執(zhí)行的動作(例如,把電子郵件存檔、給郵件加標(biāo)志、轉(zhuǎn)發(fā)給地址MZ等)的過濾器。類似地,Gmail 可允許用戶可選擇地增加例如“運(yùn)行腳本XYZ”作為滿足特定過濾器準(zhǔn)則時(shí)要執(zhí)行的動作之一。其他應(yīng)用可使用類似特征,例如Google電子表格中的改變通知服務(wù),其是可操作的以發(fā)送有關(guān)電子表格改變的摘要的電子郵件(給用戶)。一些實(shí)現(xiàn)方式中,替代發(fā)送郵件,或者除了發(fā)送郵件之外,還可以提供調(diào)用宏的其他選項(xiàng)。
還有管理事件、用戶和用戶賬號、事件過濾器以及和事件注冊表關(guān)聯(lián)的目標(biāo)的其他方法。例如,用戶可使用getRegisteredListenersFoi^ser方法獲得與其賬號目前監(jiān)聽的所有事件有關(guān)的信息(例如其監(jiān)聽器列表)。例如可在管理面板或者其他用戶界面顯示該信息。其他事件管理方法可包括向特定用戶名,事件過濾器或者目標(biāo)或其組合提供信息的方法。
事件servlet 214實(shí)現(xiàn)的事件注冊表可維護(hù)用戶/監(jiān)聽器對的數(shù)據(jù)庫。接收到 “監(jiān)聽”方法或命令時(shí),例如事件注冊表可以解開服務(wù)過濾器并發(fā)送消息給對應(yīng)的服務(wù)。
每個服務(wù)可用類似的包括用戶證書和事件過濾器的“監(jiān)聽”方法展示RPC端點(diǎn)。服務(wù)的目標(biāo)可以是事件注冊表自身。例如,服務(wù)在內(nèi)部檢測到條件滿足事件過濾器時(shí),該服務(wù)可發(fā)送事件給事件注冊表。該過程這一部分(通過每個服務(wù)器的)內(nèi)部實(shí)現(xiàn)可以留給特定服務(wù)器負(fù)責(zé),從而不需要求系統(tǒng)該部分的任何特定內(nèi)部實(shí)現(xiàn)。因而,事件廣播器可以適合自己的方式實(shí)現(xiàn)該合約。
事件注冊表注冊(或檢測到)事件時(shí),事件注冊表負(fù)責(zé)從其數(shù)據(jù)存儲中解開目標(biāo)信息并把事件通知發(fā)送給所有相關(guān)目標(biāo)。通知可包括事件自身的標(biāo)識以及目標(biāo)可能需要的任何其他相關(guān)信息。一些實(shí)現(xiàn)方式中,主要目標(biāo)可以是宏服務(wù)器子系統(tǒng)202。一些實(shí)現(xiàn)方式中,可以使用其他目標(biāo),例如包括通知服務(wù)、日志服務(wù)、網(wǎng)絡(luò)服務(wù)及其他。
一些實(shí)現(xiàn)方式中,系統(tǒng)可設(shè)計(jì)成使得對不同部分的設(shè)計(jì)考慮彼此解耦 (decoupling)。例如,事件注冊表可知道目標(biāo),而事件廣播服務(wù)則不知道。此外,事件廣播服務(wù)可以知道如何應(yīng)用事件過濾器(例如“郵件已發(fā)送”、“電子表格單元格已更新”、“項(xiàng)目放在文件夾內(nèi)”),而事件注冊表則不知道。例如,事件注冊表可以僅知道如何定位服務(wù)端點(diǎn) (例如用于目標(biāo))。該解耦設(shè)計(jì)可提供的益處為,允許未來的參與者(如第三方)自由實(shí)現(xiàn)他們的系統(tǒng)端而不需擔(dān)心到N個可能目標(biāo)的路由細(xì)節(jié)。
有關(guān)傳輸機(jī)制,實(shí)現(xiàn)方式可使用用于API調(diào)用、網(wǎng)絡(luò)傳輸協(xié)議等的任何合適機(jī)制。 例如,事件注冊表的一些第三方參與者可使用各種網(wǎng)絡(luò)服務(wù)(例如“SOAP”)用于許多外部 API調(diào)用。其他參與者可使用表示狀態(tài)轉(zhuǎn)移(REST)或其他適當(dāng)?shù)腁PI。如提供子系統(tǒng)202 的組織的其他參與者可在內(nèi)部使用專有網(wǎng)絡(luò)傳輸協(xié)議。這些機(jī)制中的每一個或者此處未羅列的機(jī)制可保存事件流的內(nèi)容和語義。
一些實(shí)現(xiàn)方式中,用于用戶認(rèn)證的方法例如可包括OAuth或用于允許一個應(yīng)用訪問另一應(yīng)用上的用戶數(shù)據(jù)的任何其他適當(dāng)?shù)拈_放標(biāo)準(zhǔn)。例如,可以無需用戶提供密碼或其他具體證書而允許訪問。具體而言,使用OAuth或類似方法時(shí),用戶可允許事件注冊表在各種打開的應(yīng)用中調(diào)用事件子系統(tǒng)。調(diào)用可使用每個服務(wù)可識別的令牌。作為結(jié)果,認(rèn)證可限于事件系統(tǒng),例如,同時(shí)禁止訪問其他服務(wù),例如代表用戶發(fā)送電子郵件(例如未經(jīng)用戶許可等)。
每個事件的內(nèi)容(或“事件數(shù)據(jù)”)可包括例如一組屬性/值對。例如,可為所有應(yīng)用定義通用的一組標(biāo)準(zhǔn)屬性(例如“用戶”和“服務(wù)”)。此外,每個應(yīng)用可定義其服務(wù)專有的額外屬性。例如,電子表格應(yīng)用可定義屬性“電子表格單元格”,該屬性對非電子表格應(yīng)用無用ο
一些實(shí)現(xiàn)方式中,一些或所有過濾器可出現(xiàn)在事件注冊表中,而不是僅在參與服務(wù)中或者混合出現(xiàn)在二者之中。這種情況下,參與的服務(wù)可以不加辨別地將所有事件推給事件注冊表,事件注冊表會基于其存儲的監(jiān)聽器執(zhí)行事件過濾。雖然基于注冊表的過濾會簡化或消除參與服務(wù)的過濾,但是,一些情況下,這種方法會使系統(tǒng)過飽和。
這里,系統(tǒng)還可允許用戶如下記錄宏實(shí)例化宏記錄器、執(zhí)行宏記錄器跟蹤的多個動作并保存這些動作的表示,用戶以后可進(jìn)行調(diào)用該表示以自動執(zhí)行該動作。該實(shí)現(xiàn)方式中,典型在服務(wù)器端進(jìn)行宏記錄。用戶執(zhí)行可記錄命令時(shí)(例如,設(shè)定單元格值、插入工作表等),可以向電子表格服務(wù)器發(fā)送命令。該服務(wù)器可以注意自己是否處于“記錄”模式,是的話,服務(wù)器可查找命令并在與具有同樣效果的腳本代碼對應(yīng)的運(yùn)行字符串緩沖器內(nèi)寫入文本。
例如,考慮如果用戶在電子表格的單元格Al中敲入“hello”??梢韵螂娮颖砀穹?wù)器發(fā)送命令,命令I(lǐng)D的意思是“設(shè)定范圍”,值為“hello”,行為0,列為0,工作表ID為 0(例如,如果是第一頁工作表)。注意,這不僅是給記錄器的;這是在電子表格服務(wù)器上實(shí)際進(jìn)行改變單元格的命令,因而無論是否出現(xiàn)記錄都要發(fā)送該命令。因而,記錄器基本上等同于進(jìn)行電子表格操作的已有命令流上的竊聽裝置。
記錄器可查找命令I(lǐng)D并發(fā)現(xiàn)這是“設(shè)定范圍”命令。記錄器知道要產(chǎn)生的正確代碼是對“范圍”對象的“setValue”調(diào)用,因而記錄器可查找并使用行和列來產(chǎn)生相應(yīng)文本。 然后,記錄器查找并使用工作表標(biāo)識符,確定該工作表的變量是否已經(jīng)存在。結(jié)果,宏記錄器可產(chǎn)生如下文本
sheet. getRangeC al' ). setValue (‘ hello' ); (2)
因而,通過這些結(jié)構(gòu),計(jì)算機(jī)用戶可登錄到托管計(jì)算機(jī)服務(wù)并訪問多個不同應(yīng)用和服務(wù)。用戶可明確地選擇執(zhí)行宏,或者可自動觸發(fā)宏,宏可在該應(yīng)用中以及如果其他相關(guān)應(yīng)用被宏引用的話可自動實(shí)例化的該其他相關(guān)應(yīng)用中運(yùn)行。結(jié)果,用戶可訪問大量的數(shù)據(jù)和編程機(jī)制以產(chǎn)生穩(wěn)定在線服務(wù)。
圖3A是用于在托管計(jì)算系統(tǒng)上執(zhí)行宏的過程300的流程圖。過程300例如可用于在系統(tǒng)100和200上運(yùn)行宏。一般而言,所示過程包括識別相關(guān)宏代碼、創(chuàng)建對象以執(zhí)行代碼以及執(zhí)行代碼來和托管計(jì)算機(jī)系統(tǒng)上的一個或多個應(yīng)用交互。
本示例中的過程300從框302開始,在此接收到運(yùn)行宏的命令。命令可以是如參考圖1所述的外部事件105的結(jié)果,或者用戶可以手動選擇要運(yùn)行的宏。例如,前一種情況下,外部事件105可以是接收到電子郵件,命令要運(yùn)行的宏可以是響應(yīng)于接收到電子郵件執(zhí)行操作的宏,例如用電子郵件的標(biāo)題行更新電子表格。宏鉤子104可以參與檢測外部事件105,然后,還負(fù)責(zé)觸發(fā)要運(yùn)行的宏,例如通過和宏服務(wù)器子系統(tǒng)106通信。
在框304,識別、檢索并執(zhí)行宏代碼。例如,參看圖2,腳本管理器204可以向腳本信息206識別要執(zhí)行的宏代碼。然后,腳本信息206可以返回所請求的宏代碼給腳本管理器204,然后,腳本管理器204可啟動宏代碼執(zhí)行。
作為執(zhí)行宏代碼的一部分,(在框306)創(chuàng)建具有代表用于宏與之交互的應(yīng)用的編程API的Java對象的實(shí)例。API可對應(yīng)于宏代碼與之交互的應(yīng)用。例如,如果宏代碼設(shè)計(jì)用于更新電子表格,那么創(chuàng)建的實(shí)例包括代表用于相應(yīng)電子表格應(yīng)用的編程API的Java對象。
在框308把對象包裝在安全包裝內(nèi)。例如,安全包裝可以是圍繞宏代碼自身的額外代碼,例如,除非用戶采取肯定動作否則就不允許宏代碼運(yùn)行。一些實(shí)現(xiàn)方式中,動作可以是點(diǎn)擊“0K”,或者明確準(zhǔn)許宏的一些其他方式。
安全包裝可以各種方式保護(hù)終端用戶,例如免受特洛伊木馬攻擊、免受網(wǎng)絡(luò)釣魚攻擊以及免遭其他惡意代碼的攻擊。一些實(shí)現(xiàn)方式中,可以在向用戶遞送對話框后構(gòu)建安全包裝。對話框中包括的消息可把宏識別成可能不能信任的宏,并且進(jìn)一步識別如果運(yùn)行宏的話會發(fā)生什么。一些實(shí)現(xiàn)方式中,對話框可以識別該宏特有的可能危害行為列表,該列表基于對宏的掃描。例如,掃描宏可有助于部分基于宏中的文本字符串或者與過去的惡意宏的內(nèi)容相對應(yīng)的一些其他信息識別具體的可能危害效果。
用戶可同意或不同意宏可能擁有的訪問。用戶同意可用于構(gòu)建上文所述的基于能力的安全包裝,例如允許宏具有讀特權(quán),但是不允許宏更新某些文件。這種情況下,用戶授權(quán)宏的、在安全包裝中反應(yīng)的特權(quán)或權(quán)限限于用戶批準(zhǔn)的那些類型的動作。
一些實(shí)現(xiàn)方式中,用于產(chǎn)生安全包裝的過程可檢測試圖誤導(dǎo)檢測惡意代碼的機(jī)制的惡意代碼。例如,不是在宏代碼中使用“delete”,可以連接子字符串“de”和“l(fā)ete”以試圖隱藏真實(shí)的刪除操作意圖(例如“delete”)。此處所述過程可被編程以識別這種情況并防止用戶未給宏授予刪除權(quán)限時(shí)的刪除。
在框310,調(diào)用宏定向到的每個應(yīng)用的相關(guān)服務(wù)器。調(diào)用涉及執(zhí)行包括與宏所交互的應(yīng)用關(guān)聯(lián)的方法或其他程序API的對象。例如,調(diào)用可包括執(zhí)行更新電子表格、轉(zhuǎn)發(fā)電子郵件、復(fù)制文件等的宏代碼。
然后(在框312)用來自每個應(yīng)用的反饋進(jìn)行交互并訪問服務(wù)。例如,交互可包括與宏剛剛操作的應(yīng)用的用戶交互。例如,用戶可讀由于宏從另一用戶轉(zhuǎn)發(fā)電子郵件而剛剛接收的電子郵件(并執(zhí)行與郵件的其他交互)。
這樣,可以跨中央系統(tǒng)中的獨(dú)立子系統(tǒng)上運(yùn)行的多個應(yīng)用在中央系統(tǒng)上執(zhí)行宏。 宏可包括安全機(jī)制,并且可用多種方式觸發(fā)。此外,宏可從多個不同服務(wù)獲得信息,可以從系統(tǒng)內(nèi)或者通過如互聯(lián)網(wǎng)的網(wǎng)絡(luò)從其他系統(tǒng)訪問這些不同服務(wù)。
圖;3B是用于管理事件觸發(fā)宏的過程的流程圖。一般而言,該過程包括兩個階段 第一階段中實(shí)體訂閱事件注冊表以表明希望以后得到與某些標(biāo)準(zhǔn)匹配的事件的通知,第二階段中發(fā)生事件而且事件注冊表通知適當(dāng)?shù)膶?shí)體。這兩個階段可在過程中基本連續(xù)發(fā)生, 實(shí)體進(jìn)行注冊新的訂閱,同時(shí)其他實(shí)體被通知了有關(guān)指向之前所注冊的訂閱的事件。
該過程從框320開始,這里事件注冊表從實(shí)體接到要訂閱事件的通知。通知可以多種形式到來,例如形式為用于管理宏執(zhí)行的應(yīng)用(例如圖2中的腳本管理器204)和事件注冊表之間的遠(yuǎn)程過程調(diào)用。如上所述,通知可包括用戶名、事件過濾器和目標(biāo)。用戶名可對應(yīng)于操作事件注冊表的托管計(jì)算機(jī)系統(tǒng)中的用戶賬號的標(biāo)識符,目標(biāo)可代表事件注冊表識別到觸發(fā)事件時(shí)要向其發(fā)送通知的地址(例如URL),事件過濾器可代表向目標(biāo)提供通知之前事件必須滿足的一個或多個條件。提供通知的實(shí)體可以為任意多個實(shí)體,包括腳本管理器204,腳本管理器204在用戶確立要由特定事件觸發(fā)的宏時(shí)可提供包括定向到特定宏的目標(biāo)的通知給事件注冊表,這樣,出現(xiàn)事件時(shí)會運(yùn)行宏。
在框322,注冊表注冊訂閱實(shí)體并保存事件的通知參數(shù)。注冊可包括保存和在通知中接收的參數(shù)有關(guān)的信息,并可包括把這些信息與系統(tǒng)的注冊用戶關(guān)聯(lián),從而用戶可訪問并改變與事件注冊表?xiàng)l目有關(guān)的信息。所剩信息可保存在易于為事件注冊表所用的位置, 這樣,發(fā)生事件時(shí)可搜索所剩信息以確定特定事件和哪個條目關(guān)聯(lián)。
一些情況下,事件注冊表可訂閱和注冊表中的條目關(guān)聯(lián)的事件產(chǎn)生的服務(wù)。例如, 事件注冊表可向如電子郵件應(yīng)用的基于服務(wù)器的應(yīng)用提供用戶標(biāo)識,告訴該應(yīng)用它應(yīng)該報(bào)告與特定用戶賬號相關(guān)的某類事件。例如,事件注冊表可通知電子郵件應(yīng)用報(bào)告和到來的給用戶約翰多伊的消息有關(guān)的事件。這樣,應(yīng)用可以知道何時(shí)報(bào)告事件,而且無需將其遇到的所有事件提供給事件注冊表。
進(jìn)程的第二階段從框3 開始,這里,事件注冊表從事件產(chǎn)生的服務(wù)接收到通知。 例如,電子郵件應(yīng)用可以到來的給特定用戶的電子郵件的形式指示事件。指示可簡單地為訂閱電子郵件應(yīng)用時(shí)事件注冊表提供的標(biāo)識號的形式,事件注冊表可使用該號在底層注冊中查找要求了哪個通知。也可以傳遞其他信息,例如原始注冊時(shí)定義的信息,而且事件注冊表可把這種信息傳遞給如腳本管理器204的訂閱實(shí)體,從而事件觸發(fā)執(zhí)行的宏可以容易地訪問信息。備選地,宏可被編程為獨(dú)立從應(yīng)用直接獲得信息。事件注冊表可一直處于監(jiān)聽模式,等待這種通知,而且可以基本同時(shí)處理來自許多服務(wù)的許多這類通知,而且,可把通知報(bào)告給許多不同訂閱實(shí)體,其中包括宏或宏管理服務(wù)。
在框328,事件注冊表測試針對注冊表的所有訂閱的通知。通知是單個標(biāo)識號的情況下,事件注冊表可執(zhí)行查找,該查找把上述號與包括像訂閱實(shí)體原來提供給事件注冊表的信息那樣的信息的數(shù)據(jù)記錄關(guān)聯(lián)。然后,可使用該信息(例如目標(biāo)地址)通知訂閱實(shí)體 (框 350)。
這樣,該過程可簡便地向用戶提供自動地且獨(dú)立于客戶機(jī)設(shè)備或用戶狀態(tài)(例如用戶當(dāng)前是否能和托管系統(tǒng)交互,以及用戶當(dāng)前是否登錄到系統(tǒng))執(zhí)行宏的機(jī)制。
圖4A是用于執(zhí)行從網(wǎng)頁上運(yùn)行的應(yīng)用調(diào)用的宏的過程400的流程圖。一般而言, 圖4A所示過程和圖3A所示過程類似,且示出可在多部件系統(tǒng)的不同部件之間共享過程的方式的示例。
示例過程400包括對應(yīng)于瀏覽器401a和宏服務(wù)器401b之間的交互的步驟。例如, 過程的瀏覽器端的交互可涉及采用運(yùn)行電子表格應(yīng)用的客戶機(jī)設(shè)備的用戶,而執(zhí)行的宏可運(yùn)行在如宏服務(wù)器401b的數(shù)據(jù)服務(wù)器系統(tǒng)上(并用它獲得數(shù)據(jù))。瀏覽器端示出的過程 400步驟是可以在用戶和電子表格應(yīng)用(例如由電子表格服務(wù)器系統(tǒng)提供)之間出現(xiàn)的、 與宏無關(guān)的普通交互以外的步驟。宏服務(wù)器端執(zhí)行的過程400的步驟可以例如由宏服務(wù)器子系統(tǒng)202執(zhí)行。過程400還可代表上述參考圖1和圖2所述的系統(tǒng)100和200上的宏執(zhí)行。一般而言,宏服務(wù)器401b端過程400的步驟可用腳本管理器204控制。
在框402,出現(xiàn)執(zhí)行宏的請求。例如,請求可來自在客戶機(jī)設(shè)備上運(yùn)行瀏覽器應(yīng)用的用戶。用戶可執(zhí)行鍵組合以觸發(fā)宏的運(yùn)行,或者可如下啟動運(yùn)行在應(yīng)用中打開特定文檔、用戶選擇應(yīng)用中的控件或者通過除用戶與系統(tǒng)的交互以外的機(jī)制(如通過子系統(tǒng)收到外部信號)。
在步驟404,啟動宏的執(zhí)行。例如,啟動可出現(xiàn)在宏服務(wù)器子系統(tǒng)202中。例如,可在子系統(tǒng)上加載由客戶機(jī)設(shè)備傳遞或識別的地址所對應(yīng)的宏代碼,而且該宏代碼可以普通方式開始執(zhí)行。
在步驟406確定用戶是否提供了執(zhí)行宏的授權(quán)。該動作可出現(xiàn)在宏代碼執(zhí)行的開始。例如,用戶授權(quán)可以是如上所述防止惡意代碼運(yùn)行的部分實(shí)踐。
如果沒有用戶授權(quán),那么在步驟410獲取用戶授權(quán)要求,在步驟412提示向用戶提示授權(quán)。如果用戶在步驟414提供授權(quán),在步驟416保存用戶授權(quán),否則,過程400在步驟 418結(jié)束。用戶授權(quán)要求可包括例如如果允許宏執(zhí)行的話會出現(xiàn)的惡意結(jié)果類型的列表。 可在步驟412把列表呈現(xiàn)給用戶。
如果存在用戶授權(quán),在步驟408創(chuàng)建包裝服務(wù)??梢杂美绨b服務(wù)創(chuàng)建器212 創(chuàng)建包裝服務(wù)(或”bean”)。該動作是可選的,可用于保護(hù)執(zhí)行的代碼免受上述惡意干擾。
在步驟420,在腳本執(zhí)行器中執(zhí)行腳本(或宏)。例如,參看圖2,可用腳本執(zhí)行器 208執(zhí)行腳本。例如,和在客戶機(jī)本地發(fā)生的宏執(zhí)行不同,執(zhí)行出現(xiàn)在宏服務(wù)器子系統(tǒng)202 中。腳本執(zhí)行可以普通方式進(jìn)行,用一部分子系統(tǒng)逐步執(zhí)行腳本中的步驟并在滿足每一步時(shí)進(jìn)行其動作。在步驟422確定是否遇到繼續(xù)。如果遇到繼續(xù),在步驟4 存儲繼續(xù)。繼續(xù)可實(shí)質(zhì)上用于暫停腳本直到特定時(shí)間或出現(xiàn)特定事件。如果沒有遇到繼續(xù),在步驟4M恢復(fù)處理,這里,確定是否遇到出錯。如果沒有遇到出錯,在步驟430成功地結(jié)束宏執(zhí)行。如果在步驟4M遇到出錯,在步驟似6提醒用戶,然后在步驟430結(jié)束宏執(zhí)行。因而,利用該過程,可以向用戶提供由客戶機(jī)設(shè)備上用戶的動作(或其他事件)觸發(fā)的宏提供的功能,而且宏可以在獨(dú)立于客戶機(jī)設(shè)備的子系統(tǒng)上執(zhí)行。一些情況下,可在用戶不在線時(shí)發(fā)生執(zhí)行, 宏執(zhí)行的結(jié)果可為用戶以及在系統(tǒng)注冊的其他用戶可用。
繼續(xù)可用作腳本解釋器的執(zhí)行狀態(tài)的“快照”,凍結(jié)執(zhí)行從而稍后可恢復(fù)執(zhí)行。從概念上講這和調(diào)試器中斷點(diǎn)如何操作類似,或者與標(biāo)準(zhǔn)瀏覽器端執(zhí)行(例如JavaScript) 中的“提醒”調(diào)用類似。繼續(xù)可以用解釋器內(nèi)所有對象(例如所有局部變量和“bean”)的二進(jìn)制序列化和指向當(dāng)前執(zhí)行點(diǎn)的指針實(shí)現(xiàn)。可以在腳本執(zhí)行器208內(nèi)實(shí)現(xiàn)繼續(xù),該腳本執(zhí)行器208可支持作為公共可用特征的繼續(xù)。可以由腳本執(zhí)行器208例如使用Java序列化(這是Java的標(biāo)準(zhǔn)特征)來序列化所有對象(例如包括“bean” )。使用Java序列化, 對象(及其所有子對象)可以被寫出到包括對象標(biāo)識符和所有字段的當(dāng)前值的二進(jìn)制流。 恢復(fù)宏時(shí),可給予腳本執(zhí)行器208繼續(xù)二進(jìn)制數(shù)據(jù),該數(shù)據(jù)可例如在解序列化時(shí)用于新的活動Java對象。
一些實(shí)現(xiàn)方式中,繼續(xù)可存儲在數(shù)據(jù)庫中。例如繼續(xù)存儲在數(shù)據(jù)庫中而不是服務(wù)器存儲器中直到恢復(fù)宏。數(shù)據(jù)庫存儲的一個原因可以是由于服務(wù)器可在觸發(fā)繼續(xù)時(shí)和用戶恢復(fù)執(zhí)行之間的時(shí)刻(例如通過點(diǎn)擊對話框上的“ok”按鈕或一些其他恢復(fù)動作)重啟。一些實(shí)現(xiàn)方式中,繼續(xù)可具有預(yù)定生命周期(例如六小時(shí)),在此之后,可以丟棄繼續(xù)。這樣, 繼續(xù)不會像用戶一直沒有抽時(shí)間點(diǎn)擊“ok”按鈕那樣持續(xù)占有磁盤空間。
圖4B是用于在托管系統(tǒng)上記錄并執(zhí)行宏的過程431的泳道流程圖。示例過程431 包括瀏覽器、宏記錄器、宏服務(wù)器和應(yīng)用之間的交互。一般而言,該過程從服務(wù)器子系統(tǒng)向用戶提供一組宏記錄控件,由此用戶可利用控件指示何時(shí)需要記錄用戶和系統(tǒng)進(jìn)行的動作,然后,可以把這些動作重新格式化為宏的代碼,在調(diào)用宏時(shí)重新執(zhí)行這些動作。
過程從框432開始,這里,用戶選擇宏記錄器。選擇可以出現(xiàn)在瀏覽器中,例如用戶選擇控件開始記錄宏時(shí)。在步驟434提供宏記錄器服務(wù)。宏記錄器可以執(zhí)行在用戶瀏覽器上,或者宏記錄器可遠(yuǎn)程執(zhí)行,例如在宏服務(wù)器子系統(tǒng)202上執(zhí)行??梢岳缭诿撾x于用戶客戶機(jī)設(shè)備上當(dāng)前顯示應(yīng)用的窗口的無邊框?yàn)g覽器窗口中顯示宏記錄器。也可以其他方式提供記錄器,例如作為顯示應(yīng)用的同一頁一部分的iFrame或類似元素。
在步驟436,用應(yīng)用顯示宏記錄器。例如,如果用戶在其筆記本電腦上的瀏覽器中執(zhí)行電子表格應(yīng)用,可以出現(xiàn)彈出或其他顯示代表宏記錄器。宏記錄器可以顯示成具有各種用于控制記錄器操作的控件,例如用戶可選擇的記錄、暫停和停止按鈕。在步驟438開始記錄,意味著用戶可以開始敲定義宏的鍵。該記錄可由向通過顯示記錄器的代碼為記錄器提供服務(wù)的服務(wù)器子系統(tǒng)發(fā)送的消息觸發(fā),指示用戶選擇了記錄器上的記錄控件。
在步驟440,用戶與應(yīng)用交互,意思是用戶執(zhí)行在用戶使用的應(yīng)用中定義宏功能性的操作(敲鍵、選擇等)。例如,用戶可選擇電子表格中的某個范圍的單元格,可以在這些單元格上執(zhí)行命令(例如,復(fù)制并粘貼單元格,在單元格中輸入公式等),并可執(zhí)行其他這種動作。
在步驟442,在用戶和應(yīng)用交互期間,宏記錄器開始記錄用戶動作,這可包括在記錄過程中在用戶記錄命令的同時(shí)顯示命令。如上所述,記錄器可以和應(yīng)用以相同方式解釋用戶輸入,然后把這些經(jīng)解釋的動作轉(zhuǎn)換成以后宏可在運(yùn)行時(shí)供應(yīng)給應(yīng)用的命令。記錄器還可跟蹤用戶在其中執(zhí)行命令的應(yīng)用(例如瀏覽器窗口),這樣,宏可知道其在運(yùn)行時(shí)把命令提供給那些不同的多個應(yīng)用。
用戶和應(yīng)用交互且記錄動作時(shí),在步驟444提供用戶動作的標(biāo)準(zhǔn)執(zhí)行??梢栽谟脩襞c之交互的應(yīng)用內(nèi)進(jìn)行執(zhí)行。因而,可以并行地把用戶動作提供給應(yīng)用和宏記錄器,這樣,記錄了動作,而且這樣應(yīng)用以適當(dāng)方式對動作作出反應(yīng)。
完成宏的定義后,從用戶接收到保存命令,例如通過按下記錄器的“停止”按鈕、 “完成”鍵或者其他控件。在步驟448,發(fā)送宏的信息。該信息可在用戶執(zhí)行命令進(jìn)行記錄時(shí)被解釋成宏命令,或者可在宏記錄停止后進(jìn)行解釋和轉(zhuǎn)換。然后,宏記錄器發(fā)把信息例如發(fā)送給宏存儲,并且可以產(chǎn)生指向宏代碼的一個或多個指針(例如URL),這樣以后可容易地訪問代碼。例如,宏記錄器可要求用戶識別以后用于啟動宏的鍵組合。
在步驟450,保存宏信息,這包括庫名稱(保存宏的庫)、腳本或宏內(nèi)容(如宏記錄器所記錄的)和用戶ID。還可適當(dāng)?shù)乇4婧秃晗嚓P(guān)的其他信息。
以后,無論是片刻之后或者幾天甚至幾年后,用戶決定運(yùn)行宏時(shí),用戶可指定要運(yùn)行的宏。例如可以通過從為用戶當(dāng)前與之交互的應(yīng)用定義的宏列表中選擇宏名稱來完成宏的選擇。例如,用戶可訪問的宏列表可以和用戶賬號聯(lián)合存儲,并且可以列表顯示給用戶 (每個宏的制造者為宏提供了可理解的名稱)。備選地,可以自動選擇宏,例如通過執(zhí)行另一個宏,通過系統(tǒng)上出現(xiàn)與特定用戶的動作無關(guān)的事件或者以其他方式。用戶也可以讓其他用戶使用保存的宏,例如通過被提示第一用戶希望具有對宏的訪問權(quán)限的其他用戶的電子郵件地址或其他賬號標(biāo)識符。用戶還可以提供一組其他用戶,例如通過指向消息組(例如電子郵件列表)或者特定域或子域的所有用戶(例如,從用戶雇主處訪問系統(tǒng)的所有用戶)。
例如,可選地,可在步驟45 接收到例如來自用戶的運(yùn)行宏的輸入。備選地,可在步驟452b出現(xiàn)運(yùn)行宏的觸發(fā)事件。利用兩種機(jī)制的任一種,在步驟妨4接收并執(zhí)行和宏對應(yīng)的宏代碼。
在宏執(zhí)行的初始階段,在步驟456為對應(yīng)于和宏關(guān)聯(lián)的應(yīng)用的API創(chuàng)建對象。這些對象可代表執(zhí)行宏所需的對象,并且可包括例如把命令從一種格式轉(zhuǎn)換成另一種格式的對象、包裝其他對象的對象、限額施加對象及其他這類對象。
在步驟458把對象包裝在安全包裝中。這種包裝可用上述機(jī)制進(jìn)行,可用于保護(hù)用戶免于在系統(tǒng)上執(zhí)行惡意代碼。
在步驟460,用用戶ID調(diào)用(或?qū)嵭谢驁?zhí)行)應(yīng)用??捎煤攴?wù)器子系統(tǒng)202執(zhí)行應(yīng)用調(diào)用。調(diào)用中包括用戶ID以檢查授權(quán),例如確保用戶經(jīng)授權(quán)可讀、更新或刪除特定文件等。
在步驟462,執(zhí)行與調(diào)用的應(yīng)用中要執(zhí)行的步驟相關(guān)的動作。例如,動作可對應(yīng)于所記錄的宏中記錄的單個指令或步驟。步驟執(zhí)行在應(yīng)用中進(jìn)行,應(yīng)用物理上可位于記錄宏的瀏覽器遠(yuǎn)程的位置。事實(shí)上,一些示例中,宏可能由完全不同的用戶在不同瀏覽器上記錄并保存。這種情況下,不同用戶可能是由原始記錄宏的用戶授權(quán)使用宏的好友或家庭成員。
在步驟464,返回進(jìn)一步執(zhí)行所需的鍵。這些鍵例如可包括用戶提供的輸入或者應(yīng)用自身傳遞的參數(shù)。從目標(biāo)應(yīng)用(例如電子表格應(yīng)用)返回的“鍵”可以識別其狀態(tài)由于給定命令發(fā)生改變的任何項(xiàng)目。例如,命令I(lǐng)NSERT_SHEET會使新的工作表成為“當(dāng)前”工作表。宏可具有可用于反映當(dāng)前的新工作表的其他命令(例如getActiveSheet)。其他命令(例如INSERT_R0W)可改變當(dāng)前選擇,改變哪個單元格是當(dāng)前的活動單元格。可把當(dāng)前狀態(tài)和選擇數(shù)據(jù)返回給宏進(jìn)行存儲,以備后續(xù)命令(例如getActiveSheet)需要該信息。
步驟460、462、464可以繼續(xù)相對同時(shí)運(yùn)行,直到宏完成。結(jié)束出現(xiàn)在步驟462遇到并執(zhí)行最后指令時(shí),或者宏執(zhí)行中的事件停止宏執(zhí)行時(shí)。
圖5示出宏系統(tǒng)中對象的示例結(jié)構(gòu),具體而言,示出如圖2的腳本信息倉庫206中的結(jié)構(gòu)的信息的邏輯結(jié)構(gòu)。邏輯結(jié)構(gòu)500用節(jié)點(diǎn)502到508表示。對于腳本信息倉庫206 中存儲的任何一個宏,例如,至少存在一個結(jié)構(gòu)500或其一部分。繼續(xù)節(jié)點(diǎn)504、鏈接節(jié)點(diǎn) 506/和用戶授權(quán)節(jié)點(diǎn)508都和用戶庫節(jié)點(diǎn)502具有0. . N關(guān)系,意思是對于每個用戶庫(或頭)節(jié)點(diǎn),可以存在任意多個(包括零個)繼續(xù)、鏈接和用戶授權(quán)。
結(jié)構(gòu)的根節(jié)點(diǎn)是用戶庫節(jié)點(diǎn)502,其定義例如宏和/或庫的名稱(例如“丹的基于云的MacroLib”中的“MaCro_XYZ”)、宏庫所有者(例如“丹”)以及和宏關(guān)聯(lián)的腳本(例如宏代碼)。每個宏庫可具有唯一標(biāo)識符,例如64位的偽隨機(jī)數(shù),該標(biāo)識符還可用作數(shù)據(jù)庫主鍵。一些實(shí)現(xiàn)方式中,從數(shù)據(jù)庫中檢索宏時(shí)不使用如庫名稱和庫中包括的一組函數(shù)的字段; 這些字段是嚴(yán)格用于運(yùn)行/顯示宏庫的?!八姓摺弊侄卫缈捎米骶哂腥纭暗玫接脩鬤YZ 的所有宏”的操作的外鍵。鏈表例如可用于如“得到文檔XYZ使用的所有宏”的操作。
繼續(xù)節(jié)點(diǎn)504可包括繼續(xù)ID、繼續(xù)數(shù)據(jù)(例如來自另外的入口點(diǎn),例如,用于在宏進(jìn)入等待狀態(tài)后用另外的輸入恢復(fù)宏)以及用戶名(例如創(chuàng)建繼續(xù)節(jié)點(diǎn)504的用戶)。給定的宏可存在多個繼續(xù)節(jié)點(diǎn)504??捎涗浝^續(xù)的“所有者”主要用于防止會話劫持,從而例如用戶X不能作為用戶Y恢復(fù)運(yùn)行的宏。這樣,操作可保證只有用戶Y可恢復(fù)他啟動的宏。 可允許多個這種記錄,這是由于一個用戶可具有多個繼續(xù)(例如不同窗口中打開的三個電子表格,每個帶有活動的提示對話框)。多個用戶還可同時(shí)運(yùn)行他們自己的宏實(shí)例,每個都具有自己的對話提示。
鏈接節(jié)點(diǎn)504允許外部實(shí)體鏈接到宏。鏈接節(jié)點(diǎn)504可包括文檔ID,其可以是URL 或者“指向”宏的一些其他路徑名。由于同一個宏可以有多個不同名稱(以及到該宏的多個不同URL路徑或其他路徑),所以可以存在多個鏈接節(jié)點(diǎn)506。
用戶授權(quán)節(jié)點(diǎn)508可包括允許對宏的限制訪問的信息。例如,限制協(xié)議緩沖器 (protobuffer)字段可使用值的協(xié)議模式控制訪問,用戶字段可基于用戶ID控制訪問。每個節(jié)點(diǎn)508中可使用任一種或兩者都用。給定的宏可有多個用戶授權(quán)節(jié)點(diǎn)508,每個節(jié)點(diǎn)標(biāo)識不同的授權(quán)等級。用戶授權(quán)節(jié)點(diǎn)508可以強(qiáng)制要求對于每個宏每個用戶只有一個授權(quán)記錄。強(qiáng)制要求可采用用戶用于執(zhí)行宏以及宏可做的事情的批準(zhǔn)圖章這樣的表示。可以允許多個記錄,這樣的唯一原因是多個不同用戶的每一個可能都有宏的授權(quán),而且給每個用戶授權(quán)執(zhí)行不同的動作。用戶X執(zhí)行宏時(shí),使用他的宏授權(quán)記錄,忽略所有其他記錄。
如果宏的要求改變了(例如如果作者增加了對博客應(yīng)用的調(diào)用),這會改變運(yùn)行宏所需的要求,那么已有的用戶授權(quán)可被標(biāo)記成失效。這樣,增加了額外的要求后用戶試圖再執(zhí)行宏時(shí),會再提示用戶需要授權(quán)。例如,提示可以為“該宏需要訪問日歷和博客應(yīng)用”, 而之前宏僅僅說“該宏要求訪問日歷”。如果刪除了服務(wù)則不需要提示重新授權(quán),只有要求增加時(shí)才提示。
圖6示出宏構(gòu)建系統(tǒng)600的示例截屏。例如,用戶可使用該系統(tǒng)來確立宏參數(shù)和規(guī)則,隨后宏可基于外部事件執(zhí)行,或者可在用戶進(jìn)行選擇時(shí)手動執(zhí)行。一般而言,系統(tǒng)把宏結(jié)構(gòu)組織成三個階段,每個階段用截屏的一列示出,而且每個階段(包括每個階段的子階段)在被配置之前可隨階段改變。使用該系統(tǒng),用戶可快速識別宏的觸發(fā)器、從和所選觸發(fā)器有關(guān)的可用參數(shù)中識別操作宏的參數(shù)以及對應(yīng)于所選參數(shù)的宏結(jié)果。
一個示例中,用戶可構(gòu)建基于電子郵件相關(guān)事件執(zhí)行電子郵件功能的宏。另一示例中,可把宏構(gòu)建成在非電子郵件相關(guān)的應(yīng)用(例如電子表格、文字處理應(yīng)用等)執(zhí)行操作。在又一個示例中,用戶可構(gòu)建具有輸出但是不取決于任何觸發(fā)事件的宏。無論作為觸發(fā)器或輸出的應(yīng)用的類型,簡單地在屏幕上作出用戶選擇就可自動產(chǎn)生相應(yīng)宏的構(gòu)建。屏幕“后面”運(yùn)行的軟件應(yīng)用例如可以處理圖6截屏所示的界面上的用戶輸入和選擇,而且可以自動構(gòu)建宏,包括插入適當(dāng)?shù)暮昃浞?、各種應(yīng)用專有或語言專有的API調(diào)用以及運(yùn)行宏所需的其他宏部件。所有這些都對用戶透明,用戶簡單地在幾個可理解的字段內(nèi)輸入幾個輸入。
截屏600包括宏名稱字段601,其標(biāo)識當(dāng)前所構(gòu)建的宏(例如,如用戶最初定義的或以后更新的)。如上所述,宏定義可在三個常見區(qū)域進(jìn)行宏觸發(fā)數(shù)據(jù)區(qū)域602、宏處理數(shù)據(jù)區(qū)域604以及宏輸出數(shù)據(jù)區(qū)域606。宏觸發(fā)數(shù)據(jù)區(qū)域602可包括用戶可用于決定并識別觸發(fā)宏的條件或事件的字段和控件。宏處理數(shù)據(jù)區(qū)域604可用于定義宏運(yùn)行時(shí)會發(fā)生的處理。宏輸出數(shù)據(jù)區(qū)域606可識別宏輸出,例如宏將操作的應(yīng)用數(shù)據(jù)類型以及對數(shù)據(jù)采取的動作(或操作)??梢源嬖诔藬?shù)據(jù)區(qū)域602-606以外的其他數(shù)據(jù)定義區(qū)域,例如,如果同一個宏需要更新多個應(yīng)用中的數(shù)據(jù),可以有多個宏輸出數(shù)據(jù)區(qū)域606。一些實(shí)現(xiàn)方式中,可以使用提交/退回技術(shù),以保證進(jìn)行了所有更新,或者沒有任何更新,這有助于保持?jǐn)?shù)據(jù)完整性。
三個數(shù)據(jù)區(qū)域602、604和606通??稍O(shè)計(jì)成按順序完成。一些實(shí)現(xiàn)方式中,用戶在一個區(qū)域選擇的值會影響該區(qū)域下面或右邊的字段或控件上的顯示。例如,在宏觸發(fā)數(shù)據(jù)區(qū)域602中輸入的數(shù)據(jù)可以影響其他區(qū)域(例如數(shù)據(jù)區(qū)域604和606)中顯示(以及用戶可選擇)的字段和數(shù)據(jù)選擇類型。例如,如果用戶選擇“電子郵件”作為宏的觸發(fā)機(jī)制(例如,通過在屬性字段608內(nèi)指定或選擇“電子郵件”),那么宏處理數(shù)據(jù)區(qū)域604內(nèi)可用的選項(xiàng)可針對電子郵件屬性定制。
如本例所述,宏觸發(fā)數(shù)據(jù)區(qū)域602包括屬性字段608、活動字段610、參數(shù)字段611。 活動字段610內(nèi)顯示(而且可由用戶選擇)的值可取決于屬性字段608中的用戶選擇。例如,通過選擇屬性字段608內(nèi)的“電子郵件”,活動字段610內(nèi)的值包括與電子郵件有關(guān)的選項(xiàng)(例如到來消息、收件箱大小、標(biāo)簽大小等)。選擇不同屬性(例如在線拍賣)會導(dǎo)致活動字段610內(nèi)的不同條目列表(例如物品量、物品分類等)。參數(shù)字段611可用于給活動分配值。用戶可在參數(shù)字段611內(nèi)輸入或選擇的可能值可包括,例如大小、顏色、美元量、時(shí)間段、語言、性別或者僅關(guān)于適于特定應(yīng)用的任何定性或定量的值。一些實(shí)現(xiàn)方式中,參數(shù)字段611上的標(biāo)簽可以根據(jù)活動框610的值自動標(biāo)注(例如大小、顏色、價(jià)格等)。
宏處理數(shù)據(jù)區(qū)域604包括條件字段612、檢查服務(wù)字段614和服務(wù)值字段616。條件字段612顯示用于識別會觸發(fā)宏的某些動作(例如以某種方式轉(zhuǎn)發(fā)到來的電子郵件)的條件的選項(xiàng)。條件字段612顯示的具體值(例如“來自用戶”或“來自組中的用戶”等)可取決于例如屬性字段608的用戶條目(例如電子郵件)。如果用戶在屬性字段608選擇不同的值(例如電子表格),條件字段612內(nèi)可顯示一組不同的值(例如和電子表格有關(guān))。
檢查服務(wù)字段614可在收集的用于運(yùn)行宏的信息中識別由宏檢查的宏和應(yīng)用外部的服務(wù)。例如,通過選擇檢查服務(wù)字段614中的“定位器”,在宏執(zhí)行時(shí)用戶可正在定義宏應(yīng)該檢查發(fā)送者的位置、用戶X的位置或者電子郵件的抄送行列出的特定用戶的位置,或者其他選擇。服務(wù)值字段616標(biāo)識要從所提及的服務(wù)返回哪些特定值給宏。例如,本例中, 位置可基于近似實(shí)時(shí)GPS位置、蜂窩電話三角測量跟蹤的位置、街道地址、郵政編碼或者任何其他適當(dāng)?shù)亩ㄎ粯?biāo)準(zhǔn)。
一些實(shí)現(xiàn)方式中,宏處理數(shù)據(jù)區(qū)域604可包括用于在宏中使用布爾運(yùn)算符的各種機(jī)制。這些機(jī)制可以是條件字段612“與”檢查服務(wù)字段614所隱含的“與”之外的機(jī)制。例如,條件字段612可以結(jié)合顯示成單選按鈕的一組Any/All (任何/所有)控件617使用,這可有助于明確指定與/或運(yùn)算符和邏輯。例如,用戶可選擇Any/All控件617的“Any”(或者“All”),以指定宏要考慮檢查服務(wù)字段614中勾上的任何(或所有)單個選項(xiàng)。
一些實(shí)現(xiàn)方式中,可以為宏構(gòu)建系統(tǒng)600上的其他字段提供另外的布爾控件和字段等,例如字段名稱的直接文本輸入、字段值、布爾運(yùn)算符和位置恰當(dāng)?shù)睦ㄌ?。這類更高級的控件可包括例如可通過選擇高級布爾控件618獲得的屏幕顯示或其他界面。一些實(shí)現(xiàn)方式中,訪問高級布爾控件618可允許用戶看到整個宏的現(xiàn)有邏輯,而且可包括例如更新的用戶選擇和在數(shù)據(jù)區(qū)域602到606進(jìn)行的輸入所代表的當(dāng)前邏輯。系統(tǒng)600可執(zhí)行自動句法檢查并驗(yàn)證用戶輸入(或從列表選擇)的字段和檢查的值一致。
宏輸出數(shù)據(jù)區(qū)域606包括屬性字段620、動作字段622和參數(shù)字段624。這些字段可例如用于指定宏的特定輸出(例如做這個、發(fā)送那個、更新特定文件、字段或電子表格單元格)。圖6所示示例中,屬性620選擇了“電子郵件”,使得在動作字段622中顯示與電子郵件有關(guān)的條目。因而,該宏的輸出會是把某種形式的電子郵件發(fā)送給某個或某些地址。
需要時(shí)(例如基于其上的選擇和字段),參數(shù)字段6M可用于給字段或選擇分配值。一些實(shí)現(xiàn)方式中,可以在字段“后方”定義字段的值,這樣,雙擊字段名會顯示用于定義字段值的彈出窗口,或者在字段上懸停可顯示字段的當(dāng)前值。
圖6所示的示例宏構(gòu)建屏幕中,宏觸發(fā)數(shù)據(jù)區(qū)域602定義為用于在電子郵件應(yīng)用 (例如通過屬性字段608)接收到“到來消息時(shí)”(例如由活動字段610識別)觸發(fā)宏。宏處理數(shù)據(jù)區(qū)域604包括指定具體用戶、在電子郵件正文中包括具體單詞以及基于用戶X的位置的條件612??梢栽诶缙渌麉?shù)字段(圖6未示出)中定義這些條件的值。因而,如果滿足這些條件宏會執(zhí)行到完成。宏輸出數(shù)據(jù)區(qū)域606示出“電子郵件”是當(dāng)前宏輸出的類型,要執(zhí)行的動作是“給我發(fā)文本消息”(例如如動作字段622所定義的)。作為在數(shù)據(jù)區(qū)域602到606中輸入的值的結(jié)果,檢測到來自特定用戶、標(biāo)題行包括特定單詞并基于用戶X 的位置的到來電子郵件消息這一觸發(fā)事件后,宏使用消息傳送應(yīng)用發(fā)送文本消息給到來電子郵件的目標(biāo),通知他們收到了這樣的電子郵件。示例宏構(gòu)建屏幕的益處在于其以簡明的 GUI格式向用戶提供了該消息,同時(shí)隱藏了執(zhí)行功能的底層宏,用戶甚至不需知道如何寫宏或如何組織一個宏。該屏幕可用于構(gòu)建完整的宏或者構(gòu)建宏的一部分,其中用戶可向宏增加屏幕不能提供的其他代碼。
用于定義宏的用戶界面可包括按鈕或控件626,例如,“保存”輸入或更新的宏、 “撤銷”對宏的一個或多個更新或改變、“顯示”所得的宏或者不保存而“取消”編輯?!癱opy from(復(fù)制自)”字段6 可允許用戶通過復(fù)制已有宏而創(chuàng)建和定義新的宏,或者為已有宏復(fù)制參數(shù),以把屏幕預(yù)先設(shè)定成初始狀態(tài),用戶隨后可改變該狀態(tài)。描述字段630可允許用戶記錄宏的目的,或者提供宏名稱不包括的某些級別的意義給宏。
一些實(shí)現(xiàn)方式中,宏定義可具有與之相關(guān)的時(shí)間元素,例如有效日期632用于說明宏第一次生效的時(shí)間,終結(jié)日期634說明宏不再執(zhí)行的時(shí)間,而且,調(diào)度或“rim on (運(yùn)行于)”字段636可用于例如說明宏要執(zhí)行的日期(工作日、周一、周末等)。日期字段可包括具體日期或日期范圍和/或時(shí)間,或者可包括枚舉類型(例如現(xiàn)在、從不、工作日等)。
一些實(shí)現(xiàn)方式中,系統(tǒng)600提供的用戶界面可適于在顯示屏較小的用戶設(shè)備上執(zhí)行,例如智能電話等。例如,可順序提供數(shù)據(jù)區(qū)域602到606和其他字段。一些實(shí)現(xiàn)方式中, 可為整個平面提供滾動條,允許用戶一次導(dǎo)航到一個大致區(qū)域。
使用系統(tǒng)600構(gòu)建的宏可結(jié)合上面系統(tǒng)100和200以及圖1和圖2所述的安全方面一起使用。具體而言,每個構(gòu)建的宏可包裝在基于能力的安全包裝中。系統(tǒng)600可包括可協(xié)助安全的、與安全有關(guān)的字段(未示出),例如包括可能使用宏的其他用戶的名字以及他們可以執(zhí)行操作的程度(例如發(fā)送電子郵件、更新電子表格等)。
這種基于能力的安全可通過給用戶要執(zhí)行的代碼授權(quán)時(shí)考慮用戶的意圖而帶來益處。這種系統(tǒng)中,例如,執(zhí)行用戶創(chuàng)建稱為能力的對象,這些對象封裝用戶希望允許的每個操作,并把這些對象傳遞給要執(zhí)行的不信任代碼。系統(tǒng)執(zhí)行不信任代碼時(shí),這些對象成為載荷的一部分(例如包裝的一部分),而且不能被不信任代碼修改或創(chuàng)建。不信任代碼試圖訪問底層的信任資源(例如通常為系統(tǒng)文件等)時(shí),它只能通過用戶創(chuàng)建的包裝了信任資源的對象進(jìn)行。能力可允許對要授予不信任代碼的訪問權(quán)限進(jìn)行細(xì)粒度的控制,而且可用于構(gòu)建堅(jiān)持最少特權(quán)原則的執(zhí)行環(huán)境。這意味著任何給定模塊只能執(zhí)行其可實(shí)現(xiàn)自己功能所必需的最少動作,而不能做更多。
描述了有關(guān)托管基于宏的系統(tǒng)的示例系統(tǒng)和過程后,下面的段落描述用于使用這些系統(tǒng)和過程的一系列示例,許多示例討論系統(tǒng)如何使用基于能力的安全來處理這些情況的每個情況,以及,如何減少作為這種示例的一部分的一些風(fēng)險(xiǎn)。
例1 銷售策略實(shí)施
考慮一個組織的銷售部門在電子表格中創(chuàng)建給潛在客戶的提案的情況。電子表格包括公司生產(chǎn)的所有產(chǎn)品和特色產(chǎn)品的價(jià)格。銷售人員瀏覽工作表時(shí),可把用特色產(chǎn)品旁邊一欄中的1或0來標(biāo)示特色產(chǎn)品為有效的或者無效的(即當(dāng)前是否能出售)。工作表可包括用于計(jì)算報(bào)價(jià)的公式,包括各種折扣和價(jià)格增值項(xiàng)目。
例如包括互斥的一些特征的單項(xiàng)產(chǎn)品之間會有許多相關(guān)性??砂堰@些規(guī)則表示成宏。備選地,可以用規(guī)則語言表示規(guī)則,規(guī)則語言會被編譯成附于工作表的宏以實(shí)施規(guī)則。 其他規(guī)則可包括錯誤檢查和其他一致性檢查。此外,還有與促銷或者基于區(qū)域或其他因素的觸發(fā)事件關(guān)聯(lián)的規(guī)則。
要考慮的有關(guān)這些規(guī)則的一件事是如何管理這些規(guī)則。例如,宏和/或規(guī)則處于工作表引用的共享庫中是有益的,這樣,管理員可容易地更新工作表中的值。而且,宏應(yīng)該是系統(tǒng)管理員提供給各個小企業(yè)主的工具套件的一部分,而且可允許每個這些用戶訪問并執(zhí)行宏。管理員可從托管系統(tǒng)上的中央位置對宏進(jìn)行更新,用戶都可以從該位置執(zhí)行宏。
因而,可用共享模式發(fā)布宏,給訪問宏的每個電子表格一個“位置(slot)”。另一用戶可通過在他的電子表格中包括指向宏的URL而把宏導(dǎo)入在自己的電子表格中,而且可授予宏向該電子表格寫入的權(quán)限。
例2 投資用戶界面
考慮下面情況,投資公司在電子表格中有報(bào)價(jià)模型,希望從外部服務(wù)得到股票報(bào)價(jià)并將其注入電子表格以產(chǎn)生推薦(例如買入、持有等)。
腳本可能需要從電子表格讀出并向電子表格寫入,而且需要訪問外部股票報(bào)價(jià)服務(wù)。作者給腳本的訪問權(quán)限可使腳本僅限于特定的股票報(bào)價(jià)服務(wù)。如果作者要使位置空白, 不僅要問詢調(diào)用服務(wù)的用戶是否要授予腳本聯(lián)系服務(wù)的權(quán)限而且還問具體聯(lián)系哪個服務(wù)。 這樣,用戶可限制腳本可以做什么,腳本不能聯(lián)系任何其他服務(wù)。
如果用戶想要與其他用戶共享該宏以包括在他們自己的電子表格中(例如,復(fù)制宏而不是引用宏),其他用戶會需要他們自己的授權(quán)以訪問外部股票報(bào)價(jià)服務(wù)。如果用戶通過讓其他人指向中央位置處的宏而共享宏,即便用戶沒有聯(lián)系外部股票報(bào)價(jià)服務(wù)的權(quán)限他們也可以使用宏。這種情況下,可授予用戶腳本自己具有的權(quán)限(雖然他們不能從自己的腳本訪問服務(wù))。
例3:事故報(bào)告
考慮公交公司希望對其事故報(bào)告進(jìn)行自動化的情況。遇到事故的司機(jī)可以訪問托管服務(wù)以在電子表格中填表,該表格記錄如公交車位置等的信息。宏可用于把報(bào)告發(fā)送給各個監(jiān)督人員進(jìn)行審閱。
宏可能需要識別監(jiān)督人員(例如通過宏可訪問的另一電子表格、數(shù)據(jù)庫查詢等)、 產(chǎn)生法律部門的正確電子郵件地址并和這些人共享文檔,還發(fā)送電子郵件、訪問其他電子表格(例如包括哪個事故報(bào)告待處理的記錄的電子表格)。情況可能是這些人需要進(jìn)一步編輯電子表格,然后觸發(fā)讓宏進(jìn)一步運(yùn)行的事件。宏可在繼續(xù)模式運(yùn)行,這樣,每次特定用戶處理宏的某個階段時(shí)宏都暫停,然后等待下一用戶繼續(xù)。被事件喚醒后,宏可檢查誰停止了文檔(例如如文檔自己記錄的或者發(fā)送給宏的事件的信息記錄的),并且可等到需要停止的每個人都停止了,這時(shí),宏可通知另外的人并記錄事情已全部處理過(例如在另一電子表格中)。一些實(shí)現(xiàn)方式中,如果兩個事件同時(shí)到達(dá),這兩個事件可排隊(duì),這樣,宏一次只處理一個繼續(xù)。工作流程狀態(tài)可簡單地保存在宏的本地變量上下文中,還可部分記錄在電子表格中。
相關(guān)情況下,可以查詢沒有完全處理且結(jié)束的事故報(bào)告(例如基于工作流程)。該查詢要求訪問包括有關(guān)事故報(bào)告的狀態(tài)信息的電子表格(或簡單地打開電子表格)。
例4:公交調(diào)度報(bào)告
考慮公交公司希望能夠通知乘客某些公交線路出現(xiàn)延誤的情況。公司可編輯電子表格以更新他們的公交的期望時(shí)間/位置,這些編輯可自動進(jìn)行,例如通過接收有關(guān)公共汽車的位置數(shù)據(jù)并基于這些信息計(jì)算大致到達(dá)時(shí)間(例如,通過識別離開車站X的公共汽車,增加時(shí)間Y以計(jì)算到達(dá)車站X+1的時(shí)間)的宏。電子表格中的宏可識別某些公交線路意外延誤,如果出現(xiàn)這種情況,宏可發(fā)送文本消息給訂閱了通知的顧客。例如,用戶可訂閱接收,每當(dāng)用戶在鬧市區(qū)且離他的正常公交站兩個街區(qū)而且他的任何在途中的公共汽車(例如692路、698路公交等)有可能五分鐘后到達(dá)拐角時(shí)的文本消息。用戶移動設(shè)備上的應(yīng)用可在用戶位于適當(dāng)位置時(shí)觸發(fā),以使托管服務(wù)激活用戶記錄上的標(biāo)記,這樣用戶無需手動輸入位置就可接收到定向到用戶當(dāng)前位置的更新(例如通過把用戶的GPS坐標(biāo)轉(zhuǎn)換成最近的公交站位置)。
安全起見,宏的作者可授予發(fā)送文本消息給有限組用戶(如管理員控制的另一電子表格上列出的用戶)的能力,而且可把宏發(fā)布成僅對工作表是局部的,而不是可公開訪問的。作者不授予宏寫入工作表的權(quán)限。該情況帶來了通過參考文檔或者另一組消息中定義的組(例如電子表格或一些其他組定義)而指定能力范圍的可能性。
例5 基于位置的事件觸發(fā)
考慮一個用戶更新電子表格中的一組音樂會推薦的情況,其中包括每個音樂會的地址和日期/時(shí)間。其他用戶可在每當(dāng)位于這些音樂會之一附近且音樂會快要開始時(shí)通過要求得到通知而訂閱來自該電子表格的通知。這種情況下,通知例如可使用例如地圖服務(wù)、 社交網(wǎng)絡(luò)服務(wù)(識別作出推薦的用戶的好友)、位置服務(wù)(用于識別好友在特定位置)以及用于發(fā)送通知的文本消息服務(wù)。因而,托管宏特別適于該情況。
例6:調(diào)查
考慮下述情況用戶創(chuàng)建調(diào)查或其他數(shù)據(jù)條目表格、發(fā)送電子郵件表格給多個其他用戶并向電子表格增加行指示每個用戶如何填表。
應(yīng)該授予宏從某個地址向用戶提供的一組地址發(fā)電子郵件給一組人的能力。宏可以跟蹤來自每個用戶的表格數(shù)據(jù)的接收,例如通過訪問托管服務(wù)中的用戶標(biāo)識特征或者識別響應(yīng)中的用戶ID(例如電子郵件地址)。然后,宏可訪問電子表格,把用戶ID輸入到電子表格的一列中,把用戶答案輸入到電子表格的其他列中。這樣,第一用戶可快速發(fā)送表格給一個組(例如根據(jù)已有好友列表或電子郵件列表確定的組)并自動把來自組的評論制成表格。
例7 購物訂單批準(zhǔn)
考慮用戶提出購物訂單的情況(例如“我想要X千箱Q-tip,希望供應(yīng)商為XYZ”)。 用戶提交購物訂單(PO)時(shí),宏可基于如貨品、總價(jià)、部門等數(shù)據(jù)確定誰需要批準(zhǔn)Po。例如, 如果總價(jià)大于固定閾值,PO可能需要董事長批準(zhǔn)。隨著審批人員批準(zhǔn)P0,宏可以沿工作流程移動,例如宏、數(shù)據(jù)庫或電子表格中定義的用戶列表;宏會保留本地狀態(tài)以記住誰批準(zhǔn)了 PO以及誰尚未批準(zhǔn)PO ;所有審批人員都批準(zhǔn)后,發(fā)出PO進(jìn)行購買。
該宏能夠在繼續(xù)方面運(yùn)行最好。宏可以具有給某些用戶發(fā)送帶有表格或URL的文檔鏈接或附件的電子郵件的能力,用戶可以點(diǎn)擊表格或URL以批準(zhǔn)或不準(zhǔn)給定購物訂單, 宏可訪問具有如部門主席等的信息的其他電子表格和數(shù)據(jù)庫。
例8:郵件合并
考慮如下情況用戶具有包括名稱、地址、電子郵件地址等的名稱電子表格以及另外一個文檔(例如電子郵件、電子表格等),而且希望用列表的字段代替后一文檔中的字段并把合并后的文檔用電子郵件發(fā)送給名稱工作表中指定的收件人。
安全起見,這是可以完全在特定文檔和名稱列表上下文中運(yùn)行的宏。能力是“允許發(fā)送電子郵件給如該表的第一列指定的列表”以及訪問模板文檔。宏自身將從電子表格行和一些模板計(jì)算的數(shù)據(jù)發(fā)送電子郵件給列表中的人。用于郵件合并宏的具體表格是公知的。
例9 醫(yī)生值班時(shí)間調(diào)度
考慮幾個醫(yī)生訪問并編輯同一電子表格的情況。宏可以檢查電子表格以確保每個醫(yī)生遵從電子表格的格式和時(shí)間調(diào)度規(guī)則(例如時(shí)間段內(nèi)班次的最大數(shù)和最小數(shù))。每個用戶可點(diǎn)擊按鈕運(yùn)行宏以使表格和日歷應(yīng)用同步,例如,以進(jìn)行更符合直覺的訪問(例如創(chuàng)建重復(fù)時(shí)間調(diào)度)。也可進(jìn)行雙向同步。
可對宏進(jìn)行擴(kuò)展以能夠和多個其他日歷應(yīng)用接口。宏還可幫助醫(yī)生驗(yàn)證自己遵從規(guī)則,以幫助醫(yī)生記錄他們值了多少班次,并且讓電子表格和日歷應(yīng)用同步。
例10:電子郵件插件
用戶可定義宏以識別他們賬號內(nèi)每個到來的電子郵件示例并把電子郵件的發(fā)件人標(biāo)識和標(biāo)題行從電子郵件復(fù)制到與用戶賬號關(guān)聯(lián)的電子表格的下一個空行。這樣,用戶可自動記錄他們賬號到來郵件的最新日志。
例11 博客插件
是某一服務(wù)的博客使用者的用戶可開發(fā)宏用于處理對博客的用戶評論。例如,可使用有關(guān)評論者的信息,例如在評論一旁顯示評論者的位置(例如使用和來自用戶的評論對應(yīng)的IP地址)。此外,用戶可把所有評論和例如褻瀆性語言那樣的觸發(fā)單詞的黑名單進(jìn)行比較這樣,每當(dāng)有包括不恰當(dāng)單詞的評論發(fā)表時(shí)用戶會接到文本消息提醒。然后用戶可登錄到博客清除這些評論。
例12 可計(jì)費(fèi)工時(shí)
咨詢?nèi)藛T用戶可在日歷應(yīng)用內(nèi)跟蹤他或她的可計(jì)費(fèi)工時(shí)。他們可使用宏周期性地 (例如每周或每月)解析這些條目(例如識別表格X.X中的時(shí)間條目)。然后,宏可使用和條目關(guān)聯(lián)的文本識別該時(shí)間應(yīng)計(jì)費(fèi)的項(xiàng)目編號(例如把關(guān)鍵詞及客戶名稱與某些不同項(xiàng)目關(guān)聯(lián)的列表),然后,可把數(shù)據(jù)增加到電子表格的單元格以執(zhí)行計(jì)費(fèi)操作。然后,宏可把電子表格的值(例如用每小時(shí)費(fèi)率計(jì)費(fèi)后)合并到文字處理程序生成的發(fā)票內(nèi),然后把生成的文檔用電子郵件發(fā)送給客戶。如果客戶是托管系統(tǒng)的注冊用戶,然后宏可直接要求付款 (包括經(jīng)由包括可選擇機(jī)制的表格,客戶可使用該機(jī)制指示付款的意愿),客戶隨后可選擇控件以把錢從客戶賬戶轉(zhuǎn)賬到咨詢?nèi)藛T賬戶。
例13:駕車方向郵件合并
托管系統(tǒng)的用戶希望邀請他的或她的幾個好友參加即將到來的聚會。因而用戶可能準(zhǔn)備聚會邀請的外殼(shell)。然后,用戶可把宏指向好友及其地址列表(例如托管系統(tǒng)上聯(lián)系人應(yīng)用中的列表)以事實(shí)上將郵件執(zhí)行合并到邀請中。然而,用戶也可把他自己的地址(聚會位置)以及列表中當(dāng)前準(zhǔn)備邀請的好友的地址提供給地圖服務(wù),地圖服務(wù)可根據(jù)標(biāo)準(zhǔn)API返回顯示其上疊加有好友家和聚會地點(diǎn)之間駕車方向的地圖的圖像。宏可把圖像包括在邀請中,然后把邀請連同自動且自定義生成的方向發(fā)送給好友。
圖7示出上述技術(shù)可使用的通用計(jì)算機(jī)設(shè)備700和通用移動計(jì)算機(jī)設(shè)備750的示例。計(jì)算設(shè)備700用于代表各種形式的數(shù)字計(jì)算機(jī),例如筆記本電腦、臺式機(jī)、工作站、個人數(shù)字助理、服務(wù)器、刀片服務(wù)器、大型機(jī)和其他適當(dāng)計(jì)算機(jī)。計(jì)算設(shè)備750用于代表各種形式的移動設(shè)備,例如個人數(shù)字助理、蜂窩電話、智能電話和其他類似計(jì)算設(shè)備。此處所示部件及其連接和關(guān)系、功能僅為示例之用,不用于限制本發(fā)明描述的及/或本文要求的實(shí)現(xiàn)方式。
計(jì)算設(shè)備700包括處理器702、存儲器704、存儲設(shè)備706、連接到存儲器704和高速擴(kuò)展端口 710的高速接口 708以及連接到低速總線714和存儲設(shè)備706的低速接口 712。 每個部件702、704、706、708、710和712用各種總線互相連接,并且可安裝在共同的主板上或以其他適當(dāng)方式安裝。處理器702可處理用于在計(jì)算設(shè)備700內(nèi)執(zhí)行的指令,包括存儲器704或存儲設(shè)備706中存儲的用于在外部輸入/輸出設(shè)備(例如耦合到高速接口 708的顯示器716)上顯示GUI的圖形信息的指令。其他實(shí)現(xiàn)方式中,適當(dāng)?shù)脑挘墒褂枚鄠€處理器及/或多個總線,以及多個存儲器和多種存儲器。而且,可以連接多個計(jì)算設(shè)備700,每個設(shè)備提供一部分所需操作(例如作為服務(wù)器陣列、一組刀片服務(wù)器或者多處理器系統(tǒng))。
存儲器704存儲計(jì)算設(shè)備700內(nèi)的信息。一個實(shí)現(xiàn)方式中,存儲器704是易失性存儲單元。另一實(shí)現(xiàn)方式中,存儲器704是非易失性存儲單元。存儲器704還可是另一種形式的計(jì)算機(jī)可讀介質(zhì),如磁盤或光盤。
存儲設(shè)備706可為計(jì)算設(shè)備700提供大規(guī)模存儲。一個實(shí)現(xiàn)方式中,存儲設(shè)備706 可以是或者可包括計(jì)算機(jī)可讀介質(zhì),例如軟盤設(shè)備、硬盤設(shè)備、光盤設(shè)備或磁帶設(shè)備、閃存或者其他類似的固態(tài)存儲設(shè)備、或者設(shè)備陣列,包括存儲區(qū)域網(wǎng)絡(luò)或其他結(jié)構(gòu)中的設(shè)備。計(jì)算機(jī)程序產(chǎn)品可以有形地實(shí)現(xiàn)在信息載體中。計(jì)算機(jī)程序產(chǎn)品還可包括在執(zhí)行時(shí)執(zhí)行一個或多個像上所述方法那樣的方法的指令。信息載體是計(jì)算機(jī)或機(jī)器可讀介質(zhì),如存儲器 704、存儲設(shè)備706、處理器702上的存儲器或者傳播的信號。
高速控制器708管理計(jì)算設(shè)備700的帶寬密集的操作,同時(shí)低速控制器712管理較低帶寬密集的操作。這種功能分配只是示例性的。一個實(shí)現(xiàn)方式中,高速控制器708耦合到存儲器704、顯示器716(例如通過圖形處理器或加速器)以及高速擴(kuò)展端口 710,高速擴(kuò)展端口 710可容納各種擴(kuò)展卡(未示出)。一個實(shí)現(xiàn)方式中,低速控制器712耦合到存儲設(shè)備706和低速擴(kuò)展端口 714。低速擴(kuò)展端口可包括各種通信端口(例如USB、藍(lán)牙、以太網(wǎng)、無線以太網(wǎng))可耦合到一個或多個輸入/輸出設(shè)備,例如鍵盤、指示設(shè)備、掃描儀或者例如通過網(wǎng)絡(luò)適配器耦合到網(wǎng)絡(luò)設(shè)備,如交換機(jī)或者路由器。
計(jì)算設(shè)備700可用如圖所示的各種不同形式實(shí)現(xiàn)。例如,可實(shí)現(xiàn)成標(biāo)準(zhǔn)服務(wù)器 720,或者在一組這種服務(wù)器中實(shí)現(xiàn)多次。也可實(shí)現(xiàn)成機(jī)架式服務(wù)器系統(tǒng)7M的一部分。此外,也可實(shí)現(xiàn)成如筆記本電腦722的個人計(jì)算機(jī)。或者,計(jì)算設(shè)備700的部件可以和如設(shè)備750的移動設(shè)備的其他部件(未示出)組合。每個這些設(shè)備可包括一個或多個計(jì)算設(shè)備 700、750,而且,整個系統(tǒng)可由互相通信的多個計(jì)算設(shè)備700、750組成。
計(jì)算設(shè)備750包括處理器752、存儲器764、如顯示器7M的輸入/輸出設(shè)備、通信接口 766以及收發(fā)器768以及其他部件。設(shè)備750可具有用于提供額外存儲的存儲設(shè)備, 例如微硬盤或其他設(shè)備。每個部件750、752、764、754、766和768用各種總線互連,幾個部件可安裝在共同主板上或者以其他適當(dāng)方式安裝。
處理器752可執(zhí)行計(jì)算設(shè)備750中的指令,包括存儲器764中存儲的指令。處理器可實(shí)現(xiàn)成包括獨(dú)立的多個模擬和數(shù)字處理器的芯片的芯片集。處理器可提供例如設(shè)備750 的其他部件的協(xié)調(diào),例如對用戶接口、設(shè)備750運(yùn)行的應(yīng)用以及設(shè)備750的無線通信進(jìn)行控制。
處理器752可通過控制接口 758以及耦合到顯示器754的顯示接口 756和用戶通信。顯示器7M可以為例如TFT IXD(薄膜晶體管液晶顯示器)或者OLED(有機(jī)發(fā)光二極管)顯示器,或者其他適當(dāng)?shù)娘@示技術(shù)。顯示接口 756可包括用于驅(qū)動顯示器754以把圖形和其他信息呈現(xiàn)給用戶的適當(dāng)電路??刂平涌?758可以接收來自用戶的命令并轉(zhuǎn)換命令以提交給處理器752。此外,外部接口 762可提供和處理器752的通信,以支持設(shè)備750和其他設(shè)備的近距離通信。一些實(shí)現(xiàn)方式中,外部接口 762可提供例如有線通信,其他實(shí)現(xiàn)方式中,可提供無線通信,而且可使用多個接口。
存儲器764存儲計(jì)算設(shè)備750中的信息。存儲器764可實(shí)現(xiàn)成一個或多個計(jì)算機(jī)可讀介質(zhì)、易失性存儲單元或非易失性存儲單元。還可提供擴(kuò)展存儲器774,并通過擴(kuò)展接口 772連接到設(shè)備750,擴(kuò)展接口 772例如可包括SIMM (單列直插存儲模塊)卡接口。這種擴(kuò)展存儲器774可為設(shè)備750提供額外存儲空間,或者還可存儲設(shè)備750的應(yīng)用或其他信息。具體而言,擴(kuò)展存儲器774可包括用于執(zhí)行或補(bǔ)充上述過程的指令,而且還可包括安全信息。因此,例如,擴(kuò)展存儲器774可提供為設(shè)備750的安全模塊,而且可用允許安全使用設(shè)備750的指令編程。此外,可通過SIMM卡提供安全應(yīng)用以及其他信息,例如以不可入侵方式把標(biāo)識信息放在SIMM卡中。
存儲器可包括例如如下所述的閃存和/或NVRAM存儲器。一個實(shí)現(xiàn)方式中,計(jì)算機(jī)程序產(chǎn)品有形地實(shí)現(xiàn)在信息載體中。計(jì)算機(jī)程序產(chǎn)品可包括在執(zhí)行時(shí)執(zhí)行一個或多個像上述方法那樣的方法的指令。信息載體是計(jì)算機(jī)或機(jī)器可讀介質(zhì),如存儲器764、擴(kuò)展存儲器774、處理器752上的存儲器或者例如通過收發(fā)器768或外部接口 762接收的傳播的信號。
設(shè)備750可通過通信接口 766無線通信,需要的話通信接口 766可包括數(shù)字信號處理電路。通信接口 766可根據(jù)各種模式或協(xié)議提供通信,例如GSM語音通話、SMS、EMS或者匪S消息傳送、CDMA、TDMA、PDC、WCDMA、CDMA2000或GPRS以及其他模式或協(xié)議。例如,可通過射頻收發(fā)器768進(jìn)行這些通信。此外,可使用例如藍(lán)牙、WiFi或其他這類收發(fā)器(未示出)進(jìn)行近距離通信。此外,GPS(全球定位系統(tǒng))接收器模塊770可為設(shè)備750提供另外的導(dǎo)航和位置相關(guān)無線數(shù)據(jù),設(shè)備750上運(yùn)行的應(yīng)用可適當(dāng)?shù)厥褂眠@些數(shù)據(jù)。
設(shè)備750還可用音頻編解碼器760進(jìn)行音頻通信,音頻編解碼器760可從用戶接收聲音信息并將其轉(zhuǎn)換成可用的數(shù)字信息。同樣地,音頻編解碼器760可以為用戶產(chǎn)生可聽見的聲音,例如通過例如設(shè)備750的手持機(jī)的揚(yáng)聲器。這些聲音可包括來自語音電話通話的聲音,可包括錄制的聲音(例如語音消息、音樂文件等),而且可包括設(shè)備750上操作的應(yīng)用生成的聲音。
可用如圖所示的多種不同形式實(shí)現(xiàn)計(jì)算設(shè)備750。例如,可實(shí)現(xiàn)成蜂窩電話780。 還可實(shí)現(xiàn)成智能電話782、個人數(shù)字助理或其他類似移動設(shè)備的一部分。
設(shè)備750還可包括可感測運(yùn)動的一個或多個不同設(shè)備。例如包括但不限于加速計(jì)和指南針。加速計(jì)和指南針或者可以檢測運(yùn)動或位置的其他設(shè)備可從任何供應(yīng)商購得,而且可以多種方式感測運(yùn)動。例如,加速計(jì)可檢測加速度變化,而指南針可檢測相對于磁南極和磁北極的方位變化。這些運(yùn)動變化可被設(shè)備750檢測并用于根據(jù)此處所述過程和技術(shù)更新相應(yīng)設(shè)備750的顯示。
此處所述的系統(tǒng)和技術(shù)的各種實(shí)現(xiàn)方式可用數(shù)字電子電路、集成電路、專門設(shè)計(jì)的ASIC(專用集成電路)、計(jì)算機(jī)硬件、固件、軟件和/或其組合實(shí)現(xiàn)。這些各種不同實(shí)現(xiàn)方式可包括用一個或多個計(jì)算機(jī)程序?qū)崿F(xiàn),計(jì)算機(jī)程序可在包括至少一個可編程處理器的可編程系統(tǒng)上執(zhí)行和/或解釋,可編程處理器可是專用處理器或通用處理器,其耦合到存儲系統(tǒng)、至少一個輸入設(shè)備以及至少一個輸出設(shè)備以接收自或發(fā)送至上述設(shè)備的的傳送數(shù)據(jù)和指令。
這些計(jì)算機(jī)程序(也稱為程序、軟件、軟件應(yīng)用程序或代碼)包括用于可編程處理器的機(jī)器指令,而且可實(shí)現(xiàn)成高級的過程編程語言和/或面向?qū)ο蟮木幊陶Z言,和/或匯編 /機(jī)器語言。此處所用的術(shù)語“機(jī)器可讀介質(zhì)”、“計(jì)算機(jī)可讀介質(zhì)”指用于向可編程處理器提供機(jī)器指令和/或數(shù)據(jù)的任何計(jì)算機(jī)程序產(chǎn)品、裝置和/或設(shè)備(例如,磁盤、光盤、存儲器、可編程邏輯器件(PLD)),包括接收作為機(jī)器可讀信號的機(jī)器指令的機(jī)器可讀介質(zhì)。術(shù)語 “機(jī)器可讀信號”指用于向可編程處理器提供機(jī)器指令和/或數(shù)據(jù)的任何傳號。
為了提供和用戶的交互,此處所述系統(tǒng)和技術(shù)可在具有用于向用戶顯示信息的顯示設(shè)備(例如CRT (陰極射線管)或LCD (液晶顯示器)監(jiān)視器)以及用戶用來給計(jì)算機(jī)提供輸入的鍵盤和指示設(shè)備(例如鼠標(biāo)或軌跡球)的計(jì)算機(jī)上實(shí)現(xiàn)。也可用其他類型的設(shè)備來提供和用戶的交互;例如,提供給用戶的反饋可以是任何形式的感官反饋(例如視覺反饋、聲音反饋或者觸覺反饋);而且,可以任何形式接收來自用戶的輸入,包括聲音、語音或者觸覺輸入。
此處所述系統(tǒng)和技術(shù)可用包括后端部件(例如數(shù)據(jù)服務(wù)器)或者包括中間設(shè)備部件(例如應(yīng)用服務(wù)器)或者包括前端部件(例如客戶計(jì)算機(jī),其具有用戶可用來與此處所述的系統(tǒng)和技術(shù)的實(shí)現(xiàn)方式交互的圖形用戶界面或者網(wǎng)絡(luò)瀏覽器)或者這些后端部件、中間設(shè)備部件或前端部件的任意組合的計(jì)算系統(tǒng)實(shí)現(xiàn)。系統(tǒng)的部件可用任何形式或介質(zhì)的數(shù)字?jǐn)?shù)據(jù)通信(例如通信網(wǎng)絡(luò))互相連接。通信網(wǎng)絡(luò)的示例包括局域網(wǎng)(LAN)、廣域網(wǎng)(WAN) 和互聯(lián)網(wǎng)。
計(jì)算系統(tǒng)可包括客戶機(jī)和服務(wù)器??蛻魴C(jī)和服務(wù)器通常彼此遠(yuǎn)離而且典型通過通信網(wǎng)絡(luò)交互??蛻魴C(jī)和服務(wù)器的關(guān)系由于各個計(jì)算機(jī)上運(yùn)行的而且彼此具有客戶機(jī)-服務(wù)器關(guān)系的計(jì)算機(jī)程序而存在。
已經(jīng)描述了一些實(shí)施例。但是,應(yīng)該理解,可以在不脫離本發(fā)明精神和范圍下進(jìn)行各種修改。例如,本文許多內(nèi)容是針對觸發(fā)宏執(zhí)行的特定模式描述的,但是也可使用其他方法。
此外,圖中所示邏輯流程不需要所示的特定順序或連續(xù)順序來獲得預(yù)期結(jié)果。此外,所示流程中可具有其他步驟,或者可刪除一些步驟,所述系統(tǒng)可增加或刪除其他部件。 因而,其他實(shí)施例落入下述權(quán)利要求的范圍內(nèi)。
權(quán)利要求
1.一種管理計(jì)算機(jī)宏的計(jì)算機(jī)實(shí)現(xiàn)的方法,包括在互聯(lián)網(wǎng)可訪問的托管計(jì)算機(jī)系統(tǒng)存儲計(jì)算機(jī)宏的代碼;將所述存儲的代碼和所述托管計(jì)算機(jī)系統(tǒng)上的用戶賬號關(guān)聯(lián);無論和所述用戶賬號關(guān)聯(lián)的用戶目前是否在所述托管計(jì)算機(jī)系統(tǒng)上活動,自動利用所述托管計(jì)算機(jī)系統(tǒng)識別定義為指向所述宏的觸發(fā)事件;而且使用所述托管計(jì)算機(jī)系統(tǒng)上運(yùn)行的應(yīng)用執(zhí)行所述宏來產(chǎn)生宏結(jié)果,并將所述宏結(jié)果存儲在所述托管計(jì)算機(jī)系統(tǒng)上。
2.根據(jù)權(quán)利要求1所述的方法,還包括產(chǎn)生消息給和所述用戶賬號關(guān)聯(lián)的通信地址, 以通知用戶所述宏結(jié)果。
3.根據(jù)權(quán)利要求1所述的方法,其中所述觸發(fā)事件包括定向到所述用戶賬號的到來數(shù)字通信。
4.根據(jù)權(quán)利要求1所述的方法,其中所述觸發(fā)事件包括確定和賬號所有人關(guān)聯(lián)的計(jì)算機(jī)設(shè)備用戶的位置。
5.根據(jù)權(quán)利要求1所述的方法,還包括將所述宏和所述托管計(jì)算機(jī)系統(tǒng)的注冊用戶關(guān)聯(lián),而且根據(jù)所述注冊用戶確立的訪問限制,使所述宏為所述托管計(jì)算機(jī)系統(tǒng)的其他用戶可用。
6.根據(jù)權(quán)利要求5所述的方法,其中可響應(yīng)于來自多個不同用戶賬號的觸發(fā)事件訪問所述宏。
7.根據(jù)權(quán)利要求1所述的方法,還包括從所述托管計(jì)算機(jī)遠(yuǎn)程的多個不同客戶計(jì)算機(jī)上運(yùn)行的多個應(yīng)用接收執(zhí)行宏的請求; 在所述托管計(jì)算機(jī)系統(tǒng)上為來自所述位置的每個請求自動執(zhí)行宏,并且響應(yīng)于執(zhí)行宏,將執(zhí)行宏的結(jié)果提供給所述多個應(yīng)用的每個相應(yīng)應(yīng)用。
8.根據(jù)權(quán)利要求1所述的方法,其中執(zhí)行宏包括調(diào)用所述托管計(jì)算機(jī)系統(tǒng)提供的多個不同托管服務(wù)。
9.根據(jù)權(quán)利要求8所述的方法,其中執(zhí)行宏包括調(diào)用獨(dú)立于所述托管計(jì)算機(jī)系統(tǒng)的第三方信息提供者提供的網(wǎng)絡(luò)服務(wù)。
10.根據(jù)權(quán)利要求1所述的方法,還包括將運(yùn)行在所述托管計(jì)算機(jī)系統(tǒng)上的第一應(yīng)用產(chǎn)生的信息轉(zhuǎn)換成不同格式,并將轉(zhuǎn)換后的信息提供給所述托管計(jì)算機(jī)系統(tǒng)上運(yùn)行的第二應(yīng)用。
11.根據(jù)權(quán)利要求1所述的方法,還包括自動將執(zhí)行宏的結(jié)果提供給在所述托管計(jì)算機(jī)系統(tǒng)登記的多個不同用戶的多個不同賬號。
12.一種用于在托管計(jì)算機(jī)系統(tǒng)上執(zhí)行宏的計(jì)算機(jī)實(shí)現(xiàn)的系統(tǒng),包括可從所述托管計(jì)算機(jī)系統(tǒng)操作的多個托管應(yīng)用;存儲多個宏的宏數(shù)據(jù)存儲,每個宏被分配給所述托管計(jì)算機(jī)系統(tǒng)上的用戶賬號,而且每個宏定義要由所述多個托管應(yīng)用中的至少一個執(zhí)行的一系列動作;以及操作調(diào)度模塊的處理器,所述調(diào)度模塊識別系統(tǒng)中的觸發(fā)事件,并且響應(yīng)于和多個宏中的一個對應(yīng)的所識別的觸發(fā)事件,開始執(zhí)行多個宏中的所述宏。
13.根據(jù)權(quán)利要求12所述的系統(tǒng),還包括操作接口的處理器,所述接口被編程以產(chǎn)生給和用戶賬號關(guān)聯(lián)的通信地址的消息,通知用戶宏的結(jié)果。
14.根據(jù)權(quán)利要求12所述的系統(tǒng),其中所述觸發(fā)事件包括定向到所述用戶賬號的到來數(shù)字通信。
15.根據(jù)權(quán)利要求12所述的系統(tǒng),還包括跟蹤系統(tǒng)的賬號所有人位置的位置服務(wù),而且所述觸發(fā)事件包括確定和第一賬號所有人關(guān)聯(lián)的第二賬號所有人的位置,其中代表所述第一賬號所有人執(zhí)行宏。
16.根據(jù)權(quán)利要求12所述的系統(tǒng),可響應(yīng)于來自多個不同用戶賬號的觸發(fā)事件訪問宏ο
17.根據(jù)權(quán)利要求12所述的系統(tǒng),還包括與系統(tǒng)的多個賬號所有人關(guān)聯(lián)的多個文檔, 其中多個文檔包括指向宏數(shù)據(jù)存儲中存儲的宏的指針。
18.根據(jù)權(quán)利要求12所述的系統(tǒng),還包括位置服務(wù),用于響應(yīng)于來自宏的調(diào)用,提供與在所述托管計(jì)算機(jī)系統(tǒng)登記的用戶的位置有關(guān)的信息。
19.根據(jù)權(quán)利要求12所述的系統(tǒng),只有系統(tǒng)確定宏正在其賬號運(yùn)行的用戶和要提供其位置信息的用戶關(guān)聯(lián)時(shí),位置服務(wù)才可提供關(guān)于位置的信息。
20.一種用于在托管計(jì)算機(jī)系統(tǒng)上執(zhí)行宏的計(jì)算機(jī)實(shí)現(xiàn)的系統(tǒng),包括 可從所述托管計(jì)算機(jī)系統(tǒng)操作的多個托管應(yīng)用;存儲多個宏的宏數(shù)據(jù)存儲,每個宏被分配給所述托管計(jì)算機(jī)系統(tǒng)上的用戶賬號,而且每個宏定義要由所述多個托管應(yīng)用中的至少一個執(zhí)行的一系列動作;以及用于響應(yīng)于識別到和特定賬號所有人關(guān)聯(lián)的觸發(fā)事件執(zhí)行所述多個宏的裝置,其中觸發(fā)事件的出現(xiàn)與所述特定賬號所有人是否登錄到所述系統(tǒng)中無關(guān)。
全文摘要
公開了管理計(jì)算機(jī)宏的計(jì)算機(jī)實(shí)現(xiàn)的方法。該方法包括在互聯(lián)網(wǎng)可訪問的托管計(jì)算機(jī)系統(tǒng)存儲計(jì)算機(jī)宏的代碼而且將所存儲的代碼和托管計(jì)算機(jī)系統(tǒng)上的用戶賬號關(guān)聯(lián)。該方法還包括無論和用戶賬號關(guān)聯(lián)的用戶目前是否在托管計(jì)算機(jī)系統(tǒng)上活動,自動用托管計(jì)算機(jī)系統(tǒng)識別定義為指向宏的觸發(fā)事件。此外,該方法還包括使用托管計(jì)算機(jī)系統(tǒng)上運(yùn)行的應(yīng)用執(zhí)行宏來產(chǎn)生宏結(jié)果,并把宏結(jié)果存儲在托管計(jì)算機(jī)系統(tǒng)上。
文檔編號G06F17/00GK102498483SQ201080041591
公開日2012年6月13日 申請日期2010年8月13日 優(yōu)先權(quán)日2009年8月13日
發(fā)明者M·W·哈姆, M·勒莫尼克 申請人:谷歌公司