Sharepoint-server-object-model
この章では、SharePoint Serverオブジェクトモデルについて説明します。 SharePointのコンテキスト内で実行するコードを記述するときは、SharePoint Serverオブジェクトモデルを使用します。 一般的な例としては、ページまたはWebパーツのコードビハインド、機能またはリストの背後にあるイベントハンドラー、タイマージョブなどがあります。
サーバーオブジェクトモデルの機能
サーバーオブジェクトモデルの主な機能は次のとおりです。
- SharePointで使用されるのと同じアプリケーションプール内でASP.NETアプリケーションをプログラミングする場合は、サーバーオブジェクトモデルを使用できます。
- サーバーオブジェクトモデルは、コンソールやWindowsフォームなどのクライアントアプリケーション、またはSharePointサーバーで実行されるWPFアプリを開発している場合に使用できます。
- サーバーオブジェクトモデルを使用して、SharePoint Serverにリモート接続することはできません。
- サーバーオブジェクトモデルを使用する場合、 Microsoft.SharePoint アセンブリを参照します。 サーバーオブジェクトモデルを構成する他のアセンブリもありますが、Microsoft.SharePointがメインです。
- 最も一般的に使用するコアタイプは、エンドユーザーとして使用するコンポーネントにマップされるため、サイトコレクション、サイト、リスト、ライブラリ、リストアイテムなどは、SPSite、SPWeb、SPList、SPDocumentLibrary、およびSPListItem。
- サイトコレクションを表す型とサーバーオブジェクトモデルはSPSiteであり、サーバーオブジェクトモデルでSharePointサイトを表す型はSPWebです。 したがって、エンドユーザーの用語から開発者の用語に移行するときは、メンタルマッピングを行うだけで済みます。
これで、SharePointの使用を初めて開始すると、サイトが過負荷になり、Webボキャブラリはもちろんのこと、エンドユーザーと開発者のボキャブラリの反対を意味するため、混乱を招く可能性があります。
サーバーオブジェクトモデルの簡単な例を見てみましょう。
ステップ1 *-Visual Studioを開き、 *File→New→Project メニューオプションから新しいプロジェクトを作成します。
- ステップ2 *-左ペインの*テンプレート→Visual C#*からWindowsを選択し、中央のペインでコンソールアプリケーションを選択します。 プロジェクトの名前を入力し、[OK]をクリックします。
- ステップ3 *-プロジェクトが作成されたら、ソリューションエクスプローラーでプロジェクトを右クリックし、*追加→参照*を選択します。
- ステップ4 *-左ペインで[アセンブリ]→[拡張機能]を選択し、中央ペインで[Microsoft.SharePoint]をオンにして[OK]ボタンをクリックします。
ソリューションエクスプローラーでプロジェクトをもう一度右クリックし、[プロパティ]を選択します。
- ステップ5 *-左ペインの[ビルド]タブをクリックし、[32ビットを優先する]オプションをオフにします。
ステップ6 *- *Program.cs ファイルに戻り、次のコードに置き換えます。
注-上記のコードでは、最初に新しいSPSiteオブジェクトを作成しました。 これは使い捨てのオブジェクトなので、usingステートメント内で作成されます。 SPSiteコンストラクターは、サイトコレクションへのURLを受け取りますが、これは場合によって異なります。
var web = site.RootWeb は、サイトコレクションのルートを取得します。
web.Listsを使用してリストを取得し、リストアイテムのタイトルを印刷できます。
上記のコードをコンパイルして実行すると、次の出力が表示されます-
これらのタイトルは、ソリューションギャラリー、スタイルライブラリ、フォームテンプレートであることがわかります。 これらは、SharePointによって内部的に使用されるリストです。 したがって、すべてのリストを表示するのではなく、ユーザーに通常表示されるリストのみを表示したい場合があります。
したがって、リストコレクション全体を取得する代わりに、非表示ではないすべてのリストを取得する必要があります。 以下のリンククエリを使用してこれを行うことができます。
上記のコードをコンパイルして実行すると、次の出力が表示されます-
これにより、非表示ではないすべてのリストが返されることがわかります。
リスト項目に関する情報も表示する別の簡単な例を見てみましょう。
上記のコードをコンパイルして実行すると、次の出力が表示されます-
リストデータ
リストを初めて作成するときは、常にタイトル列があります。 この[タイトル]列では、デフォルトで、リストアイテムのコンテキストまたはコントロールブロックの編集メニューにアクセスできます。
すべてのリストは列タイトルで始まるため、 SPListItem タイプはそれをプロパティとして公開します。 すべてのリストに共通ではない列については、 SpListItem タイプのインデクサーを介してアクセスできます。
いくつかの情報をインデクサーに渡すことができますが、最も一般的なのは Column です。 リスト設定のエンドユーザーは、この名前を変更できます。 この名前は変更される可能性があるため、使用しないでください。
2つ目は InternalName で、このリストが作成された時点で設定され、変更されることはありません。 これは、列の値にアクセスするときに使用する名前です。
以下に示すように著者リストを取得する簡単な例を見てみましょう-
この例では、Authorsリストを取得し、Salary/Rateをある値だけ上げます。 したがって、Salary/Rate列には、 InternalName を使用します。
- ステップ1 *-サーバーエクスプローラーに移動します。 * SharePoint接続*を右クリックして、[接続の追加…]を選択します。 URLを指定して[OK]をクリックします。
ステップ2 *- SharePointチュートリアル→リストライブラリ→リスト→作成者→フィールド→給与/レート*フィールドを展開します。 Salary/Rate を右クリックして、[プロパティ]を選択します。 [プロパティ]ウィンドウに InternalName が表示されます。
- ステップ3 *-以下は、給与/レートに基づいて著者を取得し、給与/レートを引き上げる簡単な例です。
上記のコードでは、2つのメソッドがあることがわかります-
- 1つは、 ShowItems という名前のリストを取得することです。
- もう1つの方法は、* RaiseRates()*と呼ばれるレートを上げることです。
上記のコードをコンパイルして実行すると、次の出力が表示されます-
CAMLクエリ
上記の例では、foreachループを使用してすべての項目を何度も繰り返して項目を常に繰り返し、常にすべての列を戻すか、少なくともすべての列がアクセス可能になっています。
これは、SQLクエリでテーブル名からselect *を実行することに本当に似ています。
- CAMLクエリ*と呼ばれるものを使用して、この問題に対処できます。 CAMLクエリを実行する場合、2つのオプションがあります-
- 単一のリストのみを照会する場合は、SPQueryオブジェクトを使用できます。
- サイトコレクション内の複数のリストを照会する場合は、SPSiteDataQueryを使用できます。
通常、 SPSiteDataQuery を実行している場合、特定のタイプのすべてのリストを照会しています。
たとえば、すべての連絡先リストなどを照会したい SPSiteDataQueryを使用すると、スコープを決定できるため、サイトコレクション全体、個々のサイト、またはサイトとそのすべての子に対してクエリを実行することを指定できます。
CAMLクエリの構文は基本的にXML形式で記述されており、これらの種類のクエリの構築に慣れるには少し時間がかかります。
CAMLクエリの簡単な例を見てみましょう。 ここでは、著者リストのデータをクエリするCAMLクエリを作成します。
CAMLクエリを使用していくつかのアイテムを取得しました。 QueryItems メソッドでは、Employeeではないアイテムのみを取得したことがわかります。