(57)【要約】      （修正有）【課題】統制された環境において、マルチテナント型オンデマンドデータベースサービスを介して、開発アプリケーションへのアクセスを可能にするための機構及び方法の提供。【解決手段】統制された環境において、マルチテナント型オンデマンドデータベースサービス（１０２）を介して、開発アプリケーションへのアクセスを提供するための機構及び方法は、そのような開発アプリケーションのアクセスに加えて、開発プロセスに対する付加的な統制も提供することを可能にし得る。そのような付加的な統制を提供する実施形態の能力は、改良されたアプリケーション開発フレームワークなどをもたらし得る。【選択図】図１Ａ
2014041636.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションがその上で構築され得るプラットフォームにおいて、少なくとも１つのプログラミング言語命令を受け取るステップと、
前記少なくとも１つのプログラミング言語命令に基づいて、オンデマンドデータベースサービスに対する１組の命令を準備するステップと、
前記プログラミング言語命令に従って、結果に影響を及ぼすために前記オンデマンドデータベースサービスに前記１組の命令を適用するステップとを含む方法。
【請求項２】
前記１組の命令が、インタフェースを拡張するために適用される、請求項１に記載の方法。
【請求項３】
前記インタフェースが、アプリケーションプログラムインタフェースを含む、請求項２に記載の方法。
【請求項４】
前記インタフェースが、グラフィカルユーザインタフェースを含む、請求項２に記載の方法。
【請求項５】
前記１組の命令が、前記プログラミング言語命令に従って、前記オンデマンドデータベースサービスから結果セットを提供するために適用される、請求項１に記載の方法。
【請求項６】
前記１組の命令が、前記プログラミング言語命令に従って、前記オンデマンドデータベースサービスにおいてデータを更新するために適用される、請求項１に記載の方法。
【請求項７】
前記１組の命令が、単一のトランザクションに応答して、前記オンデマンドデータベースサービスにおいて１組のマルチオブジェクト操作を実行するために適用される、請求項１に記載の方法。
【請求項８】
前記アプリケーションが、サードパーティによって構築される、請求項１に記載の方法。
【請求項９】
前記少なくとも１つのプログラミング言語命令が、ＰＬ／ＳＯＱＬ言語命令を含む、請求項１に記載の方法。
【請求項１０】
前記少なくとも１つのプログラミング言語命令が、前記プラットフォームのアプリケーションプログラムインタフェースにおいて受け取られる、請求項１に記載の方法。
【請求項１１】
前記プラットフォームが、前記アプリケーションを共用するように適合される、請求項１に記載の方法。
【請求項１２】
前記オンデマンドデータベースサービスが、マルチテナント型オンデマンドデータベースサービスを含む、請求項１に記載の方法。
【請求項１３】
前記１組の命令が、前記オンデマンドデータベースサービスを利用してデータを保存する複数のテナントから選択されたテナントに関係する情報を問い合わせるために準備される、請求項１に記載の方法。
【請求項１４】
前記プラットフォームが、デベロッパが前記アプリケーションをアップロードすることを可能にし、前記オンデマンドデータベースサービスのテナントが前記アップロードされたアプリケーションを使用することを可能にする、請求項１に記載の方法。
【請求項１５】
前記アップロードされたアプリケーションが、前記オンデマンドデータベースサービスの統制下にある、請求項１４に記載の方法。
【請求項１６】
アプリケーションがその上で構築され得るプラットフォームにおいて、少なくとも１つのプログラミング言語命令を受け取るステップと、
前記少なくとも１つのプログラミング言語命令に基づいて、オンデマンドデータベースサービスを介して別のシステムに対する１組の命令を準備するステップと、
前記プログラミング言語命令に従って、結果に影響を及ぼすために前記１組の命令を適用するステップとを含む方法。
【請求項１７】
前記別のシステムが、外部システムを含む、請求項１６に記載の方法。
【請求項１８】
１つ又は複数の一連の命令を搬送するマシン可読媒体であって、前記１つ又は複数の一連の命令は、１つ又は複数のプロセッサによって実行される場合に、前記１つ又は複数のプロセッサに、
アプリケーションがその上で構築され得るプラットフォームにおいて、少なくとも１つのプログラミング言語命令を受け取るステップと、
前記少なくとも１つのプログラミング言語命令に基づいて、オンデマンドデータベースサービスに対する１組の命令を準備するステップと、
前記プログラミング言語命令に従って、結果に影響を及ぼすために前記オンデマンドデータベースサービスに前記１組の命令を適用するステップとを実施させる、マシン可読媒体。
【請求項１９】
プロセッサと、
１つ又は複数の保存された一連の命令とを備え、前記１つ又は複数の保存された一連の命令は、前記プロセッサによって実行される場合に、前記プロセッサに、
アプリケーションがその上で構築され得るプラットフォームにおいて、少なくとも１つのプログラミング言語命令を受け取るステップと、
前記少なくとも１つのプログラミング言語命令に基づいて、オンデマンドデータベースサービスに対する１組の命令を準備するステップと、
前記プログラミング言語命令に従って、結果に影響を及ぼすために前記オンデマンドデータベースサービスに前記１組の命令を適用するステップとを実施させる、装置。
【請求項２０】
マルチテナント型データベースシステムで使用するためのコードを伝送媒体上で送信するための方法であって、
アプリケーションがその上で構築され得るプラットフォームにおいて、少なくとも１つのプログラミング言語命令を受け取るためのコードを送信するステップと、
前記少なくとも１つのプログラミング言語命令に基づいて、オンデマンドデータベースサービスに対する１組の命令を準備するためのコードを送信するステップと、
前記プログラミング言語命令に従って、結果に影響を及ぼすために前記オンデマンドデータベースサービスに前記１組の命令を適用するためのコードを送信するステップとを含む方法。
【発明の詳細な説明】
【著作権表示】
【０００１】
本特許文書の開示の一部は、著作権保護の対象となる記述内容を含む。著作権所有者は、特許商標庁の特許ファイル又は記録に現れるとおりの、特許文書又は特許開示の何人による複製にも異議を唱えないが、それ以外はどのようなものであれすべての著作権を保有する。
【技術分野】
【０００２】
本発明は、一般に、デベロッパフレームワークに関し、より詳細には、改良された方法でのアプリケーション開発に関する。
【背景技術】
【０００３】
背景セクションで説明される主題は、それが背景セクションで言及されたからというだけで、従来技術であると仮定されるべきではない。同様に、背景セクションで言及される問題、又は背景セクションの主題に関連する問題は、従来技術においてすでに認識されていたと仮定されるべきではない。背景セクションにおける主題は、それ自体でも発明となり得る、異なる手法を表すに過ぎない。
【０００４】
従来のデータベースシステムでは、ユーザは、１つの論理データベース内のデータリソースにアクセスする。そのような従来のシステムのユーザは一般に、ユーザ自身のシステムを使用して、システムからデータを検索し、システムにデータを保存する。ユーザシステムは、複数のサーバシステムの１つに遠隔地からアクセスすることができ、サーバシステムは、それを受けて、データベースシステムにアクセスすることができる。システムからのデータ検索は、ユーザシステムからデータベースシステムへのクエリの発行を含むことができる。データベースシステムは、クエリで受け取った情報要求を処理し、要求に関連する情報をユーザシステムに送信することができる。
【０００５】
上述のデータベースシステムの機能を拡張するための様々なアプリケーションを開発したいという要望がしばしば生じる。しかし、これまでは、そのようなアプリケーションは一般に、制御されていない環境で開発されていた。例えば、従来は、デベロッパが、データベースシステムサービスを貧弱な制御に委ねたまま、そのようなアプリケーションの開発を指図する。このことが今度は、開発プロセスなどにおいて様々な不都合をもたらすことがある。例えば、様々な開発上のベストプラクティス（例えば、テスト、リソース割り当てなどに関する）は、デベロッパの制御下にあるため、必ずしも実施されるとは限らない。
【発明の概要】
【課題を解決するための手段】
【０００６】
実施形態によれば、制御された環境において、マルチテナント型オンデマンドデータベースサービス（ｍｕｌｔｉ−ｔｅｎａｎｔ  ｏｎ−ｄｅｍａｎｄ  ｄａｔａｂａｓｅ  ｓｅｒｖｉｃｅ）を介して、開発アプリケーションへのアクセスを可能にするための機構及び方法が提供される。そのようなアクセスを提供するためのこれらの機構及び方法は、実施形態が、そのような開発アプリケーションのアクセスに加えて、開発プロセスに対する付加的な制御も提供することを可能にし得る。そのような付加的な制御を提供する実施形態の能力は、改良されたアプリケーション開発／ランタイムフレームワークなどをもたらし得る。
【０００７】
一実施形態では、例を挙げると、制御された環境において、マルチテナント型オンデマンドデータベースサービスを介して、開発アプリケーションへのアクセスを可能にするための方法が提供される。使用に際して、開発アプリケーションが、マルチテナント型オンデマンドデータベースサービスで受け取られる。アプリケーションへのアクセスが、オンデマンドデータベースサービスのテナントに提供される。そのようなアプリケーションは、オンデマンドデータベースサービスの制御下にある。
【０００８】
本発明は、開発アプリケーションへのアクセスを可能にする技法が、マルチテナント型データベースオンデマンドサービスのフロントエンドを提供するアプリケーションサーバにおいて実施される、一実施形態を参照して説明されるが、本発明は、マルチテナント型データベース、又はアプリケーションサーバ上への配備に限定されない。実施形態は、特許請求される実施形態の範囲から逸脱することなく、他のデータベースアーキテクチャ、すなわち、ＯＲＡＣＬＥ（登録商標）及びＤＢ２（登録商標）などを使用して実施することもできる。
【０００９】
上記の実施形態のいずれも、単独で使用されてよく、又は任意の組み合わせで互いに一緒に使用されてもよい。本明細書内に包含される発明は、この簡単な概要又は要約において、単に部分的に言及若しくは暗に言及されるに過ぎない、又はまったく言及若しくは暗に言及されることのない実施形態も含んでよい。本発明の様々な実施形態は、本明細書の１つ又は複数の箇所で説明又は暗に言及されることがある、従来技術に伴う様々な短所が動機となったものもあるが、本発明の実施形態は、必ずしもこれらの短所のすべてに対処するものではない。言い換えると、本発明の異なる実施形態は、本明細書で説明されることがある異なる短所に対処することがある。いくつかの実施形態は、本明細書で説明されることがあるいくつかの短所に単に部分的に対処するだけのことも、又はただ１つの短所に対処するだけのこともあり、いくつかの実施形態は、これらの短所のどれにも対処しないこともある。
【図面の簡単な説明】
【００１０】
【図１Ａ】一実施形態による、オンデマンドデータベースサービスを介して、開発アプリケーションへのアクセスを可能にするためのシステムを示す図である。
【図１Ｂ】オンデマンドデータベースサービスを利用して、開発アプリケーションをテストするための方法を示す図である。
【図２】オンデマンドデータベースサービスと共に実行するインタフェースを拡張するための方法を示す図である。
【図３】別の実施形態による、オンデマンドデータベースサービスを介して、開発アプリケーションへのアクセスを可能にするためのシステムを示す図である。
【図４】また別の実施形態による、デベロッパからスクリプトを受け取って処理するための方法を示す図である。
【図５】さらにまた別の実施形態による、エンドユーザから要求を受け取って処理するための方法を示す図である。
【図６】オンデマンドデータベースサービスが使用できる環境の一例のブロック図である。
【図７】図６の要素及びこれらの要素間の様々な可能な相互接続のブロック図である。
【発明を実施するための形態】
【００１１】
全体的な概要
制御された環境において、マルチテナント型オンデマンドデータベースサービスを介して、開発アプリケーションへのアクセスを可能にするためのシステム及び方法が提供される。さらに、オンデマンドデータベースサービスと共に実行するインタフェースを拡張するためのシステム及び方法が提供される。
【００１２】
データベースシステムと共に使用されるアプリケーションの開発には、そのようなアプリケーション開発の制御がデベロッパ次第であるという事実から生じる、多くの課題が存在する。例えば、様々な開発上のベストプラクティス（例えば、テスト、リソース割り当てなどに関する）は、デベロッパの制御下にあるため、必ずしも実施されるとは限らない。したがって、制御された環境において、マルチテナント型オンデマンドデータベースサービスを介して、開発アプリケーションへのアクセスを可能にするための機構及び方法が本明細書において提供される。そのような付加的な制御を提供する実施形態の能力は、改良されたアプリケーション開発／ランタイムフレームワークなどをもたらし得る。例えば、開発プロセスなどに対する制御を管理することによって、インタフェース（例えば、ＡＰＩなど）がそれによってより感情的な方法（ａｆｆｅｃｔｉｖｅ  ｍａｎｎｅｒ）で拡張され得る実施形態が可能にされる。
【００１３】
次に、制御された環境において開発アプリケーションへのアクセスを可能にするため、及びオンデマンドデータベースサービスと共に実行するインタフェースを拡張するための機構及び方法が説明される。
【００１４】
図１Ａは、一実施形態による、オンデマンドデータベースサービス１０２を介して、開発アプリケーションへのアクセスを可能にするためのシステム１００を図示している。本説明との関連では、オンデマンドデータベースサービスは、ネットワークを介してアクセス可能なデータベースシステムに依存する任意のサービスを含むことができる。
【００１５】
一実施形態では、オンデマンドデータベースサービス１０２は、マルチテナント型オンデマンドデータベースサービスを含むことができる。本説明では、そのようなマルチテナント型オンデマンドデータベースサービスは、ネットワークを介してアクセス可能なデータベースシステムに依存する任意のサービスを含むことができ、ネットワークにおいては、データベースシステムのハードウェア及びソフトウェアの様々な要素が、１つ又は複数の顧客によって共用されてよい。例えば、与えられたアプリケーションサーバは、多数の顧客の要求を同時に処理することができ、与えられたデータベーステーブルは、潜在的にさらに多数の顧客のための行（ｒｏｗ）を保存することができる。そのようなマルチテナント型オンデマンドデータベースサービスの様々な例が、以降の図を参照して説明される異なる実施形態に関連して説明される。
【００１６】
示されるように、オンデマンドデータベースサービス１０２は、複数のデベロッパ１０４と通信する。使用に際して、オンデマンドデータベースサービス１０２は、デベロッパ１０４から開発アプリケーションを受け取るように適合される。本説明との関連では、デベロッパ１０４は、コンピュータコードを開発する任意の１つ又は複数の人又は主体（例えば、企業、組織など）を含むことができる。さらに、アプリケーションは、任意のコンピュータコード（例えば、コンピュータプログラム、部分的プログラム、コードセグメントなど）を含むことができる。
【００１７】
加えて、オンデマンドデータベースサービス１０２は、オンデマンドデータベースサービス１０２の１つ又は複数のテナント１０６とも通信する。オンデマンドデータベースサービス１０２がマルチテナント型オンデマンドデータベースサービスを含む上述の実施形態では、複数のテナント１０６が存在してよい。いずれの場合も、本説明においては、テナントとは、オンデマンドデータベースサービス１０２にアクセスすることが可能な任意の１つ又は複数の人又は主体のことである。例えば、テナント１０６は、オンデマンドデータベースサービス１０２に加入（ｓｕｂｓｃｒｉｂｅ）することができる。
【００１８】
この設計によって、オンデマンドデータベースサービス１０２は、オンデマンドデータベースサービス１０２のテナント１０６に、アプリケーションへのアクセスを提供する働きをする。使用に際して、上述のアプリケーションは、オンデマンドデータベースサービス１０２の制御下にある。そのような制御を管理することによって、改良された開発／ランタイムフレームワークなどがそれによって提供される。
【００１９】
様々な実施形態では、そのような制御は、任意の所望の方法で管理されてよい。例えば、オンデマンドデータベースサービス１０２は、アプリケーションが方針を順守していない状況では、テナント１０６によるそのアプリケーションへのアクセスを排除することによって、任意の所望の方針を実施することができる。他の実施形態では、オンデマンドデータベースサービス１０２は、そのような非準拠のシナリオでは、デベロッパ１０４からアクセス可能な機能を排除又は制限することによって、そのような方針を実施することができる。例えば、オンデマンドデータベースサービス１０２へのアプリケーションの公開は、一定の要件を満たしていない場合には、不許可とすることができる。特定の一実施形態では、オンデマンドデータベースサービス１０２は、アプリケーションの様々な側面（ａｓｐｅｃｔ）を監視及び制限することができ、動的コンテキストリミッタ（ｄｙｎａｍｉｃ  ｃｏｎｔｅｘｔｕａｌ  ｌｉｍｉｔｅｒ）に基づいて、関連コードを終了させることができる。もちろん、上記の制御は、任意の所望の方法で実施されてよい。
【００２０】
一実施形態では、上述の制御は、オンデマンドデータベースサービス１０２によってアプリケーションの少なくとも１つの側面を制限する形態をとることができる。例えば、そのような側面は、デベロッパ１０４のアプリケーションから利用可能にされる、処理用リソース、記憶用リソース、帯域幅リソースなどに関係することができる。この設計によって、オンデマンドデータベースサービス１０２は、アプリケーションを介してテナント１０６にサービスするオンデマンドデータベースサービス１０２の能力を最適化するような仕方で、デベロッパを制約できることがある。
【００２１】
様々な実施形態では、そのようなリソース関係の側面は、オンデマンドデータベースサービス１０２に関連するデータベース、そのようなデータベースがアプリケーションを利用してアクセスされ得る方法などを含むことができる。そのような実施形態では、上記の側面は、データベースの列（ｃｏｌｕｍｎ）の数、所定の時間枠内におけるデータベースに対するクエリの数、クエリによって返される行の数、データベースステートメント（例えば、変更ステートメントなど）の数、データベースステートメントの間のスクリプトステートメントの数、所定の時間枠内において処理（例えば、変更など）される行の数、トランザクションステートメントの数、最後のトランザクション制御ステートメント以降の未コミット行の総数、最後のデータベースコール以降のスクリプトステートメントの総数、処理の所要時間などを含むことができるが、これらに限定されない。
【００２２】
もちろん、そのような例示的な列挙は、限定的なものと解釈されるべきではない。例えば、オンデマンドデータベースサービス１０２の任意の側面（例えば、電子メール管理など）も、同様に制限されてよい。具体的な一例では、要求当たり送信できるｅメールの数、及び／又は要求当たり行われる発信ウェブサービスコールの数が制限されてよい。様々な実施形態では、制限は、要求当たりベース、又は期間当たり（例えば、１日当たり）ベースに、アプリケーションに適用されることができる。後者の実施形態では、そのような制限は、ユーザ当たりすなわちテナント当たりベースに適用することができる。
【００２３】
他の実施形態では、アプリケーションの開発が制御され得る。例えば、アプリケーションは、アプリケーションはテスト（例えば、正当性確認など）を受けるという、オンデマンドデータベースサービス１０２の要件を課すことによって制御される。そのようなテストは、一実施形態では、オンデマンドデータベースサービス１０２に関連するアプリケーションプログラムインタフェースに対して行われるコールを用いて、自動的な方法でネイティブに実行することができる。
【００２４】
開発制御を含む本実施形態の他の態様では、オンデマンドデータベースサービス１０２は、機能テストがアプリケーションのために書かれることを要求することができ、さらに所定のパーセンテージのコードカバレージ（ｃｏｄｅ  ｃｏｖｅｒａｇｅ）を要求することができる。この実施形態では、そのような技法は、作業中アプリケーションを誤って停止（ｂｒｅａｋ）させるリスクを低減するために、オンデマンドデータベースサービス１０２が変更された場合は常に、そのようなテストの実行を可能にすることができる。この設計によって、後退（ｒｅｇｒｅｓｓｉｏｎ）及び／又は他のマイナスの特徴が回避できる。そのような制御されたテストを含む可能な一実施形態に関するさらなる情報が、図１Ｂを参照してより詳細に説明される。
【００２５】
さらなる追加の実施形態では、オンデマンドデータベースサービス１０２のテナント１０６によるアプリケーションへのアクセスが制御され得る。例えば、オンデマンドデータベースサービス１０２の複数のテナント１０６の間で、各アプリケーションの単一のインスタンスがインスタンス化され得る。したがって、アプリケーションの１つのコピーが、オンデマンドデータベースサービス１０２によって保存されさえすれば、上記の方法でテナント１０６の間で同時に共用される。
【００２６】
上記の制御は、静的でも動的でもよく、一様に適用されてもされなくてもよいとすべきである。例えば、上記の側面及び関係する制御基準は、異なるアプリケーション、テナント１０６など毎に異なっていてもいなくてもよい。単なる例として、オンデマンドデータベースサービス１０２は、行当たりのデータベーストリガなどを実行する場合に関して、アップグレードスクリプトを実行する場合に、より多くのリソースを可能にすることができる。さらに、オンデマンドデータベースサービス１０２は、大規模テナント１０６などのために、より多くのリソースを可能にすることができる。
【００２７】
図１Ｂは、オンデマンドデータベースサービスを利用して、開発アプリケーションをテストするための方法１５０を示している。任意選択で、本方法１５０は、図１Ａのオンデマンドデータベースサービス１０２との関連で実施することができる。しかし、もちろん、方法１５０は、任意の所望の環境において実施することもできる。本説明中では、上述の定義が適用できる。
【００２８】
示されるように、開発アプリケーションが、オンデマンドデータベースサービスで受け取られる。動作１５２を参照されたい。様々な実施形態では、オンデマンドデータベースサービスは、マルチテナント型オンデマンドデータベースサービスを含んでよく、又は含まなくてもよい。
【００２９】
さらに、開発アプリケーションは、全体として受け取られてよく、又は部分的に受け取られてもよい。例えば、一実施形態では、アプリケーションは、別個のシステムを利用して開発され、その後、オンデマンドデータベースサービスにアップロードされてよい。他の実施形態では、アプリケーションが開発されている最中に、アプリケーションのコードセグメントが、オンデマンドデータベースサービスで受け取られてよい。もちろん、上記のフレームワークの両方を利用する混成システムがさらに企図される。またさらに、開発アプリケーションの上述の受け取りは、ネットワークを介して行われても行われなくてもよい。
【００３０】
図１Ｂを続けて参照すると、アプリケーションは、オンデマンドデータベースサービスを利用してテストすることができる。動作１５４を参照されたい。本説明との関連では、そのようなテストは、アプリケーションの少なくとも１つの側面にアクセスするための任意のプロセスに関係することができる。例えば、そのような側面は、操作性、品質、効率（例えば、リソース要件などに関して）などを含むことができるが、これらに限定されない。さらに言えば、様々な異なる実施形態では、テストは、デバッグ目的のもの、望ましくないデッドロック状況を識別するためのもの、データベースセマンティクスを実施するためのもの、及び／又は任意の所望の規則に関するものとすることができる。
【００３１】
特定の一実施形態では、上記のテストは、ユニットテストを含むことができる。そのようなユニットテストは、アプリケーションのコードの特定の部分が適切に作動するかどうかを検証することができる。任意選択で、ユニットテストは、引数を取らないこと、データをデータベースにコミットしないことなどかできる。他の実施形態では、できるだけ多数の行のコードをカバーし、条件論理（３項演算子を含む）の場合には、コード論理の各ブランチを実行するテストが利用できる。さらに、テストは、エラーが期待され、捕らえられるのでない限り、どのような例外も発生させずに、正常終了するように設計することができる。またさらに、テストは、コードが適切に振舞うことを証明し、バルクトリガ（ｂｕｌｋ  ｔｒｉｇｇｅｒ）機能などを実行するために、「Ｓｙｓｔｅｍ．ａｓｓｅｒｔ（）」メソッドを自由に利用するように構成されてもよい。
【００３２】
一実施形態では、テストは、オンデマンドデータベースサービスによって制御することができる。例えば、すべてのテストは、オンデマンドデータベースサービスの制御下にあることができる。他の実施形態では、テストの一部だけが、オンデマンドデータベースサービスの制御下にあることができる。そのような実施形態では、テストの第１の部分は、アプリケーションのデベロッパによって制御されてよく、テストの第２の部分は、オンデマンドデータベースサービスによって制御されてよい。
【００３３】
さらに、テストは、任意の所望の時に行われてよい。例えば、テストは、定期的なもの、要求に応じたもの、イベント又はマイルストン（ｍｉｌｅｓｔｏｎｅ）によってトリガされたものなどとすることができる。一例では、テストは、オンデマンドデータベースサービスの少なくとも１つの側面（例えば、コード、機能など）が追加、アップグレードなどされた時に、すべての関連アプリケーションにわたって自動的に行われることができる。この目的のため、オンデマンドデータベースサービス上でのアプリケーションの継続動作が保証される。
【００３４】
別の実施形態では、テストは、オンデマンドデータベースサービスによって要求されることがある。そのような要求は、任意の所望の方法で実施することができる（例えば、やはり上述の例示的な実施技法などを参照されたい）。任意選択で、アプリケーションの少なくとも１つがテストに合格したかどうかを判定することができる。この目的のため、そのようなアプリケーションへのアクセスは、その判定に基づいて、条件付きで提供されることができる。例えば、アプリケーションがテストに合格したと判定される場合、アプリケーションへのアクセスが提供されてよい。さらに、アプリケーションがテストに合格しなかったと判定される場合、アプリケーションへのそのようなアクセスは排除されてよい。任意選択で、アプリケーションのデベロッパによって適切な行動が取られ得るように、テストが合格した又は不合格になった程度及び／又は仕方を示すために、レポートが提供されることができる。
【００３５】
そのような合格のための要件の定義は、任意の所望の方法で構成することができる。例えば、そのような合格基準は、オンデマンドデータベースサービスによって定義することができる。さらに、基準は、任意の所望のパラメータ、閾値などを含むことができる。この目的のため、オンデマンドデータベースサービスを介して利用可能なアプリケーションの標準化された改良の利益と交換に、アプリケーションのデベロッパが開発プロセスに対する何らかの制御を放棄することを求めるマネージドコード環境が提供される。
【００３６】
図２は、オンデマンドデータベースサービスと共に実行するインタフェースを拡張するための方法２００を示している。任意選択で、本方法２００は、図１Ａのオンデマンドデータベースサービス１０２との関連で実施することができる。様々な実施形態では、オンデマンドデータベースサービスは、マルチテナント型オンデマンドデータベースサービスを含んでよく、又は含まなくてもよい。しかし、もちろん、方法２００は、任意の所望の環境において実施することもできる。本説明中では、上述の定義が適用できる。
【００３７】
示されるように、少なくとも１つのプログラミング言語命令が、アプリケーションがその上で構築され得るプラットフォームで受け取られる。動作２０２を参照されたい。そのような命令の受け取りは、任意の所望の方法で達成することができる。例えば、少なくとも１つのプログラミング言語命令は、プラットフォームに関連するＡＰＩで受け取られても受け取られなくてもよい。
【００３８】
様々な実施形態では、そのようなプラットフォームは、図１のオンデマンドデータベースサービス１０２の部分であっても部分でなくてもよく、アプリケーションを共用するように適合されてもよい。しかし、プラットフォームが、アプリケーションを構築することを可能にする、任意のハードウェア及び／又はソフトウェアを含むことができることに留意されたい。もちろん、そのようなアプリケーションは、サードパーティ（例えば、プラットフォームに関連する関係者以外の関係者など）によって構築されてもされなくてもよい。
【００３９】
本説明との関連では、上記のアプリケーションは、任意の所望のソフトウェアを含むことができ、そのようなアプリケーションは、任意の所望の方法で構築することができる。例えば、様々な実施形態では、そのような「構築」は、開発プロセスの全体又は一部を管理するためのフォーラムを提供することから、以前から存在するアプリケーションを使用のために単にアクセス可能にすることまでなど多岐にわたることができる。またさらに、本説明では、上述のプログラミング言語命令は、プラットフォームによって認識可能なコードの任意の部分を含むことができる。
【００４０】
図２を続けて参照すると、少なくとも１つのプログラミング言語命令に基づいて、オンデマンドデータベースサービスに対する１組の命令が準備できる。動作２０４を参照されたい。本説明との関連では、１組の命令は、オンデマンドデータベースサービスによって認識可能な任意のコードを含むことができる。
【００４１】
オンデマンドデータベースサービスが他の外部システムを呼び出す能力を有する他の実施形態では、１組の命令とは、オンデマンドデータベースサービスを介した別のシステムに対する命令のことであってよい。さらに、上述の制御は、そのような外部システムに対する任意の呼び出し要求に適用することができる。例えば、そのような呼び出し要求は、より低い優先権（例えば、ロックを含む低レベルのデータベース操作の最中は許可されないなど）を与えられてよい。
【００４２】
マルチテナント型オンデマンドデータベースサービスを含む一実施形態では、１組の命令は、すべてのテナントに適用されるように構成することができる。別の実施形態では、１組の命令は、テナント固有とすることができる。言い換えると、オンデマンドデータベースサービスを利用してデータを保存するテナントから選択された単一のテナント（又はテナントのサブセット）に関係する情報を問い合わせるための１組の命令が準備できる。
【００４３】
この目的のため、プログラミング言語命令に従って、結果に影響を及ぼすために、１組の命令が（例えば、オンデマンドデータベースサービスに）適用できる。動作２０６を参照されたい。様々な実施形態では、プログラミング言語命令に従って、オンデマンドデータベースサービス内のデータを更新して、及び／又は任意の所望のアクションを実行、若しくは既存のアクションを変更して、オンデマンドデータベースサービスから結果セットを提供するために、１組の命令が適用できる。特定の一実施形態では、任意の所望の方法でオンデマンドデータベースサービスのインタフェース（例えば、ＡＰＩ、グラフィカルユーザインタフェースなど）を拡張するために、１組の命令が適用できる。
【００４４】
様々な可能な特徴が、上記の拡張技法によって可能にされ得る。一実施形態では、単一のトランザクションに応答して、オンデマンドデータベースサービスにおいて１組のマルチオブジェクト操作を実行するために、１組の命令が適用できる。例えば、以前は多数のトランザクションを必要とした多数のオブジェクトの操作が、拡張後は、単一のトランザクションしか必要としないことがある。
【００４５】
図２の方法２００の一例が、上述のプラットフォームを含む図１Ａのオンデマンドデータベースサービス１０２との関連で今から説明される。そのような例では、動作２０２の命令は、オンデマンドデータベースサービス１０２においてデベロッパ１０４から受け取ることができる。その後、オンデマンドデータベースサービス１０２は、動作２０４の１組の命令を準備することができる。この目的のため、動作２０４の命令のそのような組は、テナント１０６によるアプリケーションの使用と併せて、オンデマンドデータベースサービス１０２によって適用することができる。この設計によって、デベロッパ１０４から受け取った元の命令に従って、オンデマンドデータベースサービス１０２の所望の側面（例えば、アプリケーションの１つなど）が拡張できる。
【００４６】
いくつかの実施形態では、プログラミング言語命令は、データベースシステムと共に使用するために適合される、フォーマット、シンタックスなどを含むことができる。特定の一実施形態では、手続き型言語セールスフォースオブジェクトクエリ言語（ＰＬ／ＳＯＱＬ：ｐｒｏｃｅｄｕｒａｌ  ｌａｎｇｕａｇｅ  ｓａｌｅｓｆｏｒｃｅ  ｏｂｊｅｃｔ  ｑｕｅｒｙ  ｌａｎｇｕａｇｅ）プログラミング言語命令が利用できる。本実施形態では、ＰＬ／ＳＯＱＬは、データベースＡＰＩ［例えば、ＳＯＱＬ、データ操作言語（ＤＭＬ）など］と併せて、サーバ上でフロー制御及びトランザクション制御を実行することを可能にする、オンデマンドデータベース中枢サービスＡＰＩに対する手続き拡張として働くことが可能である。ＰＬ／ＳＯＱＬは、多数のＳＯＱＬ／ＤＭＬステートメントをサーバ上の単一の作業単位として一まとめにする機能を可能にすることができる。ＰＬ／ＳＯＱＬは、いくつかの実施形態では、非常にデータ集中的（ｄａｔａ  ｆｏｃｕｓｅｄ）であるので、必ずしも汎用プログラミング言語と見なされる必要はない。カリフォルニア州レッドウッドショアズのＯｒａｃｌｅ（登録商標）Ｉｎｃ．によるＰＬ／ＳＱＬ、その他などの、従来のアプリケーションデベロッパの従来のツールとは対照的に、ＰＬ／ＳＯＱＬは、任意選択の一実施形態では、オンデマンドデータベースシステムとインタフェースをとるために、デベロッパによって使用することができる。
【００４７】
本ＰＬ／ＳＯＱＬ実施形態は、Ｊａｖａのものをエミュレートするように意図されたシンタックス及びセマンティクスを含むこともできるが、本実施形態は、Ｊａｖａに限定されない。ＰＬ／ＳＯＱＬ実施形態は、変数及び式のシンタックス、ブロック及び条件のシンタックス、ループのシンタックス、オブジェクト及び配列表記法、参照渡しなどを含むことができる。オンデマンドデータベースアプリケーションとインタフェースをとる埋め込み概念が提供される場合、理解が容易でデータベースＡＰＩの効率的使用を促進するシンタックス及びセマンティクスも利用できる。
【００４８】
図３は、別の実施形態による、オンデマンドデータベースサービス３０２を介して、開発アプリケーションへのアクセスを可能にするためのシステム３００を示している。任意選択で、本システム３００は、図１〜図２のアーキテクチャ及び機能との関連で実施することができる。しかし、もちろん、システム３００は、任意の所望の環境において実施することもできる。やはり、本説明中では、上述の定義が適用できる。
【００４９】
示されるように、オンデマンドデータベースサービス３０２は、ネットワーク３０８を介して、デベロッパ３０４及び少なくとも１つのエンドユーザテナント３０６との通信を維持する。さらに、オンデマンドデータベースサービス３０２は、異なる仕方でデベロッパ３０４及びユーザテナント３０６とインタフェースをとるアプリケーションサーバ３１０を含む。具体的には、アプリケーションサーバ３１０は、デベロッパ３０４とはコンパイル時フェーズ中に、ユーザテナント３０６とはランタイムフェーズ中にインタフェースをとることができる。
【００５０】
例えば、アプリケーションサーバ３１０は、一実施形態では、オンデマンドデータベースサービス３０２のＡＰＩを拡張しようと意図することがあるデベロッパ３０４から、プログラム言語命令（例えば、スクリプトなど）を受け取るように適合される。そのようなスクリプトの受け取りに応答して、アプリケーションサーバ３１０は、そのスクリプトを処理（例えば、コンパイルなど）し、データベース３１２に保存する。任意選択で、そのような処理はさらに、デベロッパ３０４がスクリプト開発においてベストプラクティス又は他の任意の所定のプラクティスを利用することを確実にするために、先に言及された所望の制御のいずれかを含むことができる。一実施形態では、そのようなコンパイル済スクリプトは、エンドユーザテナント３０６からの要求に応答して使用するために、メタデータの形式で保存することができる。この特徴によって、スクリプトは、エンドユーザテナント３０６からの特定の関連する要求（例えば、オブジェクトを選択、アクセス、変更などするための要求）に応答して、トリガされるように適合することができる。
【００５１】
具体的には、アプリケーションサーバ３１０はさらに、エンドユーザテナント３０６から要求を受け取るように適合される。そのような要求に応答して、そのような要求は、それらを使用して、相関するコンパイル済スクリプトを識別し、データベース３１２から取り出すことによって、アプリケーションサーバ３１０のランタイムインタープリタ３１４を利用して処理される。ランタイムインタープリタ３１４はさらに、コンパイル済スクリプトを処理する能力を備える。したがって、コンパイル済スクリプトは、要求が満たされる方法を指図することができる。先に言及されたように、そのようなコンパイル済スクリプトは、データベース情報のより効率的な検索、及び／又は他の任意の所望の機能増強などを可能にすることができる。
【００５２】
図４は、別の実施形態による、デベロッパからスクリプトを受け取って処理するための方法４００を示している。任意選択で、本方法４００は、図１〜図３のアーキテクチャ及び機能との関連で実施することができる。例えば、方法４００は、デベロッパ３０４に関係した、図３のアプリケーションサーバ３１０の機能を表すことができる。しかし、もちろん、方法４００は、任意の所望の環境において実施することもできる。やはり、本説明中では、上述の定義が適用できる。
【００５３】
示されるように、本方法４００は、デベロッパからスクリプトを受け取った時にトリガされる。判断４０２を参照されたい。そのような受け取りに応答して、動作４０４で説明されるように、スクリプトはコンパイルされる。そのようなコンパイルに応答して、動作４０６に示されるように、コンパイル済スクリプトがメタデータの形式で保存される。この目的のため、メタデータは、エンドユーザテナントによる要求と連動した検索及び使用のために利用可能にされる。
【００５４】
図５は、別の実施形態による、エンドユーザから要求を受け取って処理するための方法５００を示している。任意選択で、本方法５００は、図１〜図３のアーキテクチャ及び機能との関連で実施することができる。例えば、方法５００は、エンドユーザテナント３０６に関係した、図３のアプリケーションサーバ３１０の機能を表すことができる。さらに、方法５００は、図４の方法４００の後に続くことができる。しかし、もちろん、方法５００は、任意の所望の環境において実施することもできる。やはり、本説明中では、上述の定義が適用できる。
【００５５】
判定５０２において、要求がエンドユーザテナントから受け取られたかどうかが最初に判定される。受け取られた場合、そのような要求は最初に、データベースに保存されたメタデータ（図４の動作４０６を参照されたい）を検索するために使用できるフォーマット、プロトコルなどに準拠するように変換される。動作５０６〜５０８に注目されたい。その後、そのようなメタデータは、動作５１０に示されるように、エンドユーザテナントに返される結果に影響を及ぼすために、ランタイム時に処理することができる。
【００５６】
システム概要
図６は、オンデマンドデータベースサービスが使用できる環境６１０のブロック図を図示している。任意選択で、上記の図の先に説明された実施形態のいずれかが、環境６１０との関連で実施されてもよく、又は実施されなくてもよい。環境６１０は、ユーザシステム６１２と、ネットワーク６１４と、システム６１６と、プロセッサシステム６１７と、アプリケーションプラットフォーム６１８と、ネットワークインタフェース６２０と、テナントデータストレージ６２２と、システムデータストレージ６２４と、プログラムコード６２６と、プロセス空間６２８とを含むことができる。他の実施形態では、環境６１０は、列挙されたコンポーネントのすべてを有してなくてもよく、及び／又は上に列挙されたコンポーネントに代わる、若しくは追加される他の要素を有してもよい。
【００５７】
環境６１０は、オンデマンドデータベースサービスが存在する環境である。ユーザシステム６１２は、データベースユーザシステムにアクセスするためにユーザによって使用される任意のマシン又はシステムとすることができる。例えば、ユーザシステム６１２のいずれも、ハンドヘルドコンピューティング装置、モバイル電話、ラップトップコンピュータ、ワークステーション、及び／又はコンピューティング装置のネットワークとすることができる。図６に（及び図７により詳細に）図示されるように、ユーザシステム６１２は、ネットワークを介して、システム６１６であるオンデマンドデータベースサービスと対話することができる。
【００５８】
システム６１６のようなオンデマンドデータベースサービスは、必ずしもデータベースシステムの構築及び／又は維持に関係する必要のない外部ユーザから利用可能にされ、代わりにユーザがデータベースシステムを必要とする場合（例えば、ユーザの要求時）にユーザの使用のために利用可能になり得る、データベースシステムである。いくつかのオンデマンドデータベースサービスは、マルチテナント型データベースシステム（ＭＴＳ）を形成するために、１つ又は複数のテナントからの情報を共有データベースイメージのテーブルに保存することができる。したがって、「オンデマンドデータベースサービス６１６」と「システム６１６」とは、本明細書では交換可能に使用される。データベースイメージは、１つ又は複数のデータベースオブジェクトを含むことができる。リレーショナルデータベース管理システム（ＲＤＭＳ）又はその等価物は、データベースオブジェクトに対する情報の保存及び検索を実行することができる。アプリケーションプラットフォーム６１８は、システム６１６のアプリケーションが動作することを可能にする、ハードウェア及び／又はソフトウェア、例えば、オペレーティングシステムなどの、フレームワークとすることができる。一実施形態では、オンデマンドデータベースサービス６１６は、オンデマンドデータベースサービスのプロバイダ、ユーザシステム６１２を介してオンデマンドデータベースサービスにアクセスするユーザ、又はユーザシステム６１２を介してオンデマンドデータベースサービスにアクセスするサードパーティのアプリケーションデベロッパによって開発された１つ又は複数のアプリケーションの生成、管理、及び実行を可能にする、アプリケーションプラットフォーム６１８を含むことができる。
【００５９】
ユーザシステム６１２のユーザは、それぞれの資格（ｃａｐａｃｉｔｙ）において異なることができ、特定のユーザシステム６１２の資格は、現在のユーザに対する許可（許可レベル）によって完全に決定することができる。例えば、ある販売員がシステム６１６と対話する特定のユーザシステム６１２を使用する場合、そのユーザシステムは、その販売員に割り当てられた資格を有する。しかし、ある管理者がシステム６１６と対話するそのユーザシステム６１２を使用する場合、そのユーザシステムは、その管理者に割り当てられた資格を有する。階層的役割モデルを有するシステムでは、１つの許可レベルにあるユーザは、より低い許可レベルのユーザによってアクセス可能なアプリケーション、データ、及びデータベース情報にアクセスすることができるが、より高い許可レベルにあるユーザによってアクセス可能なある種のアプリケーション、データベース情報、及びデータにアクセスすることはできない。したがって、異なるユーザは、ユーザのセキュリティ又は許可レベルに応じて、アプリケーション及びデータベース情報に対するアクセス及び変更に関して、異なる能力を有する。
【００６０】
ネットワーク６１４は、互いに通信する装置からなる任意のネットワーク又はネットワークの組み合わせである。例えば、ネットワーク６１４は、ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（ワイドエリアネットワーク）、電話ネットワーク、無線ネットワーク、ポイントツーポイントネットワーク、スターネットワーク、トークンリングネットワーク、ハブネットワーク、又は他の適切な構成のうちのいずれか１つ又は任意の組み合わせとすることができる。現在使用されているなかで最も一般的なタイプのコンピュータネットワークは、「Ｉ」を大文字にしてしばしば「インターネット（Ｉｎｔｅｒｎｅｔ）」と称されるネットワークの世界的な相互ネットワークなどの、ＴＣＰ／ＩＰ（伝送制御プロトコル及びインターネットプロトコル）ネットワークであるので、本明細書では、そのネットワークが、例の多くで使用される。しかし、ＴＣＰ／ＩＰはしばしば実施されるプロトコルであるが、本発明が使用できるネットワークは、そのようなネットワークに限定されないことを理解されたい。
【００６１】
ユーザシステム６１２は、ＴＣＰ／ＩＰを使用してシステム６１６と通信することができ、より高いネットワークレベルでは、ＨＴＴＰ、ＦＴＰ、ＡＦＳ、ＷＡＰなど、他の一般的なインターネットプロトコルを使用して通信することができる。ＨＴＴＰが使用される一例では、ユーザシステム６１２は、システム６１６のＨＴＴＰサーバにＨＴＴＰメッセージを送信し、ＨＴＴＰサーバからＨＴＴＰメッセージを受信するための、一般に「ブラウザ」と呼ばれるＨＴＴＰクライアントを含むことができる。そのようなＨＴＴＰサーバは、システム６１６とネットワーク６１４の間のただ１つのネットワークインタフェースとして実施されてもよいが、他の技法が、付加的又は代替的に使用されてもよい。いくつかの実施では、システム６１６とネットワーク６１４の間のインタフェースは、負荷を平衡させ、着信ＨＴＴＰ要求を複数のサーバに均一に分配するためのラウンドロビンＨＴＴＰ要求ディストリビュータなどの、負荷分割機能を含む。少なくとも、そのサーバにアクセスするユーザに関して、複数のサーバの各々がＭＴＳのデータにアクセスするが、代わりに他の代替構成が使用されてもよい。
【００６２】
一実施形態では、図６に示されるシステム６１６は、ウェブベースの顧客関係管理（ＣＲＭ）システムを実施する。例えば、一実施形態では、システム６１６は、アプリケーションサーバを含み、アプリケーションサーバは、ＣＲＭソフトウェアアプリケーションを実施し、実行する他、関連データ、コード、フォーム、ウェブページ、及び他の情報をユーザシステム６１２に提供し、またユーザシステム６１２から提供し、並びに関連データ、オブジェクト、及びウェブページコンテンツをデータベースシステムに保存し、またデータベースシステムから取り出すように構成される。マルチテナント型システムを用いた場合、同じ物理データオブジェクトに、多数のテナントのためのデータが保存できるが、テナントデータは一般に、１つのテナントのデータが、他のテナントのデータとは論理的に独立して維持され、その結果、１つのテナントが、別のテナントのデータが明白に共用されていない限り、そのようなデータにアクセスしないように構成される。ある実施形態では、システム６１６は、ＣＲＭアプリケーション以外の、又はＣＲＭアプリケーションに加えて、他のアプリケーションを実施する。例えば、システム６１６は、ＣＲＭアプリケーションを含む、多数のホストされる（標準及びカスタム）アプリケーションに対するテナントアクセスを提供することができる。ＣＲＭを含んでも含まなくてもよいユーザ（又はサードパーティデベロッパ）アプリケーションは、アプリケーションプラットフォーム６１８によってサポートすることができ、アプリケーションプラットフォーム６１８は、アプリケーションの生成、１つ又は複数のデータベースオブジェクトへの保存、及びシステム６１６のプロセス空間内の仮想マシンにおけるアプリケーションの実行を管理する。
【００６３】
ネットワークインタフェース６２０と、アプリケーションプラットフォーム６１８と、テナントデータ６２３用のテナントデータストレージ６２２と、システム６１６及びおそらくは多数のテナントからアクセス可能なシステムデータ用のシステムデータストレージ６２４と、システム６１６の様々な機能を実施するためのプログラムコード６２６と、アプリケーションホスティングサービスの一部としてアプリケーションを実行するなど、ＭＴＳシステムプロセス及びテナント固有プロセスを実行するためのプロセス空間６２８とを含む、システム６１６の要素の一構成が図６に示されている。システム６１６上で実行できる追加のプロセスは、データベースインデクシングプロセスを含む。
【００６４】
図６に示されるシステム内のいくつかの要素は、ここでは簡潔に説明されるだけの、従来のよく知られた要素を含む。例えば、各ユーザシステム６１２は、デスクトップパーソナルコンピュータ、ワークステーション、ラップトップ、ＰＤＡ、携帯電話、若しくは任意の無線アクセスプロトコル（ＷＡＰ）対応装置、又はインターネット若しくは他のネットワーク接続と直接若しくは間接にインタフェースをとることが可能な他の任意のコンピューティング装置を含むことができる。ユーザシステム６１２は一般に、例えば、ＭｉｃｒｏｓｏｆｔのＩｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒブラウザ、ＮｅｔｓｃａｐｅのＮａｖｉｇａｔｏｒブラウザ、Ｏｐｅｒａのブラウザ、又は携帯電話、ＰＤＡ、若しくは他の無線装置の場合のＷＡＰ対応ブラウザなどのブランジングプログラムである、ＨＴＴＰクライアントを実行し、ＨＴＴＰクライアントは、ユーザシステム６１２のユーザ（例えば、マルチテナント型データベースシステムの加入者）が、ユーザシステム６１２から利用可能なシステム６１６の情報、ページ、及びアプリケーションにネットワーク６１４を介してアクセスし、処理し、閲覧することを可能にする。各ユーザシステム６１２は一般に、システム６１６又は他のシステム若しくはサーバによって提供されるページ、フォーム、アプリケーション、及び他の情報と併せて、ブラウザによってディスプレイ上（例えば、モニタスクリーン、ＬＣＤディスプレイなど）に提供されるグラフィカルユーザインタフェース（ＧＵＩ）と対話するための、キーボード、マウス、トラックボール、タッチパッド、タッチスクリーン、又はペンなどの、１つ又は複数のユーザインタフェース装置も含む。例えば、ユーザインタフェース装置は、システム６１６によってホストされるデータ及びアプリケーションにアクセスするため、保存データ上で検索を実行するため、並びに他の理由でユーザがユーザに提示され得る様々なＧＵＩページと対話することを可能にするために使用することができる。上述されたように、実施形態は、インターネットと共に使用するのに適しており、インターネットとは、ネットワークの特別な世界的な相互ネットワークのことである。しかし、インターネットの代わりに、イントラネット、エクストラネット、仮想私設ネットワーク（ＶＰＮ）、非ＴＣＰ／ＩＰベースのネットワーク、又は任意のＬＡＮ若しくはＷＡＮなど、他のネットワークも使用できることを理解されたい。
【００６５】
一実施形態によれば、各ユーザシステム６１２及びそのコンポーネントのすべては、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）プロセッサなどの中央処理装置を使用して実行されるコンピュータコードを含む、ブラウザなどのアプリケーションを使用して、オペレータ構成可能である。同様に、システム６１６（及び２つ以上存在する場合はＭＴＳの追加インスタンス）並びにそのコンポーネントのすべては、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）プロセッサなど及び／又は多数のプロセッサユニットを含むことができるプロセッサシステム６１７などの中央処理装置を使用して実行されるコンピュータコードを含むアプリケーションを使用して、オペレータ構成可能とすることができる。コンピュータプログラム製品実施形態は、本明細書で説明された実施形態のプロセスのいずれかを実行するようにコンピュータをプログラムするために使用できる命令が、そこに保存されるマシン可読記憶媒体（メディア）を含む。本明細書で説明されるようなウェブページ、アプリケーション、並びに他のデータ及びメディアコンテンツを相互通信し、処理するように、システム６１６を動作させ、構成するためのコンピュータコードは、好ましくはダウンロードされ、ハードディスク上に保存されるが、プログラムコード全体又はその一部は、ＲＯＭ又はＲＡＭなどの、よく知られた他の任意の揮発性又は不揮発性メモリ媒体又は装置にも保存されてよく、或いはフロッピディスク、光ディスク、デジタル多用途ディスク（ＤＶＤ）、コンパクトディスク（ＣＤ）、マイクロドライブ、及び光磁気ディスクを含む任意のタイプの回転媒体、並びに磁気若しくは光カード、（分子メモリＩＣを含む）ナノシステム、又は命令及び／若しくはデータを保存するのに適した任意のタイプの媒体若しくは装置などの、プログラムコードを保存することが可能な任意の媒体上で提供されてもよい。加えて、プログラムコード全体又はその一部は、よく知られているように、例えば、インターネットなどの伝送媒体を介して、ソフトウェアソース若しくは別のサーバから送信及びダウンロードすることができ、又はよく知られた任意の通信媒体及びプロトコル（例えば、ＴＣＰ／ＩＰ、ＨＴＴＰ、ＨＴＴＰＳ、イーサネットなど）を使用して、よく知られた他の任意の従来のネットワーク接続（例えば、エクストラネット、ＶＰＮ、ＬＡＮなど）を介して送信することができる。本発明の実施形態を実施するためのコンピュータコードは、クライアントシステム及び／又はサーバ若しくはサーバシステム上で実行できる任意のプログラミング言語で実施することができ、例えば、Ｃ、Ｃ＋＋、ＨＴＭＬ、他の任意のマークアップ言語、Ｊａｖａ（商標）、ＪａｖａＳｃｒｉｐｔ、ＡｃｔｉｖｅＸ、ＶＢＳｃｒｉｐｔなどの他の任意のスクリプト言語、及びよく知られた他の多くのプログラミング言語が使用できることが理解されよう（Ｊａｖａ（商標）はＳｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．の商標である）。
【００６６】
一実施形態によれば、各システム６１６は、システム６１６のテナントとしてのユーザシステム６１２によるアクセスをサポートするため、ウェブページ、フォーム、アプリケーション、データ、及びメディアコンテンツをユーザ（クライアント）システム６１２に提供するように構成される。そのようなものとして、システム６１６は、各テナントのデータを、そのデータが共用されない限り、独立して維持するためのセキュリティ機構を提供する。２つ以上のＭＴＳが使用される場合、それらは互いに近くに（例えば、単一の建物若しくはキャンパス内に配置されるサーバファームに）配置されてよく、又はそれらは互いに離れた場所（例えば、都市Ａに配置される１つ若しくは複数のサーバと、都市Ｂに配置される１つ若しくは複数のサーバ）に分散されてもよい。本明細書で使用される各ＭＴＳは、局所的又は１つ若しくは複数の地理的場所にわたって分散される、１つ又は複数の論理接続及び／又は物理接続サーバを含むことができる。加えて、「サーバ」という用語は、処理ハードウェア及びプロセス空間を含むコンピュータシステムと、当技術分野でよく知られた関連するストレージシステム及びデータベースアプリケーション（例えば、ＯＯＤＢＭＳ又はＲＤＢＭＳ）とを含むことが意味される。「サーバシステム」と「サーバ」とは、本明細書ではしばしば交換可能に使用されることも理解されたい。同様に、本明細書で説明されるデータベースオブジェクトは、単一のデータベース、分散データベース、分散データベースの集まり、冗長オンライン若しくはオフラインバックアップ又は他の冗長性を有するデータベースなどとして実施することができ、分散データベース又はストレージネットワーク及び関連する処理インテリジェンスを含むことができる。
【００６７】
図７も環境６１０を図示している。しかし、図７では、一実施形態におけるシステム６１６の要素及び様々な相互接続がさらに図示されている。図７は、ユーザシステム６１２が、プロセッサシステム６１２Ａと、メモリシステム６１２Ｂと、入力システム６１２Ｃと、出力システム６１２Ｄとを含み得ることを示している。図７は、ネットワーク６１４と、システム６１６とを示している。図７は、システム６１６が、テナントデータストレージ６２２と、テナントデータ６２３と、システムデータストレージ６２４と、システムデータ６２５と、ユーザインタフェース（ＵＩ）７３０と、アプリケーションプログラムインタフェース（ＡＰＩ）７３２と、ＰＬ／ＳＯＱＬ７３４と、セーブルーチン７３６と、アプリケーションセットアップ機構７３８と、アプリケーションサーバ７００１〜７００Ｎと、システムプロセス空間７０２と、テナントプロセス空間７０４と、テナント管理プロセス空間７１０と、テナントストレージ領域７１２と、ユーザストレージ７１４と、アプリケーションメタデータ７１６とを含み得ることも示している。他の実施形態では、環境６１０は、上で列挙されたものと同じ要素を有さなくてよく、及び／又は上で列挙されたものに代わる、若しくは追加される他の要素を有してもよい。
【００６８】
ユーザシステム６１２、ネットワーク６１４、システム６１６、テナントデータストレージ６２２、及びシステムデータストレージ６２４は、図６において上で説明された。ユーザシステム６１２に関して、プロセッサシステム６１２Ａは、１つ又は複数のプロセッサの任意の組み合わせとすることができる。メモリシステム６１２Ｂは、１つ又は複数のメモリ装置、短期及び／又は長期メモリの任意の組み合わせとすることができる。入力システム６１２Ｃは、１つ又は複数のキーボード、マウス、トラックボール、スキャナ、カメラ、及び／又はネットワークとのインタフェースなど、入力装置の任意の組み合わせとすることができる。出力システム６１２Ｄは、１つ又は複数のモニタ、プリンタ、及び／又はネットワークとのインタフェースなど、出力装置の任意の組み合わせとすることができる。図７によって示されるように、システム６１６は、１組のＨＴＴＰアプリケーションサーバ７００として実施される（図６の）ネットワークインタフェース６２０と、アプリケーションプラットフォーム６１８と、テナントデータストレージ６２２と、システムデータストレージ６２４とを含むことができる。システムプロセス空間７０２も示されており、個別のテナントプロセス空間７０４と、テナント管理プロセス空間７１０とを含む。各アプリケーションサーバ７００は、その中のテナントデータストレージ６２２及びテナントデータ６２３と、その中のシステムデータストレージ６２４及びシステムデータ６２５が、ユーザシステム６１２の要求にサービスするように構成することができる。テナントデータ６２３は、個々のテナントストレージ領域７１２に分割することができ、テナントストレージ領域７１２は、データの物理構成及び／又は論理構成とすることができる。各テナントストレージ領域７１２内で、ユーザストレージ７１４及びアプリケーションメタデータ７１６は、各ユーザに対して同様に割り当てることができる。例えば、ユーザの直近に使用された（ＭＲＵ）アイテムのコピーは、ユーザストレージ７１４に保存することができる。同様に、テナントである組織全体についてのＭＲＵアイテムのコピーは、テナントストレージ領域７１２に保存することができる。ＵＩ７３０は、システム６１６に存在するプロセスへのユーザインタフェースを、ＡＰＩ７３２は、そのようなプロセスへのアプリケーションプログラマインタフェースを、ユーザシステム６１２においてユーザ及び／又はデベロッパに提供する。テナントデータ及びシステムデータは、１つ又は複数のＯｒａｃｌｅ（商標）データベースなど、様々なデータベースに保存することができる。
【００６９】
アプリケーションプラットフォーム６１８は、アプリケーションデベロッパのアプリケーションの生成及び管理をサポートするアプリケーションセットアップ機構７３８を含み、アプリケーションは、例えば、加入者によるテナント管理プロセス７１０によって管理される１つ又は複数のテナントプロセス空間７０４としての実行のため、セーブルーチン７３６によってテナントデータストレージ６２２にメタデータとしてセーブできる。そのようなアプリケーションに対する起動は、プログラミング言語スタイルのインタフェース拡張をＡＰＩ７３２に提供するＰＬ／ＳＯＱＬ３４を使用して、コード化することができる。アプリケーションに対する起動は、１つ又は複数のシステムプロセスによって検出することができ、システムプロセスは、起動して、メタデータをアプリケーションとして仮想マシンで実行する加入者のために、アプリケーションメタデータ７１６の取り出しを管理する。
【００７０】
各アプリケーションサーバ７００は、データベースシステムに通信可能に結合することができ、データベースシステムは、例えば、システムデータ６２５及びテナントデータ６２３に異なるネットワーク接続を介してアクセスする。例えば、１つのアプリケーションサーバ７００１は、ネットワーク６１４（例えば、インターネット）を介して結合することができ、別のアプリケーションサーバ７００Ｎ−１は、直接ネットワークリンクを介して結合することができ、別のアプリケーションサーバ７００Ｎは、また異なるネットワーク接続を介して結合することができる。伝送制御プロトコル及びインターネットプロトコル（ＴＣＰ／ＩＰ）は、アプリケーションサーバ７００とデータベースシステムの間で通信するための典型的なプロトコルである。しかし、使用されるネットワーク相互接続に応じてシステムを最適化するために、他の転送プロトコルが使用できることは当業者には明らかであろう。
【００７１】
ある実施形態では、各アプリケーションサーバ７００は、テナントである任意の組織に関連する任意のユーザのために要求を処理するように構成される。任意の時点において任意の理由でアプリケーションサーバをサーバプールに追加でき、サーバプールから削除できることが望ましいので、好ましくは、特定のアプリケーションサーバ７００に対するユーザ及び／又は組織のサーバアフィニティ（ｓｅｒｖｅｒ  ａｆｆｉｎｉｔｙ）は存在しない。したがって、一実施形態では、要求をアプリケーションサーバ７００に分配するために、アプリケーションサーバ７００とユーザシステム６１２の間に、負荷平衡機能（例えば、Ｆ５  Ｂｉｇ−ＩＰ負荷バランサ）を実施するインタフェースシステムが通信可能に結合される。一実施形態では、負荷バランサは、ユーザ要求をアプリケーションサーバ７００に転送するために、最小接続アルゴリズムを使用する。ラウンドロビン及び観測された応答時間など、負荷バランスアルゴリズムの他の例も使用することができる。例えば、ある実施形態では、同じユーザからの３つの連続した要求が、３つの異なるアプリケーションサーバ７００に到達することがあり得、異なるユーザからの３つの要求が、同じアプリケーションサーバ７００に到達することもあり得る。このように、システム６１６は、マルチテナント型であり、システム６１６は、異なるユーザ及び組織にわたる異なるオブジェクト、データ、及びアプリケーションの保存、並びに異なるオブジェクト、データ、及びアプリケーションへのアクセスを処理する。
【００７２】
ストレージの一例として、１つのテナントは、販売員を雇用する会社とすることができ、各販売員は、各自の販売プロセスを管理するためにシステム６１６を使用する。したがって、ユーザは、連絡先データ、見込み客データ、顧客フォローアップデータ、実績データ、目標及び進捗データなど、そのユーザの個人販売プロセスに利用可能なすべてを、（例えば、テナントデータストレージ６２２内に）維持することができる。ＭＴＳ構成の一例では、アクセス、閲覧、変更、報告、送信、計算などを行うためのデータ及びアプリケーションのすべては、ネットワークアクセスを有するに過ぎないユーザシステムによって維持でき、アクセスできるので、ユーザは、多くの異なるユーザシステムのいずれからも、自身の販売活動及びサイクルを管理することができる。例えば、販売員が顧客を訪問しており、その顧客がロビーにインターネットアクセスを有する場合、販売員は、顧客がロビーに到着するのを待ちながら、その顧客に関する重大な更新を獲得することができる。
【００７３】
各ユーザのデータは、各ユーザの雇用者に関わらず、他のユーザのデータから分離できるが、いくつかのデータは、テナントである与えられた組織の複数のユーザ又はすべてのユーザによって共用又はアクセスされる、全組織的なデータであってよい。したがって、他のデータ構造がユーザレベルで管理され得る一方で、テナントレベルに割り当てられた、システム６１６によって管理されるいくつかのデータ構造が存在できる。ＭＴＳは、可能な競争相手を含む多数のテナントをサポートできるので、ＭＴＳは、データ、アプリケーション、及びアプリケーション使用を独立に維持するセキュリティプロトコルを有するべきである。また、多くのテナントは、各自のシステムを維持するよりも、ＭＴＳにアクセスする方を選択することがあるので、冗長性、使用可能時間、及びバックアップは、ＭＴＳで実施されることがある付加機能である。ユーザ固有データ及びテナント固有データに加えて、システム６１６は、多数のテナントによって使用可能なシステムレベルデータ、又は他のデータも維持することができる。そのようなシステムレベルデータは、テナント間で共有可能な業界報告、ニュース、及び投稿などを含むことができる。
【００７４】
ある実施形態では、（クライアントシステムとすることができる）ユーザシステム６１２は、システムレベル及びテナントレベルのデータをシステム６１６に要求し、更新するために、アプリケーションサーバ７００と通信し、アプリケーションサーバ７００は、１つ又は複数のクエリをテナントデータストレージ６２２及び／又はシステムデータストレージ６２４に送信する必要があることがある。システム６１６（例えば、システム６１６内のアプリケーションサーバ７００）は、所望の情報にアクセスするために設計された１つ又は複数のＳＱＬステートメント（例えば、１つ又は複数のＳＱＬクエリ）を自動的に生成する。システムデータストレージ６２４は、要求されたデータをデータベースから取得するためのクエリプランを生成することができる。
【００７５】
各データベースは一般に、事前定義されたカテゴリに一致するデータを含む、１組の論理テーブルなどの、オブジェクトの集まりと見なすことができる。「テーブル」は、データオブジェクトの１つの表現であり、本明細書では、本発明によるオブジェクト及びカスタムオブジェクトの概念的説明を簡略化するために使用されることがある。「テーブル」と「オブジェクト」とは、本明細書では交換可能に使用できることを理解されたい。各テーブルは一般に、可視的なスキーマにおいて列すなわちフィールドとして論理的に配列される１つ又は複数のデータカテゴリを含む。テーブルの各行すなわちレコードは、フィールドによって定義される各カテゴリのデータからなるインスタンスを含む。例えば、ＣＲＭデータベースは、名前、住所、電話番号、ファックス番号などの基本連絡先情報用のフィールドを用いて顧客を記述するテーブルを含むことができる。別のテーブルは、顧客、製品、販売価格、日付などの情報用のフィールドを含む購入注文を記述することができる。いくつかのマルチテナント型データベースシステムでは、すべてのテナントによって使用するために、標準エンティティテーブルが提供できる。ＣＲＭデータベースアプリケーションの場合、そのような標準エンティティテーブルは、各々が事前定義されたフィールドを含む、口座、連絡先、見込み客、及び機会データ用のテーブルを含むことができる。「エンティティ」という語は、本明細書では「オブジェクト」及び「テーブル」と交換可能に使用できることも理解されたい。
【００７６】
いくつかのマルチテナント型データベースシステムでは、テナントは、カスタムオブジェクトを生成し、保存することを許可されてよく、又は例えば、カスタムインデックスフィールドを含む、標準オブジェクト用のカスタムフィールドを生成することによって、標準エンティティ若しくはオブジェクトをカスタマイズすることを許可されてもよい。例えば、ある実施形態では、すべてのカスタムエンティティデータ行は、組織当たり多数の論理テーブルを含むことができる、単一のマルチテナント型物理テーブルに保存される。各自の多数の「テーブル」が実際には１つの大規模テーブルに保存されること、又は各自のデータが他の顧客のデータと同じテーブルに保存されることがあることは、顧客からは明白である。
【００７７】
本発明が例を用いて、特定の実施形態に関して説明されたが、本発明が開示された実施形態に限定されないことを理解されたい。反対に、当業者に明らかな様々な変更及び類似の構成を包含することが意図されている。したがって、添付の特許請求の範囲は、すべてのそのような変更及び類似の構成を包含するように、最も広い解釈が与えられるべきである。
なお、上記の実施形態について次の付記を記す。
（付記１）マルチテナント型オンデマンドデータベースサービスにおいて開発アプリケーションを受け取るステップと、
前記アプリケーションへのアクセスを前記オンデマンドデータベースサービスのテナントに提供するステップとを含み、
前記アプリケーションが、前記オンデマンドデータベースサービスの統制下にある、方法。
（付記２）前記アプリケーションの少なくとも１つの側面が、前記オンデマンドデータベースサービスによって制限される、付記１に記載の方法。
（付記３）制限される前記アプリケーションの前記少なくとも１つの側面が、前記アプリケーションから利用可能にされるリソースの量を含む、付記２に記載の方法。
（付記４）前記リソースが、記憶用リソース、処理用リソース、及び帯域幅リソースの少なくとも１つを含む、付記３に記載の方法。
（付記５）制限される前記アプリケーションの前記少なくとも１つの側面が、データベースの列の数を含む、付記２に記載の方法。
（付記６）制限される前記アプリケーションの前記少なくとも１つの側面が、データベースに対するクエリの数を含む、付記２に記載の方法。
（付記７）制限される前記アプリケーションの前記少なくとも１つの側面が、クエリによって返される行の数の数を含む、付記２に記載の方法。
（付記８）制限される前記アプリケーションの前記少なくとも１つの側面が、データベースステートメントの数を含む、付記２に記載の方法。
（付記９）制限される前記アプリケーションの前記少なくとも１つの側面が、データベースステートメントの間のスクリプトステートメントの数を含む、付記２に記載の方法。
（付記１０）制限される前記アプリケーションの前記少なくとも１つの側面が、処理される行の数の数を含む、付記２に記載の方法。
（付記１１）制限される前記アプリケーションの前記少なくとも１つの側面が、トランザクションステートメントの数を含む、付記２に記載の方法。
（付記１２）制限される前記アプリケーションの前記少なくとも１つの側面が、最後のトランザクション制御ステートメント以降の未コミット行の総数を含む、付記２に記載の方法。
（付記１３）制限される前記アプリケーションの前記少なくとも１つの側面が、最後のデータベースコール以降のスクリプトステートメントの総数を含む、付記２に記載の方法。
（付記１４）前記アプリケーションの開発が統制される、付記１に記載の方法。
（付記１５）前記アプリケーションが、前記アプリケーションはテストを受けるという、前記オンデマンドデータベースサービスの要件によって統制される、付記１４に記載の方法。
（付記１６）前記アプリケーションが、前記アプリケーションは正当と確認されるという、前記オンデマンドデータベースサービスの要件によって統制される、付記１４に記載の方法。
（付記１７）前記オンデマンドデータベースサービスの前記テナントによる前記アプリケーションへのアクセスが、統制される、付記１に記載の方法。
（付記１８）各アプリケーションの単一のインスタンスが、前記オンデマンドデータベースサービスの複数の前記テナントの間でインスタンス化される、付記１７に記載の方法。
（付記１９）前記アプリケーションをコンパイルするステップをさらに含む、付記１に記載の方法。
（付記２０）前記コンパイル済アプリケーションが、前記オンデマンドデータベースサービスのランタイムインタープリタによって処理されることが可能である、付記１９に記載の方法。
（付記２１）前記コンパイル済アプリケーションが、メタデータを含む、付記１９に記載の方法。
（付記２２）前記メタデータが、データベースに保存される、付記２１に記載の方法。
（付記２３）制限される前記アプリケーションの前記少なくとも１つの側面が、電子メールメッセージの数を含む、付記２に記載の方法。
（付記２４）１つ又は複数の一連の命令を搬送するマシン可読媒体であって、前記１つ又は複数の一連の命令は、１つ又は複数のプロセッサによって実行される場合に、前記１つ又は複数のプロセッサに、
マルチテナント型オンデマンドデータベースサービスにおいて開発アプリケーションを受け取るステップと、
前記アプリケーションへのアクセスを前記オンデマンドデータベースサービスのテナントに提供するステップとを実施させ、
前記アプリケーションが、前記オンデマンドデータベースサービスの統制下にある、マシン可読媒体。
（付記２５）プロセッサと、
１つ又は複数の保存された一連の命令とを備え、前記１つ又は複数の保存された一連の命令は、前記プロセッサによって実行される場合に、前記プロセッサに、
マルチテナント型オンデマンドデータベースサービスにおいて開発アプリケーションを受け取るステップと、
前記アプリケーションへのアクセスを前記オンデマンドデータベースサービスのテナントに提供するステップとを実施させ、
前記アプリケーションが、前記オンデマンドデータベースサービスの統制下にある、装置。
（付記２６）マルチテナント型データベースシステムで使用するためのコードを伝送媒体上で送信するための方法であって、
マルチテナント型オンデマンドデータベースサービスにおいて開発アプリケーションを受け取るためのコードを送信するステップと、
前記アプリケーションへのアクセスを前記オンデマンドデータベースサービスのテナントに提供するためのコードを送信するステップとを含み、
前記アプリケーションが、前記オンデマンドデータベースサービスの統制下にある、方法。
（付記２７）アプリケーションがその上で構築され得るプラットフォームにおいて、少なくとも１つのプログラミング言語命令を受け取るステップと、
前記少なくとも１つのプログラミング言語命令に基づいて、オンデマンドデータベースサービスに対する１組の命令を準備するステップと、
前記プログラミング言語命令に従って、結果に影響を及ぼすために前記オンデマンドデータベースサービスに前記１組の命令を適用するステップとを含む方法。
（付記２８）前記１組の命令が、インタフェースを拡張するために適用される、付記２７に記載の方法。
（付記２９）前記インタフェースが、アプリケーションプログラムインタフェースを含む、付記２８に記載の方法。
（付記３０）前記インタフェースが、グラフィカルユーザインタフェースを含む、付記２８に記載の方法。
（付記３１）前記１組の命令が、前記プログラミング言語命令に従って、前記オンデマンドデータベースサービスから結果セットを提供するために適用される、付記２７に記載の方法。
（付記３２）前記１組の命令が、前記プログラミング言語命令に従って、前記オンデマンドデータベースサービスにおいてデータを更新するために適用される、付記２７に記載の方法。
（付記３３）前記１組の命令が、単一のトランザクションに応答して、前記オンデマンドデータベースサービスにおいて１組のマルチオブジェクト操作を実行するために適用される、付記２７に記載の方法。
（付記３４）前記アプリケーションが、サードパーティによって構築される、付記２７に記載の方法。
（付記３５）前記少なくとも１つのプログラミング言語命令が、ＰＬ／ＳＯＱＬ言語命令を含む、付記２７に記載の方法。
（付記３６）前記少なくとも１つのプログラミング言語命令が、前記プラットフォームのアプリケーションプログラムインタフェースにおいて受け取られる、付記２７に記載の方法。
（付記３７）前記プラットフォームが、前記アプリケーションを共用するように適合される、付記２７に記載の方法。
（付記３８）前記オンデマンドデータベースサービスが、マルチテナント型オンデマンドデータベースサービスを含む、付記２７に記載の方法。
（付記３９）前記１組の命令が、前記オンデマンドデータベースサービスを利用してデータを保存する複数のテナントから選択されたテナントに関係する情報を問い合わせるために準備される、付記２７に記載の方法。
（付記４０）前記プラットフォームが、デベロッパが前記アプリケーションをアップロードすることを可能にし、前記オンデマンドデータベースサービスのテナントが前記アップロードされたアプリケーションを使用することを可能にする、付記２７に記載の方法。
（付記４１）前記アップロードされたアプリケーションが、前記オンデマンドデータベースサービスの統制下にある、付記４０に記載の方法。
（付記４２）アプリケーションがその上で構築され得るプラットフォームにおいて、少なくとも１つのプログラミング言語命令を受け取るステップと、
前記少なくとも１つのプログラミング言語命令に基づいて、オンデマンドデータベースサービスを介して別のシステムに対する１組の命令を準備するステップと、
前記プログラミング言語命令に従って、結果に影響を及ぼすために前記１組の命令を適用するステップとを含む方法。
（付記４３）前記別のシステムが、外部システムを含む、付記４２に記載の方法。
（付記４４）１つ又は複数の一連の命令を搬送するマシン可読媒体であって、前記１つ又は複数の一連の命令は、１つ又は複数のプロセッサによって実行される場合に、前記１つ又は複数のプロセッサに、
アプリケーションがその上で構築され得るプラットフォームにおいて、少なくとも１つのプログラミング言語命令を受け取るステップと、
前記少なくとも１つのプログラミング言語命令に基づいて、オンデマンドデータベースサービスに対する１組の命令を準備するステップと、
前記プログラミング言語命令に従って、結果に影響を及ぼすために前記オンデマンドデータベースサービスに前記１組の命令を適用するステップとを実施させる、マシン可読媒体。
（付記４５）プロセッサと、
１つ又は複数の保存された一連の命令とを備え、前記１つ又は複数の保存された一連の命令は、前記プロセッサによって実行される場合に、前記プロセッサに、
アプリケーションがその上で構築され得るプラットフォームにおいて、少なくとも１つのプログラミング言語命令を受け取るステップと、
前記少なくとも１つのプログラミング言語命令に基づいて、オンデマンドデータベースサービスに対する１組の命令を準備するステップと、
前記プログラミング言語命令に従って、結果に影響を及ぼすために前記オンデマンドデータベースサービスに前記１組の命令を適用するステップとを実施させる、装置。
（付記４６）マルチテナント型データベースシステムで使用するためのコードを伝送媒体上で送信するための方法であって、
アプリケーションがその上で構築され得るプラットフォームにおいて、少なくとも１つのプログラミング言語命令を受け取るためのコードを送信するステップと、
前記少なくとも１つのプログラミング言語命令に基づいて、オンデマンドデータベースサービスに対する１組の命令を準備するためのコードを送信するステップと、
前記プログラミング言語命令に従って、結果に影響を及ぼすために前記オンデマンドデータベースサービスに前記１組の命令を適用するためのコードを送信するステップとを含む方法。
（付記４７）オンデマンドデータベースサービスにおいて開発アプリケーションを受け取るステップと、
前記オンデマンドデータベースサービスを利用して前記アプリケーションをテストするステップとを含む方法。
（付記４８）前記テストが、前記オンデマンドデータベースサービスによって要求される、付記４７に記載の方法。
（付記４９）前記テストが、前記オンデマンドデータベースサービスによって統制される、付記４７に記載の方法。
（付記５０）前記テストの第１の部分が、前記アプリケーションのデベロッパによって統制され、前記テストの第２の部分が、前記オンデマンドデータベースサービスによって統制される、付記４７に記載の方法。
（付記５１）前記テストが、デバッグ目的のためである、付記４７に記載の方法。
（付記５２）前記テストが、デッドロック状況を識別するためである、付記４７に記載の方法。
（付記５３）前記テストが、データベースセマンティクスを実施するためである、付記４７に記載の方法。
（付記５４）前記テストが、複数の規則を実施するためである、付記４７に記載の方法。
（付記５５）前記アプリケーションの少なくとも１つが前記テストに合格したかどうかを判定するステップをさらに含む、付記４７に記載の方法。
（付記５６）前記判定に基づいて、前記少なくとも１つのアプリケーションへのアクセスを条件付きで提供するステップをさらに含む、付記５５に記載の方法。
（付記５７）前記アクセスが、前記オンデマンドデータベースサービスの少なくとも１つのテナントに条件付きで提供される、付記５６に記載の方法。
（付記５８）前記少なくとも１つのアプリケーションが前記テストに合格したと判定される場合、前記少なくとも１つのアプリケーションへのアクセスを提供するステップをさらに含む、付記５６に記載の方法。
（付記５９）前記少なくとも１つのアプリケーションが前記テストに合格しなかったと判定される場合、前記少なくとも１つのアプリケーションへのアクセスを排除するステップをさらに含む、付記５６に記載の方法。
（付記６０）前記アプリケーションをコンパイルするステップをさらに含む、付記４７に記載の方法。
（付記６１）前記コンパイル済アプリケーションが、前記オンデマンドデータベースサービスのランタイムインタープリタによって処理されることが可能である、付記６０に記載の方法。
（付記６２）前記コンパイル済アプリケーションがメタデータを含む、付記６０に記載の方法。
（付記６３）前記メタデータがデータベースに保存される、付記６２に記載の方法。
（付記６４）前記オンデマンドデータベースサービスがマルチテナント型オンデマンドデータベースサービスを含む、付記４７に記載の方法。
（付記６５）前記テストが少なくとも１つのユニットテストを含む、付記４７に記載の方法。
（付記６６）１つ又は複数の一連の命令を搬送するマシン可読媒体であって、前記１つ又は複数の一連の命令は、１つ又は複数のプロセッサによって実行される場合に、前記１つ又は複数のプロセッサに、
オンデマンドデータベースサービスにおいて開発アプリケーションを受け取るステップと、
前記オンデマンドデータベースサービスを利用して前記アプリケーションをテストするステップとを実施させる、マシン可読媒体。
（付記６７）プロセッサと、
１つ又は複数の保存された一連の命令とを備え、前記１つ又は複数の保存された一連の命令は、前記プロセッサによって実行される場合に、前記プロセッサに、
オンデマンドデータベースサービスにおいて開発アプリケーションを受け取るステップと、
前記オンデマンドデータベースサービスを利用して前記アプリケーションをテストするステップとを実施させる、装置。
（付記６８）マルチテナント型データベースシステムで使用するためのコードを伝送媒体上で送信するための方法であって、
オンデマンドデータベースサービスにおいて開発アプリケーションを受け取るためのコードを送信するステップと、
前記オンデマンドデータベースサービスを利用して前記アプリケーションをテストするためのコードを送信するステップとを含む方法。
【図１Ａ】
2014041636.tif 000003
【図１Ｂ】
2014041636.tif 000004
【図２】
2014041636.tif 000005
【図３】
2014041636.tif 000006
【図４】
2014041636.tif 000007
【図５】
2014041636.tif 000008
【図６】
2014041636.tif 000009
【図７】
2014041636.tif 000010