(57)【要約】  コンテナ階層は、設計時ツールのユーザインターフェイスで受信される。コンテナ階層は、１つ以上の他のコンテナの内部にネストされたコンテナを包含する。各コンテナは、ウェブクライアントアプリケーションの異なる部分を含む。設計時ツールは、コンテナ階層中の各コンテナに状態を関連付ける。各コンテナのライフサイクルは、ユーザインターフェイスで受信される。設計時ツールは、ウェブクライアントアプリケーションにおいて、階層に従って、各コンテナのライフサイクルに基づいて、各コンテナの状態を作成および破棄することを可能にするコンピュータ実行可能命令を作成する。設計時ツールは、各コンテナに関連付けられたライフサイクルイベントに基づいて、各コンテナ自体の状態および当該コンテナを包含するコンテナの状態に対するアクセスを各コンテナに提供する。
2020535548.tif 000002
【特許請求の範囲】
【請求項１】
状態管理永続性を提供するための方法を実行させるための命令を含む非一時的なプロセッサ可読記憶装置であって、前記方法は、
設計時ツールのユーザインターフェイスで、１つ以上の他のコンテナの内部にネストされたコンテナを包含するコンテナ階層を受信することを含み、各コンテナは、ウェブクライアントアプリケーションの異なる部分を含み、
前記設計時ツールを用いて、前記コンテナ階層内の各コンテナに状態を関連付けることと、
前記設計時ツールの前記ユーザインターフェイスで、各コンテナのライフサイクルを受信することと、
前記設計時ツールを用いて、前記階層に従って、各コンテナの前記ライフサイクルに基づいて、各コンテナの状態を作成および破棄することを可能にするコンピュータ実行可能命令を前記ウェブクライアントアプリケーションに作成することと、
前記設計時ツールを用いて、各コンテナに関連付けられた前記ライフサイクルイベントに基づいて、各コンテナ自体の状態および当該コンテナを包含するコンテナの状態に対するアクセスを各コンテナに提供することとを含む、非一時的なプロセッサ可読記憶装置。
【請求項２】
前記方法は、
前記ユーザインターフェイスで、第１のコンテナの第１のライフサイクルにおける第１のイベントの詳細を受信することと、
前記第１のイベントを前記第１のコンテナの状態の作成に関連付けることと、
前記ユーザインターフェイスで、第２のコンテナの第２のライフサイクルにおける第２のイベントの詳細を受信することと、
前記第２のイベントを前記第２のコンテナの状態の作成に関連付けることとをさらに含む、請求項１に記載の非一時的なプロセッサ可読記憶装置。
【請求項３】
前記第１のイベントと前記第２のイベントとは、異なる種類のイベントである、請求項２に記載の非一時的なプロセッサ可読記憶装置。
【請求項４】
前記方法は、
前記ユーザインターフェイスで、第１のコンテナの第１のライフサイクルにおける第１のイベントの詳細を受信することと、
前記第１のイベントを前記第１のコンテナの状態の破棄に関連付けることと、
前記ユーザインターフェイスで、第２のコンテナの第２のライフサイクルにおける第２のイベントの詳細を受信することと、
前記第２のイベントを前記第２のコンテナの状態の破棄に関連付けることとをさらに含む、請求項１に記載の非一時的なプロセッサ可読記憶装置。
【請求項５】
前記第１のイベントと前記第２のイベントとは、異なる種類のイベントである、請求項４に記載の非一時的なプロセッサ可読記憶装置。
【請求項６】
前記方法は、
前記ウェブクライアントアプリケーションの実行中に第１のコンテナから第２のコンテナにナビゲートしたことに応答して、
前記第１のコンテナの状態を破棄することと、
第３のコンテナの状態を保存することと、
前記第２のコンテナの状態を作成することと、
保存された前記第３のコンテナの状態に対するアクセスを前記第２のコンテナに提供することとをさらに含み、
前記第１のコンテナと前記第２のコンテナの両方は、前記第３のコンテナに含まれ、
前記ナビゲーションは、前記第１のコンテナのライフサイクルイベントをトリガーする、請求項１に記載の非一時的なプロセッサ可読記憶装置。
【請求項７】
前記方法は、
前記コンテナをユニフォームリソースロケータ（ＵＲＬ）パターンの部分に関連付けることをさらに含み、
前記ＵＲＬパターンの各部分は、各コンテナに関連付けられる、請求項１に記載の非一時的なプロセッサ可読記憶装置。
【請求項８】
前記ＵＲＬパターンの各部分は、対応するライフサイクルを維持する、請求項７に記載の非一時的なプロセッサ可読記憶装置。
【請求項９】
前記方法は、
前記ＵＲＬパターンに関連付けられた階層経路に従って、前記コンテナの一部を実行することと、
前記ＵＲＬパターンに基づいて、前記コンテナの変数を作成することと、
前記ＵＲＬパターンに基づいて、前記コンテナの変数を破棄することとをさらに含む、請求項７に記載の非一時的なプロセッサ可読記憶装置。
【請求項１０】
前記方法は、
特定のコンテナの変数に対するアクセスおよび前記特定のコンテナに対応する階層経路に従って前記特定のコンテナを包含するコンテナの変数に対するアクセスを前記特定のコンテナに提供することをさらに含む、請求項９に記載の非一時的なプロセッサ可読記憶装置。
【請求項１１】
状態管理永続性を提供するための方法であって、
設計時ツールのユーザインターフェイスで、１つ以上の他のコンテナの内部にネストされたコンテナを包含するコンテナ階層を受信することを含み、各コンテナは、ウェブクライアントアプリケーションの異なる部分を含み、
前記設計時ツールを用いて、前記コンテナ階層内の各コンテナに状態を関連付けることと、
前記設計時ツールの前記ユーザインターフェイスで、各コンテナのライフサイクルを受信することと、
前記設計時ツールを用いて、前記階層に従って、各コンテナの前記ライフサイクルに基づいて、各コンテナの状態を作成および破棄することを可能にするコンピュータ実行可能命令を前記ウェブクライアントアプリケーションに作成することと、
前記設計時ツールを用いて、各コンテナに関連付けられた前記ライフサイクルイベントに基づいて、各コンテナ自体の状態および当該コンテナを包含するコンテナの状態に対するアクセスを各コンテナに提供することとを含む、方法。
【請求項１２】
前記ユーザインターフェイスで、第１のコンテナの第１のライフサイクルにおける第１のイベントの詳細を受信することと、
前記第１のイベントを前記第１のコンテナの状態の作成に関連付けることと、
前記ユーザインターフェイスで、第２のコンテナの第２のライフサイクルにおける第２のイベントの詳細を受信することと、
前記第２のイベントを前記第２のコンテナの状態の作成に関連付けることとをさらに含む、請求項１１記載の方法。
【請求項１３】
前記第１のイベントと前記第２のイベントとは、異なる種類のイベントである、請求項１２に記載の方法。
【請求項１４】
前記ユーザインターフェイスで、第１のコンテナの第１のライフサイクルにおける第１のイベントの詳細を受信することと、
前記第１のイベントを前記第１のコンテナの状態の破棄に関連付けることと、
前記ユーザインターフェイスで、第２のコンテナの第２のライフサイクルにおける第２のイベントの詳細を受信することと、
前記第２のイベントを前記第２のコンテナの状態の破棄に関連付けることとをさらに含む、請求項１１記載の方法。
【請求項１５】
前記第１のイベントと前記第２のイベントとは、異なる種類のイベントである、請求項１４に記載の方法。
【請求項１６】
前記ウェブクライアントアプリケーションの実行中に第１のコンテナから第２のコンテナにナビゲートしたことに応答して、
前記第１のコンテナの状態を破棄することと、
第３のコンテナの状態を保存することと、
前記第２のコンテナの状態を作成することと、
保存された前記第３のコンテナの状態に対するアクセスを前記第２のコンテナに提供することとをさらに含み、
前記第１のコンテナと前記第２のコンテナの両方は、前記第３のコンテナに含まれ、
前記ナビゲーションは、前記第１のコンテナのライフサイクルイベントをトリガーする、請求項１１に記載の方法。
【請求項１７】
前記方法は、
前記コンテナをユニフォームリソースロケータ（ＵＲＬ）パターンの部分に関連付けることをさらに含み、
前記ＵＲＬパターンの各部分は、各コンテナに関連付けられる、請求項１１に記載の方法。
【請求項１８】
前記ＵＲＬパターンの各部分は、対応するライフサイクルを維持する、請求項１７に記載の方法。
【請求項１９】
前記ＵＲＬパターンに関連付けられた階層経路に従って、前記コンテナの一部を実行することと、
前記ＵＲＬパターンに基づいて、前記コンテナの変数を作成することと、
前記ＵＲＬパターンに基づいて、前記コンテナの変数を破棄することとをさらに含む、請求項１７に記載の方法。
【請求項２０】
状態管理永続性を提供するための設計時ツールであって、
１つ以上のプロセッサと、
非一時的なプロセッサ可読記憶装置とを備え、
前記非一時的なプロセッサ可読記憶装置は、以下の操作を実行させるための命令を含み、これらの操作は、
設計時ツールのユーザインターフェイスで、１つ以上の他のコンテナの内部にネストされたコンテナを包含するコンテナ階層を受信することを含み、各コンテナは、ウェブクライアントアプリケーションの異なる部分を含み、
前記設計時ツールを用いて、前記コンテナ階層内の各コンテナに状態を関連付けることと、
前記設計時ツールの前記ユーザインターフェイスで、各コンテナのライフサイクルを受信することと、
前記設計時ツールを用いて、前記階層に従って、各コンテナの前記ライフサイクルに基づいて、各コンテナの状態を作成および破棄することを可能にするコンピュータ実行可能命令を前記ウェブクライアントアプリケーションに作成することと、
前記設計時ツールを用いて、各コンテナに関連付けられた前記ライフサイクルイベントに基づいて、各コンテナ自体の状態および当該コンテナを包含するコンテナの状態に対するアクセスを各コンテナに提供することとを含む、設計時ツール。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本願は、２０１８年６月７日に提出され、「状態管理永続性」と題された米国特許出願第１６／００３０２３号、２０１７年９月２８日に提出され、「状態管理永続性」と題された米国仮特許出願第６２／５６４９４５号（参照番号ＯＲＡＣＰ０２０８Ｐ−１／ＯＲＡ１８０３００−ＵＳ−ＰＳＰ）および２０１８年２月１２日に提出され、「状態管理永続性」と題された米国仮特許出願第６２／６２９５２３号（参照番号ＯＲＡＣＰ０２０８Ｐ−２／ＯＲＡ１８０３００−ＵＳ−ＰＳＰ−２）、並びに２０１７年９月２８日に提出され、「ルータ設定」と題された米国仮特許出願第６２／５６４９４６号（参照番号ＯＲＡＣＰ０２０９−１／ＯＲＡ１８０３０１−ＵＳ−ＰＳＰ）および２０１８年２月１２日に提出され、「ルータ設定」と題された米国仮特許出願第６２／６２９５２６号（参照番号ＯＲＡＣＰ０２０９Ｐ−２／ＯＲＡ１８０３０１−ＵＳ−ＰＳＰ−２）の優先権を主張し、これらの出願の内容の全体は、あらゆる目的のために参照によって本願に組み込まれる。
【背景技術】
【０００２】
背景
プロセスとは、機能を実現するために実行されるコードの一部である。並列処理システムにおいて、複数のプロセスを同時に実行することができる。これらのプロセスのうち２つ以上のプロセスは、共有している状態（「共有状態」とも呼ばれる）を更新することができる。２つ以上のプロセスが共有状態を同時にまたはほぼ同時に更新する場合、競合を引き起こす可能性がある。例えば、２つのプロセスが変数Ｙを共有しており、第１のプロセスが変数Ｙの値を４に更新し、第２のプロセスが変数Ｙの値を５に更新した場合、第１のプロセスの更新は、消去される。
【０００３】
従来では、複数の並列プロセスが共有状態を同時に更新するという問題は、まったく対処されなかった、またはロック、ミューテックスまたはクリティカルセクションなどの高度なプログラミングメカニズムを使用して対処された。例えば、従来では、高度なプログラミングメカニズムは、第１のプロセスおよび第２のプロセスに対応する命令の同時実行を防止する。したがって、第１のプロセスおよび第２のプロセスの実行は、相互に排他的である。しかしながら、このような高度なプログラミングメカニズムを使用するコードを作成するために、開発者は、高度なプログラミングスキルを有する必要がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
設コンテナ階層は、計時ツールのユーザインターフェイスで受信される。コンテナ階層は、１つ以上の他のコンテナの内部にネストされたコンテナを包含する。各コンテナは、ウェブクライアントアプリケーションの異なる部分を含む。設計時ツールは、コンテナ階層中の各コンテナに状態を関連付ける。各コンテナのライフサイクルは、ユーザインターフェイスで受信される。設計時ツールは、ウェブクライアントアプリケーションにおいて、階層に従って、各コンテナのライフサイクルに基づいて、各コンテナの状態を作成および破棄することを可能にするコンピュータ実行可能命令を作成する。設計時ツールは、各コンテナに関連付けられたライフサイクルイベントに基づいて、各コンテナ自体の状態および当該コンテナを包含するコンテナの状態に対するアクセスを各コンテナに提供する。
【０００５】
一実施形態は、状態管理永続性を提供するための方法を実行させるための命令を含む非一時的なプロセッサ可読記憶装置を提供する。方法は、設計時ツールのユーザインターフェイスで、１つ以上の他のコンテナの内部にネストされたコンテナを包含するコンテナ階層を受信することを含み、各コンテナは、ウェブクライアントアプリケーションの異なる部分を含み、設計時ツールを用いて、コンテナ階層内の各コンテナに状態を関連付けることと、設計時ツールのユーザインターフェイスで、各コンテナのライフサイクルを受信することと、設計時ツールを用いて、階層に従って、各コンテナのライフサイクルに基づいて、各コンテナの状態を作成および破棄することを可能にするコンピュータ実行可能命令をウェブクライアントアプリケーションに作成することと、設計時ツールを用いて、各コンテナに関連付けられたライフサイクルイベントに基づいて、各コンテナ自体の状態および当該コンテナを包含するコンテナの状態に対するアクセスを各コンテナに提供することとを含む。
【０００６】
本明細書に開示された特定の実施形態の本質および利点のさらなる理解は、以下の説明および添付の図面を参照することによって実現され得る。
【図面の簡単な説明】
【０００７】
【図１】様々な実施形態に従って、ＵＲＬを示す図である。
【図２】一実施形態に従って、コンテナ階層を示すブロック図である。
【図３】様々な実施形態に従って、コンテナの構成を示す図である。
【図４】様々な実施形態に従って、システムを示す図である。
【図５Ａ】一実施形態に従って、並列に実行されている動作チェーンを示す図である。
【図５Ｂ】一実施形態に従って、スナップショットの実装を示す図である。
【図６】一実施形態に従って、クライアントアプリケーションのＵＩの一部であるボタンの動作チェーンを作成するためのページを示す図である。
【図７】一実施形態に従って、設定パネルページのスクリーンショットを示す図である。
【図８】一実施形態に従って、ライフサイクルイベントをユーザインターフェイスコンポーネントに関連付けるためのウェブページを示す図である。
【図９】一実施形態に従って、検証コードを生成するためのウェブページを示す図である。
【図１０】一実施形態に従って、動作チェーンを選択するためのウェブページを示す図である。
【図１１】一実施形態に従って、開発者がページを使用する動作チェーンに必要な入力パラメータをマッピングするために使用できるウェブページを示す図である。
【図１２】一実施形態に従って、未熟練開発者がユーザインターフェイス（ＵＩ）コンポーネントをコンポーネントイベントに関連付けるために使用できるウェブページを示す図である。
【図１３】一実施形態に従って、イベントリストを含むウェブページを示す図である。
【図１４】一実施形態に従って、入力パラメータを指定するためのプロパティインスペクタを示す図である。
【図１５】一実施形態に従って、ページ選択ボタンを備えたプロパティインスペクタを示す図である。
【図１６】一実施形態に従って、開発者が作成しているクライアントアプリケーション内のページリストを示すページ選択ダイアログボックスを示す図である。
【図１７】一実施形態に従って、動作の名前を指定するためのプロパティインスペクタを示す図である。
【図１８】一実施形態に従って、変数をパラメータにマッピングするためのダイアログボックスを示す図である。
【図１９】一実施形態に従って、状態管理永続性を提供するための方法を示すフローチャートである。
【図２０】一実施形態に従って、ルータ設定を示すフローチャートである。
【図２１】一実施形態に従って、システムを示す図である。
【図２２】本明細書の図面に示された実施形態を実施するために使用可能なシステムおよび関連するコンピューティング環境を示す概略ブロック図である。
【図２３】本明細書に記載された実施形態を実施するために使用可能なコンピューティング装置を示す概略ブロック図である。
【発明を実施するための形態】
【０００８】
実施形態の詳細な説明
１つのコンピュータ実行可能命令が状態、例えば変数を変更している間に、別のコンピュータ実行可能命令がその状態を読み取ると、問題が発生する。従来では、この問題は、まったく対処されなかった、またはロック、ミューテックスまたはクリティカルセクションなどの高度なプログラミングメカニズムを用いて対処された。しかしながら、このような高度なプログラミングメカニズムを使用するコードを作成するために、開発者は、高度なプログラミングスキルを有する必要がある。状態管理永続性（state management persistence）の様々な実施形態は、未熟練開発者が、高度なプログラミングメカニズムを使用せず、コードを作成できるように、これらの問題に対処する。
【０００９】
様々な実施形態は、アプリケーション状態の一部を作成、復元および破棄するときの自動処理を提供する。永続性ライフサイクルを用いて、ブラウザの特徴、例えばセッション永続性（session persistence）および履歴状態を模倣することができる。
【００１０】
様々な実施形態は、状態管理の少なくとも２つの特徴、すなわち、コンテナシップ（containership）および存続期間（lifetime）を提供する。
【００１１】
（「スコープ」とも呼ばれる）コンテナシップは、状態の一部がアクティブであるときに作用する。例えば、ページスコープの状態は、ページに含まれる。一実施形態によれば、ページスコープの状態は、ページが閲覧されているときのみ利用可能であり、ユーザがページから離れると利用できなくなる。
【００１２】
永続性とは、システムがその状態を維持する期間を指す。例としてウェブを使用する場合、状態は、ウェブセッションの全体に維持されてもよく（ユーザがブラウザのタブを閉じるまで、状態が存在する）、ウェブセッションの間に維持されてもよく（ユーザがブラウザのタブを閉じて戻ってきた場合に、状態が存在する）、またはブラウザの履歴を模倣するために使用されてもよい（ユーザが「戻る」ボタンを押した場合に、状態が存在するが、ユーザがユーザインターフェイスの一部に直接にナビゲートした場合に、状態が存在しない）。
【００１３】
状態は、コンテナシップと永続性の組み合わせで管理することができる。例えば、ユーザがＵＩと対話してページを表示させる場合、そのページに含まれている全ての状態が初期化され、使用可能になる。永続性の設定によって、状態は、初期化の時にデフォルト値に設定され、保存される。
【００１４】
従来では、ＵＲＬ（uniform resource locator）のみを用いて、ページを表示するための経路を指定した。したがって、ブラウザ内のウェブアプリケーション、モジュール、ページおよびＵＲＬまたはリソースと他のページとは、アプリケーションの構造内に存在するのに拘わらず、互いに独立している。様々な実施形態は、ＵＲＬの一部（本明細書では「ルータ設定」とも呼ばれる）に基づいて、アプリケーション、モジュールおよびページの状態に対する管理を提供する。
【００１５】
様々な実施形態は、アプリケーションを構成するための高度にモジュール化された方法を提供する。この場合、ＵＲＬの各下位経路は、各自の開始／破棄ライフサイクルを含むモジュールを表す。
【００１６】
（本明細書では「スコープ」とも呼ばれる）コンテナシップは、状態の一部がアクティブであるときに作用する。例えば、ページスコープの状態は、ページに含まれる。一実施形態によれば、ページスコープの状態は、ページが閲覧されているときのみ利用可能であり、ユーザがページから離れると利用できなくなる。
【００１７】
例示的なシステム内のコンテナは、ページ（ユーザが閲覧しているＵＩの一頁）、フロー（複数のページ）、アプリケーション（複数のフロー）などであり得る。本明細書に記載された各コンテナは、独立に管理されている各自の状態群を有する。
【００１８】
説明のために、以下のＵＲＬを例として挙げる。
https://mycompany.com/sales/accounts/contact
このＵＲＬは、「mycompany」、「sales」、「accounts」、および「contact」部分に分解することができる。「mycompany.com」は、アプリケーションの全体を表す。「sales」部分および「accounts」部分は、ネストしているフローを各々表す。最後の「contact」は、ウェブブラウザにロードするページを表す。
【００１９】
このＵＲＬの場合、まず、アプリケーションの状態を作成し、次に「sales」フロー、その後「accounts」フロー、最後に「contact」ページの状態を作成することができる。
【００２０】
一例として、ユーザが次のＵＲＬにナビゲートすると仮定する。
https://mycompany.com/sales/opportunity/detail
この場合、ユーザは、同一のアプリケーション、すなわち「mycompany.com」、および「sales」フローに位置している。「accounts」フローおよび「contact」ページから離れた。したがって、一実施形態によれば、システムは、アプリケーションおよび「sales」フローの状態を維持すると共に、「accounts」フローおよび「contact」ページの状態を破棄し、その後、「opportunity」フローおよび「detail」ページの状態を初期化する。
【００２１】
図１は、様々な実施形態に従って、ＵＲＬを示す図である。
各ＵＲＬ１１０、１２０および１３０は、バックスラッシュで区切られた部分１０１〜１０３、１２２、１２３および１３３を含む。各ＵＲＬの最初のバックラッシュ１００は、アプリケーションを表す。ＵＲＬ１１０、１２０および１３０の最後の部分１０３、１２３および１３３は、対応するアプリケーション内のウェブページを表す。各々のＵＲＬ１１０、１２０および１３０の最初のバックスラッシュ１００との間に存在する部分１０１、１２０および１２２は、モジュールを表す。
【００２２】
一実施形態によれば、アプリケーション、モジュールおよびページの各々は、各自のコンテナに位置する。ＵＲＬの各部分を用いて、アプリケーション、モジュールおよびページにおけるナビゲーションを決定し、各コンテナの変数、例えば状態を作成および破棄するタイミングを決定する。
【００２３】
ＵＲＬ１１０、１２０または１３０をブラウザに入力すると、ブラウザは、対応するページを表示する。例えば、ＵＲＬ１１０を入力すると、「ExpenseReports」ページが表示される。ＵＲＬ１２０を入力すると、「Employee」ページが表示される。
【００２４】
図２は、一実施形態に従って、コンテナ階層を示すブロック図である。
アプリケーションコンテナ２１０は、ＳａａＳクラウドモジュールコンテナ２２０、モジュール２５０、およびページ２１１、２１２を含む。ＳａａＳクラウドモジュールコンテナ２２０は、人事モジュールコンテナ２３０および財務モジュールコンテナ２４０を含む。人事モジュールコンテナは、従業員ページコンテナ２３１を含む。財務モジュールコンテナ２４０は、経費報告ページコンテナ２４１および領収書ページコンテナ２４２を含む。モジュールコンテナ２５０は、ページコンテナ２５１および２５２を含む。
【００２５】
コンテナは、コンテナ階層２００に編成される。階層２００内のコンテナは、ネストすることができる。各コンテナに対応する階層の経路（「階層経路」とも呼ばれる）は、当該コンテナを含む複数のコンテナおよび含まれた複数のコンテナの順序によって定義される。例えば、領収書ページコンテナ２４２の階層経路２６１は、アプリケーションコンテナ２１０内部のＳａａＳクラウドモジュールモジュールコンテナ２２０内部の財務モジュールコンテナ２４０内部の領収書ページコンテナ２４２によって定義される。図２は、ネストされた様々なコンテナに沿った他の階層経路２６２〜２６７を示している。一実施形態によれば、各コンテナは、関連する階層経路を有することができる。
【００２６】
図３は、様々な実施形態に従って、コンテナの構成を示している。
モジュールコンテナ３１０は、スコープ３２０およびＪａｖａＳｃｒｉｐｔ（登録商標）コード３３０を含む。スコープ３２０は、モジュールコンテナ３１０によって使用される変数３２１、コンテナ３１０のモジュールの一部として実行される動作チェーン（action chain）３２２、およびモジュールコンテナ３１０のライフサイクル３２３を含む。
【００２７】
ページコンテナ３４０は、ＨＴＭＬ（HyperText Markup Language）３４１、スコープ３５０、およびＪａｖａＳｃｒｉｐｔ３６０を含む。スコープ３５０は、ページコンテナ３４０によって使用される変数３５１、コンテナ３４０のページの一部として実行される動作チェーン３５２、およびページコンテナ３４０のライフサイクル３５３を含む。
【００２８】
アプリケーションコンテナは、１つ以上のモジュールコンテナおよび／または１つ以上のページコンテナを包含することができる。図２に示すように、コンテナは、任意の深度で他のコンテナにネストすることによって、様々な階層経路を有するコンテナ階層を形成することができる。
【００２９】
各コンテナ３１０、３４０は、関連するライフサイクル３２３、３５３を有する。ライフサイクルは、フェーズを含む。フェーズは、例示として、「beforeEnter」ページ、「enter」ページ、「interactable」ページ、ページを終了できることを意味する「canExit」、およびページを終了する前に発生する「beforeExit」フェーズを含む。フェーズは、相互に排他的である。換言すれば、コンテナのライフサイクルにおいて、一度に１つのフェーズしか動作できない。さらに、フェーズは、順番に動作する。より具体的には、「beforeEnter」フェーズの後に「Enter」フェーズが続き、その後に「interactable」フェーズが続き、最後に「beforeExit」フェーズである。
【００３０】
ライフサイクルフェーズは、動作チェーンを開始するために使用できるイベントである。
【００３１】
図４は、様々な実施形態に従ってシステム４００を示す。
システム４００は、ツール４１０、ハードウェアメモリ４２０、データベース４３０、サーバアプリケーション４５０、サーバアプリケーション４６０、クライアントアプリケーション４４０、および要素４１０、４２０、４３０、４５０、４６０と要素４４０との間に通信を行うためのネットワーク４７０を含む。設計時ツール４１０は、ユーザインターフェイス４１１を提供する。クライアントアプリケーション４４０は、コード４４１およびユーザインターフェイス４４２を含む。
【００３２】
一実施形態によれば、クライアントアプリケーション４４０は、ツール４１０でまたはツール４１０によって実行される。ツール４１０およびクライアントアプリケーション４４０は、同一のコンピュータまたは互いに通信する別個のコンピュータ上で実行することができる。
【００３３】
設計時ツール４１０は、クライアントアプリケーション４４０を作成するための、例えばウェブページのユーザインターフェイス４１１を含む。ツール４４０は、開発者または開発チームがクライアントアプリケーション４４０を作成するためにクラウドを介して使用するビジュアルアプリケーション構築機能を提供することができる。ビジュアルビルダークラウドサービス（ＶＢＣＳ）は、本明細書に記載された様々なビジュアルアプリケーション構築機能の実施形態を提供するように変更されている。コード４４１は、開発者または開発チームがユーザインターフェイス４１１に入力したものに基づいて、ツール４４０によって作成されたコンピュータ実行可能命令を含む。
【００３４】
クライアントアプリケーション４４０を設計するときに、ユーザは、ユーザインターフェイス４１１を介して、コード４４１のコンピュータ実行可能命令の作成方法を指定することができる。より具体的には、ユーザインターフェイス４１１を用いて、コンテナ階層２００、図３に示されたコンテナ情報、および本明細書に記載された様々な実施形態を定義および実装するコード４４１を作成することができる。コンテナ階層２００、図３に示されたコンテナ情報、および本明細書に記載された様々な実施形態を定義する情報は、クライアントアプリケーションおよび関連するコードの設計の一部として、ハードウェアメモリ４２０、データベース４３０、クライアントアプリケーション４４０を実行するコンピュータ、および／またはコンピュータ実行ツール４１０に保存することができる。ランタイム実行中に作成されたコード４４１は、上記の情報にアクセスして、様々な実施形態を提供することができる。また、クライアントアプリケーション４４０および関連するコード４４１は、実行中に１つ以上のサーバアプリケーションと通信し、１つ以上のサーバアプリケーションを実行する。コンテナ２３１、２４１および２４２のページは、コード４４１の実行結果として、ユーザインターフェイス４４２に表示される。本明細書に記載されたように、コンテナ２３１、２４１および２４２のページは、例えば、ユーザがクライアントアプリケーション４４０と通信するコンピュータ上で動作するブラウザに入力したＵＲＬに応答して、ブラウザに表示される。
【００３５】
ツール４１０は、例えば、ドラッグおよびドロップすることができるボックスおよび矢印並びにデータ入力フィールドを提供することによって、コード４４１のコンピュータ命令を作成する多くの複雑性を隠す「宣言型システム」を提供する。宣言機能により、未熟練プログラマーは、コンテナ、コンテナ階層、動作チェーンおよびイベントを作成することができ、ボックスおよび矢印などのビジュアル表現を用いて、特定のイベントによってトリガーされる動作チェーンを指定することができる。より具体的には、データ入力フィールドに入力されたボックスおよび名前を用いて、コンテナを表すことができる。図２に示すように、ボックスの内部にネストされたボックスを用いて、コンテナの内部にネストされたコンテナを表すことができる。線または矢印を用いて、動作チェーンをトリガーする特定のコンテナのライフサイクルのフェーズを指定することができる。これらは、設計時に行うことができる。その後、クライアントアプリケーションの実行中に、基礎となるコンピュータ実行可能なコード４４１を実行することができる。これらの開発者は、「宣言型開発者」または「宣言型プログラマ」と呼ばれる。宣言型開発者は、高度なプログラミング技術を使用できない。
【００３６】
状態は、コンテナシップと永続性の組み合わせで管理される。コンテナの構成は、図３に示されている。コンテナは、（「状態」とも呼ばれる）変数がアクティブであるときに作用する。永続性とは、変数を維持する期間を指す。様々な種類のスコープは、永続性のレベルまたは種類を決定する。本明細書に記載されたように、スコープは、例示として、セッションスコープ、装置スコープ、履歴スコープを含む。
【００３７】
セッションスコープの場合、同一のブラウザタブ内のページを終了すると、ページの変数が破棄される。しかしながら、同一のブラウザタブに存在する限り、そのページに戻ると、同様の変数が復元される。変数は、ブラウザのセッションストレージに保存することができる。したがって、ブラウザが開いている限り、変数は、存続する。
【００３８】
装置スコープの場合、ブラウザタブを終了すると、ページの変数が破棄される。数日後に同様のページに戻って来る場合、これらの変数が復元される。変数は、ブラウザのローカルストレージに保存することができる。したがって、ブラウザが閉じられても、変数は、アプリケーションを実行する装置上に存続する。装置スコープは、「ローカルスコープ」とも呼ばれる。
【００３９】
履歴スコープの場合、ユーザは、クライアントアプリケーションのページ間にナビゲートしながら、変数の値を表示させることができる。例えば、変数値は、ブラウザの履歴に保存される。ブラウザの「戻る」ボタンを使用してブラウザ履歴のページに戻る場合またはページを更新する場合に、変数値は、アプリケーションをページから離れたときの値に復元される。
【００４０】
様々な実施形態に従って、スコープを用いて、ブラウザの特徴、例えばセッション永続性、履歴状態などを模擬することができる。例えば、セッションスコープを用いて、セッション永続性を提供することができ、履歴スコープを用いて、履歴状態を提供することができる。
【００４１】
図２を参照して、領収書ページが領収書ページコンテナ２４２と他のコンテナとの間で共有されているコンテナの変数を変更する場合、他のコンテナは、これらの変更にアクセスすることができる。例えば、領収ページコンテナ２４２がＳａａＳクラウドモジュールコンテナ２２０の変数Ｘおよびアプリケーションコンテナ２１０の変数Ｙを変更する場合、従業員ページコンテナ２３１も変数ＸおよびＹの変更にアクセスすることができる。この例示の場合、その理由は、領収書ページコンテナ２４２および従業員ページコンテナ２３１の両方がコンテナ２２０および２１０に存在しており、コンテナ２２０および２１０が領収書ページコンテナ２４２および従業員ページコンテナ２３１の両方の階層経路２６１および２６２に関連付けられているからである。
【００４２】
一実施形態によれば、１つのクライアントアプリケーションは、一度に１つのみのページを表示する。したがって、１つの階層経路に関連付けられている変数値の変更は、別の階層経路に関連付けられている変数値の変更と競合しない。より具体的には、図２を参照して例を続けると、ページ２４２および２３１の両方がコンテナ２２０および２１０に各々属する変数ＸおよびＹにアクセスするが、一度にページ２４２、２３１のうち１つのみが表示されるため、競合は発生しない。したがって、ページ２４２、２３１は、変数ＸおよびＹの値を同時に変更することができない。
【００４３】
クライアントアプリケーションの２つの異なるコピーは、各々異なるページを表示することができる。例えば、図４を参照して、クライアントアプリケーション４４０の２つのコピーがあり、２つのコピーの各々が各々のページを表示すると仮定する。２つのページの両方がＳａａＳクラウドモジュールコンテナの変数Ｘの値を変更する場合、データベース４３０は、変更をデータベース４３０に送信する一環として競合を解決する。
【００４４】
各コンテナは、１つ以上の動作チェーンを開始することができる。また、１つのライフサイクルフェーズにおいて、１つ以上の動作チェーンを並列に開始および実行することができる。例えば、図２を参照して、ＳａａＳクラウドモジュールコンテナ２２０および財務モジュールコンテナ２４０の動作チェーンを同時に実行することができる。
【００４５】
特定のコンテナの各ライフサイクルフェーズが相互に排他的に実行されるため、特定のコンテナの異なるライフサイクルフェーズの動作チェーンは、並列に実行されない。より具体的には、図２を参照して、領収書ページコンテナ２４２が「beforeEnter」ライフサイクルフェーズ中に２０個の動作チェーンを開始した場合、これらの２０個の動作チェーンは、領収書ページコンテナ２４２の「enter」ライフサイクルフェーズの前に終了する。
【００４６】
コンテナの動作チェーンは、同一コンテナの別の動作チェーンの実行を開始することができ、引き起こすことができる。また、１つのコンテナ内の動作チェーンは、階層経路に沿ったコンテナ内の動作チェーンの実行を開始することができ、引き起こすことができる。例えば、図２を参照して、受信ページコンテナ２４２の動作チェーンは、階層経路２６１に沿ったコンテナ２５２、２４０、２２０、２１０に関連付けられた動作チェーンの実行を開始することができ、引き起こすことができる。
【００４７】
ライフサイクルフェーズは、イベントであるため、動作チェーンをトリガーすることができる。例えば、特定のコンテナのライフサイクルフェーズ「Enter」は、１つ以上の動作チェーンをトリガーすることができる。
【００４８】
動作チェーンは、並列に実行する複数の子動作チェーンを開始することができる。その後、複数の子動作チェーンを結合することができる。
【００４９】
一実施形態によれば、階層経路は、クライアントアプリケーション４４０のユーザインターフェイスにページを表示するようにユーザがブラウザに入力したＵＲＬに対応する。例えば、図２および図４を参照して、階層経路２６１は、「/SaaSCloud/Financials/receipts」を指定するＵＲＬに対応する。より具体的には、ユーザがこのＵＲＬをブラウザに入力すると、最初のバックスラッシュにより、コード４４１のコンピュータ実行可能命令は、アプリケーションコンテナ２１０を開始する。ＵＲＬの「SaaSCloud」部分により、コード４４１のコンピュータ実行可能命令は、ＳａａＳクラウドモジュールコンテナ２２０を開始し、ＵＲＬの「Financials」部分により、コード４４１のコンピュータ実行可能命令は、財務モジュールコンテナ２４０を開始し、ＵＲＬの「receipts」部分により、コード４４１のコンピュータ実行可能命令は、領収書ページコンテナ２４２を開始し、対応する領収書ページをロードする。同様に、階層経路２６２は、「/SaasCloud/HumanResources/Employee」を指定するＵＲＬに対応し、階層経路２６３は、「/SaaSCloud/Financials/ExpenseReport」を指定するＵＲＬに対応する。
【００５０】
各コンテナの状態は、各コンテナに関連付けられたライフサイクルに基づいて、作成および破棄される。開発者は、ツール４１０の設計時ユーザインターフェイス４１１を用いて、各コンテナの状態の作成および破棄をトリガーするライフサイクルイベントを指定することができる。例えば、「beforeEnter」ライフサイクルイベントは、経費報告ページコンテナ１４１の状態の作成をトリガーすることができ、「beforeExit」ライフサイクルイベントは、経費報告ページコンテナ２４１の状態の破棄をトリガーすることができる。状態の作成をトリガーするライフサイクルイベントは、コンテナによって異なってもよい。例えば、あるコンテナの状態の作成は、「beforeEnter」によってトリガーされるが、別のコンテナの状態の作成は、「Enter」によってトリガーされる。また、状態の破棄をトリガーするライフサイクルイベントは、コンテナによって異なってもよい。
【００５１】
さらに、各コンテナの状態の作成および破棄は、階層経路に従って行われる。例えば、図２および４を参照して、ユーザがクライアントアプリケーション４４０を実行するコンピュータのブラウザに「/SaaSCloud/Financials/ExpenseReport」というＵＲＬを入力した場合、バックスラッシュは、アプリケーションコンテナ２１０を開始する。アプリケーションコンテナ２１０の状態は、開発者が設計時ユーザインターフェイス４１１を用いて指定したライフサイクルイベントに応答して作成される。ＵＲＬの「SaasCloud」部分は、ＳａａＳクラウドモジュールコンテナ２２０を開始する。ＳａａＳクラウドモジュールコンテナ２２０の状態は、開発者が設計時ユーザインターフェイス４１１を用いてコンテナ２２０に指定したライフサイクルイベントに応答して作成される。同様に、財務モジュールコンテナ２４０および経費報告ページコンテナ２４１に対応する状態は、開発者が対応するコンテナ２４０、２４１に指定したライフサイクルイベントに応答して作成される。また、ユーザが「/SaasCloud/HumanResources/Employee」というＵＲＬを入力した場合、経費報告ページコンテナ２４１の状態および財務コンテナ２４０の状態の破棄は、開発者が設計時ユーザインターフェイス３３１を用いて対応するコンテナ２４１、２４０に指定したライフサイクルイベントに応答してトリガーされる。人事モジュールコンテナ２３０および従業員ページコンテナ２３１の状態の作成は、開発者が対応するコンテナ２３０、２３１に指定したライフサイクルイベントに応答してトリガーされる。ＵＲＬに対応する階層経路２６２、２６３の両方がアプリケーションコンテナ２１０およびＳａａＳクラウドコンテナ２２０を共有しているため、コンテナ２１０、２２０の状態は、維持される。各コンテナは、当該コンテナを包含するコンテナの状態にアクセスすることができる。例えば、コンテナ２２０は、コンテナ２１０の状態にアクセスすることができる。コンテナ２４０は、コンテナ２２０および２１０の状態にアクセスすることができる。コンテナ２４１は、コンテナ２４０、２２０および２１０の状態にアクセスすることができる。しかしながら、各コンテナは、当該コンテナを包含していないコンテナの状態にアクセスすることができない。例えば、コンテナ２４０および２４１は、コンテナ２３０および２３１の状態にアクセスするこができず、その逆も同様である。
【００５２】
動作チェーンによって使用されたグローバル変数のスナップショットは、各動作チェーンの開始時に取得される。例えば、１つの親動作チェーンが２つの子動作チェーンを開始する場合、３つのスナップショットが取得される。
【００５３】
動作チェーンによって使用されたグローバル変数のスナップショットは、動作チェーンの実行を開始するときに取得される。例えば、各動作チェーンの３つのスナップショットが図５Ａに示されている。
【００５４】
図５Ａは、一実施形態に従って、並列に実行されている動作チェーン５１０、５２０、５３０を示す。関数または動作チェーンが「並列」に実行すると記載されるが、よく知られているように、並列実行という概念は、一般的に、マイクロ実行レベルで一度に１つのみの動作チェーンを実行するシングルプロセッサを用いて実行したタイムスライス処理を記述するときに使用される。しかしながら、より高いマクロ実行レベル、例えばアプリケーション命令レベルにおいて、動作チェーンが同時にまたは並列に動作するとみなされる。一般的に、本明細書に記載された実施形態は、任意の実行スキーム、例えば、シングルまたはマルチプロセッサアーキテクチャ、マルチスレッド処理、マルチパイプライン処理、時分割処理、分散処理またはネットワーク（例えば、クラウド）処理に適用することができる。
【００５５】
動作チェーン５１０、５２０、３０は、一連の動作５１１、５１２、５２１〜５２５、および５３１〜５３３を指す。ボックスは、動作５１１、５１２、５２１〜５２５および５３１〜５３３を表し、矢印は、各々の動作チェーンにおいて１つの動作から別の動作への制御の流れを表す。例えば、実行は、矢印の方向に沿って行われる。動作は、矢印で連結された第１のボックスおよび第２のボックスによって示されている動作チェーンにおいて、連続して実行することができる。第２の動作チェーン５２０の３つのボックス５２２〜５２４によって示されているように、動作は、並列に実行することもできる。より具体的には、第２のチェーン５２０の第１の動作５２１は、３つの並列動作５２２〜５２４に分岐して実行され、その後下位の動作５２５に結合されてもよい。代替的に、１つの動作チェーンを呼び出すときにチェーン内の全ての動作を実行しないように、条件付きで１つ以上の動作を実行することもできる。１つ以上の動作は、前の動作の子動作である。例えば、第２の動作チェーン１２０の第１の動作５２１は、親動作であり、そこから分岐した３つの動作５２２〜５２４は、子動作である。他の例において、動作５１１は、動作５１２の親動作であり、動作５３１は、動作５３３の親動作である。
【００５６】
動作は、様々な種類の処理を実行することができる。例えば、１つの動作は、変数から値を読み取ることができる。別の動作は、値を変数に書き込むことができる。別の例において、特定の閾値を下回るいくつかの株価を取得し、いずれかの株価が特定の閾値を下回る場合に警告を提供したい場合がある。この場合、動作は、いくつかの他の動作に分岐され、これらの動作の各々は、並列に株価を取得する。株価が取得されると、これらの動作は、１つの動作に結合され、閾値を下回る株価を決定し、その情報を警告として提供する。さらに別の例において、ユーザがリストとして表示された各々の歌の下方の「購入」ボタンを選択することによっていくつかの歌を購入できるように、ウェブページを設計することができる。「購入」ボタンを選択すると、動作を開始するイベントがトリガーされる。各動作は、購入を並列に処理することができる。
【００５７】
様々な実施形態によれば、各々の動作チェーンは、動作チェーンを隔離する線によって示されたように、区画５４１、５４２、５４３（「隔離」とも呼ばれる）によって互いに隔離される。換言すれば、各動作チェーンは、動作時の状態のプライベートビューを有する。例えば、Ｙは、グローバル状態を表す。例示として、状態は、変数およびデータ流を含む。各動作チェーンは、実行を開始するときに、グローバル状態の独自のプライベートビューを有する。例えば、Ｙ１は、Ｙの第１の動作チェーンのプライベートビューであり、Ｙ２は、Ｙの第２の動作チェーンのプライベートビューであり、Ｙ３は、Ｙの第３の動作チェーンのプライベートビューである。
【００５８】
一実施形態において、ビューＹ１、Ｙ２、Ｙ３は、３つの動作チェーン５１０、５２０、５３０の隔離５４１、５４２、５４３の各々のローカル変数を用いて実現することができる。したがって、各々の動作チェーン５１０、５２０、５３０は、グローバル状態Ｙを変更せず、各ローカル変数Ｙ１、Ｙ２、Ｙ３を変更することができる。事実上、作成されたグローバル状態Ｙのスナップショットは、Ｙ１、Ｙ２、Ｙ３の元の状態のスナップショットとなり、１つの動作チェーンにバグがある場合、デバッグのためにその動作チェーンの状態を開始状態に戻すことができる。ビューＹ１、Ｙ２、Ｙ３は、状態Ｙのバージョンを表し、各々の動作チェーンによって変更できるため、変更可能な状態の例である。動作チェーンは、プロセスの例である。Ｙ３は、Ｙ１およびＹ２とは別の時間に作成されている。したがって、第３の動作チェーン５０３の動作５３１において、Ｙのみが読み取られるため、グローバル変数Ｙの値が使用される。動作５３２において、グローバル変数Ｙを書き込む。グローバル変数Ｙを書き込む前に、ローカルコピーＹ３が作成されたため、ＹではなくＹ３が書き込まれる。したがって、一実施形態において、ローカル変数は、動的に作成される。一実施形態において、動作チェーンの終了５６０において、競合解決策５７０が実行され、Ｙ１、Ｙ２およびＹ３の最終値から、グローバル状態Ｙの新しい値を決定する。一実施形態において、最後に書き込まれた変数Ｙ１、Ｙ２またはＹ３は、グローバル状態Ｙの新しい値である。
【００５９】
図５Ｂは、一実施形態に従って、スナップショットの実装を示す図である。
動作チェーンによって使用されるグローバル変数のスナップショットは、動作チェーンの実行を開始するときに取得される。図５Ｂは、図５Ｂに示された動作チェーン５１０、５２０、５３０の各々の３つのラッパー、すなわち、５０１、５０２および５０３ａ／５０３ｂの例を示す。グローバル変数がＸ、ＹおよびＺであると仮定する。この例において、動作チェーン５１０、５２０、１３０の各々の場合、ラッパーまたはプロキシーを用いて、グローバル変数Ｘ、ＹおよびＺとインターフェイスする。例えば、ラッパーまたはプロキシを用いて、グローバル状態Ｙから、３つの動作チェーンに対応するプライベートビューＹ１、Ｙ２、Ｙ３を隔離する。動作チェーン３０の場合、ラッパー３０５３ａは、グローバル変数Ｘのローカルコピー、すなわち、ローカルコピーＸ３を作成するが、この時点においてＹおよびＺが読み取り専用であるため、グローバル変数ＹおよびＺのコピーを作成しない。したがって、ラッパー５０３ａは、ＹおよびＺの値をパスする。その後、Ｙを書き込むときに、ラッパー５０３ｂ（この実施形態において、ラッパー５０３ａおよび５０３ｂは、異なる時点で実行された同様のラッパーコードである）ローカルコピーＹ３を作成する。動作チェーン５３０は、この時点（動作チェーン５３２）でＸのローカルコピーＸ３を使用するが、Ｚが読み取り専用であるため、Ｚをパスする。ラッパーまたはプロキシは、共有されている変数ＹとプライベートビューＹ１、Ｙ２、Ｙ３との間の関連関係を提供する。この関連関係に基づき、クライアントアプリケーション２５０に対応する動作チェーン２５１のランタイム実行時に、Ｙ１、Ｙ２およびＹ３を変更するための暗黙的なコンピュータ実行可能命令を用いて、Ｙを変更するための明示的なコンピュータ実行可能命令を置換することができる。
【００６０】
同様に、Ｘ１、Ｘ２およびＸ３は、各々の動作チェーンのプライベートビューをグローバル変数Ｘに提供する。Ｚ１およびＺ２は、各々の動作チェーンのプライベートビューをグローバル変数Ｚに提供する。
【００６１】
説明のために、図５Ｂは、３つのスナップショットに対して、３組の変数Ｘ、Ｙ、Ｚを示している。Ｘ、Ｙ、Ｚがクライアントアプリケーションのグローバル変数であるため、各組のＸは、同様の変数であり、各組のＹは、同様の変数であり、各組のＺは、同様の変数である。
【００６２】
スナップショットおよび関連するラッパーは、ネストすることができる。例えば、第１の動作チェーンが別の動作チェーンを開始する場合、２つのスナップショットが取得される。第１のスナップショットは、親動作チェーンのスナップショットであり、第２のスナップショットは、子動作チェーンのスナップショットである。第２のスナップショットは、第１のスナップショットにネストされる。一例として、動作チェーンが２つの他の動作チェーンを開始する場合、３つのスナップショットが取得される。
【００６３】
動作チェーンは、クライアントアプリケーションの開発者が指定した明示的なコンピュータ実行可能命令を介して、グローバル変数Ｘ、ＹおよびＺを読み書きすることができ、これらの操作を適切なプライベートビューにリダイレクトすることによって、適切な暗黙的なコンピュータ命令の実行を用いて、これらの明示的なコンピュータ命令の実行を置換することができる。例えば、ラッパーを作成し、ローカル保存されたプライベートビューＹ１を取得し、Ｙの値にＹ１を割り当て、Ｙ１＝Ｙ１＋１にすることによって、暗黙的なコンピュータ命令を用いて、明示的なコンピュータ実行可能命令Ｙ＝Ｙ＋１を置換することができる。
【００６４】
一実施形態によれば、変更される変数のみのスナップショットは、取得されるが、読み取り専用の変数のスナップショットは、取得されない。
【００６５】
一実施形態によれば、グローバル変数のプライベートビューは、グローバル変数が変更される直前に作成される。
【００６６】
一実施形態によれば、グローバル変数をラッパーにコピーすることによって、プライベートビューを作成する。変数の変更を追跡することによって、変更された変数の状態を判断することができる。プライベートビューは、対応するグローバル変数が読み取られるまでまたは別のプロセスによって変更されるまで、詳細に作成することができる。
【００６７】
図６〜１８に示されているページは、ツールのＵＩ４１１の一部である。状態管理永続性のユーザインターフェイスは、ツールのユーザインターフェイス４１１の一部である。ルータ設定のユーザインターフェイスも、ツールのユーザインターフェイス４１１の一部である。ユーザインターフェイス４１１は、設計時に、クライアントアプリケーションの実行時に実行されるコード４４１の一部であるコンピュータ実行可能命令を生成する。
【００６８】
開発者は、設計ツール４１０のＵＩ４１１を用いて、ページをカスタマイズする。図６は、一実施形態に従って、ＵＩ４４２の一部であるボタンの動作チェーンを作成するためのページ６００のスクリーンショットを示している。記述セクションを追加することができる。
【００６９】
「私の動作チェーンの開始」タブ６８０を選択することによって、ページ６００を表示することができる。ＵＩ４１１のページ６００は、左側において、動作チェーン６４０に追加できる動作のパレット６１０を含む。ページ６００の中央セクション６２０は、動作チェーン６４０の１つ以上の動作のシーケンスを表す流れ図を示している。菱形６４１は、動作チェーン６４０を実行するときに選択できる複数の代替経路を決定するための「ＩＦ」命令文または分岐条件を表す。
【００７０】
図６に示すように、パレット６１０は、「全般」、「ロジック」および「ナビゲーション」として標記された３つのセクション６５０、６６０、６７０を有する。各セクション６５０、６６０、６７０は、動作チェーン６４０を作成するために、中央セクション６２０にドラッグして、ドロップすることができる動作を表すアイコンを含む。
【００７１】
全般セクション６５０は、３行のアイコンを有する。全般セクションの第１行の第１アイコン６５１は、変数の割り当てを表す。例えば、このアイコン６５１を使って、変数を異なる値に設定することできる。第１行の第２アイコン６５２は、動作チェーンの呼び出しを表す。開発者は、このアイコンを使って、当該動作から別の動作チェーンを呼び出すことができる。第１行の第３アイコン６５３は、コンポーネントメソッドの呼び出しを表す。開発者は、このアイコンを使って、ＵＩ４４２のために作成されるページ上で呼び出されるＵＩコンポーネント、例えばボタンを決定することができる。
【００７２】
全般セクションの第２行は、３つのアイコンを含む。第２行の第１アイコン６５４は、「モジュール関数の呼び出し」アイコンである。開発者は、このアイコンを使って、ＵＩ４４２のために作成されるページのＪａｖａＳｃｒｉｐｔで独自の関数を定義することができる。開発者は、「モジュール関数の呼び出し」アイコンを使って、これらの関数を呼び出すコードを作成することができる。第２行の第２アイコン６５５は、「ＲＥＳＴエンドポイントの呼び出し」アイコンである。開発者は、このアイコンを使って、データを更新するまたはデータを要求するためのＲＥＳＴエンドポイントを呼び出すコードを作成することができる。
【００７３】
全般セクション６５０の第３行は、２つのアイコンを含む。第３行の第１アイコン６５７は、「始動通知」アイコンである。このアイコンを使って、動作チェーンが実装に使用されているメッセージをページに表示することができる。第３行の第２アイコン６５８は、「変数のリセット」アイコンである。このアイコンを使って、状態の値をデフォルト値にリセットすることができる。
【００７４】
ロジックセクション６６０は、３つのアイコン６６１〜６６３を含む。このセクションを使って、動作チェーンにロジックフローを作成することができる。ロジックセクションの第１アイコン６６１は、「ＩＦ」条件付き動作を表す。ロジックセクションの第２アイコン６６２は、スイッチを表す。ロジックセクションの第３アイコン６６３は、リターンを表す。第３アイコン６６３は、動作チェーンの終了時に使用され、特定の結果または値を返すことができる。第３アイコン６６３は、１つの動作チェーンから別の動作チェーンを呼び出すときに有用である。
【００７５】
ナビゲーションセクション６７０は、３つのアイコン６７１〜６７３を含む。開発者は、ナビゲーションセクションの第１アイコン６７１を使って、過去ページにナビゲートするコードを作成することができる。この場合、過去ページは、クライアントコンピュータ４５０のブラウザ履歴における過去のページである。開発者は、ナビゲーションセクションの第２アイコン６７２を使って、実行時にクライアントアプリケーション６５０のページにナビゲートするコードを作成することができる。例えば、アイコン６７２を使って、クライアントアプリケーションのＵＩ４４２の経費報告ページからクライアントアプリケーションのＵＩ４４２の従業員ページにナビゲートするコンピュータ実行可能なコードを作成することができる。開発者は、ナビゲーションセクションの第３アイコン６７３を使って、現在実行中のクライアントアプリケーション４５０に存在しないＵＲＬにナビゲートするコードを作成することができる。
【００７６】
ウェブアプリケーション、ページおよび動作チェーンなどの項目を表すタブを選択することによって、動作をコンテナのフェーズに関連付けることができる。その後、開発者は、ページ内の設定パネルに移動することができる。図７は、一実施形態に従って、設定パネルページ７００のスクリーンショットを示す。
【００７７】
図８は、一実施形態に従って、ライフサイクルイベントをユーザインターフェイスコンポーネントに関連付けるためのウェブページ８００を示している。開発者は、ページ８００のスクリーンショットに示されているリスト８１０から、ライフサイクルイベント、例えば「beforeEnter」８０１を選択して、ライフサイクルイベントを関連付けることができる。
【００７８】
図９は、一実施形態に従って、検証コードを生成するためのウェブページ９００を示す。開発者は、ページ９００を使って、作成中のクライアントアプリケーションのユーザインターフェイス４４２に実行されるときに、ページを閲覧できるユーザを検証するためのコードを生成することができる。ユーザは、オプション９０１を選択して、検証コードを入力することができる。
【００７９】
図１０は、一実施形態に従って、動作チェーンを選択するためのウェブページ１０００を示す。開発者は、ウェブページ８００（図８）から選択されたライフサイクルイベントに応答して呼び出される動作チェーンを選択することができる。例えば、ページ１０００は、「ページ動作チェーン」タブ１００２の下方に、開発者が選択できる「私の動作チェーン」１００１を示している。ページ１０００は、「アプリケーション動作チェーン」タブ１００３を提供している。
【００８０】
図１１は、一実施形態に従って、開発者がページを使用する動作チェーンに必要な入力パラメータをマッピングするために使用できるウェブページ１１００を示す。例えば、開発者は、「私の動作チェーン」１１０３の下方に示される「入力パラメータ」１１０１をクリックして、フィールド１１０１（図１１）および１００１（図１０）の上方に「私の動作チェーン」として示されている選択された動作チェーンに入力パラメータをマッピングすることができる。
【００８１】
ページ１１００を参照して、動作チェーンは、動作チェーンＩＤフィールド１１０２で指定され得る識別子（ＩＤ）を有する。
【００８２】
図１２は、一実施形態に従って、未熟練開発者がＵＩコンポーネントをコンポーネントイベントに関連付けるために使用できるウェブページ１２００を示している。例えば、開発者は、左側のパレット１２１０からＵＩコンポーネントを中央の区画１２２０にドラッグすることができる。この例において、ドラッグされたＵＩコンポーネントは、ボタン１２２１である。開発者が図１２に示されている動作タブ１２３０を選択すると、それに応答してイベントのリストが表示される。開発者は、１つのイベントを選択して、中央の区画１２２０に表示されているＵＩコンポーネント１２２１に関連付けることができる。
【００８３】
また、開発者は、ＵＩコンポーネントの表現、例えばボタン１２２１をクリックして、当該ＵＩコンポーネントの属性を表示することができる。
【００８４】
図１３は、一実施形態に従って、イベントリスト１３１０を含むウェブページ１３００を示す。開発者がページ１２００に示されている動作タブ１２３０を選択すると、図１３に示されたようにイベントリスト１３１０が表示される。開発者は、図１３に表示されているイベントから１つのイベントを選択して、中央の区画１２２０に表示されているＵＩコンポーネント、例えばボタン１２２１に関連付けることができる。
【００８５】
また、開発者は、ＵＩコンポーネントの表現、例えばボタン１２２１をクリックして、当該ＵＩコンポーネントの属性を表示することができる。
【００８６】
開発者が図１２のページ１２００の動作タブ１２３０をクリックすると、それに応答して図１３に示されているイベントリスト１３１０が表示される。開発者は、表示されたリスト１３１０から１つのイベントを選択して、ＵＩコンポーネントに関連付けることができる。図示において、このＵＩコンポーネントは、開発者が以前にウェブページ１２００（図１２）から選択したボタン１２２１である。
【００８７】
イベントリスト１３１０は、例えば、要素上で非主要ポインティング装置のボタンを押して離すときに発生する「クリック解除」イベント、要素にキーボードが集中しないときに発生する「ボケ」イベント、要素上で主要ポインティング装置のボタンを押して離すときに発生する「クリック」イベント、要素に関連するコンテキストメニューが呼び出されたときに発生する「コンテキストメニュー」イベント、要素上でポインティング装置のボタンを２回にクリックしときに発生する「ダブルクリック」（dbclick）イベント、要素またはテキスト選択を継続的にドラッグしている間に発生する「ドラッグ」イベント、（ポインティングボタンを離すことまたはドラッグ操作をキャンセルしたことによって）要素またはテキスト選択のドラッグが終了したときに発生する「ドラッグ終了」イベント、およびドラッグされた要素またはテキスト選択を有効なドロップターゲット上に移動したときに発生する「ドラッグ確定」イベントなどを含む。
【００８８】
図４を参照して、ツールのユーザインターフェイス４１１は、クライアントアプリケーション４５０のユーザインターフェイス４５２のボタンを作成すると図示されているが、実施形態は、ドロップダウンメニュー、タブ、メニュー、ラジオボタン、リストなどの他の種類のユーザインターフェイスのコントロールによく適している。本明細書に記載されたように、ユーザがユーザインターフェイスのコントロールと対話することによって、動作チェーンを直接にまたは間接にトリガーすることができる。
【００８９】
図１４は、一実施形態に従って、入力パラメータ１４０１を指定するためのプロパティインスペクタ１４００を示す。プロパティインスペクタ１４００を介して、ユーザは、識別子（ＩＤ）１４０４およびページ１４０５を提供することができる。
【００９０】
開発者が、作成されているアプリケーションの複数のページに動作チェーンを使用する可能性がある。例えば、開発者は、スタートページにナビゲートするときに、アプリケーションスコープの動作チェーンを作成することができる。
【００９１】
開発者は、「ページナビゲーション」動作を動作チェーン６４０（図６）、１４０３（図１４）に追加する場合、入力パラメータ１４０１（図１４）を指定して、レコードのＩＤを指定することができる。開発者は、次のことを行うことによって、「ページナビゲーション」動作を動作チェーンに追加することができる：
１．ページの動作エディタを開き、
２．リスト内の動作チェーンをクリックして、当該動作チェーンを動作エディタに開き、
３．動作パレットから「ページナビゲーション」アイコン６７２（図６）を動作チェーン６４０（図６）、１４０３（図１４）にドラッグする。
【００９２】
開発者は、動作チェーン６４０（図６）、１４０３（図１４）内の追加（＋）アイコン６８１（図６）、１４０２（図１４）上に動作をドラッグすることができる。通常、この動作は、チェーンの最後の動作である。開発者が「ページナビゲーション」動作を動作チェーンに追加すると、プロパティインスペクタ１４００は、それをエディタに開く。
【００９３】
図１５は、一実施形態に従って、ページ選択ボタン１５０１を有するプロパティインスペクタ１５００を示す。
【００９４】
４．プロパティインスペクタ１５００で「ページ選択」ボタン１５０１をクリックする。
【００９５】
図１６は、一実施形態に従って、開発者が作成しているアプリケーション４４０（図４）内のページリスト１６０１を示す「ページ選択」ダイアログボックス１６００を示す。ダイアログボックス１６００は、開発者がプロパティインスペクタ１５００（図１５）の「ページ選択」ボタン１５０１をクリックすることに応答して表示される。
【００９６】
５．リスト１６０１からページを選択する。「選択」ボタン１６０２をクリックする。開発者が選択したページに入力変数がある場合、開発者は、ページ変数を動作の入力パラメータにマッピングすることができる。
【００９７】
図１７は、一実施形態に従って、動作の名前を指定するためのプロパティインスペクタ１７００を示す。
【００９８】
６．プロパティインスペクタ１７００のＩＤフィールド１７０１に動作の名前を入力する。キャンバスから動作を選択すると、開発者は、プロパティインスペクタで当該動作のプロパティを編集することができる。
【００９９】
７．必要に応じて、ページに入力パラメータを使用する場合、入力パラメータの矢印（＋）アイコン１７０２をクリックすることによって、入力値のページ変数を動作のパラメータにマッピングし、「保存」をクリックする。
【０１００】
図１８は、一実施形態に従って、変数をパラメータにマッピングするダイアログボックス１８００を示す。「変数をパラメータにマッピングする」ダイアログボックス１８００において、開発者は、「ソース」パネル１８１０内の変数を「ターゲット」パネル１８２０のパラメータにドラッグすることによって、ソースをターゲットにマッピングすることができる。開発者は、パラメータ名をクリックして、マッピングされた変数の式を表示することができる。線１８３０は、「ソース」パネル１８１０の「私の連絡先ＩＤ」と「ターゲット」パネル１８２０の「連絡先ＩＤ」との間のマッピングを表している。図示は、「私の連絡先ＩＤ」と「連絡先ＩＤ」との間のマッピングを示しているが、実施形態は、他の変数を他のパラメータにマッピングすることにも適している。
【０１０１】
適切な変数が存在しない場合、開発者は、変数エディタで変数を作成し、その後動作を編集することができる。
【０１０２】
８．必要に応じて、動作に使用され得る他のパラメータを指定する。
「ページナビゲーション」動作に関して（図６のアイコン６７２を参照）、この動作の動作モジュールは、「vb/action/builtin/navigateToPageAction」である。この動作は、クライアントアプリケーションのＵＩ４４２（図４）をナビゲートし、パラメータの受け渡しを実行して、そのページをアクティブにする。一実施形態によれば、この動作のパラメータは、以下の通りである。
【０１０３】
【表１】
2020535548.tif 000003
【０１０４】
一実施形態によれば、ページパラメータは、入力としてマークされた変数と同様である。動作を呼び出す場合、宛先ページの変数は、内部で渡されてもよく、またはＵＲＬを介して渡されてもよい。フレームワークは、パラメータを最終的に正しい場所に配置し、宛先ページに渡すように調整する。
【０１０５】
以下のコードは、ＵＩ４１１を介して入力され、コード４４１の一部になる。
【０１０６】
【表２】
2020535548.tif 000004
【０１０７】
ナビゲーション中にエラーがなかった場合、「成功」という結果が返される。ナビゲーションが正常に終了した場合、「true」という結果が返され、そうではない場合、「false」という結果が返される。エラーが発生した場合、エラーを含むペイロードと共に「失敗」という結果が返される。
【０１０８】
例示的な方法
図１９は、一実施形態に従って、状態管理永続性を提供するための方法を示すフローチャートである。以下、図１９の方法および従属請求項を説明する。これは、状態管理永続性のためである。特許請求の範囲は、本願の最後に記載される。
【０１０９】
方法１９００は、ステップ１９１０から開始する。
ステップ１９２０において、設計時ツールのユーザインターフェイスで、１つ以上の他のコンテナの内部にネストされたコンテナを包含するコンテナ階層を受信し、各コンテナは、ウェブクライアントアプリケーションの異なる部分を含む。
【０１１０】
例えば、未熟練開発者は、コンテナ階層２００（図２）を設計時ツール４１０のユーザインターフェイス４１１に入力することができる。コンテナ階層２００内の各コンテナは、１つ以上の他のコンテナの内部にネストされ、ウェブクライアントアプリケーション４４０の異なる部分を含む。
【０１１１】
ステップ１９３０において、設計時ツールを用いて、コンテナ階層内の各コンテナに状態を関連付ける。
【０１１２】
例えば、未熟練開発者は、変数３２１および３５１（図３）をツールのＵＩ４１１に入力することができ、ツール４１０（図４）は、変数３２１および３５１（図３）を対応するコンテナ３１０および３４０（図３）に関連付けることができる。
【０１１３】
ステップ１９４０において、設計時ツールのユーザインターフェイスで、各コンテナのライフサイクルを受信する。
【０１１４】
例えば、未熟練開発者は、図２に示された各コンテナに、ライフサイクル３２３および３５３（図３）を設計時ツール４１０のユーザインターフェイス４１１（図４）に入力することができる。
【０１１５】
ステップ１９５０において、設計時ツールを用いて、階層に従って、各コンテナのライフサイクルに基づいて、各コンテナの状態を作成および破棄することを可能にするコンピュータ実行可能命令をウェブクライアントアプリケーションのために作成する。
【０１１６】
例えば、本明細書に記載されたように、図２に示された各コンテナの状態３２１および３５１を作成および破棄することを可能にするコンピュータ実行可能命令４１０は、階層２００に従って、各コンテナのライフサイクル３２３および３５３に基づいて、ウェブクライアントアプリケーション４４０のために作成される。
【０１１７】
より具体的には、一実施形態によれば、階層経路は、クライアントアプリケーション４４０のユーザインターフェイスにページを表示するようにユーザがブラウザに入力することができるＵＲＬに対応する。例えば、図１、２および４を参照して、階層経路２６１は、「/SaaSCloud/Financials/receipts」を指定するＵＲＬ１３０に対応している。ユーザがＵＲＬ１３０をブラウザに入力すると、最初のバックスラッシュ１００により、コード４４１内のコンピュータ実行可能命令は、アプリケーションコンテナ２１０を開始する。ＵＲＬ１３０の「SaaSCloud」部分１０１により、コード４４１のコンピュータ実行可能命令は、ＳａａＳクラウドモジュールコンテナ２２０を開始し、ＵＲＬ１３０の「Financials」部分１０２により、コード４４１のコンピュータ実行可能命令は、財務モジュールコンテナ２４０を開始し、ＵＲＬ１３０の「receipts」部分１３３により、コード４４１のコンピュータ実行可能命令は、領収書ページコンテナ２４２を開始し、対応する領収書ページをロードする。同様に、階層経路２６２は、「/SaasCloud/HumanResources/Employee」を指定するＵＲＬに対応し、階層経路２６３は、「/SaaSCloud/Financials/ExpenseReport」を指定するＵＲＬに対応する。
【０１１８】
各コンテナの状態は、各コンテナに関連付けられたライフサイクルに基づいて、作成および破棄される。開発者は、ツール４１０の設計時ユーザインターフェイス４１１を用いて、各コンテナの状態の作成および破棄をトリガーするライフサイクルイベントを指定することができる。例えば、「beforeEnter」ライフサイクルイベントは、経費報告ページコンテナ２４１の状態３５１の作成をトリガーすることができ、「beforeExit」ライフサイクルイベントは、経費報告ページコンテナ２４１の状態３５１の破棄をトリガーすることができる。状態の作成をトリガーするライフサイクルイベントは、コンテナによって異なってもよい。例えば、あるコンテナの状態の作成は、「beforeEnter」によってトリガーされるが、別のコンテナの状態の作成は、「Enter」によってトリガーされる。また、状態の破棄をトリガーするライフサイクルイベントは、コンテナによって異なってもよい。
【０１１９】
さらに、各コンテナの状態の作成および破棄は、階層経路に従って行われる。例えば、図１、２および４を参照して、ユーザがクライアントアプリケーション４４０と通信するコンピュータのブラウザに「/SaaSCloud/Financials/ExpenseReport」というＵＲＬ１１０を入力した場合、バックスラッシュ１００は、アプリケーションコンテナ２１０を開始する。アプリケーションコンテナ２１０の状態３２１の作成は、開発者が設計時ユーザインターフェイス４１１を用いて指定したライフサイクルイベントに応答してトリガーされる。ＵＲＬ１１０の「SaasCloud」部分１０１は、ＳａａＳクラウドモジュールコンテナ２２０を開始する。ＳａａＳクラウドモジュールコンテナ２２０の状態３２１の作成は、開発者が設計時ユーザインターフェイス４１１を用いてコンテナ２２０に指定したライフサイクルイベントに応答してトリガーされる。同様に、財務モジュールコンテナ２４０および経費報告ページコンテナ２４１に対応する状態３２１、３５１の作成は、開発者が対応するコンテナ２４０、２４１に指定したライフサイクルイベントに応答してトリガーされる。また、ユーザが「/SaasCloud/HumanResources/Employee」というＵＲＬ１２０を入力した場合、経費報告ページコンテナ２４１の状態３５１および財務コンテナ２４０の状態３２１の破棄は、開発者が設計時ユーザインターフェイス４１１を用いて対応するコンテナ２４１、２４０に指定したライフサイクルイベントに応答してトリガーされる。人事モジュールコンテナ２３０および従業員ページコンテナ２３１の状態３２１、３５１の作成は、開発者が対応するコンテナ２３０、２３１に指定したライフサイクルイベントに応答してトリガーされる。ＵＲＬ１２０、１１０に対応する階層経路２６２、２６３の両方がアプリケーションコンテナ２１０およびＳａａＳクラウドコンテナ２２０を共有しているため、コンテナ２１０、２２０の状態は、維持される。
【０１２０】
各コンテナは、当該コンテナを包含するコンテナの状態にアクセスすることができる。例えば、コンテナ２２０は、コンテナ２１０の状態にアクセスすることができる。コンテナ２４０は、コンテナ２２０および２１０の状態にアクセスすることができる。コンテナ２４１は、コンテナ２４０、２２０および２１０の状態にアクセスすることができる。しかしながら、各コンテナは、当該コンテナを包含していないコンテナの状態にアクセスすることができない。例えば、コンテナ２４０および２４１は、コンテナ２３０および２３１の状態にアクセスするこができず、その逆も同様である。
【０１２１】
ステップ１９６０において、設計時ツールを用いて、各コンテナに関連付けられたライフサイクルイベントに基づいて、各コンテナ自体の状態および当該コンテナを包含するコンテナの状態に対するアクセスを各コンテナに提供する。
【０１２２】
例えば、コンテナ２２０は、コンテナ２１０の状態にアクセスすることができる。コンテナ２４０は、コンテナ２２０および２１０の状態にアクセスすることができる。コンテナ２４１は、コンテナ２４０、２２０および２１０の状態にアクセスすることができる。しかしながら、各コンテナは、当該コンテナを包含していないコンテナの状態にアクセスすることができない。例えば、コンテナ２４０および２４１は、コンテナ２３０および２３１の状態にアクセスするこができず、その逆も同様である。
【０１２３】
さらに、コンテナは、対応するライフサイクルイベントに基づいて、これらの状態にアクセスすることができる。本明細書に記載されたように、例えば、コンテナ２４１は、開発者が指定した「beforeExit」または「canExit」などのライフサイクルイベントが発生するまで、自身の状態および当該コンテナを含む他のコンテナの状態にアクセスすることができる。
【０１２４】
方法は、ステップ１９７０で終了する。
一実施形態は、ユーザインターフェイスで、第１のコンテナの第１のライフサイクルにおける第１のイベントの詳細を受信することと、第１のイベントを第１のコンテナの状態の作成に関連付けることと、ユーザインターフェイスで、第２のコンテナの第２のライフサイクルにおける第２のイベントの詳細を受信することと、第２のイベントを第２のコンテナの状態の作成に関連付けることとを提供する。
【０１２５】
例えば、一実施形態は、ユーザインターフェイス４１１で、第１のコンテナ２４１の第１のライフサイクル３５３における「beforeEnter」などの第１のイベントの詳細を受信することと、第１のイベントを第１のコンテナの状態３５１の作成に関連付けることと、ユーザインターフェイスで、第２のコンテナ２４２の第２のライフサイクル３５３における「Enter」などの第２のイベントの詳細を受信することと、第２のイベントを第２のコンテナの状態の作成に関連付けることとを提供する。状態の作成をトリガーするライフサイクルイベントは、コンテナによって異なってもよい。例えば、あるコンテナの状態の作成は、「beforeEnter」によってトリガーされるが、別のコンテナの状態の作成は、「Enter」によってトリガーされる。また、状態の破棄をトリガーするライフサイクルイベントは、コンテナによって異なってもよい。
【０１２６】
一実施形態において、第１のイベントと第２のイベントとは、異なる種類のイベントである。一例として、第１のイベントは、「beforeEnter」であり、第２のイベント「Enter」とは異なる。両方のイベントは、異なるコンテナ２４１、２４２の状態の作成をトリガーすることができる。
【０１２７】
一実施形態は、ユーザインターフェイスで、第１のコンテナの第１のライフサイクルにおける第１のイベントの詳細を受信することと、第１のコンテナの状態の破棄を第１のイベントに関連付けることと、ユーザインターフェイスで、第２のコンテナの第２のライフサイクルにおける第２のイベントの詳細を受信することと、第２のコンテナの状態の破棄を第２のイベントに関連付けることとを提供する。例えば、一実施形態は、ユーザインターフェイス２４１で、第１のコンテナ２４１の第１のライフサイクル３５３における「beforeExit」などの第１のイベントの詳細を受信することと、第１のコンテナ２４１の状態３５１の破棄を第１のイベントに関連付けることと、ユーザインターフェイスで、第２のコンテナ２４２の第２のライフサイクル３５３における「canExit」などの第２のイベントの詳細を受信することと、第２のコンテナ２４２の状態３５１の破棄を第２のイベントに関連付けることとを提供する。「beforeExit」ライフサイクルイベントは、経費報告ページコンテナ２４１の状態の破棄をトリガーする。「canExit」ライフサイクルイベントは、領収書ページ２４２の状態の破棄をトリガーする。
【０１２８】
一実施形態において、第１のイベントと第２のイベントとは、異なる種類のイベントである。一例として、「beforeExit」と「canExit」とは、２つの異なる種類のイベントである。
【０１２９】
一実施形態は、ウェブクライアントアプリケーションの実行中に第１のコンテナから第２のコンテナにナビゲートしたことに応答して、第１のコンテナの状態を破棄することと、第３のコンテナの状態を保存することと、第２のコンテナの状態を作成することと、保存された第３のコンテナの状態に対するアクセスを第２のコンテナに提供することとを提供する。第１のコンテナと第２のコンテナの両方は、第３のコンテナに含まれ、ナビゲーションは、第１のコンテナのライフサイクルイベントをトリガーする。
【０１３０】
例えば、一実施形態は、ウェブクライアントアプリケーション２１０の実行中に第１のコンテナ２４０から第２のコンテナ２３０にナビゲートしたことに応答して、第１のコンテナ２４０の状態を破棄することと、第３のコンテナ２２０の状態を保存することと、第２のコンテナ２３０の状態を作成することと、保存された第３のコンテナ２４０の状態に対するアクセスを第２のコンテナ２３０に提供することとを提供する。第１のコンテナ２４０と第２のコンテナ２３０の両方は、第３のコンテナ２２０に含まれ、ナビゲーションは、第１のコンテナ２４０のライフサイクルイベントをトリガーする。これは、一例のみであり、別の例は、第１のコンテナ２２０、第２のコンテナ２５０、および第３のコンテナアプリケーション２１０である。
【０１３１】
一実施形態は、コンテナをユニフォームリソースロケータ（ＵＲＬ）パターンの部分に関連付けることを提供し、ＵＲＬパターンの各部分は、各コンテナに関連付けられる。図２は、図１に示されているＵＲＬパターンの部分に関連付けられたコンテナを示している。
【０１３２】
一実施形態において、ＵＲＬパターンの各部分は、対応するライフサイクルを維持する。例えば、ライフサイクル３２３、３５３（図３）は、ＵＲＬ１１０（図１）の各部分１００、１０１、１０２、１０３に関連付けられている。ライフサイクルは、各ＵＲＬの各部分に関連付けられている。
【０１３３】
一実施形態は、ＵＲＬパターンに関連付けられた階層経路に従って、コンテナの一部を実行することと、ＵＲＬパターンに基づいて、コンテナの変数を作成することと、ＵＲＬパターンに基づいて、コンテナの変数を破棄することとを提供する。
【０１３４】
説明のために、階層経路が２６３であると仮定する。階層経路２６３に関連付けられたコンテナの一部は、２４１、２４０、２２０および２１０である。各コンテナの変数は、実行が階層経路２６３に沿って外部から内部へ進むことにつれて、作成される。例えば、コンテナ２１０、２２０、２４０、２４１の変数は、ＵＲＬ１１０に基づいて、順番に作成される。各コンテナの変数は、実行が階層経路２６３に沿って内部から外部へ進むことにつれて、ＵＲＬ１１０に基づいて破棄される。例えば、コンテナ２１０、２２０、２４０、２４１の変数は、順番に破棄される。
【０１３５】
一実施形態は、特定のコンテナの変数に対するアクセスおよび特定のコンテナに対応する階層経路に従って特定のコンテナを包含するコンテナの変数に対するアクセスを特定のコンテナに提供する。例えば、コンテナ２４２は、自身の変数にアクセスすることができ、コンテナ２４０、２２０および２１０（図２）の変数にアクセスすることができる。
【０１３６】
図２０は、一実施形態に従って、ルータ設定を示すフローチャートである。
方法は、ステップ２０１０から開始する。
【０１３７】
ステップ２２０において、ユニフォームリソースロケータ（ＵＲＬ）パターンを提供する。一実施形態によれば、階層経路は、クライアントアプリケーション４４０のユーザインターフェイスにページを表示するように、ユーザがブラウザに入力することができるＵＲＬに対応する。例えば、図１および２を参照して、階層経路２６３は、ＵＲＬ１１０に対応し、階層経路２６２は、ＵＲＬ１２０に対応し、階層経路２６１は、ＵＲＬ１３０に対応する。より具体的には、ユーザがＵＲＬ１３０をブラウザに入力すると、バックスラッシュ１００により、コード４４１のコンピュータ実行可能命令は、アプリケーションコンテナ２１０を開始し、ＵＲＬ１３０の「SaaSCloud」部分１０１により、コード４４１のコンピュータ実行可能命令は、ＳａａＳクラウドモジュールコンテナ２２０を開始し、ＵＲＬ１３０の「Financials」部分１０２により、コード４４１のコンピュータ実行可能命令は、財務モジュールコンテナ２４０を開始し、ＵＲＬ１３０の「receipts」部分１３３により、コード４４１のコンピュータ実行可能命令は、領収書ページコンテナ２４２を開始し、対応する領収書ページをロードする。
【０１３８】
ステップ２０３０において、ＵＲＬパターンに基づいて、アプリケーションの関連部分を作成する。例えば、図１および２を参照して、説明のために、ユーザがクライアントアプリケーション４４０と通信するコンピュータのブラウザにＵＲＬ１１０を入力したと仮定する。ブラウザは、ＵＲＬ１１０に対応する経費報告ページをロードして表示する。コード４４１は、ＵＲＬ１１０に対応する階層経路２６３に沿ったコンテナのライフサイクルを用いて、これらのコンテナの変数を作成および破棄するタイミングを決定する。
【０１３９】
例えば、アプリケーションコンテナ２１０の変数は、ブラウザがバックスラッシュ１００を検出したことに応答してアプリケーション４４０を開始したときに作成される。ＳａａＳクラウドモジュールコンテナ２２０の変数は、ブラウザがＵＲＬ１１０の「SaasCloud」部分１０１を検出したことに応答してＳａａＳクラウドモジュールを開始したときに作成される。財務モジュールコンテナ２４０の変数は、ブラウザがＵＲＬ１１０の「Financials」部分１０２を検出したときに作成される。経費報告ページコンテナ２４２の変数は、ブラウザがＵＲＬ１１０の「ExpenseReports」部分１０３を検出したときに作成される。
【０１４０】
ステップ２０４０において、ＵＲＬパターンに基づいて、アプリケーション４４０の関連部分を破棄する。例えば、ユーザがクライアントアプリケーション４４０（図４）と通信するコンピュータのブラウザにＵＲＬ１２０（図１）を入力したと仮定する。図２を参照して、領収書ページコンテナ２４２および財務モジュール２４０の変数は、破棄される。人事コンテナ２３０および従業員ページコンテナ２３１の変数は、作成される。
【０１４１】
一実施形態によれば、各コンテナは、対応するライフサイクルを有する。例えば、コンテナに関連付けられたライフサイクルのフェーズに応答して、変数を作成および破棄することができる。例えば、ページの変数は、ページのライフサイクルのフェーズ「beforeEnter」に応答して作成され、同一ページのライフサイクルのフェーズ「beforeExit」に応答して破棄される。  
【０１４２】
ルータ設定の方法は、ステップ２０５０で終了する。
一実施形態は、コンテナをＵＲＬパターンの部分に関連付けることを提供し、ＵＲＬの各部分は、各々のコンテナを有する。例えば、本明細書に記載されたように、図２に示された各コンテナは、図１に示されたＵＲＬパターンの部分に関連付けられている。
【０１４３】
一実施形態は、特定のコンテナを包含するコンテナおよび特定のコンテナを包含するコンテナの順序によって定義された階層経路を対応する各コンテナに提供する。例えば、図２に示されている各コンテナは、階層経路２６１〜２６７に関連付けられている。特定の例において、コンテナ２４１の階層経路２６３は、コンテナ２４１を包含するコンテナ２４０、２２０、２１０および特定のコンテナ２４１を包含するコンテナの順序によって定義される。この図において、コンテナの順序は、コンテナ２４１は、コンテナ２１０の内部に位置するコンテナ２２０の内部に位置するコンテナ２４０の内部に位置する。
【０１４４】
一実施形態は、特定のコンテナの変数に対するアクセスおよび当該特定のコンテナを含む階層経路に従ったコンテナの変数に対するアクセスを当該特定のコンテナに提供する。例えば、コンテナ２４１は、自身の変数にアクセスすることができ、コンテナ２４０、２２０、２１０の変数にアクセスすることもできる。コンテナ２４０は、自身の変数にアクセスすることができ、コンテナ２２０および２１０にアクセスすることもできる。しかしながら、コンテナ２４０は、例えば、コンテナ２４１、２４２、２３０および２３１などの変数にアクセスすることができない。
【０１４５】
一実施形態において、ライフサイクルは、フェーズを含み、フェーズは、「beforeEnter」ページ、「enter」ページ、「interactable」ページ、ページを終了できることを意味する「canExit」、およびページを終了する前に発生する「beforeExit」フェーズを含む。
【０１４６】
一実施形態において、フェーズは、相互に排他的である。換言すれば、コンテナのライフサイクルにおいて、一度に１つのフェーズしか動作できない。
【０１４７】
一実施形態において、少なくとも１つのフェーズは、動作チェーンを開始するためのイベントである。
【０１４８】
一実施形態は、設計時ツールで、アプリケーションの一部を定義するユーザ入力を受信することと、この入力に基づいて、コンピュータ実行可能命令をアプリケーションに生成することとを提供する。例えば、設計時ツール４１０のＵＩ４１１を用いて、ユーザ入力を受信することができ、受信した入力を用いて、コンピュータ実行可能命令４４１を生成することができる。
【０１４９】
一実施形態は、アプリケーションの実行時に生成されたコンピュータ実行可能命令を実行することを提供する。例えば、生成されたコンピュータ実行可能命令４４１は、アプリケーション４４０の実行中に実行される。
【０１５０】
また、分かるように、変数の破棄および作成は、階層経路に関連している。例えば、コンテナの変数は、実行が階層経路の最外部から最内部に進むときに作成され、実行が階層経路の最内部から最外部に進むときに破棄される。
【０１５１】
図１および２を参照して、コンテナに対応するコンピュータ実行可能なコードは、当該コンテナの変数および当該コンテナの階層経路に沿ったコンテナの変数にアクセスすることができる。例えば、領収書ページコンテナ２４２は、自身の変数および階層経路２６１に沿ったコンテナ２４０、２２０および２１０の変数にアクセスすることができる。
【０１５２】
一実施形態によれば、コンテナのライフサイクルは、当該コンテナに対応するＵＲＬの一部に関連付けられる。例えば、領収書ページコンテナ２４２のライフサイクルは、ＵＲＬ１１０の「ExpenseReports」部分１０３に関連付けられている。財務モジュールコンテナ２４０のライフサイクルは、ＵＲＬ１１０の「Financials」部分１０２に関連付けられている。
【０１５３】
ルータ設定のユーザインターフェイスは、ツールのユーザインターフェイス４１１の一部である。ルータ設定のユーザインターフェイスは、設計時に、クライアントアプリケーションの実行時に実行されるコード４４１の一部であるコンピュータ実行可能命令を生成する。
【０１５４】
図６を参照して、ナビゲーションセクション６７０の下方の第１アイコン６７１および第２アイコン６７２は、本明細書に記載された方法に従って、ルータ設定に使用することができる。
【０１５５】
動作チェーンは、開発者がコンポーネントの挙動を定義するために作成することができる一連の動作である。動作チェーンは、開発者がページコンポーネントに追加した「click」イベント、「OnValueChanged」イベントおよび「focus」イベントなどによってトリガーされる。図６に示すように、「動作エディタ」で作成された動作チェーンは、作成されている特定のページのみに使用することができる。
【０１５６】
例示的なシステム
図２１は、一実施形態に従って、システム２１００を示す。
【０１５７】
ページライフサイクルマネージャ２１０１は、ユーザが現在閲覧しているアプリケーションＵＩに応じて、状態の一部を初期化および破棄する。状態を破棄する場合、状態を永続性ストア（構成にあった場合）に保存することができ、状態を復元する場合、永続性ストア（persistence store）から状態をロードすることができる。
【０１５８】
永続性ストア２１０２は、ユーザによるアプリケーションの呼び出しの間にアプリケーションの状態を（ディスク上に）保存する場所である。
【０１５９】
状態２１０３は、アプリケーション（変数）によって利用されるアクティブ状態を提供する。
【０１６０】
コンポーネント２１０４は、ユーザによって利用されるボタン、テキスト、画像などを含むＵＩを提供する。
【０１６１】
動作チェーン２１０５は、アプリケーション（プロセス）を駆動するコアロジックのフローを提供する。
【０１６２】
ＲＥＳＴサービス２１０６は、外部のＲＥＳＴ  ＡＰＩを提供する。
コンピュータ／装置２１０７は、ＵＩを制御するブラウザまたは装置を提供する。
【０１６３】
以下、システム２１００に含まれるエンティティ２１０１〜２１０７に関連する操作２１１１〜２１２１の流れを説明する。
【０１６４】
操作２１１１：永続性ストアは、ユーザがアプリケーションをアクティブに使用しているときの状態を初期化して、保存する。
【０１６５】
操作２１１２：状態の変更をコンポーネントに反映させる。例えば、一部の状態に関連付けられたテキストフィールド。
【０１６６】
操作２１１３：コンポーネントは、状態の変更をトリガーする。例えば、テキスト入力は、状態を直接に更新する。
【０１６７】
操作２１１４：ユーザは、自分の装置５０７からＵＩと対話する。
操作２１１５：動作チェーンは、例えば、マップをズームするようにＵＩ上でメソッドを呼び出すことができる。
【０１６８】
操作２１１６：ＵＩは、ロジック（例えば、ボタンのクリック）を実行するように、動作チェーンを始動させることができる。
【０１６９】
操作２１１７：動作チェーンを用いて、ＲＥＳＴサービスを呼び出し、これらのサービスを介してデータをシステムに書き込むまたはシステムからデータを読み取る。
【０１７０】
操作２１１８：ユーザがアプリケーションおよび表示された異なるＵＩをにナビゲートするときに、ページライフサイクルマネージャは、状態を初期化して破棄する。
【０１７１】
操作２１１９：ページライフサイクルマネージャは、ナビゲーションに応答して動作チェーンを実行することができる。例えば、装置２１０７と対話しているユーザは、ページを開始させることができ、これに応じて動作チェーンを実行することができる。
【０１７２】
操作２１２０：動作チェーンは、ナビゲーション、例えば、ＵＩの様々な部分のアクティブ化を引き起こすことができる。
【０１７３】
一実施形態によれば、システム２１００によって作成されたユーザインターフェイスは、クライアントコンピュータ／装置２１０７のブラウザに実行することができる。作成されたユーザインターフェイスを実行するクライアントコンピュータ／装置は、当該ユーザインターフェイスを作成するときに使用されたクライアントコンピュータ／装置２１０７と同様であってもよく、異なってもよい。作成されたユーザインターフェイスは、複数のクライアントコンピュータ／装置上で異なるタイミングで実行されてもよく、同時に実行されてもよい。
【０１７４】
本明細書に記載されたように、設計時ツールを使って、ユーザインターフェイスを作成する。一実施形態によれば、ＪＳＯＮファイルは、ユーザインターフェイスの一部として作成される。作成されたＪＳＯＮファイルは、よく知られた通信方法を介してクライアントコンピュータ／装置のブラウザに転送され、ランタイム実行によって解釈される。
【０１７５】
遅延状態の変更に関して、一実施形態によれば、実行の流れは、以下の通りである。
（通常、２１１６によって）動作チェーンを呼び出す。動作チェーンは、２１２１を介して状態をコピーする。動作チェーンが完了すると、２１２１によって状態を合併する。
【０１７６】
状態管理永続性に関して、一実施形態によれば、実行の流れは、以下の通りである。
ＵＩの一部が（２１１６および２１２０を介して）開始されると、ページライフサイクルマネージャ（２１０１）は、状態（２１１８）を初期化する。ページライフサイクルマネージャは、永続性ストア（２１１１）を参照して状態を初期化することができる。
【０１７７】
ルータ設定に関して、一実施形態によれば、実行の流れは、以下の通りである。
ＵＩの一部が（２１１６および２１２０を介して）開始されると、ページライフサイクルマネージャは、示されたＵＩの一部に従って、２１１８を介して状態を初期化する。
【０１７８】
一実施形態によれば、ルータは、「ページナビゲーション」動作と呼ばれる動作によって、図２１に示された動作チェーン２１０５に実装される。本明細書に記載されたように、ルータは、ＵＲＬを用いて、コンテナの（「状態」とも呼ばれる）変数をＵＲＬの部分にマッピングする。
【０１７９】
例示的なコンピュータ環境
図２２は、本明細書の図面に示された実施形態を実施するために使用可能なシステム２２００および関連するコンピューティング環境を示す概略ブロック図である。例示的なシステム２２００は、図２１を参照して説明した様々なハードウェアおよび／またはソフトウェアモジュールおよび関連する方法をサポートまたは実行することができる。なお、特定の実施形態は、１つ以上の（例えば、ユーザ装置に常駐する）スタンドアロンアプリケーションおよび／またはクライアント側コードとサーバ側コードの組み合わせを用いて実現された１つ以上のウェブベースアプリケーションを用いて、実装することができる。
【０１８０】
汎用システム２２００は、ユーザ装置２２６０〜２２９０、具体的には、デスクトップコンピュータ２２６０、ノートブックコンピュータ２２７０、スマートフォン２２８０、モバイルフォン２２８５、およびタブレット２２９０を含む。汎用システム２２００は、任意の種類のユーザ装置、例えば、シンクライアントコンピュータ、インターネット対応のモバイルフォン、インターネット接続モバイル装置、タブレット、電子書籍、またはウェブページ、他の種類の電子ドキュメントおよびＵＩを表示および閲覧できるおよび／またはアプリケーションを実行できるＰＤＡとインターフェイスで接続することができる。図示では、システム２２００は、５つのユーザ装置をサポートしているが、任意の数のユーザ装置をサポートすることができる。
【０１８１】
ウェブサーバ２２１０は、ウェブブラウザおよびスタンドアロンアプリケーションから、ウェブページ、電子文書、企業データまたは他のコンテンツ、およびユーザコンピュータからの他のデータを要求するリクエストを処理するために使用される。また、ウェブサーバ２２１０は、企業の運用に関連するデータのプッシュデータまたはシンジケートコンテンツ、例えばＲＳＳフィードを提供することができる。
【０１８２】
アプリケーションサーバ２２２０は、１つ以上のアプリケーションを作動させる。アプリケーションは、Ｊａｖａ（登録商標）、Ｃ、Ｃ＋＋、Ｃ＃などのプログラミング言語、またはＪａｖａＳｃｒｉｐｔ（登録商標）またはＥＣＭＡＳｃｒｉｐｔ（European Computer Manufacturers Association Script）、Ｐｅｒｌ、ＰＨＰ（Hypertext Preprocessor）、Ｐｙｔｈｏｎ、Ｒｕｂｙ、またはＴＣＬ（Tool Command Language）などのスクリプト言語で記述された１つ以上のスクリプトまたはプログラムとして実装することができる。アプリケーションは、Rails、Enterprise Java（登録商標）Beans、.NETなどのライブラリまたはアプリケーションフレームワークを使用して構築することができる。ウェブコンテンツは、ＨＴＭＬ（HyperText Markup Language）、ＣＳＳ（Cascading Style Sheets）、およびテンプレート言語およびパーサを含む他のウェブ技術を使用して作成することができる。
【０１８３】
アプリケーションサーバ２２２０上で動作するデータアプリケーションは、入力データおよびユーザコンピュータ要求を処理するように構成され、データ記憶装置またはデータベース２２３０からのデータを格納または取得することができる。データベース２２３０は、データアプリケーションによって作成および使用されるデータを格納する。一実施形態において、データベース２２３０は、ＳＱＬフォーマットコマンドまたは他のデータベースクエリ言語に応答して、データを格納、更新および取得するように構成された関係型データベースを含む。他の実施形態は、非構造化データ記憶アーキテクチャおよびＮｏＳＱＬ（Not Only SQL）データベースを使用することができる。
【０１８４】
一実施形態において、アプリケーションサーバ２２２０は、プログラムまたはスクリプトを実行することができる１つ以上の汎用コンピュータを含む。一実施形態において、ウェブサーバ２２１０は、１つ以上の汎用コンピュータ上で動作するアプリケーションとして実装される。ウェブサーバ２２１０およびアプリケーションサーバ２２２０は、合併されてもよく、同一のコンピュータ上で実行されてもよい。
【０１８５】
電子通信ネットワーク２２４０および２２５０は、ユーザコンピュータ２２６０〜２２９０、ウェブサーバ２２１０、アプリケーションサーバ２２２０、およびデータベース２２３０の間の通信を可能にする。一実施形態において、ネットワーク２２４０および２２５０は、任意の電気通信装置または光通信装置、例えば有線ネットワーク２２４０および無線ネットワーク２２５０を含む。ネットワーク２２４０および２２５０は、イーサネット（登録商標）ネットワークなどの１つ以上のローカルエリアネットワーク、インターネットなどのワイドエリアネットワーク、セルラーキャリアデータネットワーク、仮想プライベートネットワークなどの仮想ネットワークを含むことができる。
【０１８６】
システム２２００は、本発明の実施形態に従って、アプリケーションを実行するための一例である。別の実施形態において、ウェブサーバ２２１０、アプリケーションサーバ２２２０、および必要に応じてデータベース２２３０を単一のサーバコンピュータアプリケーションおよびシステムに組み合わせることができる。さらなる実施形態において、仮想化および仮想マシンアプリケーションを用いて、ウェブサーバ２２１０、アプリケーションサーバ２２２０およびデータベース２２３０のうち１つ以上を実装することができる。
【０１８７】
さらに別の実施形態において、ウェブおよびアプリケーションの機能の全部または一部は、各々のユーザコンピュータ上で動作するアプリケーションに統合することができる。例えば、ユーザコンピュータ上のＪａｖａＳｃｒｉｐｔアプリケーションを用いて、データを取得または分析し、アプリケーションの一部を表示することができる。
【０１８８】
特定の例示的な実施形態において、ユーザコンピューティング装置２６０〜２２９０は、例えば、ユーザインターフェイスを表示するために使用されるブラウザを実行する。例えば、図２２に示されたデスクトップコンピュータ２２６０、ノートブックコンピュータ２２７０、スマートフォン２２８０、モバイルフォン２２８５およびタブレット２２９０などのクライアントコンピューティング装置および／または他のコンピューティング装置から、ユーザインターフェイスを見ることができる。
【０１８９】
特定の例示的な実施形態において、図２のデスクトップコンピュータ２２６０、ノートブックコンピュータ２２７０、スマートフォン２２８０、モバイルフォン２２８５、タブレット２２９０のブラウザは、図２２に示された有線ネットワーク２２４０および／または無線ネットワーク２２５０によって表されたインターネットに接続して、図２１のモジュールによって表された１つ以上のネットワーク接続サーバ、データベース、および／または関連するクラウドベース機能を利用する。例えば、１つ以上のエンティティ２１０１、２１０４、２１０５および２１０６は、アプリケーションサーバ２２２０に常駐することができる。クライアントコンピュータ／装置２１０７は、１つ以上のユーザコンピューティング装置２２６０〜２２９０として実装することができる。図２２に示された１つ以上のデータベース２２３０を用いて、図２１の永続性ストア２１０２および状態２１０３などのデータをホストすることができる。図２１に使用されるネットワークは、ネットワーク２２４０として実装されてもよい。一実施形態において、ネットワーク２２４０を用いて、クライアントコンピュータ／装置２１０７とコンポーネント２１０４との間に通信することができる。
【０１９０】
図４および２２を参照して、ネットワーク４７０は、無線ネットワーク２２５０または有線ネットワーク２２４０であってもよく、無線ネットワーク２２５０および有線ネットワーク２２４０の両方を含んでもよい。ハードウェアメモリ４２０および／またはデータベース４３０は、データ記憶装置／データベース２２３０として実装されてもよい。１つ以上のアプリケーション４４０、４５０、４６０およびツール４１０は、１つ以上のウェブサーバ２２１０またはアプリケーションサーバ２２２０上に常駐、それらによって実行されてもよい。ＵＩ４１１および４４２のページは、ユーザコンピューティング装置２２６０〜２２９０上で動作しているブラウザによってロードされ、表示されてもよい。クライアントアプリケーション４４０は、ツール４１０内で実行されてもよく、ツール４１０によって実行されてもよい。ツール４１０およびアプリケーション４４０は、同一のコンピュータ上で実行されてもよく、または互いに通信する別々のコンピュータ上で実行されてもよい。
【０１９１】
図２３は、本明細書に記載された実施形態を実施するために使用可能なコンピューティングシステム２３００を示す概略ブロック図である。図２３のコンピューティングシステム２３００は、本明細書に記載された実施形態の１つ以上のステップを実行するとして説明されているが、他の実施形態において、コンピューティング装置２３００の任意の適切なコンポーネントもしくはコンポーネントの組み合わせまたはシステム２３００に関連する任意の適切なプロセッサもしくプロセッサの組み合わせは、ステップの実行を促進することができる。
【０１９２】
図２３は、本明細書に記載された実施形態に使用され得る例示的なコンピューティングシステム２３００のブロック図を示す。例えば、コンピューティングシステム２３００を用いて、図２２のユーザ装置２２６０〜２２９０、およびサーバ装置２２１０、２２２０を実装することができ、本明細書に記載された方法を実施することができる。いくつかの実装形態において、コンピューティングシステム２３００は、プロセッサ２３０２、オペレーティングシステム２３０４、メモリ２３０６、および入出力（Ｉ／Ｏ）インターフェイス２３０８を含むことができる。様々な実装形態において、プロセッサ２３０２を用いて、本明細書に記載された様々な機能および特徴を実現することができ、本明細書に記載された方法を実施することができる。プロセッサ２３０２は、本明細書に記載された方法を実施すると説明されているが、システム２３００の任意の適切なコンポーネントもしくはコンポーネントの組み合わせまたはシステム２３００に関連する任意の適切なプロセッサもしくプロセッサの組み合わせまたは任意の適切なシステムは、本明細書に記載された方法を実施することができる。本明細書に記載された方法は、ユーザ装置、サーバ、または両方の組み合わせ上で実施されてもよい。
【０１９３】
また、コンピューティング装置２３００は、メモリ２３０６または任意の他の適切な記憶装置もしくはコンピュータ可読媒体に記憶され得るソフトウェアアプリケーション２３１０を含む。ソフトウェアアプリケーション２３１０は、プロセッサ２３０２に、本明細書に記載された機能および他の機能を実行させる命令を提供する。コンピューティングシステム２３００のコンポーネントは、１つ以上のプロセッサまたはハードウェア装置の任意の組み合わせ、およびハードウェア、ソフトウェア、ファームウェアなどの任意の組み合わせによって実装されてもよい。
【０１９４】
図示を簡単にするために、図２３は、プロセッサ２３０２、オペレーティングシステム２３０４、メモリ２３０６、Ｉ／Ｏインターフェイス２３０８、およびソフトウェアアプリケーション２３１０の各々を１つのブロックとして示している。これらのブロック２３０２、２３０４、２３０６、２３０８および２３１０は、複数のプロセッサ、複数のオペレーティングシステム、複数のメモリ、複数のＩ／Ｏインターフェイス、および複数のソフトウェアアプリケーションを表すことができる。様々な実装形態において、コンピューティングシステム２３００は、図示された全てのコンポーネントを含まなくてもよく、および／または図示されたコンポーネントの代わりにまたは追加的に他のコンポーネントを含んでもよい。
【０１９５】
コンピュータ可読媒体および装置
特に明記しない限り、本明細書に記載された１つ以上の実施形態は、例えば、コンピュータシステムまたは類似する装置の非一時的なプロセッサ可読記憶装置に常駐するプロセッサ可読命令を用いて実施することができる。非一時的なプロセッサ可読記憶装置は、命令を格納することができる任意の物理メモリであってもよい。非一時的なプロセッサ可読記憶装置の例は、ディスク、コンパクトディスク（ＣＤ）、デジタル多用途装置（ＤＶＤ）、読み取り専用メモリ（ＲＯＭ）、フラッシュなどを含むがこれらに限定されない。上述したように、本発明の様々な実施形態のプロセスおよび動作の一部は、一実施形態において、コンピュータシステムの非一時的なプロセッサ可読記憶装置に常駐する一連のプロセッサ可読命令（例えば、ソフトウェアプログラム）として実現され、コンピュータシステムの１つ以上のプロセッサによって実行される。実行されると、命令は、コンピュータシステムに本発明の様々な実施形態の機能を実施させる。例えば、プロセッサは、命令を実行することができる。プロセッサは、コンピュータシステムに関連する中央処理装置などのハードウェアプロセッサである。非一時的なプロセッサ可読記憶装置は、ハードウェアメモリであり、１つ以上のプロセッサは、ハードウェアプロセッサである。一実施形態によれば、非一時的なプロセッサ可読記憶装置は、有形の物理装置である。
【０１９６】
結論
Ｃ、Ｃ＋＋、Ｊａｖａ、アセンブリ言語などを含む任意の適切なプログラミング言語を用いて、特定の実施形態のルーチンを実装することができる。異なるプログラミング技術、例えば手続き型またはオブジェクト指向型プログラミング技術を使用することができる。ルーチンは、単一の処理装置または複数のプロセッサ上で実行することができる。ステップ、動作または演算は、特定の順序で記載されているが、この順序は、異なる特定の実施形態では変更されてもよい。いくつかの特定の実施形態において、本明細書に記載された順次に実行される複数のステップは、同時に実行されてもよい。
【０１９７】
特定の実施形態は、命令実行システム、機械、システムまたは装置によってまたはそれに関連して使用されるコンピュータ可読記憶媒体に実装されてもよい。特定の実施形態は、ソフトウェアまたはハードウェアまたは両方の組み合わせによる制御ロジックの形で実装されてもよい。この制御ロジックは、１つ以上のプロセッサによって実行されると、特定の実施形態に記載されたものを実行するように動作可能である。例えば、ハードウェア記憶装置などの非一時的な媒体を用いて、実行可能命令を含むことができる制御ロジックを格納することができる。
【０１９８】
特定の実施形態は、プログラムされた汎用デジタルコンピュータ、特定用途向け集積回路、プログラマブルロジック装置、フィールドプログラマブルゲートアレイ、光学的システム、化学的システム、生物学的システム、量子的またはナノ工学的システムなどを用いて、実装されてもよい。他のコンポーネントおよび機構を使用することができる。一般に、特定の実施形態の機能は、当技術分野で知られている任意の手段によって達成することができる。分散型またはネットワーク化システム、コンポーネントおよび／または回路を使用することができる。クラウドコンピューティングまたはクラウドサービスを使用することができる。データは、有線、無線、または他の手段で送信または転送することができる。
【０１９９】
また、図面に示された１つ以上の要素は、より離れたまたは集中した方法で配置されてもよく、動作可能に限り、特定の需要に応じて外してもよい。このように、コンピュータが上記の方法のいずれかを実行することを可能にするプログラムまたはコードを機械可読媒体に格納する実装も、本発明の精神および範囲内に含まれる。
【０２００】
「プロセッサ」は、データ、信号または他の情報を処理する任意の適切なハードウェアおよび／またはソフトウェアシステム、メカニズムまたはコンポーネントを含む。プロセッサには、汎用中央処理装置、複数の処理装置、機能を実現するための専用回路を備えたシステムまたは他のシステムを含むことができる。処理は、地理的な場所または時間に限定されない。例えば、プロセッサは、例えば、「リアルタイム」、「オフライン」または「バッチモード」で機能を実行することができる。処理の一部は、異なる（または同様の）処理システムによって、異なる時間に異なる場所で実行することができる。処理システムの例は、サーバ、クライアント、エンドユーザ装置、ルータ、スイッチ、ネットワーク化装置などを含む。コンピュータは、メモリと通信する任意のプロセッサである。メモリは、任意の適切なプロセッサ可読記憶媒体、例えば、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、磁気または光ディスク、またはプロセッサによって実行される命令を格納する適切な他の非一時的な媒体であり得る。
【０２０１】
本明細書の説明および特許請求の範囲に使用された場合、「a」、「an」および「the」は、文脈から明確に指示しない限り、複数を含む。また、本明細書の説明および特許請求の範囲に使用された場合、「in」は、文脈から明確に指示しない限り、「in」および「on」を意味する。
【０２０２】
したがって、本明細書において特定の実施形態を説明したが、任意の修正、様々な変更、および置換は、本開示に含まれる。場合によって、特定の実施形態において、本発明の精神および範囲から逸脱することなく、対応する他の特徴を使用せず、いくつかの特徴を使用することができる。したがって、特定の状況または材料を本質的な範囲および精神に適合するように、多くの変更を加えることができる。
【図１】
2020535548.tif 000005
【図２】
2020535548.tif 000006
【図３】
2020535548.tif 000007
【図４】
2020535548.tif 000008
【図５Ａ】
2020535548.tif 000009
【図５Ｂ】
2020535548.tif 000010
【図６】
2020535548.tif 000011
【図７】
2020535548.tif 000012
【図８】
2020535548.tif 000013
【図９】
2020535548.tif 000014
【図１０】
2020535548.tif 000015
【図１１】
2020535548.tif 000016
【図１２】
2020535548.tif 000017
【図１３】
2020535548.tif 000018
【図１４】
2020535548.tif 000019
【図１５】
2020535548.tif 000020
【図１６】
2020535548.tif 000021
【図１７】
2020535548.tif 000022
【図１８】
2020535548.tif 000023
【図１９】
2020535548.tif 000024
【図２０】
2020535548.tif 000025
【図２１】
2020535548.tif 000026
【図２２】
2020535548.tif 000027
【図２３】
2020535548.tif 000028
【国際調査報告】
2020535548.tif 000029
2020535548.tif 000030