KR101668365B1 - 이벤트-트리거형 서버측 매크로들 - Google Patents

이벤트-트리거형 서버측 매크로들 Download PDF

Info

Publication number
KR101668365B1
KR101668365B1 KR1020127006599A KR20127006599A KR101668365B1 KR 101668365 B1 KR101668365 B1 KR 101668365B1 KR 1020127006599 A KR1020127006599 A KR 1020127006599A KR 20127006599 A KR20127006599 A KR 20127006599A KR 101668365 B1 KR101668365 B1 KR 101668365B1
Authority
KR
South Korea
Prior art keywords
macro
user
computer system
host computer
macros
Prior art date
Application number
KR1020127006599A
Other languages
English (en)
Other versions
KR20120068863A (ko
Inventor
마이클 더블유. 함
미카 레모닉
Original Assignee
구글 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 구글 인코포레이티드 filed Critical 구글 인코포레이티드
Publication of KR20120068863A publication Critical patent/KR20120068863A/ko
Application granted granted Critical
Publication of KR101668365B1 publication Critical patent/KR101668365B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Information Transfer Between Computers (AREA)
  • Stored Programmes (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

컴퓨터 매크로들을 관리하는 컴퓨터 구현 방법이 개시된다. 이 방법은 인터넷 접속가능 호스트형 컴퓨터 시스템에서 컴퓨터 매크로를 위한 코드를 저장하는 단계와 상기 저장된 코드를 호스트형 컴퓨터 시스템상의 사용자 계정과 연계시키는 단계를 포함한다. 또한, 본 발명은 사용자 계정에 연계된 사용자가 현재 호스트형 컴퓨터 시스템에서 액티브인지 여부에 독립적으로, 매크로에 관련된 것으로 정의된 트리거링 이벤트(triggering event)를 호스트형 컴퓨터 시스템에 의해 자동으로 식별하는 단계를 포함한다. 또한, 본 발명은 매크로 결과를 생성하기 위해 호스트형 컴퓨터 시스템상에 구동중인 애플리케이션을 사용하여 매크로를 실행하는 단계와 호스트형 컴퓨터 시스템상에 매크로 결과를 저장하는 단계를 포함한다.

Description

이벤트-트리거형 서버측 매크로들{EVENT-TRIGGERED SERVER-SIDE MACROS}
본 출원은 2009년 8월 13일 출원되고, 명칭이 "이벤트-트리거형 서버측 매크로"인 미국 출원 번호 12/540,785호에 대한 우선권을 미국 특허법(35 U.S.C) 119(3)항 하에 주장하고, 이 미국 출원의 모든 내용은 참조로서 본 명세서에 포함된다.
이 명세서는 전자 콘텐츠의 네트워크 기반 전송(network-based delivery)에 관한 것이다.
매크로(macro)는 하나 이상의 컴퓨터 애플리케이션과 강화되고 자동적인 상호 동작을 제공하기 위해 상기 애플리케이션들 내에서 실행될 수 있는 명령어 세트이고, 매크로의 적어도 일부는 매크로가 없었다면 애플리케이션의 사용자에 의해 수동적으로 수행될 수 있는 단계들을 나타낸다. 예를 들어, 매크로는 스프레드시트 애플리케이션(spreadsheet application)내에 소정 숫자들의 값을 계산하고, 데스크탑 컴퓨터상에서 관련 워드 프로세싱 애플리케이션(related word processing application)에 그 값을 복사하기 위하여 작성될 수 있다. 사용자는 "핫 키" 조합을 매크로에 할당할 수 있는데, 핫 키(hot key) 조합을 간단하게 누름으로써, 사용자가 매크로를 쉽게 구동시킬 수 있게 하기 위함이다. 다른 예시에서, 매크로는, 또한 컴퓨팅 디바이스의 사용자에게 소정 전자 메시지들(예컨대, 배우자, 클라이언트, 및 상사로부터의 메시지들)이 더 쉽게 보여질 수 있도록, 소정 전자 메시지들의 중요도가 높아지도록 작성될 수 있다. 잘 알려진 매크로-기반 시스템(macro-based system)은 마이크로소프트 오피스 생산성 제품군(MICROSOFT OFFICE productivity suite)용 애플리케이션들을 위한 비주얼 베이직(Visual Basic)이다.
이 명세서는 종종 "클라우드(cloud)"로서 불리우는, 호스트형 컴퓨팅 시스템(hosted computing system)에서 매크로들을 생성하여 사용하는 시스템들 및 기술들을 논의한다. 매크로들은 클라이언트 디바이스 보다는 매크로 서버 서브-시스템에 저장되어 실행될 수 있으며, 이로 인해 매크로가 사용자들 간에 쉽게 공유될 수 있는, 이는 모든 자격이 있는 사용자들이 그들이 네트워크에 접속할 수 있고, 그들의 자격증(credential)를 제공할 수 있는 한, 임의의 위치에서 매크로들에 액세스할 수 있기 때문이다.
이에 더하여, 매크로들은 호스트형 컴퓨팅 시스템에 의해 제공되거나, 또는 호스트형 컴퓨터 시스템으로부터 분리된 3자 시스템들로부터 제공되는, 복수의 애플리케이션 및 서비스에 쉽게 액세스할 수 있다. 이러한 서비스들은 다양한 사용자들의 위치들에 대한 정보(예컨대, 사용자들의 모바일 디바이스상에 있는 GPS로부터 판단됨)를 제공하는 서비스와, 뉴스, 일기 예보를 제공하는 서비스, 및 다른 이러한 서비스를 포함한다. 애플리케이션들은, 예를 들어 이메일 및 다른 메시징 애플리케이션들, 스프레드시트와 워드 프로세서와 같은 생산성 애플리케이션(productivity application)들, 매핑(mapping) 애플리케이션들, 및 단일 프리젠테이션(사용자가 액세스하여 매크로로부터 맞춤형 출력을 제공하기 위하여 제작할 수 있음) 내에 함께 제시될 수 있는 다양한 애플리케이션의 매쉬-업(mesh-up)들을 포함할 수 있다.
애플리케이션들은 사용자 브라우저를 통해 디스플레이되는 하나 이상의 웹 페이지를 통해 사용자에게 제시될 수 있다. 또한, 시스템은 매크로들의 기록을 제공할 수 있으며, 사용자는 매크로 기록기(macro recorder)를 인보크(invoke)하고, 그 기록기는 사용자들의 액션(usr's action)들을 추적할 수 있어, 추후에 사용자가 그 매크로를 실행시킬 때 그 액션들이 자동으로 반복될 수 있도록 위해, 사용자의 액션들을 매크로 코드로 변환할 수도 있다.
소정 매크로들은 심지어 사용자가 특정 매크로에 의해 실행되는 애플리케이션과 상호 동작하고 있지 않을 때(사용자가 호스팅형 시스템에 로깅하지 않았을 때도 포함함) 발생하는 이벤트들로부터 인보크될 수 있다. 특히, 매크로가 서버 서브-시스템에 저장되어 실행되면, 서버 서브-시스템은 매크로에 의해 처리되는 모든 시스템내 특정 이벤트들에 대해 모니터하도록 설정될 수 있다. 이러한 이벤트들은 매크로의 실시(invocation)를 트리거하고, 매크로는 서버 서브-시스템상에서 실행될 수 있다.
매크로는 시스템상의 서비스 또는 3자 서비스에 액세스할 수 있다. 시스템상의 서비스는, 액세싱에 적용되는 소정 사용자-구성가능 보안(user-configurable security)을 이용하여, 시스템에 등록된 특정 사용자들에 상응하는 저장소로의 접근 권한(access)을 허락(grant)할 수 있다. 예를 들어, 매크로는 사용자 계정으로 수신되는 전자 메일 메시지에 응답하여 호출될 수 있고, 그 메시지에 있는 정보를 사용자 계정에 할당된 스프레드시트에 차례로 복사할 수 있다(예를 들어, 사용자가 자신의 모든 수신 메시지들의 제목란들을 보여주는 스프레드시트를 자동적으로 컴파일할 수 있도록 하기 위함). 또한, 이러한 매크로는 위치 서비스, 날씨-관련 웹 사이트에서의 데이터와 같은 하나 이상의 서비스를 체크할 수 있고, 매크로용 데이터를 수집하고 그 매크로를 사용하여 결정들을 행하기 위해, 호스트형 시스템들 또는 그 호스트형 시스템들과 무관한 시스템들의 리소스를 사용하는 다른 액션들을 취할 수 있다. 이어 매크로는, 예를 들어 스프레드시트에 메시지 정보를 배치함으로써, 사용자의 계정(account)에 상응하는 개수의 전화 통화, 또는 다른 이러한 액션들을 행함으로써, 사용자가 액티브(active) 상태가 되지 않아도(예컨대, 호스트형 시스템 또는 사용자용 클라이언트 컴퓨팅 디바이스에 로깅되지 않음) 액션을 행할 수 있다.
매크로들이 액세스할 수 있는 3자 서비스는 SOAP 서비스, 또는 서비스를 제공하고, 인터넷을 통해 정보를 공유하는 공지된 메카니즘을 제공하는 도메인과는 별개인 도메인으로부터 액세스될 수 있는 다른 유사한 서비스를 포함할 수 있다. 예를 들어, 3자 서비스 제공자는 최신 날씨 데이터를 컴파일할 수 있고, 요청이 있을 때 그 데이터를 다른 서비스가 이용하게 할 수 있다.
일 구현예에서는, 컴퓨터 매크로들을 관리하는 컴퓨터 구현 방법이 개시된다. 이 방법은 인터넷 접속가능 호스트형 컴퓨터 시스템(internet-accessible hosted computer system)에서 컴퓨터 매크로를 위한 코드를 저장하는 단계, 상기 저장된 코드를 호스트형 컴퓨터 시스템상의 사용자 계정(user account)과 연계시키는 단계, 및 사용자 계정에 연계된 사용자가 현재 호스트형 컴퓨터 시스템에서 액티브인지 여부에 독립적으로, 매크로에 관련된 것으로 정의된 트리거링 이벤트(triggering event)를 호스트형 컴퓨터 시스템에 의해 자동으로 식별하는 단계를 포함한다. 또한, 본 발명은 매크로 결과를 생성하기 위해 호스트형 컴퓨터 시스템상에 구동중인 애플리케이션을 사용하여 매크로를 실행하는 단계와 호스트형 컴퓨터 시스템상에 매크로 결과를 저장하는 단계를 포함한다. 이 방법은 매크로의 결과를 사용자에게 통지하는, 사용자 계정에 연계된 통신 주소로의 메시지를 생성하는 단계를 포함한다.
일부 양태에서, 트리거링 이벤트는 사용자 계정으로 향하는 수신 디지털 통신(incoming digital communication)을 포함한다. 또한, 트리거링 이벤트는 계정 소유자에 연계되는 컴퓨터 디바이스 사용자의 위치에 대한 판정을 포함할 수 있다. 이 방법은 매크로를 호스트형 컴퓨터 시스템의 등록된 사용자와 연계시키는 단계와, 등록된 사용자에 의해 식별된 액세스 제약 사항(access restriction)들에 따라서 호스트형 컴퓨터 시스템의 다른 사용자들이 매크로를 이용할 수 있게 하는 단계를 더 포함할 수 있다. 또한, 매크로는 복수의 서로 다른 사용자 계정으로부터의 트리거링 이벤트들에 응답하여 액세스할 수 있다.
또 다른 양태에서, 이 방법은 호스트형 컴퓨터로부터 떨어진 곳에 있는 복수의 다른 클라이언트 컴퓨터상에서 구동중인 복수의 애플리케이션으로부터 매크로를 실행시키기 위한 요청들을 수신하는 단계, 그 위치로부터의 요청들 각각을 위하여 호스트형 컴퓨터 시스템상에서 매크로를 자동으로 실행하는 단계; 및 매크로의 실행에 응답하여 복수의 애플리케이션의 각 애플리케이션에, 매크로의 실행 결과를 제공하는 단계를 포함한다. 매크로를 실행하는 단계는 호스트형 컴퓨터 시스템에 의해 제공되는 복수의 다른 호스트형 서비스를 호출하는 단계를 포함할 수 있다. 또한, 매크로를 실행하는 단계는 호스트형 컴퓨터 시스템에 대해 독립된 3자 정보 제공자들에 의해 제공되는 웹 서비스를 호출하는 단계를 포함할 수 있다.
이 방법은 호스트형 컴퓨터 시스템상에서 구동중인 제1 애플리케이션에 의해 생성된 정보를 다른 포맷으로 변환하는 단계와 그 변환된 정보를 호스트형 컴퓨터 시스템상에 구동중인 제2 애플리케이션에 제공하는 단계, 호스트형 컴퓨터 시스템에 등록된 복수의 다른 사용자들에 대한 복수의 다른 계정에 매크로의 실행 결과를 자동으로 제공하는 단계를 추가적으로 포함할 수 있다.
다른 구현예에서, 호스트형 컴퓨터 시스템상에서 매크로들을 실행하는 컴퓨터 구현 시스템이 개시된다. 이 시스템은 호스트형 컴퓨터 시스템으로부터 동작 가능한 복수의 호스트형 애플리케이션, 호스트형 컴퓨터 시스템상의 사용자 계정에 각각 할당되고, 복수의 호스트형 애플리케이션 중 적어도 하나에 의해 실행될 일련의 액션들을 각각 정의하는 복수의 매크로를 저장하는 매크로 데이터 저장소, 및 시스템 내에서 트리거링 이벤트들을 식별하고, 복수의 매크로 중 하나에 상응하는 식별된 트리거링 이벤트에 응답하여 복수의 매크로 중 하나의 실행을 시작하는 스케줄링 모듈을 동작시키는 프로세서를 포함한다. 또한 시스템은 매크로의 결과를 사용자에게 통지하는, 사용자 계정에 연계된 통신 주소로의 메시지를 생성하도록 프로그램된 인터페이스를 동작시키는 프로세서를 포함할 수 있다.
일부 양태에서는, 트리거링 이벤트는 사용자 계정을 향하는 수신 디지털 통신을 포함한다. 또한, 시스템은 시스템을 위한 계정 소유자들의 위치들을 추적하는 위치 서비스를 포함할 수 있으며, 제1 계정 소유자를 위해 상기 매크로가 실행되고, 트리거링 이벤트는 상기 제1 계정 소유자와 연계되는 제2 계정 소유자의 위치에 대한 판정을 포함한다. 매크로는 복수의 다른 사용자 계정으로부터의 트리거링 이벤트들에 응답하여 액세스할 수 있고, 또한 이 시스템은 시스템을 위한 복수의 계정 소유자와 연계된 복수의 문서를 포함할 수 있으며, 복수의 문서는 매크로 데이터 저장소에 저장된 매크로들로의 포인터(pointer)들을 포함한다. 또한, 시스템은 매크로로부터의 호출에 응답하여 호스트형 컴퓨터 시스템에 등록된 사용자들의 위치들에 대한 정보를 제공하는 위치 서비스를 포함할 수 있다. 또한, 위치 서비스는 매크로가 구동중인 계정의 사용자가 시스템에 의해서, 위치 정보가 제공될 사용자와 연계되는 것으로 식별될 때만, 위치에 대한 정보를 제공할 수 있다.
다른 구현예들에서는, 호스트형 컴퓨터 시스템상에서 매크로들을 실행하는 컴퓨터-구현 시스템은 호스트형 컴퓨터 시스템으로부터 동작가능한 복수의 호스트형 애플리케이션, 호스트형 컴퓨터 시스템상의 사용자 계정에 각각 할당되고, 복수의 호스트형 애플리케이션 중 적어도 하나에 의해 실행될 일련의 액션들을 각각 정의하는 복수의 매크로를 저장하는 매크로 데이터 저장소, 및 특정 계정 소유자와 연계된 트리거링 이벤트들의 식별(identification)에 응답하여 복수의 매크로를 실행하는 수단을 포함하고, 트리거링 이벤트는 특정 계정 소유자들이 시스템에 로깅되는지 여부에 상관없이 발생한다.
하나 이상의 실시예에 대한 상세 내용은 첨부한 도면 및 이하 상세한 설명에서 개시된다. 다른 특징 및 이점들은 상세한 설명, 도면 및 청구범위로부터 명백해질 것이다.
본 발명은 컴퓨터 매크로들을 관리하는 컴퓨터 구현 방법을 제공한다.
도 1은 호스트형 컴퓨텅 시스템에서 매크로 동작을 나타내는 개념도이다.
도 2는 공유형 매크로들을 동작시킬 수 있는 호스트형 컴퓨터 시스템의 개략적 다이어그램이다.
도 3a는 호스트형 컴퓨팅 시스템상에서 매크로를 실행하는 프로세스의 순서도이다.
도 3b는 이벤트-트리거형 매크로들을 관리하는 프로세스의 순서도이다.
도 4a는 웹 페이지 상에서 구동 중인 애플리케이션으로부터 호출된 매크로를 실행하는 프로세스의 순서도이다.
도 4b는 호스트형 시스템상에 매크로를 기록하고 실행하는 프로세서의 스윔 레인(swim lane) 순서도이다.
도 5는 매크로 시스템에서 오브젝트들에 대한 예시적 구조를 나타낸다.
도 6은 매크로 구성 시스템의 예시적 스크린샷을 나타낸다.
도 7은 본 명세서에서 설명되는 액션들을 실행하기 위해 사용될 수 있는 일반적인 컴퓨터 디바이스들의 예시를 나타내는 도면이다.
여러 도면에서 유사한 참조 부호는 유사한 구성 요소들을 가리킨다.
도 1은 호스트형 컴퓨팅 시스템(100)에서 매크로 동작을 나타내는 개념도이다. 이러한 동작은 클라이언트 디바이스상의 매크로 동작 또는 단일 클라이언트 디바이스에 관련된 서버상(예컨대, 원격 데스크탑 접속 서비스 또는 VPN를 통해 관련됨)의 매크로 동작과는, 매크로를 생성하였거나 및/또는 매크로를 매크로 저장 위치에 복사한 사용자가 데스크탑 컴퓨터, 넷북 컴퓨터로부터, 또는 인터넷 카페에 있는 컴퓨터와 같은 공용 컴퓨터로부터 애플리케이션이 구동하는 동안에, 그 매크로에 액세스를 시도할 때, 다양한 클라이언트로부터 매크로의 동작이 가능하다는 점에서 대비될 수 있다. 또한, 제1 사용자는 다른 사용자들(예컨대, 제1 사용자와 동일한 도메인으로부터 시스템을 액세스하는 사용자들)이 자신들의 애플리케이션들을 사용할 때 매크로를 구동하는 것을 허용하는 액세스 제한 사항(access restriction)들을 그 매크로에 정의함으로써, 매크로를 사용자들 간에 쉽게 공유할 수 있다. 또한, 매크로들은 심지어 사용자가 온라인이 아닐 때(예컨대, 사용자 및 사용자의 컴퓨터에 대한 외부 입력이 매크로 실행을 트리거시킬 때)에도, 사용자를 위해 실행될 수 있다. 이에 더하여, 호스트형 시스템이 서로 관련된 복수의 등록된 사용자들(예컨대, 모두가 동일한 사업체에서 일하는 사용자들)을 가지면, 호스트형 시스템에서 구동중인 매크로들은 복수의 이러한 사용자들에게 상응하는 애플리케이션들 및/또는 데이터 저장소들에 걸쳐 확장하는 복잡한 워크플로우(workflow)들을 생성할 수 있다.
언급된 바와 같이, 매크로들은 이메일 메시지의 수신과 같은 외부 이벤트들에 의해 트리거될 수 있다. 매크로들은 사용자 클라이언트 시스템과는 별개이고, 다른 서비스 또는 애플리케이션들이 구동되고 있는 임의의 서브-시스템과는 별개인 매크로 서버 서브-시스템상에서 구동할 수 있다. 예를 들어, 다른 서브-시스템들 상에서 서비스는 매크로가 정보를 얻기 위해 액세스하는 임의 서비스들을 포함할 수 있으며, 그 서비스는 메인 시스템에 대한 내부 서비스(예컨대, 위치 서비스 및 이메일 서비스) 및 3자 서비스(예컨대, 상업 온라인 상점 또는 경매 사이트들, 날씨 사이트들 등)을 포함한다.
시스템에 연계된 매크로 서버 서브-시스템은 매크로 코드를 작성하는 사용자가 통일되고 일관된 방식으로 매크로들을 작성할 수 있게 하며, 최종 사용자를 위한 프로그램 경험을 쉽게 한다. 예를 들어, 오브젝트 모델이 최종 사용자에게 노출되는 다양한 서비스를 위해 정의될 수 있으며, 다양한 서비스에는 스프레드시트들 및 달력들을 조작하기, 웹 콘텐츠 패치하기, 이메일 보내기, 자신의 달력에 액세스하기, 텍스트 번역하기 등이 있다. 오브젝트 모델은 예를 들어, 자바 오브젝트들을 사용하여 표현될 수 있다. 각 자바 오브젝트는 기본 서비스(underlying service)로의 접근 방법을 래핑(wrap)할 수 있다. 스프레드시트들 및 언어 번역 서비스가 내부 다이렉트 네트워크 호출들(예컨대, 원격 절차 호출들)을 사용할 수 있고, 웹 콘텐츠 패칭은 예를 들어, SOAP 또는 유사한 서비스를 사용할 수 있다. 대부분의 이러한 서비스가 직접적으로 최종 사용자들에게 노출될 필요는 없다.
시스템(100)은 기본 자바 오브젝트들을 둘러싸는 "래퍼(wrapper)들" 또는 "데코레이터(decorator)들"의 여러 레이어들을 생성함으로써, 내부 서비스를 최종 사용자들에게 노출하는 위험을 제거할 수 있다. 예를 들어, 시스템(100)은 특정 사용자가 특정 서비스를 호출할 수 있는 횟수를 제한하는 할당 시행 레이어(quota enforcing layer)를 포함할 수 있다. 시스템(100)은 세립형 액세스 제어(fine-grained access control: 예컨대, 기본 데이터에 대한 쓰기 액세스(wtite access)는 허용하지 않고 읽기 액세스(read access)만 허용함)를 허용하는 캐퍼빌리티-기반 보안(capability-based security)을 사용할 수 있는 보안 레이어를 포함할 수 있다. 또한 시스템(100)은 모든 사용자 호출을 캡쳐하고 사용자 세션의 트랜스크립트(transcript)를 제공할 수 있는 로깅 레이어(logging layer)를 포함할 수 있다. 할당(quota)들과 보안이 균일하게 적용되고 애디-혹 어크로스 서비스(ad-hoc across service)가 아닌 경우에는, 프로그램 에러의 가능성(및 결과적인 보안 위반)이 감소될 수 있다.
시스템(100)은 컴퓨터 매크로들을 관리하는 다양한 컴퓨터 구현 메카니즘들을 포함할 수 있으며, 매크로용 코드는 인터넷-액세스가능 호스트형 컴퓨터 시스템내 위치에 매크로를 위해 저장되고, 후술되는 기능들을 수행하도록 동작할 수 있다. 예를 들어, 호스트형 컴퓨터 시스템으로부터 떨어진 클라이언트 컴퓨터상에서 구동중인 애플리케이션으로부터 매크로를 실행시키기 위한 요청을 수신하면, 매크로가 호스트형 컴퓨터 시스템상에서 실행될 수 있다. 예를 들어, 매크로는 매크로 관리자 또는 그것의 통신-결합 구성요소(communicatively-coupled component)들 내부에서 즉시 구동될 수 있다. 매크로의 실행 결과는 클라이언트 컴퓨터상에서 구동중인 애플리케이션(예컨대, 사용자 컴퓨터의 브라우저에서 구동중인 스프래드시트 애플리케이션)에 제공될 수 있다. 이 상황에서 매크로용 코드는 매크로가 동작하도록 프로그램된 문서들과 별개로 저장되고 액세스될 수 있다. 예를 들어, 코드가 호스트형 서비스 서버들 상에서 실행될 수 있지만, 매크로 코드에 의해 업데이트되는 스프레드시트는 사용자의 랩탑 컴퓨터상에, 또는 호스트형 서비스에서 다른 위치에 상주할 수 있으며, 매크로는 호스트형 서비스에 등록된 임의 수의 사용자들을 대신해서 구동중인 임의 개수의 애플리케이션에 의해 자유롭게 액세스되고 지정될 수 있다.
일부 구현예들에서, 각 매크로는 호스트형 컴퓨터 시스템의 등록된 사용자와 연계될 수 있고, 매크로는 등록된 사용자에 의해 식별된 액세스 제한 사항들에 따라서 호스트형 컴퓨터 시스템의 다른 사용자들에게 이용될 수 있다(또는, 보다 구체적으로 다른 사용자들의 계정상에서 구동중인 애플리케이션들에게 이용될 수 있음). 예를 들어, 매크로를 "소유"하고 있는 사용자는 자신의 매크로를 사용하도록 인증된 다른 사용자들을, 그들의 사용자 ID 또는 그들이 속해 있는 그룹들을 통해서 식별할 수 있다. 다른 경우, 사용자는 매크로로의 링크 또는 URL을 제공할 수 있고, 매크로를 구동하는 것과 연계된 소정 권한(right)들을 포함할 수 있다.
액세스 제한 사항들은 등록된 사용자가 호스트형 컴퓨터 시스템에 의해 할당된 하나 이상의 그룹에 의해 정의될 수 있다. 예를 들어, 사용자는 그룹명 "내온라인친구들(MyOnlineFriends)"에 매크로 액세스를 허락할 수 있고, 자신의 소셜 네트워킹 사이트(예컨대, Facebook, Orkut 등)에서 식별된 자신의 "친구들"로 표현될 수 있는 그 그룹에 있는 모든 사람들에게 권한을 부여할 수 있다.
일부 구현예들에서, 요청들은 매크로를 실행하기 위해 수신될 수 있고, 이 요청들은 호스트형 컴퓨터로부터 떨어진 복수의 다른 클라이언트 컴퓨터상에서 구동중인 복수의 애플리케이션에서 발생한다. 예를 들어, 애플리케이션들은, 매크로들의 정의에서, 매크로 실행을 시작하거나, 또는 대기 상태에서 있은 후에 매크로의 실행을 재개(resume)하거나 계속(continue)하도록 설계된 "이벤트들"을 생성하거나 촉발할 수 있다. 시스템(100)은 위치로부터의 요청들 각각을 위하여 호스트형 컴퓨터 시스템상에서 매크로를 자동적으로 실행할 수 있다. 시스템(100)은 매크로 의 실행 결과를, 그 매크로의 실행에 응답하여 복수의 애플리케이션들의 각 애플리케이션에 추가로 제공할 수 있다. 일부 구현예들에서, 복수의 애플리케이션은 단일 계정소유자에 상응한다. 예를 들어, 매크로의 실행을 요청하는 각 애플리케이션이 결과를 수신할 수 있다. 일부 구현예들에서, 복수의 애플리케이션은 복수의 다른 계정소유자(예컨대, 시스템(100)의 등록된 복수의 사용자)에 상응한다.
매크로를 실행하는 단계는 호스트형 컴퓨터 시스템에 의해 제공되는 복수의 다른 호스트형 서비스를 호출하는 단계를 포함할 수 있다. 예를 들어, 매크로는 달력 서비스, 연락처 서비스, 위치 제공 서비스(예컨대, 사용자의 위치 또는 사용자의 친구들의 위치를 보여주는 서비스) 등을 호출할 수 있다. 매크로를 실행하는 단계는, 대안적으로 또는 추가적으로, 호스트형 컴퓨터 시스템에 독립된(예컨대, 호스트형 컴퓨터 시스템과 다른 도메인에 있고, 호스트형 컴퓨터 시스템의 조직과는 다른 조직에 의해 운용됨) 3자 정보 제공자들에 의해 제공되는 웹 서비스를 호출하는 단계를 포함할 수 있다.
호스트형 컴퓨터 시스템상에서 실행중인 제1 애플리케이션에 의해 생성된 정보는 제1 포맷에서 제2 포맷으로 변환될 수 있고, 변환된 정보는 호스트형 컴퓨터 시스템에서 구동중인 제2 애플리케이션에 제공될 수 있다. 예를 들어, 데이터는 워드 프로세싱 애플리케이션에 의해 콤마-단락 포맷(comma-delimited format)으로 생성될 수 있고, 데이터는 이어 스프레드시트 애플리케이션에 특정된 포맷으로 스프레드시트 셀들에 붙여 넣기 위하여 스프레드시트 애플리케이션에 제공될 수 있다.
매크로 실행 결과는 또한 호스트형 컴퓨터 시스템에 등록된 복수의 다른 사용자들을 위한 복수의 다른 계정들에 자동적으로 제공될 수 있다. 예를 들어, 매크로 실행 결과는, 예를 들어 자신의 시스템들 각각에서 공통 스프레드시트 셀(common spreadsheet cell)을 업데이트하기 위해 여러 컴퓨터 시스템상의 여러 사용자들에게 제공될 수 있다. 일부 구현예에서, 매크로를 구동하기 위한 요청은 호스트형 컴퓨터 시스템내 매크로 실행 서브-시스템상의 자바스크립트 매크로에 대한 포인터(pointer)를 갖는 웹 페이지를 로딩하는 클라이언트 컴퓨터상의 브라우저에 응답하여 수신된다. 예를 들어, 매크로들로의 링크들 또는 URL들을 전달하여 매크로들이 공유될 때, 그 매크로들을 실행하기 위한 요청(예컨대, 자바스크립트 또는 그 밖의 관련 언어로 됨)이 링크 또는 URL의 형태로 제공될 수 있다.
이제 도 1을 보다 구체적으로 참조하면, 막 논의되어진 일부 또는 전부 기능을 구현하기 위한 예시로서, 시스템(100)은 하나 이상의 애플리케이션(102: 그 각각은 액세스되었을 때 매크로가 실행되게 하는 매크로 후크(104)에 대한 접근 권한을 가짐), 하나 이상의 외부 이벤트들(105), 매크로 서버 서브-시스템(106), 소셜 네트워크(108), 위치 서비스(110), 및 매크로 코드(112)를 포함한다.
애플리케이션들(102)은 사용자가 구동(run) 즉, 실행(execute)시킬 수 있는 임의의 적절한 애플리케이션들을, 예를 들어 이메일 애플리케이션, 스프레드시트 애플리케이션들, 워드 프로세싱 애플리케이션들, 사진 공유 애플리케이션들, 프레젠테이션 패키지들, 재정 플랜 애플리케이션들 등을 포함할 수 있다. 일부 경우에, 사용자는, 예를 들어 데스크탑상에서 애플리케이션명을 더블 클릭허거나 애플리케이션들의 목록을 풀-다운(pull-down)하여 구동할 하는 애플리케이션을 명시적으로 선택함으로써 애플리케이션을 시작시킬 수 있다. 다른 애플리케이션들은, 예를 들어 사용자가 이메일 첨부를 클릭했을 때(예를 들어, 텍스트 파일 또는 스프레드시트), 또는 사용자가 미지의 파일을 클릭했을 때, 또는 예를 들어 파일의 확장명 또는 다른 정의된 연관성(defined associated)에 기초하여, 파일에 연계된 상응하는 애플리케이션의 실행을 자동으로 시작시킬 때 암시적으로 시작될 수 있다. 또한 사용자는 애플리케이션(예컨대, 호스트형 애플리케이션)으로 안내되는 URL로 이동함으로써 애플리케이션을 시작할 수 있다.
애플리케이션들을 시작하거나 실행하는 또 다른 예시에서, 소정 애플리케이션들의 실행을 시작 또는 재개할 수 있는, 이메일 메시지의 수신과 같은 이벤트(105)가 발생할 수 있다. 예를 들어, 이벤트(105, 예컨대, 수신된 이벤트 메시지)는 매크로(예컨대, 스프레드시트를 업데이트하고 제목란을 추가함)를 트리거할 수 있다. 이벤트의 발생은 호스트형 시스템상에서 구동하고, 시스템에 등록된 각 사용자에 대한 이벤트들을 추적하는 이벤트 핸들러(event handler)에 의해 검출될 수 있다. 각 이벤트는 보고된 다음, 매크로의 실행과 같은 특정 액션과 상관될 수 있으며, 그 액션이 트리거될 수 있다.
애플리케이션들(102) 각각은 매크로 후크(104)에 대한 접속 권한을 갖는다. 가장 간단한 구현예에서는, 매크로 후크는 시스템(100)에 저장되고 실행가능한 매크로를 위한 코드를 지시하는 단순한 URL일 수 있다. 예를 들어, 후크(104)는 자바스크립트 코드를 지시하는 URL일 수 있고, 웹 페이지 내에 포함될 수 있어, 웹 페이지가 로딩되거나 또는 웹 페이지의 동작과 연계된 소정 이벤트들이 발생하면, 그 코드가 액세스되어 구동되도록 한다. 매크로 후크(104)는 이 애플리케이션(102) 내에서 매크로들의 정의를 용이하게 하는 것에 더하여, 또는 대안적으로, 이벤트 트래킹을 수행할 수 있고, 외부 이벤트들(105)과 매크로 서버 서브-시스템(106) 간의 연결을 제공할 수 있다. 예를 들어, 매크로 후크(104)는 사용자가 이메일 애플리케이션들(102)에서 수신된 이메일들에 관련된 이벤트들에 연계된 매크로들을 정의할 수 있게 한다. 매크로는 이메일 애플리케이션들(102)이 제공하는 것과는 다른 오브젝트들을 식별할 수 있다. 또한, 매크로의 매크로 코드(112)는 이메일 애플리케이션들(102)에 있는 매크로들의 네이티브 언어(native language)와는 다른 언어로 될 수 있다. 또한, 매크로 후크는 그 매크로에 관련된 임의 이벤트들을 추적할 수 있고, 적절한 시간에 매크로 서버 서브-시스템(106)과 상호 동작할 수 있다. 매크로를 기록하거나 또는 존재하는 매크로를 실행시키는 옵션을 선택함으로써, 매크로 후크(104)가 사용자에 의해 인스턴스화(be instantiated)되거나 실현될 수 있다.
외부 이벤트들(105)은 이메일 메시지의 수신(예컨대, 이메일 애플리케이션에서,), 소정 조건들이 존재(예컨대, 할당들이 초과됨, 사용자 액세스가 거부됨, 프로세스가 완료됨 등)하는 것에 대한 판단(예컨대, 애플리케이션에 의함) 등을 포함하는, 매크로의 실행을 트리거하기 위한 다양한 이벤트들을 포함한다. 이러한 이벤트들은 이벤트 핸들러에 의해 추적될 수 있고, 추적될 특정 이벤트들은 시스템(100)에서 특정 이벤트가 발생하면 매크로 또는 매크로들이 실행되기를 소망하는 사용자 각각을 위해 이벤트 핸들러에 등록될 수 있다.
일부 구현예들에서, 이벤트들은 예컨대, 코드의 어느 라인이 소정 조건이 충족(예컨대, 변수가 특정값에 도달하거나, 계정 업데이트(accounting update)가 밤 동안 완료되는 것 등)되었다고 판정하였을 때와 같이, 코드 내에서 감시(trap)될 수 있다. 외부 이벤트들(105)은 또한 텍스트 메시지, 블로그 항목, 수신 RSS 피드 등과 같은 메시지의 검출을 포함할 수 있다. 외부 이벤트들(105)은 온라인 경매 사이트상에 특정 아이템의 포스팅에 대한 검출을 포함할 수 있고, 이러한 검출은 예를 들어 경매 아이템(예컨대, "빈티지 바티칸 번호판")의 제목 또는 설명으로 판정될 수 있다.
외부 이벤트(105)를 위한 트러거 조건(trigger condition)은 조건들의 다양한 조합들을 포함할 수 있다. 예를 들어, 이메일 애플리케이션들에 관련된 이벤트들을 트리거하는데 사용되는 조건들은 이메일 제목란, 보낸 사람 ID들(예컨대, 상사, 배우자, 자녀 등), 받는 사람(예컨대, "TO" 대 "Cc" 대 "Bcc"의 조합을 사용함), 받는 사람의 수(예컨대, 내가 유일한 받는 사람일 때 말해 주세요), 첨부가 있는지 여부, 이메일이 보내진 곳의 위치, 메시지 본문에 있는 키워드, 또는 이메일이 스팸일 가능성이 있는지 여부를 포함할 수 있다. 워드 프로세싱 애플리케이션들에 상응할 수 있는 조건들은 문서의 크기, 문서의 소스, 문서 생성 날짜 및/또는 최근 수정 날짜, 문서 작성자 등을 포함한다. 스프레드시트 애플리케이션들의 경우, 이벤트들을 트리거시키기 위해 사용될 수 있는 조건들은 특정 스프레드시트 셀의 값, 셀의 값들이 변경되었는지 여부, 스프레드시트에 있는 실제 데이터의 행 또는 열의 개수, 스프레드시트의 작성자, 스프레드시트의 크기 등을 포함할 수 있다. 다른 유형의 문서들에 적용하는 조건들은 그 문서에 수정이 막 발생했는지 여부를 포함할 수 있다. 예를 들어, 온라인 날씨 서비스 사이트가 포스팅 한, 특정 지역을 향해가는 토네이도를 경고하는 경보(alert)와 같은, 다른 트리거링 이벤트들이 웹상의 소스들 또는 서비스에 의해 생성될 수 있다. 이러한 경우, 날씨에 주의를 기울이는 사용자는 외부 날씨-관련 이벤트를 가로채어(intercept) 자신의 식구들 또는 이웃들에게 텍스트 및/또는 전화 통화를 생성하는 매크로를 이미 구성했을 수 있다.
또한 이벤트들은 복수의 다양한 소스들로부터 조합일 수 있다. 예를 들어, 초기 이벤트는 특정 사용자로부터 이메일을 수신하는 것으로 처음에 트리거되지만, 그 이벤트가 발생한 후에 매크로만이 실행되고, 매크로는 이메일을 보내거나 받은 사용자가 특정 위치에 있는지를, 위치 추적 서비스를 사용하여 판정한다. 다른 서비스로부터의 정보를 사용하는 추가적 또는 대안적 조건들이 또한 부과될 수 있다.
매크로 서버 서브-시스템(106)은 예를 들어 애플리케이션들(102)에 의해 전파되는 이벤트(예컨대, 이메일 메시지들 등)과 같은 특정 이벤트들을 시스템(100)에서 모니터링할 수 있다. 매크로 서버 서브-시스템(106)이 흥미를 갖는 특정 이벤트들은, 매크로 서버 서브-시스템(106)에 대한 명령들로서 이용되는 이벤트(예를 들어, "추가 공지가 있을 때까지 서버 XYZ, 애플리케이션 ABC, 또는 사용자 아무개와의 통신을 중단하시오")들 외에도, 매크로로 처리될 수 있는 임의의 관련 이벤트들을 포함할 수 있다.
다양한 서비스가, 이벤트들을 위한 트리거가 되거나, 트리거들에 응답하여 구동하는 매크로들을 위한 입력이 되거나, 또는 매크로들로부터의 출력들이 됨으로써, 시스템(100)과 상호 동작할 수 있다. 예를 들어, 소셜 네트워크(108)는 이벤트를 처리하는 방법을 판정하는데 유용한 정보를 시스템(100)에 제공할 수 있다. 일 예시로서, 매크로는 배티에게 보내진 이메일을 수신하고, 그 이메일이 배티의 친구들(예컨대, 하나 이상의 소셜 네트워크 상에 정의됨) 중 한명으로부터 온 경우에만 동작을 수행하도록 정의될 수 있다. 다른 예시에서, 매크로는 모든 배티의 "친구들"(예를 들어, 소셜 네트워킹 사이트들 또는 그룹들에 의해 정의됨)에게 자동 이메일 또는 다른 알림들을 송신하도록 설계될 수 있다. 소셜 네트워크(108)를 운영하는 조직은 서브-시스템(106)을 운영하는 조직과 다를 수 있고, 소셜 네트워크(108)의 운용자는 API를 통해 소정 정보에 대한 접근 권한을 제공할 수 있고, 그 제공된 한도만큼, 서브-시스템(106)의 운용자에게 그러한 접근 권한이 주어진다.
다른 예시에서, 위치 추적 서비스(110)는 사용자들에 의해 요청되었을 때, 예를 들어 사용자들이 자신의 친구들을 찾거나 역으로 자신의 친구들이 사용자들을 찾을 수 있도록 하기 위해, 사용자들과 연계된 모바일 디바이스들의 위치를 추적할 수 있다. 예를 들어, 매크로들은 사용자에게 이메일 또는 텍스트를 송신하도록 정의될 수 있고, 이메일 또는 텍스트의 목적지는 그 당시 사용자의 위치에 따라 달라질 수 있다. 예를 들어, 만약 사용자가 셀 폰 또는 다른 모바일(에컨대, GPS 기반) 디바이스를 갖고 있으면, 사용자의 위치는 위치 추적 디바이스(110)에 의해 추적되거나 알려질 수 있다. 사용자의 위치에 종속되어, 매크로를 실행함으로써 전파되는 이메일은, 사용자의 모바일 디바이스 또는 집에 있는 디바이스에 송신(예를 들어, 사용자가 자신의 집 근처에 있거나, 또는 위치 서버(110)가 사용자가 집 방향으로 가는 듯 하다고 판정하는 경우)될 수 있다.
예를 들어, 사용자의 GPS-가능 디바이스로부터 송신된 위치 정보 "여기가 어디예요?) 이외에, 사용자는 위치 추적 서비스(110)를 통해 "어디로 가야 하나요?" 정보를 수신할 수 있다. 정보는 예를 들어, GPS 좌표들 또는 단순 텍스트 메시지들(예를 들어, "여기서 꺽은 다음, 10107까지 언덕을 올라가세요")을 포함할 수 있다.
서브-시스템(106)은 매크로 코드의 다양한 인스턴스를 저장하고, 추적하고, 액세스하고, 실행할 수 있다. 매크로들을 구성하는 매크로 코드(112)는 임의의 적절한 언어로 될 수 있지만, 일반적으로 시스템(100)에 의해 사용되는 선호되는 매크로 언어(preferred macro language: 예컨대, 자바스크립트 등)로 작성되거나 프로그램될 수 있다. 매크로가 잘 알려진 방식으로 실행되기 때문에, 매크로 서버 서브-시스템(106)은 매크로 코드(112)의 함수- 및 매크로-관련 세그먼트들을 파싱(또는 탐색)할 수 있으며, 이 함수들의 예로는 "겟 네임(get name)" 함수(114), "체크 네임(check name)" 함수(116), "겟 위치(get location)" 함수(118), 또는 매크로 서버 서브-시스템(106)이 고려해야 할 임의의 다른 함수들 또는 매크로들이 있다. 매크로 코드(112)에 내장된 각각의 함수들 또는 동작들은 매크로 서버 서브-시스템(106)이 다른 형태의 프로세싱(예컨대, 파일을 액세스하는 것에 대한 사용자 인증을 확인하는 것 등)을 수행하게 한다.
매크로 코드(112)는 중앙 매크로 저장소 또는 인터넷-접속가능 호스트형 컴퓨터 시스템과 같은 다양한 위치에 저장될 수 있다. 일부 구현예들에서는, 매크로 코드(112)의 전체 집합이 분산 방식으로 저장될 수 있고, 하나 이상의 네트워크에 의해 논리적으로 묶일 수 있다. 일부 구현예들에서, 매크로 코드(112)가 민감(사용자의 개인 정보를 포함하거나 업데이트함)하거나 국방(nation defense)의 이유로 분류(예컨대, 비밀, 일급 비밀 등)되어 있을 때, 매크로 코드(112)는 보안 서버들과 같이 분리된 위치에 명시적으로 저장될 수 있다.
일부 구현예들에서는, "청취자(listener)들"이 이벤트 추적을 위해 이용될 수 있다. 예를 들어, 스프레드시트가 서버상에 로딩되고, 그 스프레드시트의 HTML이 브라우저로 다운될 때, 새로운 스프레드시트가 열렸다는 것을 나타내는 서버측 이벤트가 트리거될 수 있다. 이 이벤트를 위한 스프레드시트 서버상의 청취자들은 그 스프레드시트를 위한 스크립트들의 목록을 가지고 있는지 여부를 확인할 수 있다. 만약 가지고 있지 않으면, 전화를 걸어(예컨대, 스크립트 서버에) 실질적으로 "이 스프레드시트에 대한 스크립트가 있나요?)라고 말하고, 스프레드시트 키를 전달(pass)하고, 스크립트들의 목록을 저장한다. 스프레드시트 서버상의 이벤트 핸들러는 이어 임의의 스크립트 방법들이 "onOpen"으로 호출되었는지를 확인할 수 있다. 만약 호출되었으면, 그 방법을 실행하기 위한 메시지를 송신(예컨대, 구글 애플리케이션 스크립트 서버에)한다. 이러한 플로우는 편집 이벤트 등과 같은 다른 시나리오에서도 사용될 수 있다.
다른 예시에서, 매크로는, 예를 들어 제목란, 이메일 보낸 사람, 이메일 메시지에 대용량 스프레드시트가 첨부되어 있는지 여부, (임의 종류의) 첨부물이 있는지 여부 등에 따라서 특정 메시지 라우팅을 실행하도록 설정된 이메일 애플리케이션에 연계될 수 있다. 이러한 방식으로 정의된 매크로는 또한 위치 정보(예컨대, 위치 추적 서비스(110)에 의해 제공됨)를 사용할 수 있다. 만약, 예를 들어, 사용자의 업무 이메일인 이메일 메시지에 대용량 스프레드시트 첨부물이 있고, 사용자가 집에 있는 것으로 판정되면(사용자 모바일 디바이스로부터의 GPS 신호들이 사용자의 집으로 등록된 위치에 상응하므로), 매크로는 복사본을 사용자 가정 이메일에 전달하도록 설정될 수 있다. 이러한 상황에서, 첨부물은 다음날 직장에서의 프레젠테이션 또는 프로젝트를 위해 검토가 필요한 업무-관련 스프레드시트일 가능성이 있다. 대안적으로, 사용자가 자신의 집 근처 어디에도 없는 것으로 발견되는 경우를 위해서, 매크로는 사용자에게 이메일 존재를 알리기 위해서, 사용자의 모바일 이메일-가능 디바이스(mobile email-enabled device)에 소용량 메시지를 송신하도록 확립될 수 있다.
각각의 경우에, 매크로 코드(112)는 매크로 서버 서브-시스템(106)에 저장되고, 매크로를 실행시키는 임의의 이메일 애플리케이션(102)으로부터 제거될 수 있다. 수신된 각각의 수신 이메일 메시지에 대해서, 이메일 애플리케이션(102)은 후크(104)로 매크로 코드를 지시함으로써 그 매크로를 트리거할 수 있다. 이어 매크로는 메시지의 다양한 측면(예컨대, 특정 보낸 사람이 계정소유자의 소셜 네트워크의 회원인지 여부)을 식별할 수 있다. 만약 소셜 네트워크 체크 결과가 긍정적이면, 매크로는 보낸 사람 또는 계정소유자의 지리적 위치를 판정하기 위하여 위치 추적 서비스(110)를 추가로 체크할 수 있고, 소정 액션들이 이러한 위치들에 기초하여 수행되도록 한다. 예를 들어, 매크로 서버 서브-시스템(106)은 소정 상황에 계정소유자(또는 사용자)의 위치에 기초하여 계정소유자에게 통지할 수 있다. 다른 경우에는, 매크로 서버 서브-시스템(106)이 계정소유자로 하여금 전화를 걸게 하거나(예컨대, VoIP를 사용하는 범용 호출 라우팅 시스템(universal call routing system)을 통함), 및/또는 SMS 메시지가 송신되게 하거나 매크로에 의해 정의된 다른 액션들을 수행되도록 할 수 있다.
매크로는 시스템(100) 상에서 구동하는 다양한 애플리케이션에 하나 이상의 승인된 API를 통해 액세스함으로써 이러한 정보를 얻고 제공할 수 있다. 복수의 다른 API가 있는 경우, 작성자들이 서브-시스템(106)을 위하여 단일 매크로 언어로 작성하지만 서로 다른 애플리케이션들에서 작동할 수 있도록, 번역 서비스가 서브-시스템(106)에 제공된다.
매크로들이 사용자의 클라이언트 컴퓨팅 디바이스들로부터 분리된 매크로 서버 서브-시스템상에서 호스트될 때, 여러 장점들이 있을 수 있다. 예를 들어, 매크로들은 많은 다른 애플리케이션에 걸쳐서 사용될 수 있다. 또한 매크로들은 사용자가 자신의 데스크탑 컴퓨터, 다른 사람의 컴퓨터, 넷북 또는 스마트폰과 같은 다양한 액세스 포인트들로부터 온라인 상태에 있는 동안 트리거될 수 있고, 매크로는 심지어 사용자가 온라인이 아니거나 자신의 컴퓨터에 있지 않을 때에도 트리거될 수 있다. 이러한 매크로는 한 유형의 애플리케이션(예컨대, 이메일)에서 이벤트를 가로채서 다른 애플리케이션(예컨대, 사용자를 위한 수신 이메일 메시지의 제목란이 스프레드시트에서 자동적으로 컴파일되는 스프레드시트)에 있는 데이터를 업데이트하도록 정의될 수 있다.
다른 장점은 매크로들을 수동으로 복사하지 않아도 사용자들 간에 매크로들을 완전하게 공유할 수 있는 능력일 수 있다. 대신에, 하나 이상의 보안 레벨이 각 매크로상에 설정되어, 매크로를 생성한 사람 또는 매크로를 처음 저장한 사람에 의해 결정된 것에 따라 다른 사용자들에 대한 접근 권한이 허용된다. 예를 들어, 온라인 사진 공유 사이트들과 같은 공통 웹 자산에 대해 행해질 수 있는 것처럼, 사용자는 매크로에 액세스 보안 레벨을 설정하고, 다른 사람들에게 그 매크로의 URL을 제공할 수 있다.
매크로 서버 서브-시스템상에 호스트되는 매크로는 또한, 소정 경우에, 다양한 사용자로부터 데이터에 대하여 매크로를 구동시키거나, 매크로를 구동시킨 결과를 다양한 사용자들에게 제공하는 능력을 구비하는 장점을 갖는다. 예를 들어, 공유형 매크로는 여러 작성자에 의한 기여물들을 큰 볼륨(예컨대, 몇 명의 사람들에 의해 작성된 시 또는 기사)으로 결합하는데 사용될 수 있다. 각 기여자들의 문서는 미리 정해진 위치에 저장될 수 있고, 그 기여자들이 그 위치로의 접근 권한을 제공하였다면, 매크로는 기여자들의 문서에 액세스할 수 있다. 결합된 볼륨(combined volume)은 이어 각 기여자들 및 추가 사용자들이 단일 문서로서 이용할 수 있게 된다. 다른 예시로서, 비지니스 워크플로우 애플리케이션(business workflow application)이 호스트형 서브-시스템상에서 매크로들을 사용하여(예컨대, 서버 시스템상에 항상 지역적으로 저장된 문서를 승인을 위해 라우팅하도록) 제작될 수 있다.
도 2는 공유형 매크로를 동작시킬 수 있는 호스트형 컴퓨터 시스템(200)의 개략적 다이어그램이다. 일반적으로, 시스템(200)은 다양한 구성요소들을 제공하며, 그 구성요소들은 매크로들이 사용자에 의해 제작되고, 호스트형 시스템상에서 저장, 공유, 액세스, 및 실행될 수 있게 하는 하나의 예시적 방법을 나타낸다.
이 시스템(200)에서, 매크로 서버 서브-시스템(202)은 항구적 방식(persistent manner)으로 매크로 코드를 저장하기 위한 위치를 스크립트 정보 저장 저장소(206)에 마련하는데, 저장되는 정보는 매크로 라이브러리명, 스크립트 콘텐츠, 및 매크로 소유자의 식별자(예컨대, 애매한(obfuscated) 사용자 ID 또는 다른 식별자를 사용함)를 포함할 수 있다. 매크로가 구동될 때, 주어진 매크로를 실행시키기 위해서 매크로 서버 서브-시스템(202)에 명령이 송신될 수 있다. 이어 코드는 스크립트 정보 저장 저장소(206)로부터 검색될 수 있고, 인스턴스가 스크립트 엔진 또는 스크립트 실행기(208)에서 생성될 수 있다.
다른 서버측 애플리케이션들을 위한 프로그램 API를 표현하는 자바 오브젝트들이 구성될 수 있고, 캐퍼빌리티-기반 보안 래퍼에 래핑될 수 있고, 프로그래머-가시적 래핑형 서비스들(programmer-visible wrapped services: 또는 "빈들(beans)")이 될 수 있다. 래핑형 서비스들(210)은 매크로 서버 서브-시스템(202)이, 예를 들어 매크로 실행과 관련된 래핑형 서비스의 소비자들에게 제공할 수 있는 모든 관련 서비스를 포함할 수 있다. 래핑형 서비스(210)는 다른 오브젝트들의 집합인 임의의 관련 오브젝트들일 수 있고, 쉽게 전달되도록 패키지될 수 있다.
래핑형 서비스는 백엔드 서비스(backend services)와 상호 동작하는 퍼블릭 매소드(public method)들을 노출시키는 자바 비지니스 델리게이트(Java business delegate)를 포함할 수 있다. 퍼블릭 매소드들은 매소드들, 클래스(class)들, 스트링(string)들, 스프레드시트들, 애플리케이션 프로그래밍 인터페이스들(APIs), 및 다양한 컴퓨터 언어(예컨대, 자바 등)들에 의해 제공되는 그 밖의 도구들을 패키징하기 위한 다른 매카니즘들 또는 패키지들에 포함될 수 있다. 퍼블릭 매소드들은 예를 들어, 매크로를 정의하거나 실행하는데 사용될 수 있는 리소스들을 노출(또는 공개(public))할 수 있다. 퍼블릭 매소드들의 구현예에 대한 소정 세부 사항은 비공개될 수 있고, 정보의 은닉과 추출에 적합한 레벨들을 제공할 수 있다. 퍼블릭 매소드들은 여러 다른 유형의 오브젝트들에 걸쳐 유사하게 보일 수 있어, 매크로 사용자들에게 어느 정도 일관된 모양과 느낌을 주고, 이로써 다형성(polymorphism) 레벨을 제공한다. 결과적으로, 래핑형 서비스의 집합은 오브젝트-지향(object-oriented), 이벤트-구동형 환경(event-driven environment)의 사용자에 의한 매크로들의 사용을 용이하게 할 수 있다.
이러한 래핑형 서비스, 또는 빈들은 예시적 시스템(200)에서 각 자산(예컨대, 스프레드시트들, 달력들 등)을 위한 퍼블릭 맴버(public member)들을 갖는 최상위(top-level) 자바 오브젝트에 부여된다. 이 최상위 자바 오브젝트는 표준 및 미리 결정된 라벨을 갖는 스크립트 실행기의 환경을 위한 범위에 삽입된다. 일부 구현예들에서, 스크립트 실행기는 스크립트 환경에 퍼블릭 맴버들(및 퍼블릭 맴버들만)을 반영한다.
따라서 사용자의 자바스크립트 코드가
var doc = google.spreadsheets.create("my new doc"); (1)
를 실행하면, 최상위 오브젝트의 "스프레드시트들" 필드에 있는 자바 오브젝트상의 "생성(create)" 자바 매소드가 호출된다. 본 발명의 자바 구현예는 스크립트 구동기의 애매한 식별자와 함께 "CREATE" 명령과 새로운 제목(예컨대, "my new doc")에 상응하는 인수(argument)로, 스프레드시트 서버에 대해 원격 절차 호출(remote procedure call)을 행한다. 스프레드시트 서버는 새로운 스프레드시트를 생성하고, 원격 절차 호출에 응답하여 새로운 스프레드시트의 키를 반환한다. 매크로 서버는 새로운 키를 포함하는 새롭게 생성된 스프레드시트를 표현하는 새로운 자바 오브젝트를 생성한다. 자바 오브젝트는 예를 들어, "이름 변경(rename)", "시트 삽입(insertSheet)" 등과 같은 여러 스프레드시트 동작들을 위한 매소드들을 포함한다. 이 오브젝트는 또한 캐퍼빌리티-기반 보안 래퍼로 래핑되어 반환된다. 스크립트 실행기는 이 오브젝트를 네이티브 자바 오브젝트 래퍼로 래핑하여, 그것을 상기 변수 "doc"에 반환한다.
래핑 오브젝트들의 일부 구현예들에서, 임의의 적절한 서비스(예컨대, 스프레드시트들, 달력들, 이메일 등)는 자바 다이나믹 프록시들에 래핑된 오브젝트들을 반환할 수 있다. 서로 다른 프록시들이 예를 들어, 보안, 로깅, 및 할당을 위해 존재할 수 있다. 각 프록시는 자신이 노출하고 있는 서비스(예컨대, "스프레드시트", "스프레드시트레인지(SpreadsheetRange)", "이메일서비스" 등과 같은 자바 인터페이스)의 설명을 사용하거나 포함할 수 있으며, 각 설명은 퍼블릭 매소드들을 정의할 수 있다. 다른 래퍼들에 적합한 주석(annotation)들이 인터페이스상에 존재할 수 있다.
예를 들어, 스프레드시트 서비스 상에 "생성" 매소드는 새로운 스프레드시트를 생성할 수 있다. 매소드는 자신이 WRITE 매소드인 것을 선언하는 하나의 주석을 가져서, 예를 들어, 스크립트가 스프레드시트 문서들의 사용자 집합에 기록하려고 시도한다는 것(및 사용자가 스크립트에 대하여 WRITE 특권을 인가하지 않으면 스크립트가 런타임에서 실패할 것임)을 사용자에게 경고하는 메카니즘을 제공한다. 기본적으로, 보안 래퍼는 주어진 매소드의 선언되고 필요한 허용(permission)들(WRITE 등)이 사용자의 인가 토큰(user's authorization token) 내에 있다는 것을 보장하는데 도움이 된다. 매소드가 인가되면, 그 호출은 다음 레이어로 전달된다.
또한 보안은 특정 사용자가 매크로에 관련된 동작을 액세스할 수 있는 횟수를 제한함으로써 제공될 수 있다. 이러한 기능을 수행하기 위해, 할당 주석(quota annotation)이 "생성" 매소드에 존재하여, 이 매소드에 대한 호출은 최종 사용자의 "생성 스프레드시트" 할당에 대해서 카운트되어야만 한다는 것을 나타낼 수 있다. 할당 래퍼는 정해진 사용자가 동작을 몇 번 수행시켰는지를 계속해서 추적하는 할당 서비스를 호출하거나 사용할 수 있다. 이 매소드는 예를 들어, 사용자가 할당을 초과하면 실패하고, 그렇지 않으면 그것을 다음 레벨로 전달할 것이다. 사용자에 대한 할당은 설정된 기간(예컨대, 날짜, 주, 또는 월)에 걸쳐 측정될 수 있고, 주기적인 시점에서 리셋되거나 감소될 수 있다.
매크로 실행의 트랜스크립트가 또한 호출된 각 매소드의 스트링 버전과 제공된 인수들을 기록하는 로깅 레이어에 의해 제공될 수 있다.
래핑형 서비스 생성기(212)는 최상위 래핑형 서비스를 생성할 수 있고, 이 서비스의 범위는 매크로와 그 환경에 따른다. 예를 들어, 래핑형 서비스 생성기(212)는 매크로를 구동하는 최종 사용자가 매크로에 명시적으로 허락한 캐퍼빌리티를 검토하고, 그 매크로의 상태에 상응하는 최상위 빈스들을 생성할 수 있다. 이 상태는 예를 들어, 현재 문서(예컨대, 이메일, 텍스트 문서, 도면들, 스프레드시트 등)을 포함할 수 있고, 경우에 따라서 사용자 인증을 포함할 수 있다. 래핑형 서비스 생성기(212)는 환경에 기초한 캐퍼빌리티를 갖는 최상위 래핑형 서비스를 생성할 수 있고, 사용자가 예를 들어 매크로들을 정의하고 실행할 수 있는 스크립트 실행기(203)의 실행 환경에 래핑형 서비스(210)를 주입할 수 있다. 어떤 의미에서는, 래핑형 서비스 생성기(212)는 빈스들을 위한 프로듀서(producer) 또는 팩토리(factory), 즉 "빈 팩토리(bean factory)"로서 생각될 수 있다.
생성될 수 있는 래핑형 서비스(210)의 유형은 예를 들어, 스프레드시트 애플리케이션들의 캐퍼빌리티-래핑형 인스턴스들, 달력 애플리케이션 등을 포함한다. 자바 오브젝트가 실행 범위(execution scope)에 삽입될 수 있다. 오브젝트의 소스가 그것(예컨대, 라벨 "최상위(Toplevel")를 가짐)을 식별하는데 사용될 수 있다. 따라서, "TopLevel.spreadsheets"는 캐퍼빌리티-래핑형 오브젝트(예컨대, SpreadsheetApplicationApi object)에 대한 레퍼런스가 될 수 있다. 이 오브젝트의 퍼블릭 매소드들은 자바 오브젝트들처럼 자바스크립트 프로그래밍 환경에 반영될 수 있고, 매크로들을 위해 가용하게 만들어질 수 있다.
예를 들어, 아래와 같은 자바스크립트 코드는
var doc = google.spreadsheets.getActiveSpreadsheet();
var otherDoc = google.spreadsheets.openByName("MyOtherDoc ");
var value = doc.find("A1").getValue();
otherDoc.find("B2").setValue(value); (3)
기존 스프레드시트(예컨대, "MyOtherDoc"로 불리우는 스프레드시트)를 열어서, 현재 스프레드시트의 셀 A1 값을 새로운 스프레드시트의 셀 B2에 복사할 수 있다. "찾기(find)" 매소드에 의해 반환된 레인지 오브젝트(Range object)와 같은 자바 오브젝트들은 다른 모든 것과 마찬가지로 캐퍼빌리티 래핑되며, 인증된 사용자가 관련 스프레드시트에 액세스하지 않을 때 실패할 수 있다. 예를 들어, 상기한 복사/붙여넣기(copy/paste) 셀의 예시에서, 성공적 실행을 위해 요구되는 액세스들은 활성 스프레드시트 상의 읽기 액세스(예컨대, getValue에 의해 요구됨)와, 타겟 스프레드시트(예컨대, 스프레드시트 "MyOtherDoc") 상의 기록 액세스(예컨대, setValue에 의해 요구됨)이다.
스크립트 실행기(208)는 매크로용 콘텐츠를 생성하고, 최상위 래핑형 서비스(210)의 실제 삽입을 수행하는 기능을 할 수 있다. 새로운 최상위 레벨 범위는 각 매크로 실행에 대해서 생성되어, 예를 들어 하나의 실행 스크립트가 다른 스크립트들 위한 전체 범위를 "중독(poisoning)"시킬 가능성을 방지한다. 매크로 콘텍스트(context)는 승인되지 않은(예컨대, 허용가능한 클래스들의 화이트-리스트(white-list)에 있지 않음) 임의의 자바 클래스들의 생성을 방지하는 클래스 셔터(class shutter) 또는 필터(filter)의 구현예들과 함께 로딩될 수 있다. 부가적으로, 스크립트 실행기(208)는, 예를 들어 스크립트가 무한 루프로 진입했을 때는 검출하는 것과 같이, 런어웨이(runaway) 스크립트들을 조절하기 위한 명령 카운터를 생성할 수 있다. 일부 구현예에서, 런어웨이 스크립트들은 스크립트 관리자(204)에 의해 조기에 종료될 수 있다.
스크립트 실행기(208)는 파싱, 구문 체크, 함수 호출, 매크로 실행 및 재개를 포함하는 다양한 기능을 수행할 수 있다. 파싱 함수는 스크립트를 검토하여 저장소에 있는 스크립트 저장소(예컨대, 스크립트 정보 저장소(206))에서 찾은 함수들 및 매크로들의 목록을 반환할 수 있다. 예를 들어, 도 1을 참조하면, 파싱 기능의 결과로서 검출된 함수들 및 매크로들은 겟 네임 함수(114), 체크 네임 함수(116), 겟 위치 함수(118), 임의의 다른 함수들, 또는 스크립트 또는 매크로 코드(예컨대, 매크로 코드(112))에 내장된 매크로 등을 포함할 수 있다.
시스템에 의해 지원되는 다른 함수들이 또한 서버측 시스템(200) 상에서 매크로들의 집합을 관리하는 것을 도울 수 있다. 예를 들어, 구문 체크 함수는 스크립트를 저장하기 전에, 스크립트 내에 에러(예컨대, 구문 에러, 언어-컴파일 에러, 키워드 오용(misuse))이 있는지를 판정할 수 있다. 구문 또는 다른 에러들이 검출되면, 이 에러들은 통보되어, 사용자 또는 스크립트 프로그래머에게 경고한다.
호출 함수는 매크로 내 함수를 "호출(call: 또는 함수의 실행을 시작)"할 수 있다. 호출 함수는 인-셀(예컨대, 스프레드시트) 함수 호출들에 대해 허락된 특권들을 갖는 버전과 같은, 매크로를 실행하는 제한된 버전일 수 있다. 예를 들어, 매크로들의 제한된 버전들은 부작용의 생성을 허용되지 않으면서, 단지 값을 반환하도록 제한될 수 있다.
매크로 실행 및 재개 함수들이 매크로들을 시작하고 재개하는데 사용될 수 있다. 예를 들어, 매크로 실행 함수는 매크로의 최초 실행을 시작할 수 있다. 일부 경우에, 매크로의 실행은 사용자에게 추가 입력을 요구할 수 있다. 일부 경우, 매크로의 실행이 사용자로부터의 진행 중인 입력을 중단 또는 대기 상태로 진입시킬 수 있다. 사용자 입력이 제공되면, 재개 매크로 함수가 중단된 매크로의 실행을 재개할 수 있다.
스크립트 정보 저장소(206)는 동작들(예컨대, 스크립트/매크로 생성, 저장, 검색, 업데이트, 삭제 등)을 제공 및/또는 지원하는 저장소로서 쓰일 수 있다. 스크립트 정보 저장소(206)에 저장된 스크립트들은 사용자 라이브러리, 개별 스크립트, 또는 애플리케이션(예컨대, 이메일, 스프레드시트, 워드 프로세싱 문서용 애플리케이션 등)에 의해 구조화될 수 있다. 동작들은 전체 사용자의 라이브러리, 또는 라이브러리에 있는 개별적 요소들에 대해 수행될 수 있다. 예를 들어, 하나의 동작은 사용자 ID(예컨대, 라이브러리명에 기초한 주요 키 룩업(primary key lookup))로 사용자 라이브러리를 검색할 수 있다. 다른 동작은 주어진 문서(예컨대, 매크로 또는 스크립트를 표현하는 문서)에 링크된 모든 사용자 라이브러리를 검색할 수 있다.
스크립트 정보 저장소(206)에 의해 제공되는 검색 동작들은 정해진 사용자 라이브러리 상에서 정해진 사용자에 대한 인가를 검색하는 동작, 정해진 사용자가 소유하고 있는 모든 사용자 라이브러리를 검색하는 동작, 사용자의 ID로 연속 레코드를 검색하는 동작을 포함할 수 있다.
스크립트 정보 저장소(206)에 의해 제공되는 생성/업데이트 동작들은 사용자 라이브러리를 생성/업데이트하는 동작, 라이브러리로부터 요약 오브젝트의 키(abstract object's key: 예컨대, 문서 ID)에 대한 연관성을 생성하는 동작, 주어진 라이브러리에 대해 정해진 사용자를 대한 인가들을 생성/업데이트하는 동작, 새로운 연속 레코드(예컨대, 주어진 사용자에 대하여, 직렬화된 바이너리 데이터로)를 생성하는 동작, 및 라이브러리 및 다른 생성/업데이트 동작들을 포함할 수 있다.
스크립트 정보 저장소(206)에 의해 제공되고, 삭제를 수행하는 동작들은 연속 레코드를 삭제하는 동작, 라이브러리와 요약 오브젝트의 연관성을 제거하는 동작, 및 라이브러리를 삭제하여 모든 차일드 오브젝트들(인가 및 링크 연속과 연계된 차일드 오브젝트들을 포함함)을 제거하는 동작을 포함할 수 있다. 스크립트 정보 저장소(206)의 예시적 논리 구조는 도 5를 참조하여 이후에 설명된다.
스크립트 관리자(204)는 매크로 서버 서브-시스템(202)의 기본 구성요소들(206 내지 219)에 명령들을 위임(delegate)할 수 있다. 특정 예시적 명령들의 상세 설명이 후속되는데, 기본 구성요소들(206 내지 219)로의 위임 제어 경로(delegation control path)들은 일련의 문자로 표시된 처리 화살표 1 내지 6으로 표기되어 있으며, 소정 액션들이 가능한 경우 다른 순서로 발생할 수 있긴 하지만, 전반적으로 시간순으로 문자가 부여되었다.
스크립트 관리자(204)가 수행할 수 있는 명령(예컨대, 위임에 의해)은 사용자 라이브러리를 저장하는 것이다. 명령은, 예를 들어 사용자 특권들 또는 다른 보안에 기초하여 그 명령의 실행으로 제한될 수 있다. 예를 들어, 사용자 라이브러리 표현(예를 들어, 프로토버퍼(protobuffer), 즉 프로토콜 버퍼)이 라이브러리 ID를 포함하면, 스크립트 관리자(204)는 실행시킨 사용자가 라이브러리를 수정할 수 있다는 것을 보장할 수 있다. 인가가 발생하면, 스크립트 관리자(204)는 그것을 저장 레이어에 기록할 수 있고, 라이브러리의 새로운 표현을 반환한다. ID가 존재하지 않으면, 새로운 ID가 생성될 수 있고, 새롭게 생성된 ID를 포함하는 표현이 반환될 수 있다. 라이브러리를 저장하는 것은, 예를 들어 라이브러리의 함수들을 파싱하는 것(예컨대, 스크립트 실행기(208)를 사용함), 라이브러리 DAO 오브젝트에 그 함수들을 부가하는 것, 구문 에러를 검출하는 것(예컨대, 스크립트 실행기(208)를 사용함), 라이브러리 콘텐츠를 저장하는 것, 및 소유자를 저장하는 것을 포함할 수 있다. 도 2를 참조하여, 사용자 라이브러리를 저장하는 것과 관련된 구성요소들은, 예를 들어 처리 화살표 1, 2, 및 6으로 표시될 수 있다.
프로토콜 버퍼들은, 예를 들어 사용자 라이브러리 표현에 사용되었을 때, 유선을 통해 직렬화되거나, 데이터베이스에 바이너리 형태로 지속될 수 있는 데이터 구조를 포함할 수 있다. 데이터 구조는 통신 프로토콜을 시행하기 위해, 강하게 타입지정된 필드들을(strongly typed fields) 사용한다.
스크립트 관리자(204)가 수행할 수 있는 다른 명령은 라이브러리를 임포트(import)하는 것이다. 이 명령은 주어진 문서(예컨대, 스프레드시트, 이메일 달력, 또는 다른 첨부가능 콘텍스트)에 대한 링크 또는 라이브러리의 연관성을 생성할 수 있다. 예를 들어, 이메일 메시지는 사용자의 주어진 메일 계정에 연계될 수 있다. 이 링크의 목적은 예를 들어, "런(Run)" 메뉴들에 디스플레이하기 위하여, 기본 문서가 어떤 매크로들이 그 문서에 연계되었는지를 신속하게 파악할 수 있게 하기 위함이다. 예를 들어, 라이브러리 임포트 명령은 데이터 저장소에 "링크(Link)" 테이블 항목을 생성할 수 있다. 도 2를 참조하면, 라이브러리를 임포트하는 것에 관련된 구성요소들은, 예를 들어 처리 화살표 1과 2로 표시될 수 있다.
스크립트 관리자(204)가 수행할 수 있는 다른 명령인 복사 명령은 라이브러리의 콘텐츠의 복사본을 만들기 위해 기존 라이브러리를 복사한다. 예를 들어, 라이브러리에 포함된 모든 스크립트들 및 매크로들은 새로운 라이브러리명으로 복사될 수 있다. 복사하는 액션이 라이브러리의 콘텐츠의 복사본을 만들기는 하지만, 연관성들은 복사되지 않는다. 새로 생성된 라이브러리 소유자는 현재 소유자로 설정된다. 복사 동작이 완료되면, 새 라이브러리의 ID가 반환된다. 예를 들어, 복사 명령은 임의의 다른 링크들, 연속, 또는 인가들을 복사하지 않고, 데이터 저장소에 새로운 "UserLibrary" 테이블을 생성할 수 있다. 도 2를 참조하면, 라이브러리를 복사하는 것에 관련된 구성요소들은, 예를 들어 처리 화살표 1과 2로 표시될 수 있다.
삭제 라이브러리 명령(delete library command)은, 예를 들어 허용을 체크한 다음, 허용되었으면 데이터 저장소(예컨대, 스크립트 정보(206))로부터 라이브러리를 삭제할 수 있다. 예를 들어, 삭제 라이브러리 명령은 "UserLibrary" 테이블과 모든 차일드 테이블로부터 항목을 제거할 수 있다. 프론트 앤드가, 예를 들어 "확실히 진행하시겠습니까?"과 같은 질문을 하는 기능을 수행할 수 있다. 라이브러리를 삭제하는 것에 관련되는 구성요소들은 예를 들어, 처리 화살표 1과 2로 표시될 수 있다.
사용자에 의해 라이브러리를 얻는 명령(command to get libraries by a user)은 정해진 사용자가 소유하고 있는 라이브러리들을 사용자의 ID에 기초하여 반환할 수 있다. 예를 들어, 명령은 소유자 필드가 현재 사용자인, 스크립트 정보(206)에 저장된 사용자 라이브러리(예컨대, UserLibrary 또는 다른 테이블) 항목을 반환할 수 있다. 도 2를 참조하면, 사용자에 대한 라이브러리들을 얻는 것에 관련되는 구성요소들은, 예를 들어 처리 화살표 1,2, 및 4로 표시될 수 있다.
문서에 의해 라이브러리를 얻는 명령(command to get libraries by document)은 정해진 문서에 의해 임포트되는 임의 라이브러리들을 반환할 수 있다. 예를 들어, 겟(get) 라이브러리 명령은 부합하는 "문서화된" 필드들을 링크 테이블에서 스캔하고, 부모(parent) "UserLibrary"를 반환할 수 있다. 도 2를 참조하면, 문서를 위한 라이브러리들을 얻는 것에 관련되는 구성요소들은, 예를 들어 처리 화살표 1,2, 및 4로 표시될 수 있다.
카테고리화 라이브러리 명령(categorize library command)은 예컨대, "SAMPLES"과 같은 "가상(virtual)" 문서에 연관성을 부가할 수 있다. 예를 들어, 카테고리화 라이브러리 명령은 주어진 이름(SAMPLES 등)으로 링크 테이블에 항목을 생성할 수 있다. 도 2를 참조하면, 라이브러리를 카테고리화하는 것에 관련되는 구성요소들은, 예를 들어 처리 화살표 1과 2로 표시될 수 있다.
카테고리를 위한 겟 라이브러리 명령(get libraries for category command)은 주어진 카테고리를 갖는 모든 라이브러리를 반환할 수 있다. 예를 들어, 카테고리를 위한 겟 라이브러리 명령은 문서를 위한 라이브러리들을 얻는 것과 유사할 수 있다. 도 2를 참조하면, 카테고리로 라이브러리들을 탐색하는 것에 관련되는 구성요소들은, 예를 들어 처리 화살표 1과 2로 표시될 수 있다.
평가 함수 명령(evaluate function command)은 라이브러리로부터 함수를 검색할 수 있고, 검색된 함수를 실행을 위해 스크립트 실행기(208)에 전달할 수 있다. 도 2를 참조하면, 함수를 평가하는 것에 관련되는 구성요소들은, 예를 들어 처리 화살표 1, 2, 3, 5, 및 6으로 표시될 수 있다.
평가 매크로 명령(evaluate macro command)은, 입력 파라메터(예컨대, 만약에 있다면, 현재 문서에 대한 콘텍스트 정보, 라이브러리 ID, 및 매크로명)이 제공될 때, 래퍼들로 프로그램 빈(programmatic beans)들을 생성하고, 실행을 위해 래핑형 서비스들을 스크립트 실행기(208)에 전달할 수 있다. 도 2를 참조하면, 매크로를 평가하는 것에 관련되는 구성요소들은, 예를 들어 처리 화살표 1, 2, 3, 5, 및 6으로 표시될 수 있다.
계속 매크로 명령(continue macro command)은, 매크로 라이브러리 ID 및 계속 ID가 주어졌을 때, 스크립트 실행기(208)상에서 계속 동작을 호출할 수 있다. 예를 들어, 이러한 명령은 멈춤된 실행중 매크로(paused executing macro)가 능동적으로 실행을 계속하게 한다. 도 2를 참조하면, 매크로가 계속 실행되게 하는 명령과 관련되는 구성요소들은, 예를 들어 처리 화살표 1, 2, 3, 및 6으로 표시될 수 있다.
업데이트 인가 명령(update authorizations command)은, 정해진 사용자와 주어진 매크로 라이브러리를 위한 인가 세트(set of authorization)들에 대해서, 데이터 저장소에 항목을 업데이트(또는 부가)할 수 있다. 도 2를 참조하면, 인가들을 업데이트하는 것에 관련되는 구성요소들은, 예를 들어 처리 화살표 1과 2로 표시될 수 있다. 일부 구현예들에서, "겟 라이브러리(get library)"와 다른 명령들은 일반적으로 스크립트 저장 레이어에서만 동작하고, 스크립트 실행기(208)를 호출하지 않을 수도 있다.
이제 시스템(200)의 다른 구성요소를 참조하면, 명령 서브렛(command servlet: 216)은 매크로 명령들이 매크로 제어기(예컨대, 자바스크립트 매크로 제어기 "MacroController.js")로부터의 요청들에 응답함으로써 실행되도록 할 수 있다. 이 응답은 예컨대, 사용자에게 투명(transparent)하고 자동적인 재지시(redirection)로서 발생할 수 있다. 일 예시적 재지시 기술에서는, 브라우저 클라이언트가 특정 URL을 요청했을 때, 재지시 규칙(redirection rule)은 그 요청을 매크로 서버(예컨대, 매크로 서버 서브-시스템(202))에 지시할 수 있다. 명령 서브렛(216)이 처리할 수 있는 요청들의 유형은, 예를 들어 이름들(예컨대,GET_ADMIN_PANEL, SET_SCRIPT 등)로 된 여러 요청들을 포함할 수 있다.
예를 들어, GET_ADMIN_PANEL 요청은 매크로 관리 패널의 전체 HTML을 반환할 수 있고, 매크로 제어기(예컨대, MacroController.js)는 폐쇄 다이얼로그(closure dialog)에 그 HTML을 삽입할 수 있다. SET_SCRIPT 요청은 스크립트 콘텐츠와 사용자 라이브러리 ID를 명령 서브렛(216)에 송신할 수 있다. 명령 서브렛(216)은 패널의 왼쪽(카테고리들 및 라이브러리명들을 포함함)을 위해서 HTML(예컨대, GXP에 의해 생성됨)이 반환될 수 있도록, 사용자 라이브러리를 생성/업데이트하기 위해 스크립트 관리자(204)를 호출할 수 있다. macrocontroller.js는 왼쪽 패널을 위한 영역(div)에 그 HTML을 랜더링할 수 있다.
GET_SCRIPT 요청은 스크립트 관리자로부터 주어진 라이브러리를 위한 스크립트 콘텐츠를 패치할 수 있고, 그 스크립트를 편집하기 위하여 콘텐츠 창(content pane: GXP를 통해 생성됨)을 반환할 수 있다. macrocontroller.js는 그 HTML을 패널의 콘텐츠 영역에 삽입할 수 있다.
IMPORT_LIB 요청은 호출 라이브러리 명령으로 ScriptManager를 호출할 수 있다. 이 요청은 GXP를 통해 패널의 왼쪽을 랜더링하고, 그것을 macrocontroller.js에 반환할 수 있다.
COPY_LIB 요청은 IMPORT_LIB 명령과 유사할 수 있지만, 호출 명령이 아니고 복사 명령을 사용하는 점에 차이가 있다. DELETE_LIB 요청은 IMPORT_LIB과 유사할 수 있지만, 예를 들어 GXP를 통해 전체 관리 패널 HTML을 반환하기 위해 삭제 명령을 사용할 수 있다. CATEGORIZE_LIB 요청은 "샘플에 추가(add to samples)" 특성으로 사용될 수 있다. IMPORT_LIB 마찬가지로, CATEGORIZE_LIB은 카테고리화 라이브러리 명령으로 스크립트 관리자를 호출하고, 수정(redrawing)을 위해 패널의 왼쪽을 반환할 수 있다.
RUN_MACRO 요청은 매크로명, 라이브러리 ID, 및 문서 상태에 대해 직렬화된 표현(예컨대, 현재 선택 등)을 얻을 수 있고, 주어진 매크로를 실행하기 위해 스크립트 실행기(208)를 호출할 수 있다. 에러가 발생하면, 에러 메시지가 macrocontroller.js로 전송되어 사용자에게 디스플레이된다. 사용자가 매크로를 인가해야 한다면, 메시지가 macrocontroller.js에 전송되어 사용자에게 촉구(prompt)할 수 있다.
매크로 서버 서브-시스템(202)는 네크워크(224)를 통해 애플리케이션들(220)및 위치 서버(222)와 상호 동작한다. 애플리케이션들(220)은 사용자 디바이스(226)를 사용하는 사용자에 의해 실행되는 애플리케이션(예컨대, 사용자의 랩탑 컴퓨터상에서 구동하는 웹 브라우저)일 수 있다. 사용자 디바이스(226)는 웹 페이지(226a: 예컨대, 스프레드시트 서버를 사용함)를 디스플레이할 수 있다. 사용자의 웹 브라우저는 사용자의 사용자 디바이스(226) 상에서 매크로들의 실행을 제어하기 위해 매크로 제어기(226b)를 사용할 수 있다.
3자 프로세스 및 웹 페이지(228)로부터의 외부 이벤트는 매크로 서버 서브-시스템(202) 내에서 정의되는 매크로들을 위한 트리거링 메카니즘으로서 쓰일 수 있다. 외부 이벤트들은 인터넷과 같은 네트워크(230)를 통해 수신될 수 있다. 여기서 외부 이벤트들은 도 1에 관련되어 설명된 외부 이벤트들(105)에 상응할 수 있다.
내부 이벤트(internal event)들 외에, 위치 수신기(218)에 의해 수신되는 위치 정보와 같은 외부 이벤트(external event)들은 이벤트 서브렛(214)에 의해 추적되고 보고될 수 있다. 이벤트 서브렛(214)은 시스템(200)에서 발생하는 이벤트들을 위해 통신 허브(communication hub)로서 쓰일 수 있는 서버-기반 이벤트 레지스트리(server-based event registry)를 구현할 수 있다.
이벤트 레지스트리는 시스템상에서 구동중인 관심 또는 구독 프로세스(interested or subscribing processes: 예컨대, 매크로-관련 프로세스들)에 의해 액세스될 수 있고, 프로세스들이 소정 이벤트들이 발생했을 때 인스턴스화되도록 하기 위해, 이러한 프로세스들에 대한 경보(alert)를 제공할 수 있다. 이와 같이 하기 위하여, 이벤트 레지스트리는 이벤트들의 고객들이 호출할 수 있는 매소드들을 제공한다. 이벤트 레지스트리는 "청취(listen)" 매소드, "비청취" 매소드, 및 이벤트들을 관리하는데 사용될 수 있는 다른 매소드들과 같은 다양한 매소드들을 노출시킬 수 있다.
청취 매소드는 시스템내에서 이벤트를 모니터링하고 추적하는 근거로서 쓰일 수 있고, 예컨대, 사용자명, 이벤트 필터, 및 타겟과 같은 인수(argument)들 또는 파라미터들을 가질 수 있다. 따라서, 청취 매소드 호출의 일 예시적 포맷은 아래와 같을 수 있다.
listen(userName, eventFilter, target);
청취 매소드를 호출에 의해 통지받는 이벤트 레지스트리(event registry)는 인증된 사용자(예컨대, "userName"으로 식별된 사용자)를 대신하여 특정 이벤트들을 청취하고, 특정 이벤트들이 발생했을 때 그 이벤트들을 하나 이상의 특정된 타겟들(예컨대, "타겟" 파라미터에 의해 식별됨)로 전송할 수 있다. 특정 이벤트들은, 예를 들어 이벤트 필터(예컨대, "eventFilter" 파라미터)에 의해 식별될 수 있다. 이벤트 필터는 서비스 식별자들(예컨대, 이메일 서비스, 달력 서비스 등) 및 다른 서비스-특정 필터들(예컨대, "이메일 수신(email receipt)", "폴더 생성(folder creation)" 등)을 포함할 수 있다. 타겟은, 예를 들어 원격 절차 호출(RPC) 콜백일 수 있다. 예를 들어, 이벤트가 발화(fire)하거나 발생할 때, 이벤트 레지스트리는 이벤트 세부사항을 이 종단점(endpoint: 예컨대, 타겟)에 송신할 수 있다. 일부 구현예들에서, 타겟은 이벤트가 트리거될 때 어떤 매크로가 구동해야 할지를 식별하는 식별자를 갖는, 매크로 서버 서브-시스템(202)의 구성요소일 수 있다.
상응하는 "비청취" 매소드는 이벤트들에 대한 알림(notification)들을 수신하기 위한 요청을 취소하는데 사용될 수 있다. 비청취 매소드를 인보킹하기 위한 호출은 아래와 같은 형식을 취할 수 있다.
unlisten(userName, eventFilter, target):
비청취 매소드를 호출하는 것은 "청취자(listener)"를 취소하거나 중지시키는 것과 같을 수 있다. 또한, 이 명령을 위한 파라미터들은 제1 장소(place)에서 이벤트에 대한 리스닝을 개시하는데 사용될 수 있는 파라미터들을 반영한다.
또한 복합 이벤트 조건(compound event condition)은 이벤트 서브렛(214)에 의해 적용될 수 있다. 예를 들어, 수신 이메일(incoming email)이 도착했을 때 및 이메일의 받는 사람 또는 보낸 사람이 소정 위치에 있을 때에만, 알림이 트리거되도록 하기 위해 이벤트 필터가 정의될 수 있다. 이러한 복합 표준(compound standard)은 별개의 매크로에 의해 구현될 수 있는데, 예를 들어 매크로는 이메일의 도착에 의해 트리거되고, 받는 사람 또는 보낸 사람의 위치를 위치 서비스로 체크하고, 그 위치가 특정 값과 부합하는 경우에만 수행을 계속한다. 또한 이 표준은 이벤트 서브렛(214)에 의해 구현될 수 있는데, 예를 들어, 매크로를 개시하도록 구독 서비스에 통지하기 전에, 복합 조건들이 충족되었는지를 판정하기 위한 정보를 수집하기 위해 이벤트 서브렛(214)이 실행할 수 있는 프로세스들을 제공함으로써 구현된다.
소정 상황에서, 이벤트 조건들은 종속식(cascading) 또는 직렬 방식(serial manner)으로 서로 정렬될 수 있다. 예를 들어, 이벤트의 발생은 이벤트 서브렛(214)에 의한 매크로의 시작을 트리거하여, 메시지를 스크립트 관리자(204)에 송신한다. 그 매크로는 구동된 후, 이벤트 서브렛(214)으로 정의된 다른 이벤트들을 시사(implicate)하는 출력들을 제공할 수 있다. 응답으로서, 이벤트 서브렛(214)은 다른 메시지를 스크립트 관리자(204)에 송신하여, 스크립트 관리자(204)가 다른 매크로를 개시하도록 한다. 유사한 방식으로, 단일 이벤트는 2개의 다른 매크로들의 실행을 동시에 트리거할 수도 있다. 예를 들어, 사용자는 사용자의 계정에 의해 임의 이메일의 수신에 응답하여 하나의 매크로를 구동시키고(예컨대, 이메일들로부터 제목 정보를 분해(strip)하여 스프레드시트내에 그 정보를 배치하기 위해), 소셜 네트워크 시스템(서브-시스템(202)을 운영하는 조직 및 시스템과 분리될 수 있음)에 있는 제1 사용자의 친구로 정의된 사용자로부터 이메일이 수신될 때마다(그 친구가 제1 사용자와 소정 거리내에 있을 때) 다른 매크로를 구동시키고자 할 수 있다. 따라서 이러한 위치에서 이러한 사용자로부터 이메일이 도착하면, 두 매크로 모두는 동시에 병렬적으로 트리거되고 실행될 수 있다.
이벤트 알림은 여러 다양한 방식으로 개시될 수 있다. 예를 들어, 이벤트 통지가 프로그램적으로 개시될 수 있다. 일부 구현예들에서는, "인스톨러(installer)" 스크립트 또는 다른 프로그램 코드가 생성될 수 있으며, 이벤트 레지스트리에 이벤트 유형을 프로그램적으로 등록한다. 이 경우, 기업체(enterprise)내의 패키지 트래킹 애플리케이션(package tracking application)은 배치 또는 초기 인스톨이 되면, 패키지들이 도착했음, 패키지들이 배송되었음, 운송 대금이 입금되었음, 수송물이 지점 X만큼 이동되었음 등을 고객들에게 알려줄 수 있는 메일링 목록에 이벤트 청취자(event lisner)들을 등록할 수 있다. 스크립트 라이브러리(예컨대, 패키지-추적 스크립트 라이브러리)내 추가 액션들은 액티비티들이 메일링 리스트상에서 검출되었을 때 자동으로 구동될 수 있다. 프로그램적 개시에 대한 이 예시에서, 리스닝이 프론트(예컨대, 패킹 추적 애플리케이션들의 인스톨의 일부)로 설정되므로, 이벤트 청취자들을 "리그업(rig up)"하는데 최종 사용자 간섭(end user intervention)은 거의 또는 전혀 요구되지 않는다. 일부 구현예들에서, 추가 사용자 인터페이스가 청취자들을 조정하거나 새로운 청취자들을 정의하는데 제공될 수 있다.
이벤트 알림을 개시하는 다른 예시적 매카니즘에서는, 이벤트들을 제공하는 타겟 애플리케이션이 사용자가 이벤트 유형들을 특정 스크립트 실시(particular script invocation)에 바인딩할 수 있도록 하기 위해 자신만의 인터페이스를 생성하고 노출시킨다. 예를 들어, 일부 이메일 애플리케이션(예컨대, 애플의 메일 애플리케이션(Apple's Mail.app))은, 사용자가 예를 들어 특정 이벤트들이 발생하면 구동할 애플리케이션(예컨대, 애플스크립트)을 특정하기 위해, 사용자가 이용할 수 있는 지정 필터(custom filter)들을 사용할 수 있다. 그 밖의 애플리케이션들(예를 들어, 지메일(Gmail) 등)도 사용자가 이메일 속성 기준(email attribute criteria: 예컨대 이메일이 문자열 ABC를 포함함, 이메일이 특정 주소로 송수신됨 등)과, 수행될 액션들(예컨대, 이메일을 보관함, 이메일에 라벨을 붙임, 주소 XYZ로 전달함 등)을 정의할 수 있게 하는 필터들을 포함할 수 있다. 마찬가지로, 지메일은 사용자가, 예를 들어 특정 필터 기준이 충족되었을 때 수행되어야 할 액션들 중의 하나로서 "스크립트 XYZ 구동"을 선택적으로 추가하게 할 수 있다. 다른 애플리케이션들은 스프레드시트에 대한 변경 내용에 대한 요약(digest)을 이메일(사용자에게)로 보낼 수 있는, 구글 스프레드시트에 있는 변경 알림 서비스(change notification service)와 같은, 유사한 특징들을 이용할 수 있다. 일부 구현예들에서, 매크로를 인보킹하는 추가 옵션이 이메일 보내기와는 대조적으로, 또는 이메일 보내기에 더하여 제공될 수 있다.
다른 매소드들이 이벤트들, 사용자들 및 사용자 계정들, 이벤트 필터들, 및 이벤트 레지스트리에 연계된 타켓들을 관리하기 위해 존재할 수 있다. 예를 들어, 사용자는 사용자 매소드를 위한 getRegisteredListeners를 사용함으로써 자신의 계정이 현재 리스닝하고 있는(예컨대, 그들의 청취자들의 목록) 모든 이벤트에 대한 정보를 얻을 수 있다. 정보가, 예를 들어 관리 패널 또는 다른 사용자 인터페이스에 디스플레이될 수 있다. 다른 이벤트-관리 매소드들은 특정 사용자명, 이벤트필터 또는 타겟, 또는 그것들의 조합을 위한 정보를 제공하는 매소드들을 포함할 수 있다.
이벤트 서브렛(214)에 의해 구현되는 이벤트 레지스트리는 사용자/청취자 쌍들의 데이터베이스를 유지관리할 수 있다. "청취" 매소드 또는 명령이 수신되면, 예를 들어 이벤트 레지스트리는 서비스 필터를 언팩(unpack)하고, 메시지를 상응하는 서비스에 송신할 수 있다.
각 서비스는 사용자 크리덴셜(user credentia)들과 이벤트 필터를 포함하는 유사한 "청취" 매소드로 RPC 종단을 노출할 수 있다. 서비스를 위한 타겟이 이벤트 레지스트리 자체일 수 있다. 예를 들어, 조건이 이벤트 필터를 충족하는 것을 내부적으로 서비스가 검출했을 때, 그 서비스는 이벤트들을 이벤트 레지스트리에 송신할 수 있다. 프로세스의 이 부분의 내부 구현예들(각 서버에 의함)이 특정 서버에 위임될 수 있으므로, 시스템의 이 부분에 대한 특정 내부 구현예들은 강제적이지 않다. 따라서, 이벤트 브로드캐스터는 그들에게 적합한 방식으로 이 콘트랙트(contract)를 구현할 수 있다.
이벤트가 이벤트 레지스트리에 의해 등록(또는 검출)될 때, 이벤트 레지스트리는 자신의 데이터 저장소로부터 타겟 정보를 언패킹하고, 그 이벤트의 알림을 모든 관련 타겟들로 송신하는 기능을 수행한다. 알림은 이벤트 자체의 식별과 타겟들이 필요로 하는 임의의 다른 적절한 정보를 포함할 수 있다. 일부 구현예들에서, 메인 타겟은 매크로 서버 서브-시스템(202)일 수 있다. 일부 구현예들에서는, 예를 들어 알림 서비스들, 로깅 서비스들, 웹 서비스들, 및 그 밖의 서비스들을 포함하는 다른 타겟들이 사용될 수 있다.
일부 구현예들에서는, 다른 구성요소들을 위한 디자인 문제(design concerns)들이 서로 분리되도록, 시스템이 설계될 수 있다. 예를 들어, 이벤트 레지스트리는 타겟들에 대해 알 수 있지만, 이벤트 브로드캐스팅 서비스들을 그렇지 않다. 또한, 이벤트 브로드캐스팅 서비스들은 이벤트 필터들을 적용시키는 방법을 알 수 있지만(예컨대, "보내진 이메일", "업데이트된 스프레드시트 셀", "폴더에 놓인 아이템"), 이벤트 레지스트리는 그렇지 않다. 예를 들어, 이벤트 레지스트리는 서비스 종단점(예컨대, 타겟들에 대한)들을 찾는 방법만을 알 수도 있다. 디자인의 분리는 미래의 참여자(예컨대, 3자)들이 N개의 가능한 타겟들에 대한 특정 위치에 대해 걱정할 필요없이 시스템에서 자신의 종단을 자유롭게 구현할 수 있게 하는 이득을 제공할 수 있다.
전송 매카니즘(transport mechanism)들에 관해서, 구현예들이 API 호출들을 위한 적절한 매카니즘들, 네트워크 전송 프로토콜(network transport protocol) 등이 사용될 수 있다. 예를 들어, 이벤트 레지스트리의 일부 3자 참여자들이 많은 외부 API 호출을 위해 다양한 웹 서비스들(예컨대, "SOAP")을 사용할 수 있다. 다른 참여자들이 REST(representational state transfer) 또는 다른 적합한 API를 사용할 수 있다. 다른 참여자들(예컨대, 매크로 서버 서브-시스템(202)을 제공하는 조직)은 사유(proprietary) 네트워크 전송 프로토콜을 내부적으로 사용할 수 있다. 이러한 메커니즘 각각, 또는 본 명세서에서 언급하지 않은 다른 것들도 이벤트 플로우의 콘텐츠 또는 의미론(semantics)을 보호할 수 있다.
일부 구현예들에서는, 사용자 인증(user authentication)을 위해 사용되는 매소드들은, 예를 들어 하나의 애플리케이션이 다른 애플리케이션에 있는 사용자의 데이터를 액세스할 수 있게 하는 임의의 다른 적절한 오픈 표준(open standards) 또는 OAuth를 포함할 수 있다. 예를 들어, 액세스는 사용자가 패스워드들 또는 다른 특정 크리덴셜들을 제공하지 않아도 허용될 수 있다. 특히, OAuth 또는 다른 매소드를 사용할 때, 사용자는 이벤트 레지스트리가 다양한 오픈 애플리케이션에서 이벤트 서브시스템을 호출하게 할 수 있다. 호출은 각 서비스가 인식할 수 있는 토큰(token)일 수 있다. 결과적으로, 예를 들어 사용자를 대신해서(예컨대, 사용자의 승인 등이 없이) 이메일을 보내는 것과 같은 다른 서비스들에 액세스를 금지하면서, 이벤트 시스템에 인증이 강요될 수 있다.
각 이벤트의 콘텐츠(또는 "이벤트 데이터")는, 예를 들어 특성(attribute)/값 쌍의 세트를 포함할 수 있다. 예를 들어, 특성들의 표준 세트(standard set of attributes)가 전반적으로 모든 애플리케이션들에 대해 정의(예컨대, "사용자" 및 "서비스")될 수 있다. 예를 들어, 스프레드시트 애플리케이션은 특성 "스프레드시트 호출", 비-스프레드시트 애플리케이션에 대해서는 유용하지 않은 특성들을 정의할 수 있다.
일부 구현예들에서, 일부 또는 모든 필터링은 오로지 참가 서비스(participating service)들내에서 보다는 이벤트 레지스트리에서, 또는 이 2가지의 혼합 형태에서 발생할 수 있다. 이러한 경우, 참가 서비스들은 이벤트 레지스트리에 모든 이벤트들을 무차별적으로 발화(fire)시킬 수 있는데, 청취자에 대한 이벤트 레지스터리의 저장에 기초하여 이벤트 필터링을 수행할 수 있다. 레지스트리-기반 필터링은 참가 서비스들에 있는 필터링을 간략화하거나 제거할 수 있지만, 일부 경우에 이러한 접근법이 시스템을 과-포화(over-saturate)로 만들 수 있다.
여기서 시스템은 또한 매크로 기록기를 인스턴스화하고, 그 매크로 기록기에 의해 추적된 복수의 액션들을 처리하고, 사용자가 액션들의 자동적 실행을 위해 추후 호출할 수 있는 이러한 액션들의 표현을 저장함으로써, 사용자가 매크로를 기록하는 것을 승인할 수 있다. 이 구현예에서, 매크로 기록은 일반적으로 서버측에서 수행될 수 있다. 사용자가 기록가능 명령(예컨대, 호출값 설정, 시트 삽입 등)을 실행할 때, 명령이 스프레드시트 서버에 송신될 수 있다. 그 서버는 "기록(recode)" 모드 인지를 주목하고, "기록" 모드이면 그 명령을 찾아서 구동중인 스트링 버퍼에 텍스트를 쓸 수 있고, 이것은 동일한 효과를 갖을 수 있는 스크립팅 코드에 상응한다.
예를 들어, 사용자가 "hello"를 스프레드시트의 셀 A1에 입력한다고 가정한다. "set range"를 의미하는 명령 ID, "hello" 값, 행 0, 열 0, 시트-ID 0(예컨대, 이것이 첫 번째 시트인 경우)이 스프레드시트 서버에 송신될 수 있다. 이것이 기록기만을 위한 것이 아니고, 이 명령은 실제로 스프레드시트 서버상에 셀을 변화시키는 것이어서, 기록이 발생했는지 여부에 상관없이 그 명령이 송신된다는 점에 주목한다. 따라서 기록기는 스프레드시트를 동작시키는 기존 명령 플로우상에 있는 와이어탭(wiretap)과 실질적인 등가물일 수 있다.
레코더는 명령 ID를 찾아서, 그것이 "셋 레인지(set range)"인지를 확인한다. 생성할 적절한 코드가 "레인지(range)" 오브젝트상의 "setValue" 호출이라는 것을 알고 있으므로, 기록기는 상응하는 텍스트를 생성하기 위해 행과 열을 찾아서 사용할 수 있다. 이어, 기록기는 시트 식별자를 찾아서, 그 시트에 대한 변수가 이미 존재하는지를 판단하는데 사용한다. 결과적으로, 매크로 기록기는 아래와 같은 텍스트를 생성할 수 있다.
sheet.getRange('a1').setValue('hello'); (2)
따라서 이러한 구조에 의해, 컴퓨터 사용자는 호스트형 컴퓨터 서비스에 로그하여 복수의 다양한 애플리케이션들 및 서비스들에 액세스할 수 있다. 사용자가 매크로를 실행하도록 명시적으로 선택하거나, 또는 매크로가 자동적으로 트리거되고, 그 매크로는 자신에 의해 참조되면 자동적으로 인스턴스화될 수 있는 애플리케이션 및 관련 애플리케이션들에서 구동할 수 있다. 결과적으로, 사용자는 매우 다양한 데이터와 프로그래밍 메카니즘들에 액세스하여, 강건한 온라인 서비스를 제작할 수 있다.
도 3a은 호스트형 컴퓨팅 시스템상에서 매크로를 실행하는 프로세스(300)의 순서도이다. 프로세스(300)는, 예를 들어 시스템들(100 및 200)에서 매크로들을 구동하는데 사용될 수 있다. 일반적으로, 도시된 프로세스는 관련 매크로 코드를 식별하는 단계, 코드를 실행시키기 위해 오브젝트들을 생성하는 단계, 및 호스트형 컴퓨터 시스템상에 하나 이상의 애플리케이션과 상호 동작하도록 상기 코드를 실행하는 단계를 포함한다.
이 예시에서 프로세스(300)는 매크로를 구동하기 위한 명령을 수신하는 박스 302에서 시작한다. 이 명령은 도 1에 관련되어 설명된 것처럼, 외부 이벤트(105)의 결과일 수 있고, 또는 사용자가 구동시킬 매크로를 수동으로 선택할 수 있다. 예를 들어, 전자의 경우, 외부 이벤트(105)는 이메일의 수신일 수 있고, 구동되도록 명령된 매크로는 그 이메일을 수신한 것에 응답하는 동작(예컨대, 이메일의 제목란으로 스프레드시트를 업데이트함)을 수행하는 매크로일 수 있다. 매크로 후크(104)는 외부 이벤트(105)를 검출하는데 관계될 수 있고, 예컨대 매크로 서버 서브-시스템(106)과 통신함으로써 매크로를 다시 트리거시키는 기능을 수행할 수 있다.
박스 304에서, 매크로 코드가 식별, 검색, 및 실행된다. 예를 들어, 도 2를 참조하면, 스크립트 관리자(204)는 스크립트 정보(206)에 대해 실행될 매크로 코드를 식별할 수 있다. 이어 스크립트 정보(206)는 요구된 매크로 코드를 스크립트 관리자(204)에 반환하고, 스크립트 관리자(204)는 매크로 코드의 실행을 개시할 수 있다.
매크로 코드 실행의 일부로서, 매크로와 상호 동작하는 애플리케이션들을 위한 프로그램 API들을 표현하는 자바 오브젝트들을 갖는 인스턴스가 생성된다(박스 306). API들은 매크로 코드와 상호 동작하는 애플리케이션들에 상응할 수 있다. 예를 들어, 매크로 코드가 스프레드시트를 업데이트하도록 설계되면, 생성되는 인스턴스는 상응하는 스프레드시트 애플리케이션을 위한 프로그램 API들을 표현하는 자바 오브젝트들을 포함한다.
박스 308에서, 오브젝트들은 보안 래퍼들로 래핑된다. 예를 들어, 보안 래퍼는 예컨대, 매크로 코드가 사용자에 의해 포지티브 액션(positive action)들이 취해졌을 경우에만 구동하도록, 매크로 코드 자체를 둘러싸는 추가 코드일 수 있다. 일부 구현예들에서, 상기 액션은 "OK"를 클릭하는 것일 수 있고, 매크로에 대한 다른 방식의 명시적 승인일 수 있다.
보안 래퍼들은 다양한 방법(예컨대, 트로이 목마, 피싱 공격, 또는 다른 악성 코드로부터의 공격으로부터)으로 최종 사용자를 보호할 수 있다. 일부 구현예들에서, 보안 래퍼는 사용자에게 대화 박스를 전달한 후에 구성될 수 있다. 대화 박스에 포함된 메시지는 매크로를 잠재적 비신뢰 매크로(potentially un-trusted macro)로서 식별할 수 있고, 추가로 매크로가 구동되었을 때 일어날 수 있는 것들을 식별할 수 있다. 일부 구현예들에서, 대화 박스는 그 매크로에 대해 특정되는 잠재적 유해 액션들의 목록을 식별할 수 있는데, 그 목록은 매크로의 스캔에 기초한 것이다. 매크로를 스캐닝하는 것은, 예를 들어, 매크로에 있는 텍스트 스트링 또는 다른 정보에 부분적으로 기초하여, 특정 잠재적 유해 영향들을 식별하는데 도움을 줄 수 있으며, 상기 텍스트 스트링 또는 다른 정보는 악의적이었던 과거 매크로들의 콘텐츠에 상응한다.
사용자는 매크로가 가질 수 있는 액세스를 승인하거나 승인하지 않을 수 있다. 사용자의 승인은 상술된 캐퍼빌리티-기반 보안 래퍼들(예컨대, 매크로가 읽는 특권들은 갖지만, 그 매크로가 특정 파일들을 업데이트하는 것은 허용하지 않음)을 구성하는데 사용될 수 있다. 이 경우에, 사용자가 매크로에 대해 허락하고, 보안 래퍼에서 반영된 특권들 또는 권리들은 사용자가 승인한 이러한 유형을 액션들로 제안된다.
일부 구현예들에서, 보안 래퍼들을 생성하는 프로세스는 악성 코드를 검출하는 메카니즘을 오동작시키려고 시도하는 악성 코드를 검출할 수 있다. 예를 들어, 매크로에서 "delete"를 코딩하는 대신에, 서브스트링들 "de" 및 "lete"가 실제 삭제 동작의 의도(예컨대, "delete")를 숨기기 위해서 연결될 수 있다. 본 명세서에서 설명된 프로세스는 이러한 인스턴스들을 식별하고, 사용자가 매크로에 대한 삭제 승인을 허락하지 않은 경우 삭제를 방지하도록 프로그램될 수 있다.
박스 310에서, 매크로가 안내되는 각 애플리케이션에 대한 관련 서버들에 대한 호출이 생성된다. 이 호출들은 매크로가 상호 동작하는 애플리케이션에 연계된 다른 프로그램 API들 또는 매소드들을 포함하는 오브젝트들의 실행에 관계된다. 예를 들어, 호출들은 스프레드시트를 업데이트하고, 이메일을 전달하고, 파일을 복사하는 등의 매크로 코드의 실행을 포함할 수 있다.
이어 박스 312에서, 상호 동작이 각 애플리케이션으로부터의 피드백으로 발생되고, 서비스들에 액세스한다. 예를 들어, 상호 동작은 매크로가 막 동작한 애플리케이션과의 사용자 상호 동작을 포함할 수 있다. 사용자는, 예를 들어 다른 사용자로부터의 이메일을 전달한 매크로의 결과로서 사용자가 막 수신한 이메일을 읽을(및 이메일과 다른 상호 동작들을 수행할) 수 있다.
이 방식에서, 매크로는 시스템에서 분리된 서브-시스템들 상에서 구동되는 복수의 애플리케이션 전체에 걸쳐 중앙 시스템상에서 실행될 수 있다. 매크로는 보안 메카니즘들을 포함할 수 있고, 다양한 방식으로 트리거될 수 있다. 이에 더하여, 매크로는 시스템 내 또는 인터넷과 같은 네트워크를 경유한 다른 시스템들로부터 액세스할 수 있는 다른 다양한 서비스로부터 정보를 얻을 수 있다.
도 3b는 이벤트-트리거형 매크로들을 관리하는 프로세스의 순서도이다. 일반적으로, 프로세스는 2 단계에 관련되는데, 제1 단계는 소정 조건에 부합하는 미래 이벤트들을 통지받고자 하는 바램(desire)을 나타내기 위해, 엔티티가 이벤트 레지스트리를 구독(subscribe)하는 단계이고, 제2 단계는 임의의 이벤트가 발생하는 동안 이벤트 레지스트리가 적절한 엔티티 또는 엔티티들에 통지하는 단계이다. 이러한 단계들은 프로세스에서 연속적으로 계속해서 모두 발생할 수 있고, 다른 엔티티들이 미리-등록된 구독(previously-registered subscription)들에 관한 이벤트들에 대하여 통지받는 동안, 엔티티들은 새로운 구독들을 등록할 수 있다.
박스 320에서, 프로세스가 시작되어, 이벤트 레지스트리가 이벤트를 구독하려는 의도의 알림(notice)을 엔티티로부터 수신한다. 알림은 매크로 실행을 관리하는 애플리케이션(예컨대, 도 2에 도시된 스크립트 관리자(204))과 이벤트 레지스트리 간에 원격 절차 호출과 같은 다양한 형태로 도착될 수 있다. 알림은 상술된 바와 같이, 사용자명, 이벤트 필터, 및 타겟을 포함할 수 있다. 사용자명은 이벤트 레지스트리를 운용하는 호스트형 컴퓨터 시스템에 있는 사용자 계정에 대한 식별자에 상응할 수 있고, 타겟은 트리거링 이벤트가 이벤트 레지스트리에 의해 식별되었을 때 알림이 송신되어야 하는 주소(예컨대, URL)를 표현할 수 있고, 이벤트 필터는 알림이 타겟에 제공되기 전에 이벤트에 의해 충족되어야 하는 하나 이상의 조건을 표현할 수 있다. 알림을 제공하는 엔티티는 스크립트 관리자(204)를 포함하는 임의 갯수의 엔티티일 수 있고, 사용자가 특정 이벤트에 의해 트리거될 매크로를 설정할 때, 이벤트가 발생할 때 매크로가 구동하게 하기 위해, 특정 매크로로 안내되는 타겟을 포함하는 이벤트 레지스트리에 알림을 제공할 수 있다.
박스 322에서, 레지스트리는 구독하는 엔티티를 등록하고, 이벤트에 대한 알림 파라미터들을 저장한다. 등록은 알림에서 수신된 파라미터들에 관련된 정보를 저장하는 단계를 포함할 수 있고, 사용자가 항목(entry)에 관련된 정보들에 액세스할 수 있고, 그 정보들을 이벤트 레지스트리로 수정할 수 있게 하기 위해, 이러한 정보와 시스템에 등록된 사용자를 연계시키는 단계를 포함할 수 있다. 이벤트들이 발생했을 때 특정 이벤트가 어떤 항목에 관련되는지를 판정할 수 있도록 남은 정보(remaining information)가 검색될 수 있도록 하기 위해, 남은 정보는 이벤트 레지스트리가 쉽게 이용할 수 있는 위치에 저장될 수 있다.
소정 경우에, 이벤트 레지스트리는 레지스트리에 있는 항목과 연계된 이벤트-생성 서비스(event-generating service)로 구독할 수 있다. 예를 들어, 이벤트 레지스트리는 이메일 애플리케이션과 같은 서버-기반 애플리케이션에 대한 사용자 식별자를 제공하여, 특정 사용자 계정에 관련하는 소정 유형의 이벤트를 보고해야 함을 애플리케이션에 알린다. 예를 들어, 이벤트 레지스트리는 이메일 애플리케이션에게 사용자 아무개의 수신 메시지에 관련된 이벤트들을 보고하라는 것을 알린다. 이 방식에서, 애플리케이션은 이벤트들을 보고할 때를 알 수 있고, 자신을 마주한 모든 이벤트를 이벤트 레지스트리에 공급하지 않아도 된다.
박스 326에서, 프로세스의 제2 단계가 수행되어, 이벤트 레지스트리는 이벤트-생성 서비스로부터 알림을 수신한다. 예를 들어, 이메일 애플리케이션은 특정 사용자의 수신 메시지의 형태로 이벤트를 표시할 수 있다. 이 표시(indication)는 이벤트 레지스트리가 메일 애플리케이션을 구독할 때 제공된 식별 번호(identification number)의 간단한 형태로 취할 수 있고, 이벤트 레지스트리는 알림이 필요한 하위 등록(underling registration)을 룩업(look up)하기 위해 이 번호를 사용할 수 있다. 원래의 등록에 정의된 정보와 같은 다른 정보도 또한 전달될 수 있고, 이벤트 레지스트리가 이러한 정보를 구독 엔티티(예컨대, 스크립트 관리자(204))에 전달하여, 이벤트에 의해 트리거되어 실행되는 매크로에 의해 그 정보가 쉽게 액세스될 수 있도록 한다. 대안적으로, 매크로는 애플리케이션에 대해 독립적으로, 및 직접적으로 정보를 얻도록 프로그램될 수 있다. 이벤트 레지스트리는 계속해서 리스닝 모드로 있어, 이러한 알림들을 기다릴 수 있고, 많은 서비스들로부터의 많은 이러한 알림들을 실질적으로 동시에 처리할 수 있고, 서비스들을 관리하는 매크로들 또는 매크로를 포함하는 많은 다른 구독 엔티티에 이 알림들을 보고할 수 있다.
박스 328에서, 이벤트 레지스트리는 레지스트리에 대한 모든 구독들에 대하여 이 알림을 테스트한다. 이 알림이 단일 식별 번호이면, 이벤트 레지스트리는 구독 엔티티에 의해 이벤트 레지스트리로 원래 제공된 정보와 같은 정보를 포함하는 데이터 레코드에, 상기 번호를 상관시키는 룩업을 수행한다. 이어, 이러한 정보(예컨대, 타겟 어드레스)가 구독 엔티티를 통지하는데 사용될 수 있다(단계 350).
이 방식에서, 프로세스는 사용자에게 자동이면서 클라이언트 디바이스 또는 사용자 상태에 독립적(예컨대, 사용자가 호스트형 시스템과 현재 상호 동작할 수 있는지 여부, 및 사용자가 시스템에 현재 로깅되어 있는지에 대한 여부에 상관없이)으로 매크로들을 실행시키는 메카니즘을 제공할 수 있다.
도 4a는 웹 페이지를 구동하는 애플리케이션으로부터 호출된 매크로를 실행하는 프로세스(400)의 순서도이다. 일반적으로, 도 4a에 도시된 프로세스는 도 3a에 도시된 프로세스와 유사하고, 프로세스가 멀티-구성요소 시스템에서 다른 구성요소 간에서 공유될 수 있는 방식을 위한 예시들을 나타낸다.
예시적 프로세스(400)는 브라우저(401a)와 매크로 서버(401b) 간의 상호 동작들에 상응하는 단계들을 포함한다. 예를 들어, 프로세스의 브라우저측에서의 상호 동작들은 스프레드시트 애플리케이션을 구동하는 클라이언트 디바이스를 이용하는 사용자에게 관계되는 반면, 실행된 매크로들은 데이터 서버 시스템(예컨대, 매크로 서버(401b))에서 구동(및 데이터를 얻음)될 수 있다. 브라우저측에 도시된 프로세스(400) 단계들은, 일반적인 상호 동작들 외에, 사용자와 스프레드시트 애플리케이션(예컨대, 스프레드시트 서버 시스템에 의해 제공됨) 간에 발생할 수 있는 것으로 매크로들과 관련이 없다. 매크로 서버측에서 수행되는 프로세스(400) 단계는, 예를 들어 매크로 서버 서브-시스템(202)에 의해 수행될 수 있다. 또한 프로세스(400)는 도 1과 도 2에 관련되어 상술된 시스템들(100, 200)상에서 매크로 실행을 나타낼 수도 있다. 일반적으로, 매크로 서버(401b)측에서 프로세스(400)의 단계들은 스크립트 관리자(204)에 의해 제어될 수 있다.
박스 402에서, 매크로를 실행하기 위한 요청이 발생한다. 예를 들어, 요청은 클라이언트 디바이스상에서 브라우저 애플리케이션을 구동하는 사용자에 의해 생성될 수 있다. 사용자는 매크로의 구동을 트리거시키기 위해 키 조합(key combination)을 실행할 수 있고, 또는 그 구동은 애플리케이션에서 특정 문서를 열고, 그 애플리케이션상의 컨트롤에 대한 사용자 선택에 의해 개시되거나, 또는 시스템과의 사용자 상호 동작과는 별개인 메카니즘들(예컨대, 서브-시스템에 의해 수신된 외부 신호로)에 의해 개시될 수 있다.
단계 404에서, 매크로의 실행이 개시된다. 이 개시는, 예를 들어 매크로 서버 서브-시스템(202) 내에서 발생할 수 있다. 예를 들어, 클라이언트 디바이스에 의해 전달되거나 식별될 수 있는 주소에 상응하는 매크로 코드가 서브-시스템에 로딩될 수 있고, 그것의 실행이 일반적인 방식으로 시작될 수 있다.
단계 406에서 사용자가 매크로의 실행을 위해 인가를 제공했는지에 대한 판정이 행해진다. 이러한 액션은 매크로 코드 실행의 시작 단계에서 발생될 수 있다. 예를 들어, 사용자 인가는 상술된 바와 같이 악성 코드가 구동되는 것을 방지하기 위한 실행의 일부일 수 있다.
사용자 인가가 존재하지 않으면, 단계 410에서 사용자 인가 요구사항들이 패치되고, 단계 412에서 사용자는 인가하도록 촉구받는다. 단계 414에서 사용자가 인가를 제공하면, 단계 416에서 사용자의 인가가 저장되지만, 사용자가 인가를 제공하지 않으면 단계 418에서 프로세스(400)가 종료한다. 사용자 인가 요구사항들은, 예를 들어 매크로가 실행되도록 허용되는 경우 발생할 수 있는 악성 결과들의 유형에 대한 목록을 포함할 수 있다. 이 목록은 단계 412에서 사용자에게 제시될 수 있다.
사용자 인가가 존재하면, 래핑형 서비스가 단계 408에서 생성된다. 래핑형 서비스들(또는 "빈들")이, 예를 들어 래핑형 서비스 생성기(212)에 의해 생성될 수 있다. 이러한 동작은 선택적이고, 상술된 바와 같이 코드의 실행을 악의적인 간섭으로부터 보호하기 위해 사용될 수 있다.
스크립트(또는 매크로)는 단계 420에서 스크립트 실행기에서 실행된다. 예를 들어, 도 2를 참조하면, 스크립트는 스크립트 실행기(208)에 의해 실행될 수 있다. 이 실행은, 예를 들어 클라이언트 상에서 지역적으로 발생하는 매크로 실행과 대조적으로, 매크로 서버 서브-시스템(202) 내에서 발생한다. 스크립트 실행은 일반적인 방식으로 발생할 수 있고, 서브-시스템의 일부는 스크립트의 상기 단계들을 밟아 나가고, 각 단계가 충족됨에 따라 각 단계의 액션들을 수행한다.
단계 422에서 계속이 존재(encounter)했는지에 대한 판정이 행해진다. 만약 계속이 존재했으면, 단계 428에서 계속은 저장된다. 계속은 특정 시간 또는 이벤트가 발생될 때까지 스크립트를 실제로 멈춤시키는데 사용될 수 있다. 계속이 존재하지 않으면, 단계 424에서 에러가 존재했는지 대한 판단이 행해지는 처리를 재개한다. 에러가 존재하지 않으면, 매크로의 실행이 단계 430에서 성공적으로 종료한다. 단계 424에서 에러가 존재하면, 매크로의 실행이 단계 430에서 종료하기 전에, 단계 426에서 사용자가 알게 된다.
따라서 이 프로세스에 의해, 사용자는 클라이언트 디바이스상의 사용자에 의한(또는 다른 이벤트들에 의한) 동작들로부터 트리거된 매크로에 의해 제공되는 기능을 제공받을 수 있고, 매크로는 클라이언트 디바이스로부터 분리된 서브-시스템상에서 실행할 수 있다. 이 실행은, 일부 경우에, 사용자가 온라인이 아닐 때 발생할 수 있고, 매크로 실행의 결과는 사용자 및 그 시스템에 등록된 다른 사용자들이 이용할 수 있게 될 수 있다.
계속들은 스크립트 인터프리터(interpreter)의 실행 상태의 "스냅샷(snapshot)"로서 쓰일 수 있는데, 그 실행이 추후에 재개될 수 있도록 실행을 멈춤시킨다. 이것은 디버거(debugger)에서 브레이크포인트가 동작하는 방법, 또는 표준 브라우저측 실행(예컨대, 자바스크립트)에서 "알림"이 호출되는 방법과 개념적으로 유사하다. 계속들은 인터프리터에서 2진으로 직렬화된 모든 오브젝트들(예컨대, 모든 지역 변수들 및 "빈들")과 현재 실행 포인트로의 포인터로서 구현될 수 있다. 계속들은 스크립트 실행기(208) 내에서 구현될 수 있고, 스크립트 실행기(208)는 공개적 가용 특징들로서 계속들을 가능하게 할 수 있다. 모든 오브젝트들(예컨대, "빈들"을 포함함)은 예를 들어, 자바의 표준 특징인 자바 직렬화를 사용하는 스크립트 실행기(208)에 의해 직렬화될 수 있다. 자바 직렬화를 사용하면, 오브젝트(및 그것들의 차일드 오브젝트 모두)는 바이너리 스트림으로 쓰여질 수 있고, 그 바이너리 스트림은 오브젝트 식별자들과 모든 필드의 현재 값을 포함한다. 매크로가 재개할 때, 스크립트 실행기(208)에는 계속 이진 데이터(continuation binary data)가 주어질 수 있고, 이러한 이진 데이터는 예를 들어 새로운 라이브(live) 자바 오브젝트들로 비-직렬화하는데 사용될 수 있다.
일부 구현예들에서는, 계속들이 데이터베이스에 저장될 수 있다. 계속들은, 예를 들어 매크로가 재개될 때까지, 서버 메모리보다는 데이터베이스에 저장된다. 데이터 베이스에 저장하는 하나의 이유는 계속이 트리거된 시점과 사용자가 실행을 재개시키는(예컨대, 다이얼로그상의 "ok" 버튼을 클릭함으로써 또는 다른 재개 액션에 의해) 시점 사이에 서버가 재시작할 수 있기 때문이다. 일부 구현예들에서, 계속들은 미리 설정된 수명(예컨대, 6시간)을 가질 수 있으며, 이 시간이 지난 후에 계속들은 폐기될 수 있다. 이 방식에서는, 예컨대 사용자가 "ok" 버튼을 클릭하려고 하지 않더라도, 계속이 디스크 공간을 계속해서 점유하지 않는다.
도 4b는 호스트형 시스템상에서 매크로를 기록하고 실행하는 프로세스(431)의 스윔 레인 순서도이다. 예시적 프로세스(431)는 브라우저, 매크로 기록기, 매크로 서버, 및 애플리케이션 간의 상호 동작을 포함한다. 일반적으로, 프로세스는 서버 서브-시스템으로부터 사용자에게 매크로 기록 컨트롤들의 세트를 제공하고, 이로써 그 사용자는 자신과 시스템에 의해 행해진 액션들이 기록되어야만 할 때를 나타내기 위해 컨트롤들을 이용할 수 있고, 이러한 동작들은 매크로가 호출될 때, 동작들을 재실행(re-execute)시키는 매크로를 위한 코드로 재포맷(reformatted)될 수 있다.
매크로 기록기가 사용자에 의해 선택되는 박스 432에서, 프로세스가 시작한다. 이 선택은 예를 들어, 사용자가 매크로를 기록하기 시작하는 컨트롤을 선택했을 때, 브라우저상에서 발생할 수 있다. 매크로 기록기는 단계 434에서 동작한다. 매크로 기록기는 사용자의 브라우저상에서 실행되거나, 매크로 기록기는 원격적으로(예컨대, 매크로 서버 서브-시스템(202)에서) 실행할 수 있다. 매크로 기록기는, 예를 들어 사용자의 클라이언트 디바이스에 애플리케이션을 현재 디스플레이하고 있는 윈도우와 분리된 보더리스 브라우저(borderless browser) 윈도우에 디스플레이될 수 있다. 기록기는 그 밖의 방식으로(예를 들어, iFrame 또는 애플리케이션을 디스플레이하고 있는 동일 페이지의 일부인 동일한 요소에서) 동작될 수 있다.
단계 436에서, 매크로 기록기는 애플리케이션과 함께 디스플레이된다. 예를 들어, 사용자가 자신의 랩탑 컴퓨터상의 브라우저 내에 스프레드시트 애플리케이션을 실행하면, 팝업 또는 다른 디스플레이가 나타나 매크로 기록기를 표현할 수 있다. 매크로 기록기는 기록기의 동작을 제어하는 다양한 컨트롤들(예컨대, 사용자가 선택할 수 있는 기록, 멈춤, 및 정지 버튼들)과 함께 디스플레이될 수 있다. 단계 438에서 기록이 시작되고, 이것은 사용자가 매크로를 정의하는 키스트로크(keystrokes) 등을 시작했음을 의미한다. 이러한 기록은 기록기를 디스플레이하는 코드를 통해 기록기를 동작시키는 서버 서브-시스템에 송신되는 메시지에 의해 트리거될 수 있으며, 사용자가 기록기 상에서 기록 컨트롤을 선택했다는 것을 나타낸다.
단계 440에서, 사용자는 애플리케이션(들)과 상호 작용하며, 이는 사용자가 자신에 의해 사용되고 있는 애플리케이션(들) 내에서 매크로의 기능을 정의하는 동작들(키스트로크들, 선택들 등)을 수행한다는 것을 의미한다. 예를 들어, 사용자는 스프레드시트내 셀들의 범위를 선택할 수 있고, 이들 셀들 상에서 명령들을 실행시킬 수 있고(예컨대, 그것들을 복사하여 붙이고, 그 셀들 안에 식(formulae)을 입력함), 다른 이러한 동작들을 수행할 수 있다.
단계 442에서, 사용자가 애플리케이션(들)과 상호 동작하는 동안, 매크로 기록기는 사용자의 액션들을 기록하기 시작하고, 액션들은 기록 프로세스 동안에 사용자에 의해 기록되는 대로의 명령들을 디스플레이하는 것을 포함할 수 있다. 상술한 바와 같이, 기록기는 애플리케이션(들)이 사용자 입력들을 해석하는 것과 같은 방식으로 사용자 입력들을 해석하고, 이와 같이 해석된 액션들을 명령들로 전환할 수 있으며, 구동되었을 때 매크로는 이 명령들을 애플리케이션들에 추후 제공할 수 있다. 기록기는 사용자가 명령들을 수행하는 애플리케이션(예컨대, 브라우저 윈도우)을 추적하고, 따라서 매크로는 구동되었을 때 이러한 다양한 다른 애플리케이션들에게 명령들을 제공해야 한다는 것을 안다.
사용자가 애플리케이션(들)과 상호 동작하고, 액션들이 기록되는 동안, 단계 444에서 사용자 액션들의 표준 실행이 제공된다. 이 실행은 사용자가 상호 동작하는 애플리케이션(들) 내에서 발생될 수 있다. 따라서 사용자의 액션들이 애플리케이션들과 매크로 기록기에 병렬로 제공될 수 있어서, 그 액션들이 기록되고, 또한 애플리케이션들은 적절한 방식으로 그 액션들에 반응한다.
매크로에 대한 정의가 완료되면, 저장 명령이, 예를 들어 기록기에 있는 "완료(Done)" 키, "정지(stop)", 또는 다른 컨트롤을 누름으로써 사용자로부터 수신된다. 단계 448에서, 매크로에 대한 정보가 송신된다. 이러한 정보는 사용자가 명령을 실행하기 때문에, 기록시에는 매크로 명령들로 해석되거나, 매크로 기록이 정지했을 때 해석되어 변환될 수 있다. 이어, 매크로 기록기는 그 정보를, 예를 들어 매크로 저장소에 송신할 수 있고, 코드가 추후 쉽게 액세스될 수 있도록 하기 위해, 매크로 코드로의 하나 이상의 포인터들(예컨대, URL의)을 생성할 수 있다. 예를 들어, 매크로 기록기는 사용자에게 추후 매크로를 개시시키는데 사용될 키 조합을 식별하도록 요청할 수 있다.
단계 450에서, 라이브러리명(매크로가 저장된), 스트립트 또는 매크로 콘텐츠들(매크로 기록기에 의해 기록되는 것과 같음), 및 사용자 ID를 포함하는 매크로 정보가 저장된다. 또한 다른 정보가 저장되고, 적절하게 매크로와 상관될 수 있다.
나중에, 몇 분 후 또는 몇 일에서 몇 년 이후에, 사용자가 매크로를 구동하기로 결정할 때, 사용자는 구동할 매크로를 특정할 수 있다. 매크로의 선택은, 예를 들어 사용자가 최근에 상호 동작한 애플리케이션(들)을 의해 정의된 매크로 목록으로부터 매크로명을 선택함으로써 달성될 수 있다. 예를 들어, 사용자가 액세스할 수 있는 매크로들의 목록은 사용자의 계정에 연계되어 저장될 수 있고, 목록(각 매크로의 작성자가 매크로를 위해 이해하기 쉬운 이름을 부여했음)으로 사용자에게 디스플레이될 수 있다. 대안적으로, 매크로의 선택은, 예를 들어 다른 매크로의 실행에 의하거나, 특정 사용자에 의한 액션에 독립적인 시스템상에서의 이벤트 발생에 의하거나, 또는 다른 방식들로 자동적으로 행해질 수 있다. 또한 사용자는, 예를 들어 첫 번째 사용자가 매크로에 접근 권한을 주고자 했던 다른 사용자들의 이메일 주소 또는 다른 계정 식별자들의 입력을 촉구 받음으로써, 저장된 매크로를 다른 사용자들이 사용할 수 있게 할 수 있다. 또한 사용자는, 예를 들어 메시징 그룹(예컨대, 이메일 리스트) 또는 특정 도메인이나 서브-도메인에 대한 모든 사용자들(예컨대, 사용자들의 고용주 신분으로 시스템을 액세스하는 모든 사용자들)을 대해 지시함으로써, 다른 사용자들의 그룹을 제공할 수 있다.
예를 들어, 단계 452a에서 매크로를 구동하기 위한 입력이, 예를 들어 사용자로부터 선택적으로 수신될 수 있다. 대안적으로, 단계 452b에서 매크로를 구동하기 위한 트리거 이벤트가 발생될 수 있다. 이 두 매카니즘 중 어느 것에 의해, 단계 454에서 매크로에 상응하는 매크로 코드가 수신되고 실행된다.
매크로 실행의 초기 단계에서, 단계 456에서 매크로에 연계되는 애플리케이션(들)에 상응하는 API들에 대한 오브젝트들이 생성된다. 이러한 오브젝트들은 매크로를 실행하는데 필요한 오브젝트들을 표현할 수 있고, 예를 들어 명령들을 하나의 포맷에서 다른 포맷으로 변환하는 오브젝트들, 다른 오브젝트들을 래핑하는 오브젝트들, 오브젝트들을 이용하는 할당, 및 다른 이러한 오브젝트들을 포함할 수 있다.
단계 458에서 이 오브젝트들은 보안 래퍼로 래핑된다. 이러한 래핑은 상술된 메카니즘들에 의해 발생될 수 있고, 사용자를 시스템상의 악성 코드의 실행으로부터 보호하기 위해 사용될 수 있다.
단계 460에서, 애플리케이션은 사용자 ID로 호출(call, 즉 인보크(invoke) 또는 실행)된다. 애플리케이션 호출은 매크로 서버 서브-시스템(202)에 의해 수행될 수 있다. 예컨대 사용자가 특정 파일을 읽기, 업데이트, 또는 삭제 등에 권한이 있다는 것을 보장함으로써 인가들을 체크하기 위해, 사용자 ID가 호출에 포함될 수 있다.
단계 462에서, 호출된 애플리케이션들에서 수행될 단계들에 관련되는 액션들이 수행된다. 예를 들어, 액션들은 기록된 매크로에 기록된 단계들 또는 명령들 각각에 상응할 수 있다. 이 단계들의 실행은 애플리케이션에서 발생하고, 그 애플리케이션은 매크로가 기록된 브라우저로부터 물리적으로 떨어질 수 있다. 실제로는, 매크로는 일부 예시들에서 다른 브라우저상에서 완전히 다른 사용자들에 의해 기록되고 저장되었을 수 있다. 이러한 경우, 다른 사용자는 처음에 그 매크로를 기록한 사용자에 의해 매크로를 사용할 수 있도록 허가받은 친구나 가족 구성원일 수 있다.
단계 464에서, 추가적인 실행을 위해 필요한 키들이 반환된다. 이러한 키들은, 예를 들어 사용자에 의해 제공된 입력들, 또는 애플리케이션 자체에 의해 전달된 파라메터들을 포함할 수 있다. 타겟 애플리케이션(예컨대, 스프레드시트 애플리케이션)으로부터 반환된 "키들"은 주어진 명령의 결과로서 상태가 변환된 임의 아이템들을 식별할 수 있다. 예를 들어, 명령 INSERT_SHEET는 "현재(current)"시트가 되는 새로운 시트를 만들 수 있다. 매크로는 새로운, 현재 시트들을 반영하도록 동작할 수 있는 다른 명령들(예컨대, getActiveSheet)을 가질 수 있다. 다른 명령들(예컨대, INSERT_ROW)은 현재 선택을 변화시킬 수 있어, 셀들을 현재 활성화된 셀들로 변화시킨다. 임의의 후속 명령들(예컨대, getActiveSelection)이 정보를 필요로 할 경우를 대비하여 저장하기 위해, 현재 상태 및 선택 데이터가 매크로에 반환될 수 있다.
단계들 460, 462, 및 464는 매크로가 완료될 때까지 비교적 동시에 계속해서 실행될 수 있다. 단계 462에서 마지막 지시가 도래되어 실행되거나, 또는 매크로의 실행중에 이벤트가 매크로의 실행을 중단시킬 때, 종료가 발생할 수 있다.
도 5는 매크로 시스템에서의 오브젝트들을 위한 예시적 구조, 특히, 도 2에 도시된 스크립트 정보 저장소(206)와 같은 구조로 정보에 대한 예시적 논리 구조를 나타낸다. 논리적 구조(500)는 노드들(502 내지 508)로 표현된다. 스크립트 정보 저장소(206)에 저장된 임의의 한 매크로에 대하여, 예를 들면, 적어도 하나의 구조(500) 또는 그 구조의 부분들이 있을 수 있다. 계속 노드(504), 링크 노드(506), 및 사용자 인가 노드(508)는 사용자 라이브러리 노드(502)에 대해 모두 0… N 관계(relationship)를 갖으며, 이는 각 사용자 라이브러리(또는 헤더) 노드에 대해 임의 개수(0을 포함함)의 계속, 링크, 및 사용자 인가가 존재한다는 것을 의미한다.
구조의 루트 노드는 사용자 라이브러리 노드(502)이고, 그 노드(502)는 예를 들어 매크로명 및/또는 라이브러리명(예컨대, "댄의 클라우드 기반 MacroLib"에 있는 "Macro_XYZ"), 매크로 라이브러리의 소유자(예컨대, "댄"), 및 매크로와 연계된 스크립트(예컨대, 매크로 코드)를 정의한다. 각 매크로 라이브러리는 고유한 식별자(예컨대, 64-비트 의사-난수(64-bit pseudo-random number))를 가지는데, 이 고유한 식별자는 데이터베이스 1차 키로서 쓰일 수도 있다. 일부 구현예들에서는, 라이브러리명과 같은 필드들과 2 라이브러리내에 포함된 함수들의 세트들은 데이터베이스에서 매크로를 검색할 때 사용되지 않고, 매크로 라이브러리를 구동/디스플레이할 때에 정확하게 사용하기 위한 것이다. "소유자" 필드는 예를 들어, "사용자 XYZ가 소유하고 있는 모든 매크로를 가져오기"와 같은 동작들에서 외래 키(foreign key)로서 사용될 수 있다. 링크 테이블은, 예를 들어 "문서 XYZ가 사용하는 모든 매크로를 가져오기"와 같은 동작들에서 사용될 수 있다.
계속 노드(504)는 계속 ID, 계속 데이터(예컨대, 매크로가 대기 상태로 진입한 후에 추가 입력들로 매크로를 재개시키기 위한 추가 항목 포인트들로부터), 및 사용자 이름(예컨대, 계속 노드(504)를 만든 사용자)를 포함할 수 있다. 복수의 계속 노드(504)가 주어진 매크로를 위해 존재할 수 있다. 계속의 "소유자"는, 세션 하이재킹(session hijacking)을 방지하기 위해 우선적으로 기록될 수 있고, 따라서 예를 들어 사용자 X는 구동되고 있었던 매크로를 사용자 Y의 명의로 재개할 수 없다. 이 방법으로, 동작들은 자신들이 개시하였던 매크로를 사용자 Y만이 재개시키는 것을 보장할 수 있다. 복수의 이러한 기록들이 허용되는데, 한 명의 사용자가 여러 개의 계속(예컨대, 각각이 활성 프롬프팅 대화 상자를 갖는, 분리된 윈도우에 열려있는 3개의 스프레드시트)을 가질 수 있기 때문이다. 복수의 사용자들은 또한 자신의 다이얼로그 프롬트가 각각 있는, 하나의 매크로에 대한 자신의 인스턴스를 동시에 구동할 수 있다.
링크 노드(504)는 외부 엔티티(outside entity)들이 매크로에 링크하는 것을 허용한다. 링크 노드(504)는 문서 ID를 포함하며, 이 문서 ID는 매크로를 "가리키는(points to)" 다른 경로명 또는 URL일 수 있다. 동일한 매크로에 대한 여러 다른 이름들(및 그 매크로에 대한 여러 다른 URL 경로 또는 다른 경로들)이 존재할 수 있기 때문에, 복수의 링크 노드들(506)이 존재할 수 있다.
사용자 인가 노드(508)는 매크로에 대한 제한된 액세스를 허용하는 정보를 포함할 수 있다. 예를 들어, 제한 프로토버퍼 필드(restriction protobuffer field)는 프로토콜 패턴값을 사용하여 액세스를 제어할 수 있고, 사용자 필드는 사용자 ID에 기초하여 액세스를 제어할 수 있다. 둘 중 하나 또는 둘 모두는 각 노드(508)에서 사용될 수 있다. 하나의 주어진 매크로를 위해 복수의 사용자 인가 노드(508)가 존재할 수 있고, 각 인가 노드는 다른 인증 레벨을 식별한다. 사용자 인가 노드(508)는 사용자 마다, 매크로마다 오직 하나의 인가 레코드(authorization record)만이 존재하도록 강제(enforce)할 수 있다. 이 강제는 매크로의 실행 및 매크로가 할 수 있는 일들에 대한 사용자의 승인 스탬프의 표현을 사용할 수 있다. 복수의 레코드들이 허용될 수 있는데, 복수의 다른 사용자가 그 매크로를 각각 인가하고, 각 사용자는 매크로가 실행할 다른 동작들을 인가할 수 있기 때문이다. 사용자 X가 매크로를 실행할 때, 그 매크로를 위한 자신의 인가 레코드가 추출(pull up)되고, 모든 다른 것들은 무시된다.
매크로를 위한 요구 사항들이 수정되어(예컨대, 작성자가 블로거에 호출을 추가함) 매크로가 구동할 필요가 있는 요구 사항들이 변경되면, 기존 사용자 인가들은 무효(invaild)로 표기될 수 있다. 그 결과로서, 사용자가 추가 요구사항들을 추가한 후 매크로를 재실행하려고 하는 경우, 그들은 인가을 위해 재촉구를 받을 수 있다. 예를 들어, 프롬프트는 "이 매크로는 달력 및 블로거에 대한 액세스를 요구 합니다"라고 할 수 있는데, 이전에는 매크로가 간단하게 "이 매크로는 달력에 대한 액세스를 요구 합니다."로 했을 수 있다. 재-인증을 위한 촉구는 서비스가 삭제되는 경우에는 필요하지 않고, 요구 사항들이 증가하는 경우에만 필요할 수 있다.
도 6은 매크로 구성 시스템(600)의 예시적 스크린샷을 나타낸다. 사용자는, 예를 들어 외부 이벤트에 기초하여 순차 실행되거나, 사용자가 선택하였을 때 수동으로 구동할 수 있는 매크로들을 위한 규칙들과 파라미터들을 설정하기 위해 이 시스템을 사용할 수 있다. 일반적으로, 이 시스템은 스크린샷의 열에 도시된 3개의 부분으로 매크로 구성을 구조화하고, 각 부분(각 부분 내에는 서브-부분들이 포함됨)은 그 앞 부분이 구성됨에 따라서 변화할 수 있다. 이러한 시스템을 사용하여, 사용자는 매크로를 위한 트리거, 선택된 트리거들에 관련된 가용 파라미터들로부터 매크로를 동작시키기 위한 파라미터, 및 선택된 파라미터들에 상응하는 매크로의 결과를 빠르게 식별할 수 있다.
일 예시에서, 사용자는 이메일-관련 이벤트들에 기초하여 이메일 기능을 수행하는 매크로를 구성할 수 있다. 다른 예시에서, 매크로는 비-이메일-관련 애플리케이션들(예컨대, 스프레드시트들, 워드 프로세싱 애플리케이션들 등)에서 동작들을 수행하도록 구성될 수 있다. 또 다른 예시에서, 사용자는 출력이 있지만, 어떤 트리거 이벤트에도 종속되지 않는 매크로를 구성할 수 있다. 트리거들 또는 출력들인 애플리케이션의 유형에 관계없이, 스크린상에서의 간단한 사용자 선택에 의해 상응하는 매크로를 자동으로 구성할 수 있다. 스크린 "이면(behind)"에서 구동중인 소프트웨어 애플리케이션은, 예를 들어 도 6의 스크린샷에 도시된 인터페이스상에서 사용자 입력 및 선택을 처리할 수 있고, 적절한 매크로 구문, 다양한 애플리케이션- 및 언어- 특정 API 호출들, 및 매크로의 구동을 위해 요구된 매크로의 다른 구성요소들의 삽입을 포함하여, 매크로를 자동적으로 구성할 수 있다. 이것들 모두는 사용자에게 투명할 수 있고, 그 사용자는 이해하기 쉬운 약간의 필드들에 간단하게 입력할 수 있다.
스크린샷(600)은 현재 구성되고 있는 매크로를 식별하는(예컨대, 사용자에 의해 초기에 정의되거나, 또는 추후 업데이트됨) 매크로명 필드(601)를 포함한다. 상술한 바와 같이, 매크로를 위한 정의는 매크로 트리거 데이터 영역(602), 매크로 프로세싱 데이터 영역(604), 및 매크로 출력 데이터 영역(606)으로 된 3개의 일반적인 영역에서 발생할 수 있다. 매크로 트리거 데이터 영역(602)은 매크로가 트리거되어질 조건들과 이벤트를 결정하고 식별하기 위해 사용자가 이용할 수 있는 컨트롤들 및 필드들을 포함할 수 있다. 매크로 처리 데이터 영역(604)은 매크로가 구동될 때 발생할 처리를 정의하는데 사용될 수 있다. 매크로 출력 데이터 영역(606)은 매크로의 출력(예컨대, 매크로가 작용할 애플리케이션 데이터의 유형과, 그 데이터에 대해 발생될 액션(또는 동작))을 식별할 수 있다. 데이터 영역(602-606) 외에 다른 데이터 정의 영역(예컨대, 복수의 애플리케이션에 있는 데이터가 동일한 매크로에 의해 업데이트되어야 하는 경우, 복수의 매크로 출력 데이터 영역)들이 존재할 수 있다. 일부 구현예들에서, 커미트(commit)/롤백 기술들이 데이터 무결성(data integrity)을 유지하는데 도움을 줄 수 있는, 모든 업데이트들이 행해지거나, 또는 전혀 행해지지 않았다는 것을 보증하는데 사용될 수 있다.
3개의 데이터 영역(602, 604, 및 606)은 일반적으로 순차로 완료되도록 설계될 수 있다. 일부 구현예들에서, 한 영역에서 사용자에 의해 선택된 값들은 아래에 있는 필드 또는 컨트롤상에 디스플레이되는 것에 영향을 주거나 그 영역의 권한에 영향을 줄 수 있다. 예를 들어, 매크로 트리거 데이터 영역(602)에 입력된 데이터는 다른 영역들(예컨대, 데이터 영역들(604, 606))에 디스플레이되는(및 사용자-선택가능) 데이터 선택들 및 필드들의 유형에 영향을 준다. 예를 들어, 사용자가 매크로의 트리거링 메커니즘으로서 "이메일"을 선택하면(예컨대, 속성(property) 필드(608)에서 이메일을 특정하거나 선택함으로써), 매크로 프로세싱 데이터 영역(604)에서 이용할 수 있는 옵션들이 이메일 속성들에 맞춰질 수 있다.
이 예시에서 묘사된 것처럼, 매크로 트리거 데이터 영역(602)은 속성 필드(608), 액티비티(activity) 필드(610), 및 파라미터 필드(611)를 포함한다. 액티비티 필드(610)에서 디스플레이되는(및 사용자에 의해 선택가능함) 값은 속성 필드(608)에서의 사용자 선택에 따라 달라진다. 예를 들어, 속성 필드(608)에서 "이메일"을 선택하면, 액티비티 필드(610)의 값들은 이메일-관련 옵션들(예컨대, 수신 메시지, 받은 편지함 크기, 태그 크기 등)을 포함한다. 다른 속성(예컨대, 온라인 경매)에 대한 선택은 액티비티 필드(610)에 항목들의 다른 목록(예컨대, 아이템 금액, 아이템 카테고리 등)을 디스플레이할 수 있다. 파라미터 필드(611)는 액티비티에 값을 할당하는데 사용될 수 있다. 사용자가 파라미터 필드(611)에 입력하거나 선택할 수 있는 잠재적 값들은, 예를 들어, 크기, 색상, 달러 금액, 기간, 언어, 성별, 또는 특정 애플리케이션에 적합한 대략적인 양적 또는 질적 값을 포함할 수 있다. 일부 구현예들에서, 파라미터 필드(611)상의 라벨은 액티비티 필드(610)의 값에 따라서 자동적으로 라벨링(예컨대, 크기, 색상, 가격 등)될 수 있다.
매크로 프로세싱 데이터 영역(604)은 조건 필드(612), 체크 서비스 필드(614), 및 서비스 값 필드(616)를 포함한다. 조건 필드(612)는 매크로에 의해 소정 액션들을 트리거할 조건(예를 들어, 특정 방식으로 수신 이메일을 전달함)들을 식별하기 위한 옵션들을 디스플레이한다. 조건 필드(612)에 디스플레이되는 정확한 값들 (예컨대, "사용자로부터" 또는 "그룹의 사용자로부터" 등)은, 예를 들어 속성 필드(608)의 사용자의 입력(예컨대, "이메일")에 따라 달라진다. 사용자가 속성 필드(608)에 대해 다른 값(예컨대, "스프레드시트")을 선택하면, 값의 다른 세트(예컨대, 스프레드시트에 관련됨)가 조건 필드(612)에 디스플레이될 수 있다.
체크 서비스 필드(614)는 애플리케이션 및 매크로에 외적인 서비스를 식별할 수 있으며, 매크로의 구동을 위한 정보를 수집하는데 있어서 매크로는 이러한 서비스를 체크할 수 있다. 예를 들어, 체크 서비스 필드(614)에서 "위치(Locator)"를 선택함으로써, 사용자는 매크로가 실행하는 동안, 보낸 사람의 위치, 사용자 X의 위치, 또는 이메일의 카본 카피 라인(carbon copy line)에 나열된 특정 사용자의 위치, 또는 다른 선택들을 체크해야만 한다는 것을 정의할 수 있다. 서비스 값 필드(616)는 참조된 서비스 또는 서비스들로부터 매크로로 반환되어야 할 특정 값들이 무엇인지를 식별한다. 이 예시에서 위치들은, 예를 들어 준 실시간 GPS 위치들, 셀룰러 전화 삼각 측량(cellular telephone triangulation)에 의해 추적된 위치들, 거리 주소, 우편 번호, 또는 기타 적절한 위치 기준(criteria)에 기초할 수 있다.
일부 구현예에서는, 매크로 프로세싱 데이터 영역(604)은 매크로에 부울 연산자(Boolean operator)들을 사용하기 위하여 다양한 메커니즘들을 포함할 수 있다. 이러한 메커니즘들은 조건 필드(612) 및 체크 서비스 필드(614)를 가짐으로써 제안되는 암시적 "AND" 외의 것일 수 있다. 예를 들어, 조건 필드(612)는 라디오 버튼(radio button)들로 묘사된 임의/모든 컨트롤(617)의 세트와 함께 사용될 수 있으며, 명시적 AND/OR 연산자와 논리에 대한 지정(specification)을 용이하게 할 수 있다. 예를 들어, 매크로를 위해 고려되어야 하는 체크 서비스 필드(614)에서 체크되는 임의(또는 모든) 각각의 옵션들을 특정하기 위해 사용자는 임의/모든 컨트롤(617)의 "임의(Any)" (또는 "모든(all)") 옵션을 선택할 수 있다.
일부 구현예들에서는, 추가 부울 컨트롤들 및 필드들(예컨대, 필드명의 스트레이트 텍스트 입력(straight text input), 필드값, 부울 연산자들 및 적절히 배치되는 괄호(well-placed parenthese)들)이 매크로 구성 시스템(600) 상에서 다른 필드들 등을 위해 제공될 수 있다. 더욱 개량된 컨트롤들의 유형들은, 예를 들어 고급 부울 컨트롤(618)을 선택함으로써 도달할 수 있는 다른 인터페이스들 또는 스크린들 상에 포함될 수 있다. 일부 구현예들에서, 고급 부울 컨트롤(618)에 액세싱하면 사용자는 전체 매크로에 대한 기존 로직을 볼 수 있고, 예를 들어 데이터 영역들(602-606)에 입력된 입력들 및 업데이트된 사용자 선택들로 표현되는 현재 논리를 포함할 수 있다. 시스템(600)은 자동 구문 체크들을 수행하고, 사용자에 의해 입력된(또는 리스트로부터 선택된) 필드들이 대조되는 값들과 호환가능한지를 검증할 수 있다.
매크로 출력 데이터 영역(606)은 속성 필드(620), 액션 필드(622), 및 파라미터 필드(624)를 포함한다. 이 필드들은, 예를 들어 매크로의 특정 출력(예컨대, 이것을 수행함(do this), 이것을 송신함(send that), 특정 파일을 업데이트, 필드 또는 스프레드시트 호출)을 지정하기 위해 사용될 수 있다. 도 6에 도시된 예시에서, "이메일"이 속성(620)을 위해 선택되어, 액션 필드(622)에는 이메일 관련 항목들이 디스플레이된다. 따라서 이 매크로를 위한 출력은 어떤 형태의 이메일을 어떤 주소 또는 주소들로 송신하는 것이다.
파라미터 필드(624)는 필드 또는 선택에 값을 할당하기 위해, 필요할 때(예를 들어, 상술된 선택들 및 필드들에 기초함) 사용될 수 있다. 일부 구현예들에서, 필드명에 대한 더블 클릭은 그 필드를 위한 값을 정의하기 위한 팝업을 디스플레이할 수 있고, 필드 위에 머무르는 것(hovering)이 그 필드의 현재 값을 디스플레이할 수 있도록 하기 위해, 필드들의 값이 "이면(behind)" 필드에 정의될 수 있다.
도 6에 묘사된 예시적 매크로 구성 스크린에서, 매크로 트리거 데이터 영역(602)은 "수신 메시지"(예컨대, 액티비티 필드(610)에서 식별됨)가 이메일 애플리케이션(예컨대, 속성 필드(608)마다)에 의해 수신될 때, 매크로를 트리거하도록 정의된다. 매크로 프로세싱 데이터 영역(604)은 특정 사용자들을 특정하고, 이메일 본문에 포함된 특정 단어들을 포함하며, 사용자 X의 위치에 기초하는 조건(612)을 포함한다. 이러한 조건의 값들은, 예를 들어 다른 파라미터 필드들(도 6에 도시되지 않음)에 정의될 수 있다. 따라서 이러한 조건들이 충족하면, 매크로가 완료하도록 실행할 것이다. 매크로 출력 데이터 영역(606)은 "이메일"이 현재 매크로의 출력 유형이고, 수행되어질 액션은 "텍스트 미(text me: 예컨대, 액션 필드(622)에서 정의된 바와 같음)라는 것을 보여준다. 데이터 영역(602-606)에 입력된 값들에 따라서, 특정 사용자로부터 수신되고, 제목란에 특정 단어들이 포함되어 있으며, 또한 사용자 X의 위치에 기초하는 수신 이메일 메시지의 트리거밍 이벤트가 검출되면, 매크로는 메시징 애플리케이션을 사용하여 텍스트 메시지를 수신 이메일의 타겟으로 송신하고, 이러한 이메일이 수신되었음을 사용자에게 알린다. 예시적 매크로 구성 스크린의 장점은 이 스크린이 기능을 수행하는 기본 매크로를 숨기면서, 간단한 GUI 포맷으로 사용자에게 이 정보를 제공하고, 사용자는 심지어 매크로를 작성하는 방법 또는 매크로를 인지하는 방법을 알 필요가 없다는 것이다. 스크린은 전체 매크로를 구성하거나 또는 매크로의 일부를 구성하는데 사용될 수 있으며, 사용자는 스크린에 의해 제공될 수 없는 다른 코드를 매크로에 추가할 수 있다.
매크로들을 정의하는 사용자 인터페이스는 예를 들어, 입력 또는 업데이트 중인 매크로를 "저장(save)", 그 매크로에 대한 하나 이상의 업데이트 또는 수정을 "이전 상태로 돌리기(undo)", 매크로 결과를 "디스플레이", 저장하지 않고 편집을 "취소"하기 위한 버튼들 또는 컨트롤들(626)을 포함할 수 있다. 복사하기(copy from)" 필드(628)는 사용자가, 이후에 변경할 수 있는 초기 상태로 스크린을 미리-설정하기 위해, 기존 매크로들에 대한 파라미터들을 복사하거나 기존 매크로를 복사하여 새로운 매크로를 생성 및 정의할 수 있도록 한다. 설명 필드(630)는 사용자가 매크로의 목적을 기록하고, 매크로명으로 캡쳐되지 않은 매크로에 대한 어느 정도의 의미 레벨을 제공할 수 있게 한다.
일부 구현예에서, 매크로 정의들은 예컨대, 매크로가 처음으로 유효해질 때에 대한 유효 날짜(632), 매크로가 더 이상 실행되지 않을 때에 대한 만료 날짜(634), 및 예를 들어, 매크로가 실행될 요일(평일, 월요일, 주말 등)을 특정하는데 사용될 수 있는 스케줄 또는 "구동(run on)" 필드(636)와 같이, 그 자신들과 연계된 시간 요소들을 가질 수 있다. 날짜 필드는 특정 날짜 또는 날짜 범위 및/또는 시간들을 포함할 수 있고, 또는 열거 유형(enumeration type)들(예컨대, 지금, 하지 않음, 평일 등)을 포함할 수 있다.
일부 구현예들에서, 시스템(600)에 의해 제공되는 사용자 인터페이스는 스마트폰 등과 같은 소형 디스플레이를 가진 사용자 디바이스에서 실행되도록 적응될 수 있다. 예를 들어,데이터 영역들(602 내지 606)과 다른 필드들이 차례로 제공될 수 있다. 일부 구현예에서는, 스크롤 바들이 사용자가 한 번에 하나의 일반 영역(general area)으로 이동할 수 있도록, 전체 스크린을 위해 제공될 수 있다.
시스템(600)을 사용하여 구성되는 매크로들은 시스템들(100, 200)과 도 1, 2를 참조하여 상술된 보안 측면과 함께 사용될 수 있다. 특히, 각 구성된 매크로는 캐퍼빌리티-기반 보안 래퍼들로 래핑되어 있다. 시스템(600)은, 예를 들어 매크로들을 사용할 수 있는 다른 사용자들의 이름과 그들이 동작들(예컨대, 이메일 보내기, 스프레드시트 업데이트 등)을 수행할 수 있는 정도(extent)를 포함하는 보안 필드(도시하지 않음)을 가져서 보안을 지원할 수 있다.
이러한 캐퍼빌리티-기반 보안은 실행을 위해 코드를 인가할 때 사용자의 의도를 고려함으로써 이득들을 제공할 수 있다. 이러한 시스템에서, 예로서, 캐퍼빌리티라 불리는 사용자 생성 오브젝트들을 실행하는 것은 사용자가 허용하고자 하고 동작들을 캡슐화하고, 실행될 비-신뢰 코드에 이러한 오브젝트들을 전달한다. 이러한 오브젝트들은 비-신뢰 코드가 시스템에 의해 실행될 때, 페이로드의 일부(예컨대, 래퍼의 일부)가 되고, 비-신뢰 코드에 의해 수정가능하거나 생성가능하지 않다. 비-신뢰 코드가 신뢰할 수 있는 기본(underlying) 리소스(예컨대, 종래 파일 시스템 등)에 액세스를 시도할 때, 사용자에 의해 생성되었고 또한 신뢰할 수 있는 리소스를 래핑하는 오브젝트를 통해서만 액세스를 할 수 있다. 캐퍼빌리티들은 액세스에 대한 세밀한 컨트롤(fine-grained control)이 비-신뢰 코드에 허용되는 것을 허락할 수 있고, 최소 특권의 법칙(the principle of least privilege)을 준수하는 실행 환경을 구성하기 위해 사용될 수 있다. 이는 임의의 주어진 모듈이 그것이 기능을 수행할 수 있게 하기 위해 필요한 액션들의 최소 세트만을 수행하고, 더 이상은 수행하지 않는다는 것을 의미한다.
호스트형 매크로-기반 시스템에 관한 예시적 시스템 및 프로세스를 설명하였으며, 후술하는 단락들은 이러한 시스템 및 프로세스를 사용하는 일련의 예시들을 설명하는데, 대부분은 시스템이 각 경우를 처리하기 위해 캐퍼빌리티-기반 보안을 사용하는 방법과, 이러한 예시의 일부가 될 수 있는 일부 리스크를 완화시키는 방법에 대해 논의한다.
예제 # 1: 영업 정책 시행( Sales Policy Enforcement )
조직의 영업부에서 잠재적 클라이언트들을 위한 기획안을 스프레드시트에 작성하는 시나리오를 고려한다. 스프레드시트는 회사가 생산하는 모든 제품의 가격과 특징들을 포함하고 있다. 영업 사원이 시트를 아래로 내리면서, 특징 옆에 있는 열에 1과 0으로 활성 또는 비활성(즉, 현재 판매할 수 있는지)으로서 특징을 표기할 수 있다. 이 시트는 다양한 할인 혜택과 가격 배율(price multiplier)을 포함하여 가격을 계산하는 수식을 포함할 수 있다.
예를 들어, 상호 배타적일 수 있는 일부 특징들을 포함하는 라인 아이템들 간에 많은 종속성(dependence)이 있을 수 있다. 이러한 규칙들이 매크로로서 표현될 수 있다. 대안적으로, 규칙들은 규칙을 시행하기 위해 시트에 첨부되는 매크로들내에 컴파일되는 규칙 언어(rule language)로 표현될 수 있다. 추가 규칙들은 오류 체크 및 다른 일관성 체크(consistency check)를 포함할 수 있다. 또한, 지역 또는 기타 인자들에 기초하여 트리거된 이벤트들 또는 프로모션(promotion)들에 연관되는 규칙들이 있을 수 있다.
이러한 규칙들에 관해서 고려해야 할 한 가지는 그것들이 관리되는 방법이다. 예를 들어, 관리자가 시트내에서 값들을 빠르게 업데이트할 수 있도록 하기 위해, 그 시트가 참조하는 공유형 라이브러리(shared library)에 상주하는 매크로들 및/또는 규칙들을 갖는 것이 유익할 수 있다. 또한, 매크로가, 시스템 관리자가 다양한 소규모 자영업자에게 제공하는 도구 제품군(suite of tools)의 일부여야만 하고, 이러한 사용자 각각이 매크로에 액세스하고 실행하는 것을 허용할 수 있다. 관리자는 호스트형 시스템상의 중앙 위치에서 업데이트되는 매크로를 유지할 수 있고, 사용자들은 그 위치로부터 매크로를 모두 실행할 수 있다.
따라서 매크로는 매크로에 액세스하는 각 스프레드시트를 위한 단일 "슬롯"으로, 공유형 모드에서 공개될 수 있다. 다른 사용자는 매크로를 가리키는 URL을 자신의 스프레드시트에 포함시킴으로써, 자신의 스프레드시트에 매크로를 임포트할 수 있고, 그 스프레드시트에 기록할 수 있는 권한을 그 매크로에 허락할 수 있다.
예제 #2: 투자 사용자 인터페이스( Investment User Interface )
외부 서비스로부터 주식 시세(stock quote)를 가져와서, 추천(예를 들어, 구매, 보유 등)을 생성하기 위한 스프레드 시트에 주식 시세들을 삽입하고 싶어하는, 투자 회사가 스프레드시트에 가격 모델(pricing model)들을 갖는 시나리오를 고려한다.
스크립트는 스프레시트에서 읽고 쓸 수 있어야 하고, 외부 주식 시세 서비스에 액세스할 필요가 있을 수 있다. 작성자는 스크립트를 특정 주식 시세 서비스에만 제한하는 스크립트 액세스(script access)를 승인할 수 있다. 작성자가 슬롯을 빈 상태로 유지하면, 서비스를 인보크하는 사용자는 서비스를 접속하기 위한 권한을 스크립트가 허락받았는지에 대한 여부뿐만 아니라, 접속해야 할 특정 서비스에 대해서도 질문을 받는다. 그렇게 하면, 사용자는 스크립트가 할 수 있는 일을 제한할 수 있고, 스크립트는 임의의 다른 서비스에 접속할 수 없게 될 것이다.
만약 사용자가 이 매크로를 자신의 스프레드시트에 포함하기 위해(예컨대, 매크로를 참조하지 않고 매크로를 복사하기 위해) 다른 사용자들과 공유하고 싶어했으면, 다른 사용자들은 외부 증권 시세 서비스에 액세스하는 권한이 필요하다. 사용자가 중앙 위치에 있는 매크로에 다른 사용자들이 지시하는 것을 허용함으로써 매크로를 공유하면, 사용자들은 그들 자신이 외부 주식 시세 서비스에 접속하는 권한을 갖지 않더라도 그 매크로를 이용할 수 있다. 이상황에서, 스크립트 자체가 갖는 권한을 허락받을 수 있다(그들이 자신의 스크립트로부터 그 서비스에 액세스할 수 없더라도).
예제 #3: 사고 보고( Accident Reporting )
버스 운송 회사가 버스의 사고 보고를 자동으로 하는데 관심을 갖는 경우의 시나리오를 고려한다. 사고를 낸 운전자는 정보(예컨대, 버스의 위치 등)을 기록하는 스프레드시트에 있는 항목을 기재하기 위하여 호스트형 서비스에 액세스할 수 있다. 매크로는 그 보고를, 그것들을 검토하는 여러 감독자에게 전송하는데 사용될 수 있다.
매크로는 관리자를 식별하고(예컨대, 매크로가 액세스해야 할 다른 스프레드시트, 데이터베이스 쿼리 등을 통해), 법률 부서의 정확한 이메일 주소를 생성하고, 이메일을 보내는 것뿐만 아니라 이 문서를 그들과 공유하고, 및 다른 스프레드시트(예컨대, 사고 보고들이 계류중인 레코드를 포함하는 스프레드시트)에 액세스할 필요가 있을 수 있다. 이 사람들은 추가로 스프레드시트를 편집하고, 매크로를 앞으로 이동시키는 이벤트를 트리거시킬 필요가 있을 것이다. 매크로는 특정 사용자가 매크로의 단계를 처리할 때마다 멈춘 후에, 다음 사용자가 선택할 때까지 기다리도록, 매크로를 계속 모드로 구동할 수 있다. 이벤트에 의해 어웨이크(awake)되었을 때, 그 문서 상에서 누가 사인 오프(sign off: 예컨대, 문서 그 자체에 기록되거나, 매크로로 송신된 이벤트에 있는 정보에 기록됨)했는지를 확인하기 위해 체크할 수 있고, 매크로가 사건이 완전하게 처리되었다는 것을 다른 사람에게 통지하고 기록(예컨대, 또 다른 스프레드시트에)할 수 있는 시점에, 사인 오프해야 하는 모든 사람이 사이오프를 완료할 때까지 기다릴 수 있다. 일부 구현예들에서, 동시에 2개의 이벤트가 수신되면, 그것들은 대기(queue)될 수 있고, 매크로는 한 번에 한 계속만을 처리한다. 워크플로우 상태는 스프레드시트에 부분적으로 기록될 뿐만 아니라, 매크로의 지역 변수 콘텍스트로만 유지될 수 있다.
관련 시나리오에서, 완전하게 처리되지 않아 완료되지 않은(예컨대, 워크플로우에 기초하여) 사고 보고들이 쿼리될 수 있다. 이 쿼리는 사고 보고들에 관한 상태 정보를 포함하는 스프레드시트에 대한 액세스(또는 스프레드시트를 간단하게 염)를 요청할 수 있다.
예제 #4: 버스 스케줄 보고( Bus Schedule Reporting )
버스 운송 회사가 소정 버스 노선의 지연을 클라이언트들에게 알리고자 하는 시나리오를 고려한다. 회사는 자신들의 버스의 도착 예정 시간/위치들을 업데이트하기 위해 스프레드시트를 편집할 수 있고, 이러한 편집은 버스들에서 위치 데이터를 수신하고, 예컨대, 이러한 정보에 기초하여 도착 예정 시간을 계산(예컨대, 정류장 X를 출발한 버스를 식별하고, 정류장 X+1에 도착시간을 산출하기 위해 시간 Y를 더함으로써)하는 매크로에 의해 자동적으로 발생할 수 있다. 스프레드시트에 있는 매크로는 소정 버스 노선이 비정상적으로 지연될 때를 식별할 수 있고, 만약 소정 버스 노선이 비정상적으로 지연되면, 그에 대한 알림을 등록해 놓은 클라이언트들에게 텍스트 메시지를 송신할 수 있다. 예를 들어, 사용자는 자신이 다운타운에 있으며 자신이 일반적으로 이용하는 버스 정류장으로부터 두 블럭 내에서 있고, 사용자가 이용하는 노선 버스(예컨대, 버스 번호 692, 698 등) 중 임의의 버스가 그 코너에 5분 이상 늦게 도착할 때마다 텍스트 메시지를 수신할 수 있도록 가입할 수 있다. 사용자의 모바일 디바이스상의 애플리케이션은 사용자가 적합한 위치에 있을 때 트리거되어, 사용자가 수동으로 위치를 입력할 필요없이(예컨대, 사용자의 GPS 좌표를 가장 가까이 있는 버스 정류장 위치로 변환함으로써) 사용자가 자신의 현재 위치로 안내되는 업데이트들을 수신할 수 있도록, 호스트형 서비스가 사용자의 레코드에 플래그를 활성화시키도록 한다.
보안 목적으로, 매크로의 작성자는 제한된 세트의 사용자들(예컨대, 관리자들에 의해 제어되는, 다른 스프레드시트에 등재되어 있는 사용자들)에게 텍스트 메시지를 송신하고, 이 매크로가 대중적으로 액세스할 수 없지만, 시트에 대해서만 지역적으로 공개할 수 있는 캐퍼빌리티를 허락할 수 있다. 작성자는 시트에 기록할 수 있는 캐퍼빌리티를 매크로에 허락하지 않을 것이다. 이 시나리오는 문서 또는 다른 집합(예컨대, 스프레드시트 또는 다른 그룹 정의)에서 정의된 그룹을 참조함으로써, 캐퍼빌리티의 정도(breadth of a capability)를 특정하는 것에 대한 가능성을 제안한다.
예제 #5: 위치 기반 이벤트 트리거( Location Based Event Trigger )
한 사용자가 각 콘서트의 주소 및 날짜/시간을 포함하는, 스프레드시트에 있는 콘서트 추천 세트를 업데이트하는 시나리오를 고려한다. 다른 사용자들은 자신이 이 콘서트 중 어느 하나의 주변에 있을 때마다, 및 콘서트의 시간이 다가올 때마다 알려주도록 요청함으로써, 이 스프레드시트로부터의 알림에 가입할 수 있다. 이 경우, 알림들은, 예를 들어 매핑 서비스, 소셜 네트워킹 서비스(추천을 한 사용자의 친구들을 식별하기 위함), 위치 서비스(친구들이 특정 위치에 있을 때를 식별하기 위함), 및 추천을 송신하는 텍스트 메시징 서비스과 같은 서비스를 사용할 수 있다. 따라서 호스트형 매크로가 특히 이 시나리오에 적합하다.
예제 #6 : 설문 조사( Surveys )
사용자가 설문 조사 또는 다른 데이터 입력 양식을 생성하고, 복수의 다른 사용자들에게 이메일 양식을 송신하고, 각 사용자가 양식을 기재하는 방법을 나타내는 스프레드시트에 라인을 추가하는 시나리오를 가정한다.
매크로는 소정 주소로부터 사용자에 의해 제공된 주소 집합(set of address)들로 일군의 사람에게 이메일을 보내는 캐퍼빌리티를 허락받아야 한다. 매크로는, 예를 들어 호스트형 서비스로부터의 사용자 신원 특징에 액세싱하거나, 응답으로 사용자 ID(예컨대, 이메일 주소)를 식별함으로써, 각 사용자로부터 이 양식에서 데이터의 수신을 추적할 수 있다. 이어, 매크로는 스프레드시트에 액세스할 수 있고, 사용자 ID를 스프레드시트의 한 열에 입력하고, 사용자 답변 또는 답변들을 스프레드시트의 다른 열들에 입력할 수 있다. 이 방식에서, 제1 사용자는 양식을 신속하게 그룹(예컨대, 기존 친구 목록 또는 이메일 목록으로부터 판정함으로써)에 송신할 수 있고, 그 그룹으로부터의 코멘트들을 자동적으로 표로 만들 수 있다.
예제 #7: 구매 주문서 승인( Purchase Order Approval )
사용자가 구매 주문서(예컨대, "저는 Q-팁스의 X천 케이스를 원하며, 벤더 XYZ를 선호합니다")를 개시하는 시나리오를 고려한다. 사용자가 구매 주문서(PO)를 제출하면, 매크로는 아이템, 총액, 부서 등과 같은 데이터에 기초하여, PO를 승인하는데 필요한 사람을 판정할 수 있다. 예를 들어, 총액이 고정된 임계값보다 크면, PO는 장(chair)의 승인을 요구할 수 있다. 승인자가 이 PO를 승인함에 따라, 그 PO는 매크로에 정의된 사용자 목록, 데이터베이스, 또는 스프레드시트와 같은 워크플로우를 따라 이동될 수 있고, 매크로는 이 PO를 누가 승인했고, 승인하지 않았는지를 기억하기 위한 지역 단계(local state)를 유지할 수 있다. 모든 승인자가 승인하면, 이 PO는 구매를 위해 송신된다.
이 매크로는 계속들의 관점에서 최적으로 구동할 수 있다. 매크로는 이러한 사용자들이 주어진 구매 주문서를 승인 또는 승인 거부하기 위해 클릭할 수 있도록 하는 양식들 또는 URL들을 갖는 문서에 첨부되거나 그 문서로의 링크로 소정 사용자에게 이메일을 보낼 수 있는 캐퍼빌리티를 가질 것이고, 부서장들 등과 같은 정보로 데이터베이스 또는 다른 스프레드시트들에 액세스할 것이다.
예제 #8: 메일 병합( Mail Merge )
사용자가 스프레드시트명, 주소들, 이메일 주소들 등, 및 다른 문서들(예컨대, 이메일, 스프레드시트 등)을 가지고 있고, 마지막 문서에 있는 필드들을 목록에 있는 필드들로 대체하여, 병합된 문서(들)을 성명 시트에서 특정된 수신인들에게 이메일로 보내고자 하는 시나리오를 고려한다.
보안을 위해, 매크로는 특정 문서 및 이름 목록의 콘텍스트 내에서 완전히 구동할 수 있다. 캐퍼빌리티들은 탬플릿 문서에 액세스하는 것뿐만 아니라 "이 테이블의 첫 번째 열에서 특정된 것과 같이, 목록에 이메일을 보낼 수 있음"이다. 매크로 자체는 스프레드시트 라인 또는 일부 탬플릿들로부터 계산된 데이터로 리스트에 있는 사람들에게 이메일을 보낼 수 있다. 메일 병합 매크로를 위한 특정 양식들은 공지되어 있다.
예제 #9: 의사 교대 스케줄링( Doctor Shift Scheduling )
복수의 의사가 동일한 스프레드시트를 액세스하고 편집하는 시나리오를 고려한다. 매크로는 각 의사가 스프레드시트에 대해 포맷팅 또는 스케줄링 규칙(예컨대, 기간 내에 교대의 최대 또는 최소 수)을 따르는지를 확인하기 위하여 스프레드시트를 체크할 수 있다. 각 사용자는, 예를 들어 좀 더 사용하기 쉬운 액세스를 위해(예컨대, 반복하는 스케줄을 생성하기 위해) 달력 애플리케이션과 시트를 동기화하도록 매크로를 구동시키는 버튼을 클릭할 수 있다. 양방향 동기화(Two-way synchronization)가 발생될 수도 있다.
매크로는 다양한 다른 달력 애플리케이션과 인터페이스할 수 있도록 확장될 수 있다. 매크로는 또한 그들이 자신이 얼마나 많은 교대를 등록했는지를 계속해서 추적할 수 있도록 돕고, 달력 애플리케이션에 그 스프레드시트를 동기화시키기 위해 자신이 규칙을 따르고 있는지를 검증할 수 있도록 의사들을 도울 수 있다.
예제 #10: 이메일 플러그-인( Email Plug - in )
사용자는 자신의 계정으로 수신되는 이메일의 인스턴스 각각을 식별하고, 보낸 사람 신원과 이메일의 제목란이 그 이메일로부터 복사되어 사용자의 계정과 연계된 스프레드시트의 다음 오픈 라인에 입력되도록 매크로를 정의할 수 있다. 이러한 방법으로, 사용자는 자신의 계정에 수신된 이메일의 최신 로그(up-to-date log)를 자동적으로 유지할 수 있다.
예제 #11 : 블로깅 플러그-인( Blogging Plug - in )
서비스 이용중의 블로거인 사용자가 블로그에 대한 사용자 코멘트들을 처리하기 위해 매크로를 만들 수 있다. 예를 들어, 코멘터에 관한 정보가, 예를 들어 코멘트 옆에 코멘터의 위치(예컨대, 사용자로부터의 코멘트에 상응하는 IP어드레스를 사용함)를 나타나도록 사용될 수 있다. 이에 더하여, 사용자는, 부적절한 단어를 포함하는 코멘트가 포스팅될 때마다 이를 알리는 텍스트 메시지를 수신하기 위해, 속어와 같은 트리거 단어들의 블랙리스트에 대하여 비교된 모든 코멘트들을 가질 수 있다. 이어, 사용자는 블로그를 정리하기 위해 그 블로그에 로그할 수 있다.
예제 #12: 청구가능 시간( Billable Hours )
컨설턴트인 사용자가 달력 애플리케이션에 자신의 청구가능 시간을 추적할 수 있다. 그들은 이러한 항목들을 주기적으로(예컨대, 매주 또는 매월) 분석(예컨대, 양식 x.x.에 시간 항목을 인식함으로써)하기 위해 매크로를 이용할 수 있다. 이어 매크로는 시간이 청구되어야 하는 프로젝트 번호(예컨대, 키워드들과 클라언트 이름을 소정 고유의 프로젝트들에 상관시킨 목록)를 식별하기 위해 항목에 연계된 텍스트를 사용할 수 있고, 청구 동작을 실행하기 위하여 스프레드시트내 셀에 데이터를 추가할 수 있다. 매크로는 스프레드시트로부터의 값들을 합쳐서 워드 프레시싱 프로그램에 의해 생성된 청구서에 기재할 수 있고, 이어 결과 문서를 클라이언트에게 이메일로 발송할 수 있다. 클라이언트가 호스트형 시스템에 등록된 사용자라면, 매크로는 지불을 직접 요청(direct request)할 수 있고(클라이언트가 청구서를 지불하고자 한다는 의도를 나타내는데 사용할 수 있는 선택가능한 메카니즘을 포함하는 양식을 통해 포함함), 그 클라이언트는 클라이언트 계좌로부터 컨설턴트 계좌로 송금하기 위한 컨트롤을 후속적으로 선택할 수 있다.
예제 #13: 운전 방향 안내 메일 병합( Driving Directions Mail Merge )
호스트형 시스템의 사용자는 여러 명의 친구들에게 다가오는 파티를 위해 초대장을 보내고 싶을 수 있다. 따라서 사용자는 파티 초대를 위해 쉘(shell)을 준비할 수 있다. 이어 사용자는 효과적으로 초대장으로의 메일 병합을 수행하기 위해 매크로가 친구 목록과 그들의 주소(예컨대, 호스트형 시스템에 있는 연락처 애플리케이션에서)를 지시하게 할 수 있다. 이어 사용자는 초대장으로의 메일 병합을 효과적으로 수행하기 위해 친구와 그들의 주소의 목록을 매크로에게 지시(예컨대, 호스트형 시스템에 있는 연락처 애플리케이션에서)할 수 있다. 그러나 사용자는 또한 자신의 주소(파티 위치)와 친구(그 초대장이 현재 준비중인 친구)의 주소를 목록으로부터 매핑 서비스에 제공할 수 있고, 매핑 서비스는 친구의 집에서부터 파티 위치까지의 운전 방향을 안내하는 지도를 나타내는 이미지가 중첩된 초대장을 표준 API에 따라서 반환할 수 있다. 매크로는 친구에게 보내질 초대장에, 자동적으로 맞춤 생성된 방향 안내를 갖는 이미지를 포함시킬 수 있다.
도 7은 본 명세서에서 설명된 기술들에 사용될 수 있는 일반적인 컴퓨팅 디바이스(700)와 일반적인 모바일 컴퓨팅 디바이스(750)의 블록도이다. 컴퓨팅 시스템(700)은 랩탑, 데스크탑, 워크스테이션, PDA(Personal Digital Assistant), 서버, 블레이드(blade) 서버, 메인프레임, 및 그 밖의 적절한 컴퓨터들과 같은 다양한 형태의 디지털 컴퓨터를 나타내기 위해 사용된다. 컴퓨팅 디바이스(750)는 PDA, 셀룰라 전화, 스마트폰, 및 그 밖의 유사한 컴퓨팅 디바이스와 같은 다양한 형태의 모바일 디바이스를 나타내기 위해 사용된다. 본 명세서에서 나타낸 구성요소, 그들의 접속 및 관계, 및 그들의 기능들은 단지 예시적인 것을 의미하고, 본 명세서에서 설명하거나 또는 청구된 발명의 구현예를 제한하는 것을 의미하지 않는다.
컴퓨팅 디바이스(700)는 프로세서(702), 메모리(704), 저장 디바이스(706), 메모리(704)와 고속 확장 포트(710)에 접속하는 고속 인터페이스(708), 및 저속 버스(714)와 저장 디바이스(706)에 접속하는 저속 인터페이스(712)를 포함한다. 각 구성요소(702, 704, 706, 708, 710, 및 712)는 다양한 버스들을 사용하여 서로 접속되고, 공통 마더보드에 탑재되거나 또는 적절한 경우 다른 방식으로 탑재될 수 있다. 프로세서(702)는 컴퓨팅 디바이스(700) 내에서 실행하기 위한 명령어를 처리할 수 있으며, 이러한 명령어에는, 고속 인터페이스(708)에 연결된 디스플레이(716)와 같은 외장 입/출력 디바이스상에서 GUI용 그래픽 정보를 디스플레이하기 위해, 메모리(704) 또는 저장 디바이스(706)에 저장되는 명령어가 포함된다. 다른 구현예에서, 다중 프로세서 및/또는 다중 버스는 적절한 경우, 다중 메모리 및 메모리 타입과 함께 사용될 수 있다. 또한, 다중 컴퓨팅 디바이스(700)는 각 디바이스가 필요 동작의 부분을 제공하는 형태(예를 들어, 서버 뱅크, 블레이드 서버의 그룹, 또는 다중 프로세서 시스템)로 접속될 수 있다.
메모리(704)는 컴퓨팅 디바이스(700) 내에 정보를 저장한다. 일 구현예에서, 메모리(704)는 휘발성 메모리 유닛 또는 유닛들이다. 또 다른 구현예서, 메모리(704)는 비휘발성 메모리 유닛 또는 유닛들이다. 또한, 메모리(704)는 마그네틱 또는 광 디스크와 같은 다른 형태의 컴퓨터 판독가능 매체일 수 있다.
저장 디바이스(706)는 컴퓨팅 디바이스(700)를 위한 대용량 저장소(mass storage)를 제공할 수 있다. 일 구현예에서, 저장 디바이스(706)는 플로피 디스크 디바이스, 하드 디스크 디바이스, 광 디스크 디바이스, 또는 테입 디바이스, 플래쉬 메모리 또는 다른 유사한 고체 상태 메모리 디바이스, 또는 저장 영역 네트워크 또는 다른 구성에 존재하는 디바이스를 포함하는 디바이스 어레이일 수 있다. 컴퓨터 프로그램 제품은 정보 캐리어(information carrier) 내에 유형적으로 구체화될 수 있다. 또한, 컴퓨터 프로그램 제품은 실행될 때, 상술한 것과 같은 하나 이상의 방법을 수행하는 명령어를 포함할 수 있다. 정보 캐리어는 메모리(704), 저장 디바이스(706), 또는 프로세서(702) 상의 메모리와 같은 컴퓨터 또는 기계 판독가능 매체이다.
저속 제어부(712)가 저대역-집약적 동작(lower bandwidth-intensive operations)을 관리하는 반면, 고속 제어부(708)는 컴퓨팅 디바이스(900)에 대한 대역-집약적 동작을 관리한다. 이러한 기능들의 배치는 단지 예시적인 것이다. 일 구현예에서, 고속 제어부(708)는 메모리(704), 디스플레이(716)(예를 들어, 그래픽 프로세서 또는 가속기를 통함)에 연결되고, 다양한 확장 카드(도시되지 않음)을 수용할 수 있는 고속 확장 포트(710)에 연결된다. 일부 구현예에서는, 저속 제어부(712)는 저장 디바이스(706) 및 저속 확장 포트(714)에 연결된다. 다양한 통신 포트(예를 들어, USB, 블루투스, 이더넷, 무선 이더넷)를 포함할 수 있는 저속 확장 포트는 키보드, 포인팅 디바이스, 스캐너와 같은 하나 이상의 입/출력 디바이스들에 연결되거나, 또는 예컨대 네트워크 어댑터를 통하여, 스위치나 라우터와 같은 네트워킹 디바이스에 연결될 수 있다.
컴퓨팅 디바이스(700)는 도면에 도시된 바와 같이, 복수의 다른 형태로 구현될 수 있다. 예를 들어, 컴퓨팅 디바이스(700)는 표준 서버(720)로 구현되거나 이러한 서버들의 그룹에서 여러 번(multiple time) 구현될 수 있다. 또한, 컴퓨팅 디바이스(700)는 랙 서버 시스템(724)의 부분으로서 구현될 수 있다. 이에 더하여, 컴퓨팅 디바이스(700)는 랩탑 컴퓨터(722)와 같은 개인용 컴퓨터내에 구현될 수 있다. 선택적으로, 컴퓨팅 디바이스(700)로부터의 구성요소는 디바이스(750)와 같은 모바일 디바이스(도시되지 않음) 내 다른 구성요소와 조합될 수 있다. 이러한 디바이스 각각은 하나 이상의 컴퓨팅 디바이스(700, 750)를 포함하고, 전체 시스템은 서로 통신하는 다중 컴퓨팅 디바이스(700, 750)로 구성될 수 있다.
컴퓨팅 디바이스(750)는 여러 구성요소 중에서 프로세서(752), 메모리(764), 디스플레이(754)와 같은 입/출력 디바이스, 통신 인터페이스(766), 및 트랜스시버(768) 등을 포함한다. 또한, 디바이스(750)에는 추가적인 저장소를 제공하기 위하여, 마이크로 드라이브 또는 다른 디바이스와 같은 저장 디바이스가 제공될 수 있다. 구성요소(750, 752, 764, 754, 766, 및 768) 각각은 다양한 버스를 이용하여 서로 접속되고, 구성요소의 몇몇은 공통의 마더보스에 탑재되거나 적절한 다른 방법으로 탑재될 수 있다.
프로세서(752)는 컴퓨팅 디바이스(750) 내에서 명령어를 실행하며, 이 명령어에는 메모리(764)에 저장된 명령어가 포함된다. 프로세서는 개별적이고 다중의 아날로그 및 디지털 프로세서를 포함하는 칩들의 칩 세트로서 구현될 수 있다. 프로세서는, 예를 들어, 사용자 인터페이스의 컨트롤, 디바이스(750)에 의해 실행되는 애플리케이션, 및 컴퓨팅 디바이스(750)에 의한 무선 통신과 같은 디바이스(750)의 다른 구성요소들 사이에 조정을 제공할 수 있다.
프로세서(752)는 제어 인터페이스(758) 및 디스플레이(754)에 연결된 디스플레이 인터페이스(756)를 통해 사용자와 통신할 수 있다. 디스플레이(754)는, 예를 들어, TFT LCD(Thin-Film-Tansistor Liquid Crystal Display) 또는 OLED(Organic Light Emitting Diode) 디스플레이, 또는 다른 적절한 디스플레이 기술일 수 있다. 디스플레이 인터페이스(756)는 그래픽 및 다른 정보를 사용자에게 나타내기 위해 디스플레이(754)를 구동하는 적절한 회로를 포함할 수 있다. 제어 인터페이스(758)는 사용자로부터 명령들을 수신하고, 프로세서(752)에 제출하기 위해 그 명령들을 변환한다. 더욱이, 확장 인터페이스(762)는 디바이스(750)와 다른 디바이스들 간에 근거리 통신이 가능하도록 하기 위해, 프로세서(752)와의 통신에 제공될 수 있다. 확장 인터페이스(762)는, 예를 들어, 일부 구현예에서는 유선 통신을 제공하고 다른 구현예에서 무선 통신을 제공하며, 또한 다중 인터페이스가 사용될 수 있다.
메모리(764)는 컴퓨팅 디바이스(750) 내에 정보를 저장한다. 메모리(764)는 컴퓨터 판독가능 매체 또는 미디어, 휘발성 메모리 유닛 또는 유닛들, 또는 비휘발성 메모리 유닛 또는 유닛들 중 하나 이상으로서 구현될 수 있다. 또한, 확장 메모리(774)가 제공되어, 예를 들어 SIMM(Single In Line Memory Module) 카드 인터페이스를 포함하는 확장 인터페이스(774)를 통해 디바이스(750)에 접속될 수 있다. 이러한 확장 메모리(774)는 디바이스(750)를 위한 여분의 저장 공간을 제공할 수 있고, 또한 애플리케이션 또는 디바이스(750)를 위한 다른 정보를 저장할 수 있다. 특히, 확장 메모리(774)는 상술된 프로세스를 실행하거나 보조하기 위한 명령어를 포함하고, 또한 보안 정보를 포함할 수 있다. 따라서 예를 들어, 확장 메모리(774)는 디바이스(750)용 보안 모듈(security module)로서 제공될 수 있고, 디바이스(750)의 안전한 사용을 가능하게 하는 명령어로 프로그램될 수 있다. 더욱이, 보안 애플리케이션은, 해킹할 수 없는 방식(non-hackable manner)으로 SIMM 카드 상에 식별 정보를 위치시킨 것과 같은 추가적 정보와 함께 SIMM 카드를 통해 제공될 수 있다.
메모리는 아래에서 논의되는 것과 같이 예를 들어, 플래시 메모리 및/또는 NVRAM 메모리를 포함할 수 있다. 일 구현예에서, 컴퓨터 프로그램 제품은 정보 캐리어에 유형적으로 구체화된다. 컴퓨터 프로그램 제품은 실행될 때, 상술된 것과 같은 하나 이상의 방법을 수행하는 명령어를 포함한다. 정보 캐리어는 메모리(764), 확장 메모리(774), 또는 예를 들어 트랜스시버(768) 또는 확장 인터페이스(762)를 통해 수신될 수 있는 프로세서(752) 상의 메모리 또는 전파된 신호(propagated signal)와 같은 컴퓨터-또는 기계-판독가능 매체이다.
디바이스(750)는 디지털 신호 처리 회로를 필요에 따라 포함하는 통신 인터페이스(766)를 통해 무선으로 통신할 수 있다. 통신 인터페이스(766)는 GSM 음성 호, SMS, EMS, 또는 MMS 메시징, CDMA, TDMA, PDC, WCDMA, CDMA2000, 또는 GPRS 등과 같은 다양한 모드 또는 프로토콜 하에서의 통신을 제공할 수 있다. 이러한 통신은 예를 들어, 무선-주파수 트랜스시버(768)를 통해 수행될 수 있다. 또한, 단거리(short range) 통신은 예를 들어, 블루투스, WiFi, 또는 다른 이러한 트랜스시버(도시되지 않음)를 사용하여 수행될 수 있다. 이에 더하여, GPS(Global Position System) 수신기 모듈(770)은 추가적인 네비게이션- 및 위치- 관련 무선 데이터를 디바이스(750)에 제공할 수 있으며, 이 무선 데이터는 디바이스(750)에서 실행중인 애플리케이션에 의해 적절하게 사용될 수 있다.
또한, 디바이스(750)는 사용자로부터의 발화 정보(spoken information)를 수신하고, 그 발화 정보를 사용가능한 디지털 정보로 변환하는 오디오 코덱(760)을 이용하여, 청취가능하게(audibly) 통신할 수 있다. 또한, 오디오 코덱(760)은 예를 들어, 디바이스(750)의 핸드셋 내의 스피커를 통하는 것과 같이 해서, 사용자가 들을 수 있는 음성을 생성한다. 이러한 음성은 음성 전화 호로부터의 음성을 포함할 수 있고, 녹음된 음성(예를 들어, 음성 메시지, 음악 파일 등)은 포함할 수 있고, 또한 디바이스(750) 상에서 동작하는 애플리케이션에 의해 생성된 음성을 포함할 수 있다.
컴퓨팅 디바이스(750)는 도면에 도시된 바와 같이, 복수의 다양한 형태로 구현될 수 있다. 예를 들어, 컴퓨팅 디바이스(750)는 셀룰러 전화(780)로서 구현될 수 있다. 또한, 컴퓨팅 디바이스(750)는 스마트폰(782), PDA, 또는 다른 유사한 모바일 디바이스의 일부로서 구현될 수 있다.
디바이스(750)는 또한 움직임을 감지할 수 있는 하나 이상의 다른 디바이스를 포함할 수 있다. 예시들은 가속도계들과 나침판들을 포함할 수 있지만, 이에 제한되지는 않는다. 가속도계 및 나침판, 또는 움직임이나 위치를 검출할 수 있는 다른 디바이스들은 임의 수의 벤더로부터 가용할 수 있고, 다양한 방식으로 움직임을 감지할 수 있다. 예를 들어, 가속도계는 가속도의 변화를 검출할 수 있고, 나침판은 자성의 N극과 S극 각각의 방향 변화를 검출할 수 있다. 움직임의 이러한 변화는 디바이스(750)에 의해 검출될 수 있고, 본 명세서에서 설명된 프로세스들 및 기술들에 따라서 디바이스(750) 각각의 디스플레이를 업데이트하는데 사용될 수 있다.
본 명세서에 기재된 시스템의 다양한 구현예와 기술은 디지털 전자 회로, 집적 회로, 특별하게 설계된 ASICs(Application Specific Intergrated Circuit), 컴퓨터 하드웨어, 펌웨어, 소프트웨어, 및/또는 그것의 조합물로 실현될 수 있다. 이러한 다양한 구현예는 하나 이상의 컴퓨터 프로그램으로 된 구현예를 포함하며, 이 컴퓨터 프로그램은 적어도 하나의 프로그램 가능한 프로세서를 포함하는 프로그램 가능한 시스템에서 실행가능하고 및/또는 해석가능하다. 또한, 전용 또는 범용 프로세서일 수 있는 이 프로그램 가능한 프로세서는 데이터와 명령어를 송수신하기 위해, 저장 시스템, 적어도 하나의 입력 디바이스 및 적어도 하나의 수신 디바이스에 연결된다.
컴퓨터 프로그램(또한 프로그램, 소프트웨어, 소프트웨어 애플리케이션, 또는 코드로 알려짐)은 프로그램 가능한 프로세서를 위한 기계 명령어를 포함하고, 고레벨 절차 및/또는 오브젝트 지향 프로그램 언어(object-oriented programming language) 및/또는 어셈블리/기계 언어로 구현될 수 있다. 본 명세서에서 사용되는 바와 같이, 용어 "기계 판독가능 매체(machine-readable medium)"와 "컴퓨터 판독가능 매체(computer-readable medium)"는 기계 명령어 및/또는 데이터를 프로그램 가능한 프로세서에 제공하기 위해 이용되는 임의의 컴퓨터 프로그램 제품, 장치, 및/또는 디바이스(예를 들어, 마그네틱 디스크, 광학 디스크, 메모리, PLDs(Programmable Logic Devices))를 가리키며, 기계 판독가능 신호와 같은 기계 명령어를 수신하는 기계 판독가능 매체를 포함한다. 용어 "기계 판독가능 신호(machine-readable signal)"는 기계 명령어 및/또는 데이터를 프로그램 가능한 프로세서에 제공하기 위해 사용되는 임의의 신호를 가리킨다.
사용자와의 상호 동작을 제공하기 위하여, 본 명세서에 기술된 시스템과 기술은, 정보를 사용자에게 디스플레이하기 위한 디스플레이 디바이스(예를 들어, CRT(cathode ray tube) 또는 LCD 모니터)와 사용자가 컴퓨터에 입력을 제공할 수 있는 키보드 및 포인팅 디바이스(예를 들어, 마우스 또는 트랙볼)를 구비한 컴퓨터상에서 구현될 수 있다. 사용자와의 상호 동작을 제공하기 위하여 다른 종류의 디바이스가 또한 사용될 수 있다; 예를 들어, 사용자에게 제공되는 피드백(feedback)은 임의의 형태의 감각 피드백(예를 들어, 시각 피드백, 청각 피드백 또는 촉각 피드백)일 수 있고, 사용자로부터의 입력은 음향(acoustic), 음성(speech) 또는 촉각(tactile) 입력을 포함하는 임의의 형태로 수신될 수 있다.
본 명세서에서 설명한 시스템과 기술은, 백 엔드(back end) 구성요소(예를 들어, 데이터 서버와 같은), 또는 미들웨어 구성요소(예를 들어, 애플리케이션 서버), 또는 프론트 엔드(front end) 구성요소(예를 들어, 본 명세서에서 설명된 시스템 및 기술의 구현예와 사용자가 상호 동작할 수 있는 그래픽 사용자 인터페이스 또는 웹브라우저를 구비한 클라이언트 컴퓨터), 또는 이러한 백 엔드, 미들웨어, 또는 프론트 엔드 구성요소들의 임의의 조합을 포함하는 컴퓨팅 시스템으로 구현될 수 있다. 시스템의 구성요소는 디지털 데이터 통신의 임의의 형태 또는 매체(예를 들어, 통신 네트워크)에 의해 상호 접속될 수 있다. 통신 네트워크의 예로서, 근거리 네트워크(LAN), 광역 네트워크(WAN), 및 인터넷이 있다.
컴퓨팅 시스템은 클라이언트와 서버를 포함할 수 있다. 클라이언트와 서버는 보통 서로 떨어져 있으며, 일반적으로는 통신 네트워크를 통하여 상호 동작한다. 클라이언트와 서버의 관계는 각각의 컴퓨터상에서 실행되고 상호 클라이언트-서버 관계를 갖는 컴퓨터 프로그램에 의하여 발생한다.
많은 실시예들이 설명되었다. 그렇지만, 본 발명의 요지 및 범위를 벗어나지 않고 다양한 변형예들이 만들어질 수 있다는 것을 이해할 수 있을 것이다. 예를 들어, 이 명세서들의 대부분은 매크로들의 실행을 트리거링하는 특정 모드들을 참조하여 설명되었지만, 다른 접근법들도 또한 사용될 수 있다.
이에 더하여, 도면에서 묘사된 로직 흐름은 희망하는 결과를 달성하기 위해, 도시된 특정 순서 또는 시계열적 순서일 필요는 없다. 또한, 다른 단계들이 제공되거나, 그로부터 단계들이 제거될 수 있으며, 다른 구성요소들이 설명된 시스템에 추가되거나 그로부터 제거될 수 있다. 따라서 다른 실시예들은 후술하는 청구범위의 범위 내에 속한다.
100: 시스템
102: 애플리케이션
104: 매크로 후크
106: 매크로 서버 서브-시스템
108: 소셜 네트워크
110: 위치 서비스
112: 매크로 코드

Claims (20)

  1. 컴퓨터 매크로(computer macro)들을 관리하는 컴퓨터 구현 방법으로서,
    인터넷 접속가능 호스트형 컴퓨터 시스템(internet-accessible hosted computer system)에서 적어도 하나의 컴퓨터 매크로를 위한 코드를 저장하는 단계;
    상기 매크로를 상기 호스트형 컴퓨터 시스템의 등록된 사용자와 연계시키는 단계와 상기 매크로를 상기 등록된 사용자에 의해 식별되는 액세스 제한사항(access restriction)들에 따라 상기 호스트형 컴퓨터 시스템에 등록된 복수의 다른 사용자들에 이용할 수 있게 하는 단계;
    적어도 하나의 컴퓨터 매크로를 실행하기 위한, 상기 호스트형 컴퓨터 시스템 상의 복수의 사용자 계정들에 대한 트리거링 이벤트(triggering event)들을 상기 호스트형 컴퓨터 시스템에 의해 추적(track)하는 단계 - 상기 매크로는 상기 호스트형 컴퓨터 시스템에 등록된 상기 복수의 다른 사용자들에 대한 복수의 다른 사용자 계정들로부터의 트리거링 이벤트들에 응답하여 액세스가능함 -;
    사용자 계정에 연계된 사용자가 상기 호스트형 컴퓨터 시스템에서 액티브인지 여부와 독립적으로, 상기 매크로에 관련된 것으로 정의된 트리거링 이벤트를 상기 호스트형 컴퓨터 시스템에 의해 자동으로 식별하는 단계;
    상기 호스트형 컴퓨터 시스템으로부터 떨어진 곳에 있는 복수의 다른 클라이언트 컴퓨터들 상에서 구동 중인 복수의 애플리케이션들로부터 상기 매크로를 실행시키기 위한 요청들을 수신하는 단계, 상기 요청들 각각에 대해 상기 호스트형 컴퓨터 시스템 상에서 상기 매크로를 자동으로 실행하는 단계와 상기 매크로의 실행에 응답하여 상기 복수의 애플리케이션들의 각 애플리케이션에, 상기 매크로의 실행 결과들을 제공하는 단계;
    매크로 결과들을 생성하기 위해 상기 호스트형 컴퓨터 시스템상에 구동 중인 애플리케이션을 사용하여 상기 매크로를 실행하는 단계와 상기 호스트형 컴퓨터 시스템 상에 상기 매크로 결과들을 저장하는 단계;
    상기 매크로 결과들을 상기 사용자들에게 통지하는, 상기 복수의 사용자 계정들에 연계된 통신 주소들로의 메시지들을 생성하는 단계; 및
    상기 호스트형 컴퓨터 시스템에 등록된 복수의 사용자 계정들에 상기 매크로의 실행 결과들을 자동으로 제공하는 단계를 포함하는 것을 특징으로 하는 방법.
  2. 청구항 1에 있어서, 상기 트리거링 이벤트는 상기 사용자 계정으로 향하는 수신 디지털 통신(incoming digital communication)을 포함하는 것을 특징으로 하는 방법.
  3. 청구항 1에 있어서, 상기 트리거링 이벤트는 계정 소유자(accountholder)에 연계되는 컴퓨터 디바이스 사용자의 위치에 대한 판정을 포함하는 것을 특징으로 하는 방법.
  4. 청구항 1에 있어서, 상기 매크로를 실행하는 단계는 상기 호스트형 컴퓨터 시스템에 의해 제공되는 다수의 다른 호스트형 서비스들을 호출하는 단계를 포함하는 것을 특징으로 하는 방법.
  5. 청구항 4에 있어서, 상기 매크로를 실행하는 단계는 상기 호스트형 컴퓨터 시스템에 대해 독립된 3자 정보 제공자들에 의해 제공되는 웹 서비스들을 호출하는 단계를 포함하는 것을 특징으로 하는 방법.
  6. 청구항 1에 있어서, 상기 호스트형 컴퓨터 시스템 상에서 구동 중인 제1 애플리케이션에 의해 생성된 정보를 다른 포맷으로 변환하는 단계와 상기 변환된 정보를 상기 호스트형 컴퓨터 시스템 상에 구동 중인 제2 애플리케이션에 제공하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  7. 시스템으로서,
    명령들을 저장하는 하나 이상의 컴퓨터들 및 하나 이상의 저장 디바이스들을 포함하고,
    상기 명령들은 상기 하나 이상의 컴퓨터들에 의해 실행될 때, 상기 하나 이상의 컴퓨터들로 하여금:
    인터넷 접속가능 호스트형 컴퓨터 시스템에서 적어도 하나의 컴퓨터 매크로를 위한 코드를 저장하고;
    상기 매크로를 상기 호스트형 컴퓨터 시스템의 등록된 사용자와 연계시키고, 상기 매크로를 상기 등록된 사용자에 의해 식별되는 액세스 제한사항들에 따라 상기 호스트형 컴퓨터 시스템의 다른 사용자들에 이용할 수 있게 하고;
    적어도 하나의 컴퓨터 매크로를 실행하기 위한, 상기 호스트형 컴퓨터 시스템 상의 복수의 사용자 계정들에 대한 트리거링 이벤트들을 상기 호스트형 컴퓨터 시스템에 의해 추적하고 - 상기 매크로는 상기 호스트형 컴퓨터 시스템에 등록된 상기 복수의 다른 사용자들에 대한 복수의 다른 사용자 계정들로부터의 트리거링 이벤트들에 응답하여 액세스가능함 -;
    사용자 계정에 연계된 사용자가 상기 호스트형 컴퓨터 시스템에서 액티브인지 여부와 독립적으로, 상기 매크로에 관련된 것으로 정의된 트리거링 이벤트를 상기 호스트형 컴퓨터 시스템에 의해 자동으로 식별하고;
    상기 호스트형 컴퓨터 시스템으로부터 떨어진 곳에 있는 복수의 다른 클라이언트 컴퓨터들 상에서 구동 중인 복수의 애플리케이션들로부터 상기 매크로를 실행시키기 위한 요청들을 수신하고, 상기 요청들 각각에 대해 상기 호스트형 컴퓨터 시스템 상에서 상기 매크로를 자동으로 실행하고, 상기 매크로의 실행에 응답하여 상기 복수의 애플리케이션들의 각 애플리케이션에, 상기 매크로의 실행 결과들을 제공하고;
    매크로 결과들을 생성하기 위해 상기 호스트형 컴퓨터 시스템상에 구동 중인 애플리케이션을 사용하여 상기 매크로를 실행하고, 상기 호스트형 컴퓨터 시스템 상에 상기 매크로 결과들을 저장하고;
    상기 매크로 결과들을 상기 사용자들에게 통지하는, 상기 복수의 사용자 계정들에 연계된 통신 주소들로의 메시지들을 생성하고; 그리고
    상기 호스트형 컴퓨터 시스템에 등록된 복수의 사용자 계정들에 상기 매크로의 실행 결과들을 자동으로 제공하게 하는 동작들을 수행하도록 작동될 수 있는 것을 특징으로 하는 시스템.
  8. 청구항 7에 있어서, 상기 트리거링 이벤트는 상기 사용자 계정을 향하는 수신 디지털 통신을 포함하는 것을 특징으로 하는 시스템.
  9. 청구항 7에 있어서, 상기 트리거링 이벤트는 계정 소유자에 연계되는 컴퓨터 디바이스 사용자의 위치에 대한 판정을 포함하는 것을 특징으로 하는 시스템.
  10. 청구항 7에 있어서, 상기 매크로를 실행하는 것은 상기 호스트형 컴퓨터 시스템에 의해 제공되는 다수의 다른 호스트형 서비스들을 호출하는 것을 포함하는 것을 특징으로 하는 시스템.
  11. 청구항 10에 있어서, 상기 매크로를 실행하는 것은 상기 호스트형 컴퓨터 시스템에 대해 독립된 3자 정보 제공자들에 의해 제공되는 웹 서비스들을 호출하는 것을 포함하는 것을 특징으로 하는 시스템.
  12. 하나 이상의 컴퓨터들에 의해 실행가능한 명령들을 포함하는 소프트웨어를 저장하는 비-일시적인(non-transitory) 컴퓨터-판독가능 매체로서,
    상기 명령들은 실행 시에 상기 하나 이상의 컴퓨터들로 하여금:
    인터넷 접속가능 호스트형 컴퓨터 시스템에서 적어도 하나의 컴퓨터 매크로를 위한 코드를 저장하고;
    상기 매크로를 상기 호스트형 컴퓨터 시스템의 등록된 사용자와 연계시키고, 상기 매크로를 상기 등록된 사용자에 의해 식별되는 액세스 제한사항들에 따라 상기 호스트형 컴퓨터 시스템의 다른 사용자들에 이용할 수 있게 하고;
    적어도 하나의 컴퓨터 매크로를 실행하기 위한, 상기 호스트형 컴퓨터 시스템 상의 복수의 사용자 계정들에 대한 트리거링 이벤트들을 상기 호스트형 컴퓨터 시스템에 의해 추적하고 - 상기 매크로는 상기 호스트형 컴퓨터 시스템에 등록된 상기 복수의 다른 사용자들에 대한 복수의 다른 사용자 계정들로부터의 트리거링 이벤트들에 응답하여 액세스가능함 -;
    사용자 계정에 연계된 사용자가 상기 호스트형 컴퓨터 시스템에서 액티브인지 여부와 독립적으로, 상기 매크로에 관련된 것으로 정의된 트리거링 이벤트를 상기 호스트형 컴퓨터 시스템에 의해 자동으로 식별하고;
    상기 호스트형 컴퓨터 시스템으로부터 떨어진 곳에 있는 복수의 다른 클라이언트 컴퓨터들 상에서 구동 중인 복수의 애플리케이션들로부터 상기 매크로를 실행시키기 위한 요청들을 수신하고, 상기 요청들 각각에 대해 상기 호스트형 컴퓨터 시스템 상에서 상기 매크로를 자동으로 실행하고, 상기 매크로의 실행에 응답하여 상기 복수의 애플리케이션들의 각 애플리케이션에, 상기 매크로의 실행 결과들을 제공하고;
    매크로 결과들을 생성하기 위해 상기 호스트형 컴퓨터 시스템상에 구동 중인 애플리케이션을 사용하여 상기 매크로를 실행하고, 상기 호스트형 컴퓨터 시스템 상에 상기 매크로 결과들을 저장하고;
    상기 매크로 결과들을 상기 사용자들에게 통지하는, 상기 복수의 사용자 계정들에 연계된 통신 주소들로의 메시지들을 생성하고; 그리고
    상기 호스트형 컴퓨터 시스템에 등록된 복수의 사용자 계정들에 상기 매크로의 실행 결과들을 자동으로 제공하게 하는 동작들을 수행하게 하는 것을 특징으로 하는 비-일시적인 컴퓨터-판독가능 매체.
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
KR1020127006599A 2009-08-13 2010-08-13 이벤트-트리거형 서버측 매크로들 KR101668365B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/540,846 US8713584B2 (en) 2009-08-13 2009-08-13 Event-triggered server-side macros
US12/540,846 2009-08-13
PCT/US2010/045507 WO2011020043A2 (en) 2009-08-13 2010-08-13 Event-triggered server-side macros

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020167012872A Division KR101774967B1 (ko) 2009-08-13 2010-08-13 이벤트-트리거형 서버측 매크로들

Publications (2)

Publication Number Publication Date
KR20120068863A KR20120068863A (ko) 2012-06-27
KR101668365B1 true KR101668365B1 (ko) 2016-10-21

Family

ID=43586878

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020127006599A KR101668365B1 (ko) 2009-08-13 2010-08-13 이벤트-트리거형 서버측 매크로들
KR1020167012872A KR101774967B1 (ko) 2009-08-13 2010-08-13 이벤트-트리거형 서버측 매크로들

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020167012872A KR101774967B1 (ko) 2009-08-13 2010-08-13 이벤트-트리거형 서버측 매크로들

Country Status (7)

Country Link
US (3) US8713584B2 (ko)
EP (1) EP2465044B1 (ko)
JP (2) JP5648056B2 (ko)
KR (2) KR101668365B1 (ko)
CN (2) CN102498483B (ko)
AU (2) AU2010282359B2 (ko)
WO (1) WO2011020043A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102551882B1 (ko) 2022-06-15 2023-07-04 여철석 전자상거래 주문내역 자동 연계 입력 시스템

Families Citing this family (124)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8301705B2 (en) * 2008-02-29 2012-10-30 Sap Ag Subject line personalization
EP3484135A1 (en) 2008-04-02 2019-05-15 Twilio Inc. System and method for processing telephony sessions
US8837465B2 (en) 2008-04-02 2014-09-16 Twilio, Inc. System and method for processing telephony sessions
US9128981B1 (en) 2008-07-29 2015-09-08 James L. Geer Phone assisted ‘photographic memory’
US8775454B2 (en) 2008-07-29 2014-07-08 James L. Geer Phone assisted ‘photographic memory’
WO2010040010A1 (en) 2008-10-01 2010-04-08 Twilio Inc Telephony web event system and method
US8632003B2 (en) 2009-01-27 2014-01-21 Novell, Inc. Multiple persona information cards
EP2404412B1 (en) 2009-03-02 2019-05-01 Twilio Inc. Method and system for a multitenancy telephone network
US20100251353A1 (en) * 2009-03-25 2010-09-30 Novell, Inc. User-authorized information card delegation
US9210275B2 (en) 2009-10-07 2015-12-08 Twilio, Inc. System and method for running a multi-module telephony application
US9130975B2 (en) 2010-06-02 2015-09-08 Avaya Inc. Generation of macros
US20120208495A1 (en) 2010-06-23 2012-08-16 Twilio, Inc. System and method for monitoring account usage on a platform
US20120030556A1 (en) * 2010-07-29 2012-02-02 Activepath Ltd. Method for enabling interactive content within messaging application
US8694625B2 (en) * 2010-09-10 2014-04-08 International Business Machines Corporation Selective registration for remote event notifications in processing node clusters
US20120066694A1 (en) 2010-09-10 2012-03-15 International Business Machines Corporation Event overflow handling by coalescing and updating previously-queued event notification
US8934925B2 (en) * 2010-10-15 2015-01-13 Microsoft Corporation Mobile messaging message notifications processing
US20120117456A1 (en) * 2010-11-05 2012-05-10 Nokia Corporation Method and apparatus for automated interfaces
US8984119B2 (en) 2010-11-05 2015-03-17 International Business Machines Corporation Changing an event identifier of a transient event in an event notification system
US20120131645A1 (en) * 2010-11-18 2012-05-24 Harm Michael W User Scriptable Server Initiated User Interface Creation
US8667126B2 (en) 2010-12-03 2014-03-04 International Business Machines Corporation Dynamic rate heartbeating for inter-node status updating
US9286061B2 (en) * 2010-12-14 2016-03-15 Microsoft Technology Licensing, Llc Generating and managing electronic documentation
US8713365B2 (en) 2011-01-28 2014-04-29 Microsoft Corporation Re-establishing push notification channels via user identifiers
US8649268B2 (en) 2011-02-04 2014-02-11 Twilio, Inc. Method for processing telephony sessions of a network
US8634330B2 (en) 2011-04-04 2014-01-21 International Business Machines Corporation Inter-cluster communications technique for event and health status communications
US20140044123A1 (en) 2011-05-23 2014-02-13 Twilio, Inc. System and method for real time communicating with a client application
WO2012162397A1 (en) 2011-05-23 2012-11-29 Twilio, Inc. System and method for connecting a communication to a client
US9325378B2 (en) * 2011-06-14 2016-04-26 Broadcom Corporation Computing device multiple display topology detection over radio
TWI503018B (zh) * 2011-07-05 2015-10-01 Htc Corp 無線服務提供方法
CN102880618A (zh) * 2011-07-15 2013-01-16 国际商业机器公司 用于网页文档搜索的方法及系统
US20150052212A1 (en) * 2011-07-19 2015-02-19 Iqtell.Com, Llc System and Method for Processing Electronic Mail
US10182147B2 (en) 2011-09-21 2019-01-15 Twilio Inc. System and method for determining and communicating presence information
US20130139113A1 (en) * 2011-11-30 2013-05-30 Microsoft Corporation Quick action for performing frequent tasks on a mobile device
US9495227B2 (en) 2012-02-10 2016-11-15 Twilio, Inc. System and method for managing concurrent events
US9438695B2 (en) * 2012-03-21 2016-09-06 Servicetrace E.K. Process and apparatus for executing workflow scripts
US9158563B2 (en) 2012-03-27 2015-10-13 Microsoft Technology Licensing, Llc Dynamic plugin(s) for cloud application(s)
US9015682B1 (en) * 2012-03-28 2015-04-21 Google Inc. Computer code transformations to create synthetic global scopes
US9602586B2 (en) 2012-05-09 2017-03-21 Twilio, Inc. System and method for managing media in a distributed communication network
US9247062B2 (en) 2012-06-19 2016-01-26 Twilio, Inc. System and method for queuing a communication session
US20130346274A1 (en) * 2012-06-25 2013-12-26 Liquid Holdings Group, Inc. Electronic financial trading platform with real-time data analysis and reporting
US8677332B1 (en) 2012-06-26 2014-03-18 Google Inc. Executing multiple child code blocks via a single compiled parent code block
US9690748B1 (en) * 2012-07-02 2017-06-27 Amazon Technologies, Inc. Delivering notifications to background applications
EP2875442B1 (en) * 2012-07-17 2017-09-06 Good Technology Holdings Limited Systems and methods for facilitating service provision between applications
US8737962B2 (en) 2012-07-24 2014-05-27 Twilio, Inc. Method and system for preventing illicit use of a telephony platform
US9756120B2 (en) 2012-07-31 2017-09-05 Hewlett-Packard Development Company, L.P. Computing device with automatic download and installation of a new plug-in
US9946557B2 (en) 2012-07-31 2018-04-17 Hewlett-Packard Development Company, L.P. Computing device with script execution application
KR102004986B1 (ko) * 2012-09-17 2019-07-29 삼성전자주식회사 어플리케이션 실행 방법 및 시스템, 단말과 그 기록 매체
CN102868596B (zh) * 2012-09-20 2015-07-29 腾讯科技(深圳)有限公司 一种网络社交互动方法及相关设备、系统
US9588777B2 (en) * 2012-10-10 2017-03-07 Landmark Graphics Corporation Method and system of knowledge transfer between users of a software application
US8938053B2 (en) 2012-10-15 2015-01-20 Twilio, Inc. System and method for triggering on platform usage
US10346422B2 (en) * 2012-10-18 2019-07-09 International Business Machines Corporation Use of proxy objects for integration between a content management system and a case management system
US20140114864A1 (en) * 2012-10-22 2014-04-24 International Business Machines Corporation Case management integration with external content repositories
US20140136937A1 (en) * 2012-11-09 2014-05-15 Microsoft Corporation Providing and procuring worksheet functions through an online marketplace
US20140173269A1 (en) * 2012-12-18 2014-06-19 Apple Inc. Event Sharing Protocol for Data Processing Devices
US20140173405A1 (en) * 2012-12-19 2014-06-19 Google Inc. Using custom functions to dynamically manipulate web forms
US9282124B2 (en) 2013-03-14 2016-03-08 Twilio, Inc. System and method for integrating session initiation protocol communication in a telecommunications platform
US8769031B1 (en) 2013-04-15 2014-07-01 Upfront Media Group, Inc. System and method for implementing a subscription-based social media platform
US9910895B2 (en) 2013-06-07 2018-03-06 Apple Inc. Push subscriptions
US9240966B2 (en) 2013-06-19 2016-01-19 Twilio, Inc. System and method for transmitting and receiving media messages
US9225840B2 (en) 2013-06-19 2015-12-29 Twilio, Inc. System and method for providing a communication endpoint information service
US9137127B2 (en) 2013-09-17 2015-09-15 Twilio, Inc. System and method for providing communication platform metadata
US9274858B2 (en) 2013-09-17 2016-03-01 Twilio, Inc. System and method for tagging and tracking events of an application platform
US9171168B2 (en) * 2013-09-30 2015-10-27 Hewlett-Packard Development Company, L.P. Determine anomalies in web application code based on authorization checks
US9672200B1 (en) * 2013-11-06 2017-06-06 Apttex Corporation Spreadsheet with dynamic cell dimensions generated by a spreadsheet template based on remote application values
US9325624B2 (en) 2013-11-12 2016-04-26 Twilio, Inc. System and method for enabling dynamic multi-modal communication
US9553799B2 (en) 2013-11-12 2017-01-24 Twilio, Inc. System and method for client communication in a distributed telephony network
US9271137B2 (en) * 2013-12-31 2016-02-23 Verizon Patent And Licensing Inc. Orchestrating user devices to form images at venue events
US20150242431A1 (en) * 2014-02-25 2015-08-27 Ca, Inc. Computer system log file analysis based on field type identification
WO2015130273A1 (en) 2014-02-26 2015-09-03 Empire Technology Development Llc Presence-based device mode modification
US9344573B2 (en) 2014-03-14 2016-05-17 Twilio, Inc. System and method for a work distribution service
US9226217B2 (en) * 2014-04-17 2015-12-29 Twilio, Inc. System and method for enabling multi-modal communication
CN104049767A (zh) * 2014-05-19 2014-09-17 技嘉科技股份有限公司 触发开启宏的输入系统
US9516101B2 (en) 2014-07-07 2016-12-06 Twilio, Inc. System and method for collecting feedback in a multi-tenant communication platform
US9774687B2 (en) 2014-07-07 2017-09-26 Twilio, Inc. System and method for managing media and signaling in a communication platform
US9251371B2 (en) 2014-07-07 2016-02-02 Twilio, Inc. Method and system for applying data retention policies in a computing platform
US9749428B2 (en) 2014-10-21 2017-08-29 Twilio, Inc. System and method for providing a network discovery service platform
US10628800B2 (en) * 2014-10-28 2020-04-21 Sugarcrm Inc. Meeting launcher
US10951540B1 (en) * 2014-12-22 2021-03-16 Amazon Technologies, Inc. Capture and execution of provider network tasks
US9477975B2 (en) 2015-02-03 2016-10-25 Twilio, Inc. System and method for a media intelligence platform
US10419891B2 (en) 2015-05-14 2019-09-17 Twilio, Inc. System and method for communicating through multiple endpoints
US9948703B2 (en) 2015-05-14 2018-04-17 Twilio, Inc. System and method for signaling through data storage
US9824351B2 (en) 2015-05-27 2017-11-21 Bank Of America Corporation Providing access to account information using authentication tokens
US9830591B2 (en) 2015-05-27 2017-11-28 Bank Of America Corporation Providing access to account information using authentication tokens
US10055110B2 (en) * 2015-07-27 2018-08-21 Oracle International Corporation Simulating a user interface to submit data received from a device
EP3133844B8 (en) * 2015-08-17 2019-09-11 Fanpictor AG Identification of selected mobile computing devices at a venue
US9965618B1 (en) * 2015-08-27 2018-05-08 Amazon Technologies, Inc. Reducing privileges for imported software packages
US9910668B2 (en) * 2015-09-10 2018-03-06 International Business Machines Corporation Sensor-driven eventing and two stage notification
CN106550002B (zh) * 2015-09-23 2019-12-13 中移(杭州)信息技术有限公司 一种paas云托管系统及方法
EP3369004A1 (en) * 2015-10-28 2018-09-05 Ent. Services Development Corporation LP Associating a user-activatable element with recorded user actions
US10659349B2 (en) 2016-02-04 2020-05-19 Twilio Inc. Systems and methods for providing secure network exchanged for a multitenant virtual private cloud
US10686902B2 (en) 2016-05-23 2020-06-16 Twilio Inc. System and method for a multi-channel notification service
US10063713B2 (en) 2016-05-23 2018-08-28 Twilio Inc. System and method for programmatic device connectivity
JP6701961B2 (ja) * 2016-05-27 2020-05-27 株式会社リコー 情報処理システム、情報処理装置、情報処理方法、及びプログラム
US10114616B2 (en) * 2016-08-04 2018-10-30 International Business Machines Corporation Discovery for pattern utilization for application transformation and migration into the cloud pattern
US11210459B1 (en) 2016-09-23 2021-12-28 Massachusetts Mutual Life Insurance Company Systems, devices, and methods for software coding
US11138370B1 (en) 2016-09-23 2021-10-05 Massachusetts Mututal Life Insurance Company Modifying and using spreadsheets to create a GUI on another device
US10540152B1 (en) * 2016-09-23 2020-01-21 Massachusetts Mutual Life Insurance Company Systems, devices, and methods for software coding
CN106411938A (zh) * 2016-11-22 2017-02-15 北京奇虎科技有限公司 一种用于对用户终端内的应用进行控制的设备及方法
US10496737B1 (en) * 2017-01-05 2019-12-03 Massachusetts Mutual Life Insurance Company Systems, devices, and methods for software coding
US10862979B2 (en) * 2017-04-07 2020-12-08 Microsoft Technology Licensing, Llc Techniques for supporting remote micro-services as native functions in spreadsheet applications
US10791105B2 (en) * 2017-04-07 2020-09-29 Microsoft Technology Licensing, Llc Credential-based proactive discovery of remote micro-services by spreadsheet applications
KR101897612B1 (ko) * 2017-04-14 2018-09-12 계명대학교 산학협력단 IoT 환경에서 패킷 분류를 위한 와일드카드 비율 기반 판별 트리 생성 방법 및 시스템
US10769560B1 (en) * 2017-05-10 2020-09-08 Massachusetts Mutual Life Insurance Company Systems and methods for chatbot applications tracking user stress levels
CN107451112B (zh) * 2017-07-24 2024-01-23 网易(杭州)网络有限公司 表格工具数据检查方法、装置、终端设备及存储介质
US10586017B2 (en) * 2017-08-31 2020-03-10 International Business Machines Corporation Automatic generation of UI from annotation templates
US10771463B2 (en) 2017-10-30 2020-09-08 International Business Machines Corporation Third-party authorization of access tokens
CN108399654B (zh) * 2018-02-06 2021-10-22 北京市商汤科技开发有限公司 描边特效程序文件包的生成及描边特效生成方法与装置
JP7146458B2 (ja) * 2018-05-31 2022-10-04 シャープ株式会社 情報処理装置
CN108833150A (zh) * 2018-06-04 2018-11-16 郑州云海信息技术有限公司 一种告警方法及装置
KR102054663B1 (ko) * 2018-06-22 2020-01-22 동명대학교산학협력단 소스코드 가공 방식의 웹브라우저용 매크로 시스템
US10749875B2 (en) * 2018-06-28 2020-08-18 Microsoft Technology Licensing, Llc Security configuration lifecycle account protection for minors
RU2697796C1 (ru) * 2018-11-26 2019-08-20 Общество с ограниченной ответственностью "АЙХАЙ" Логический конструктор макросов
US11610058B1 (en) 2019-01-29 2023-03-21 Hitps Llc Systems and methods for reflexive questionnaire generation
CN110032366B (zh) * 2019-04-19 2022-07-22 北京奇艺世纪科技有限公司 一种代码定位方法及装置
US11568054B2 (en) 2019-06-11 2023-01-31 Micro Focus Llc Web application login macro generation and verification
CN110290212B (zh) * 2019-06-28 2020-06-23 浙江大搜车软件技术有限公司 服务调用记录方法、装置、计算机设备和存储介质
US11204789B2 (en) 2019-08-20 2021-12-21 Hyland Software Inc. Graphical user interface for macro generation, modification, and verification
US11144338B2 (en) * 2019-08-20 2021-10-12 Hyland Software, Inc. Computing system for macro generation, modification, verification, and execution
JP2021060751A (ja) * 2019-10-04 2021-04-15 キヤノン株式会社 情報処理装置とその制御方法、及びプログラム
KR102284646B1 (ko) * 2019-10-25 2021-08-03 소프트캠프 주식회사 문서 파일에 구성된 매크로의 악성코드 감염 확인 방법과 시스템
CN113170283A (zh) * 2020-04-14 2021-07-23 思杰系统有限公司 基于到应用用户的消息触发事件通知
US11848976B2 (en) * 2020-06-30 2023-12-19 Oracle International Corporation Custom action invocation in a speadsheet integrated with web services
TWI789849B (zh) * 2021-01-26 2023-01-11 緯穎科技服務股份有限公司 儲存裝置載具、儲存裝置組件與伺服器
KR102346480B1 (ko) * 2021-04-30 2022-01-03 주식회사 넷앤드 매크로 기반 어플리케이션 계정 관리 시스템
US11782712B2 (en) * 2022-02-01 2023-10-10 Better Holdco, Inc. Extensible event bus architecture

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001216211A (ja) 1999-11-24 2001-08-10 Sharp Corp インターネットサービス提供システムおよび方法、ならびにインターネットサービス提供システムで用いられるマクロサーバ
US20020129264A1 (en) 2001-01-10 2002-09-12 Rowland Craig H. Computer security and management system
US20050033855A1 (en) 2003-08-05 2005-02-10 Ahmad Moradi Method and apparatus for generating and marketing video e-mail and an intelligent video streaming server

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6658453B1 (en) 1998-05-28 2003-12-02 America Online, Incorporated Server agent system
JP2000155743A (ja) 1999-01-01 2000-06-06 Hitachi Ltd 処理システム
US6154766A (en) * 1999-03-23 2000-11-28 Microstrategy, Inc. System and method for automatic transmission of personalized OLAP report output
US6567796B1 (en) * 1999-03-23 2003-05-20 Microstrategy, Incorporated System and method for management of an automatic OLAP report broadcast system
US6529784B1 (en) * 2000-02-29 2003-03-04 Caldera Systems, Inc. Method and apparatus for monitoring computer systems and alerting users of actual or potential system errors
CA2404014A1 (en) * 2000-03-30 2001-10-11 Cygent, Inc. System and method for establishing electronic business systems for supporting communications services commerce
US20020065947A1 (en) * 2000-07-13 2002-05-30 Clayton Wishoff Software application agent interface
US6944662B2 (en) * 2000-08-04 2005-09-13 Vinestone Corporation System and methods providing automatic distributed data retrieval, analysis and reporting services
JP2003331061A (ja) * 2002-05-14 2003-11-21 Akira Miyake 医薬情報の通知システム及びこれに使用する電子機器
US20070022155A1 (en) * 2002-08-22 2007-01-25 Owens David H Method and system for integrating enterprise software applications with desktop software applications
US7475123B2 (en) * 2002-11-18 2009-01-06 Sap Ag Web service integration
US6941134B2 (en) * 2002-12-19 2005-09-06 Cingular Wireless Ii, Llc Automated device behavior management based on preset preferences
US7284054B2 (en) * 2003-04-11 2007-10-16 Sun Microsystems, Inc. Systems, methods, and articles of manufacture for aligning service containers
JP2005182596A (ja) * 2003-12-22 2005-07-07 Fuji Xerox Co Ltd 談話形成支援装置および方法
US20050240372A1 (en) * 2004-04-23 2005-10-27 Monk John M Apparatus and method for event detection
US20060070075A1 (en) 2004-09-03 2006-03-30 Sergei Rodionov Server-recorded macros and web application automation
US6990335B1 (en) * 2004-11-18 2006-01-24 Charles G. Shamoon Ubiquitous connectivity and control system for remote locations
JPWO2006104217A1 (ja) * 2005-03-29 2008-09-11 松下電器産業株式会社 携帯端末
US7673055B2 (en) * 2005-06-23 2010-03-02 Research In Motion Limited System and method for automatically responding to a received communication
US7716637B2 (en) * 2005-12-15 2010-05-11 Microsoft Corporation Embedded macros
US8244745B2 (en) * 2005-12-29 2012-08-14 Nextlabs, Inc. Analyzing usage information of an information management system
WO2007098421A2 (en) * 2006-02-17 2007-08-30 Google Inc. User distributed search results
WO2007100228A1 (en) 2006-03-02 2007-09-07 Mtome Co., Ltd A system and method for contents upload using a mobile terminal
US8307119B2 (en) * 2006-03-31 2012-11-06 Google Inc. Collaborative online spreadsheet application
US20070238450A1 (en) * 2006-04-07 2007-10-11 Lena Hogberg Software activation in a mobile terminal
US20090006996A1 (en) * 2006-08-07 2009-01-01 Shoumen Saha Updating Content Within A Container Document For User Groups
US20080104042A1 (en) * 2006-10-25 2008-05-01 Microsoft Corporation Personalized Search Using Macros
WO2008108337A1 (ja) * 2007-03-06 2008-09-12 Nec Corporation 端末データ共有方法及び共有データ表示方法
CN101203041B (zh) * 2007-04-19 2011-09-07 高建宏 利用移动定位技术实现自动联接附近出租车的方法和系统
JP2008304964A (ja) * 2007-06-05 2008-12-18 Hitachi Ltd 広告仲介サーバ、動線情報仲介サーバ及び電子マネー等付与サーバ
CN101498585A (zh) * 2007-08-12 2009-08-05 郑志豪 出租车导航系统
US20090300474A1 (en) * 2008-05-29 2009-12-03 Centralytics, Inc. Computer-based architecture using remotely-controlled electronic grid-based calculators

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001216211A (ja) 1999-11-24 2001-08-10 Sharp Corp インターネットサービス提供システムおよび方法、ならびにインターネットサービス提供システムで用いられるマクロサーバ
US20020129264A1 (en) 2001-01-10 2002-09-12 Rowland Craig H. Computer security and management system
US20050033855A1 (en) 2003-08-05 2005-02-10 Ahmad Moradi Method and apparatus for generating and marketing video e-mail and an intelligent video streaming server

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102551882B1 (ko) 2022-06-15 2023-07-04 여철석 전자상거래 주문내역 자동 연계 입력 시스템

Also Published As

Publication number Publication date
JP2013502013A (ja) 2013-01-17
EP2465044A2 (en) 2012-06-20
US20110041140A1 (en) 2011-02-17
JP5648056B2 (ja) 2015-01-07
AU2010282359B2 (en) 2015-12-10
KR20120068863A (ko) 2012-06-27
AU2016201394A1 (en) 2016-03-24
US20140325531A1 (en) 2014-10-30
AU2016201394B2 (en) 2017-03-23
WO2011020043A3 (en) 2011-06-16
WO2011020043A2 (en) 2011-02-17
AU2010282359A1 (en) 2012-02-23
US8713584B2 (en) 2014-04-29
CN102498483A (zh) 2012-06-13
CN102498483B (zh) 2016-01-20
US20140317640A1 (en) 2014-10-23
KR101774967B1 (ko) 2017-09-05
EP2465044B1 (en) 2017-01-11
KR20160060783A (ko) 2016-05-30
JP2015018570A (ja) 2015-01-29
EP2465044A4 (en) 2013-05-29
CN105487922A (zh) 2016-04-13
JP5933660B2 (ja) 2016-06-15

Similar Documents

Publication Publication Date Title
KR101668365B1 (ko) 이벤트-트리거형 서버측 매크로들
KR101557322B1 (ko) 호스트형 컴퓨터 환경에서 가상 오브젝트 우회
EP2465045B1 (en) Shared server-side macros
US8332878B2 (en) User scriptable server initiated user interface creation
US10356126B2 (en) Communication between frames of a web browser
US20180349269A1 (en) Event triggered data retention
KR20220108179A (ko) 프라이버시 보호 가상 이메일 시스템
WO2012067618A1 (en) User scriptable server initiated user interface creation

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
A107 Divisional application of patent
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20191008

Year of fee payment: 4