SharePoint のカスタムのリストおよびコンテンツ タイプを含む、プロバイダー向けのホスト型アドインを作成する
クラウド ホスト型 Web アプリケーションと SharePoint ホスト型カスタム リスト テンプレート、リスト インスタンス、およびカスタム コンテンツ タイプを組み合わせた SharePoint アドインを作成します。これは、Office Developer Tools for Visual Studio を使用して行います。 REST/OData Web サービスを使用して SharePoint アドイン Web を操作する方法、および SharePoint アドインに OAuth を実装する方法を説明します。
カスタム コンテンツ タイプ、カスタム リスト定義、ワークフローなど、ほとんどの従来の SharePoint コンポーネントは、クラウドホスト型 SharePoint アドインに含めることができます。 この記事では、単純な例として次のものを紹介します。
以下のものを含むアドイン Web:
カスタムのサイト列
カスタムの列を使用するカスタムのコンテンツ タイプ
カスタムのコンテンツ タイプを使用するカスタムのリスト テンプレート
カスタム リスト定義に基づくリスト インスタンス
リスト インスタンスからデータを読み取る ASP.NET Web アプリケーション
この SharePoint アドインを作成するための前提条件
Visual Studio には Microsoft Office Developer Tools for Visual Studio が含まれていますが、このツールの最新バージョンが Visual Studio の更新プログラムの後にリリースされることがあります。 このツールの最新バージョンを確実に使用するために、Office Developer Tools for Visual Studio 2013 用インストーラーまたは Office Developer Tools for Visual Studio 2015 用インストーラーを実行してください。
テストとデバッグ用の SharePoint のインストール
これは、開発用コンピューターと同じコンピューター上にある場合も、リモートの SharePoint インストールを使用して開発することもできます。 リモート インストールを使用する場合は、クライアント オブジェクト モデルの再頒布可能パッケージをターゲット インストールにインストールする必要があります。 これは、Microsoft ダウンロード センターで再頒布可能パッケージとして使用できます。 "SharePoint Server 2013 クライアント コンポーネント SDK" または "SharePoint Online クライアント コンポーネント SDK" を検索します。
テスト用の SharePoint Web サイトは、開発者向けサイトのサイト定義から作成する必要があります ([サーバーの全体管理] から作成できます)。
リモート Web アプリケーションは、JavaScript と クロスドメイン ライブラリまたは OAuth を使用して、アドイン Web と通信します。 この記事の一連の例のように、OAuth を使用する場合は、OAuth を使用するように SharePoint インストールを構成する必要があります。
注:
ニーズに合った開発環境をセットアップする方法についてのガイダンスは、「2 種類の SharePoint アドイン: SharePoint ホスト型とプロバイダー向けのホスト型」を参照してください。
アドインを作成するために知っておくべき中心概念
最初のアドインを作成する前に、SharePoint アドインがどのようなものであるか、また、SharePoint ホスト型とプロバイダー向けのホスト型の SharePoint アドインの違いを理解しておく必要があります。これについては、次の表に示した記事を参照してください。
記事のタイトル | 説明 |
---|---|
SharePoint アドイン | エンドユーザー向けの小型で使いやすいソリューションであるアドインを作成できる、SharePoint の新しいアドイン モデルについて説明します。 |
SharePoint アドイン アーキテクチャと開発環境に関する重要な要素 | SharePoint アドインと SharePoint アドイン用のモデルのアーキテクチャの側面 (アドイン ホスティング オプション、ユーザー インターフェイス (UI) オプション、展開システム、セキュリティ システム、ライフサイクルなど) について説明します。 |
SharePoint アドインを開発およびホスティングするためのパターンを選択する | SharePoint アドインをホストするためのさまざまな方法を説明します。 |
SharePoint アドインを開発する
このセクションの手順では、SharePoint コンポーネントとリモート Web アプリケーションを使用するアドイン Web を含む、SharePoint アドインを開発用コンピューター上で作成します。
Visual Studio ソリューションとその要素をセットアップするには
Visual Studio で、[Office SharePoint | アドイン] ノードから SharePoint 用アドイン プロジェクトを作成します。このノードは、新しいプロジェクト ウィザードのテンプレート ツリー (C# または Visual Basic の下) にあります。 [プロバイダー向けのホスト型] のホスティング オプションを選択します。 この記事の一連の例では、言語として C# を使用し、プロジェクト名は LocalTheater とします。
ウィザードで、[完了] を選択します。
マニフェスト デザイナーで AppManifest.xml ファイルを開きます。 Title 要素には、既定値としてプロジェクト名が設定されています。 これはユーザーが UI で目にするアドイン名となるため、よりわかりやすい名前に置き換えてください。
アドインの Name を指定します。 これは内部名称であり、使用できるのは ASCII 文字だけです。また、スペースを含めることはできません。たとえば、"LocalTheater" のように指定します。
Web アプリケーション プロジェクトで Web.config ファイルを開き、要素
<customErrors mode="Off"/>
を system.web 要素に追加します。次のアセンブリへの参照が、Web アプリケーション プロジェクトにあることを確認します。 Visual Studio のエディションで参照が自動的に追加されなかった場合は、ここで追加します。
Microsoft.IdentityModel.dll: このアセンブリは、Windows Identity Foundation (WIF) のグローバル アセンブリ キャッシュにインストールされます。 これは .NET Framework 3.5 アセンブリなので、既定で [参照の追加] ダイアログ ボックスの [フレームワーク] ノードからフィルターにより除外されます。 このアセンブリへの参照は、ご使用の開発用コンピューターの
C:\Program Files\Reference Assemblies\Microsoft\Windows Identity Foundation\v3.5
ディレクトリを直接参照することで、追加できます。Microsoft.IdentityModel.Extensions.dll: このアセンブリへの参照は、ご使用の開発用コンピューターの
C:\Program Files\Reference Assemblies\Microsoft\Microsoft Identity Extensions\1.0
フォルダーを直接参照することで、追加できます。System.IdentityModel.dll: このアセンブリは .NET Framework 4 の一部であり、[参照の追加] ダイアログ ボックスの [アセンブリ | フレームワーク] ノードに表示されます。
ご使用のリモート Web アプリケーションが、アドイン Web だけでなくホスト Web の情報にもアクセスする場合は、AppPermissionRequests 要素 (1 つ以上の子 AppPermissionRequest 要素を含む) を AppManifest.xml ファイルに追加する必要があります (この記事の続く例の Web アプリケーションは、アドイン Web にのみアクセスします。アドイン プリンシパルには、アドイン Web に必要なすべてのアクセス許可が自動的に付与されるため、この例のAppManifest.xmlには AppPermissionRequests 要素がありません)。アドインのアクセス許可要求とその追加方法の詳細については、「 SharePoint でのアドインのアクセス許可」を参照してください。
SharePoint コンポーネントを追加するには
従来のファーム ソリューションに追加する場合とまったく同じように、SharePoint コンポーネントをアドインに追加します。 ただし、あらゆる種類の SharePoint コンポーネントを SharePoint アドインに含められるわけではありません。 これらのコンポーネントのサービスの目的は、SharePoint アドインでは別の方法で実現されます。
SharePoint アドインに含められる SharePoint コンポーネントの種類と、プロジェクトに含める方法については、「SharePoint アドインに含めることができる SharePoint コンポーネントの種類」を参照してください。
一連の例示を目的として、以下の手順を使用します。これらは Visual Studio を使用して、カスタム列、コンテンツ タイプ、リスト テンプレート、リスト インスタンスを SharePoint アドインに追加する例を示しています。
カスタム列タイプを作成するには
ソリューション エクスプローラーで、SharePoint の [サイト列] アイテムを Actor という名前で SharePoint アドイン プロジェクトに追加します。
新しいサイト列に対する elements.xml ファイルで、次の例に示す属性と値が設定されるように Field 要素を編集します。ただし、ID 属性の GUID は、Visual Studio が生成した値から変更しないでください。 中かっこ "{}" で囲むのを忘れないでください。
<Field ID="{generated GUID}"
Name="Actor"
Title="Actor"
DisplayName="Actor/Actress"
Group="Theater and Movies"
Description="The person cast, perhaps tentatively, in the role"
Type="Text"
/>
さらにもう 1 つ [サイト列] を、CastingStatus という名前のプロジェクトに追加します。
新しいサイト列に対する elements.xml ファイルで、次の例に示す属性と値が設定されるように Field 要素を編集します。ただし、ID 属性の GUID は、Visual Studio が生成した値から変更しないでください。
<Field ID="{generated GUID}"
Name="CastingStatus"
Title="CastingStatus"
DisplayName="Casting Status"
Group="Theater and Movies"
Description="The current casting status of the role"
Type="Choice">
</Field>
- これは選択肢フィールドなので、選択可能な項目、ユーザーが選択するときにドロップダウン リストに表示する順序、および既定の選択肢を指定する必要があります。 次の子マークアップを Field 要素に追加します。
<CHOICES>
<CHOICE>Not Started</CHOICE>
<CHOICE>Audition Scheduled</CHOICE>
<CHOICE>Auditioned</CHOICE>
<CHOICE>Role Offered</CHOICE>
<CHOICE>Committed to Role</CHOICE>
</CHOICES>
<MAPPINGS>
<MAPPING Value="1">Not Started</MAPPING>
<MAPPING Value="2">Audition Scheduled</MAPPING>
<MAPPING Value="3">Auditioned</MAPPING>
<MAPPING Value="4">Role Offered</MAPPING>
<MAPPING Value="5">Committed to Role</MAPPING>
</MAPPINGS>
<Default>Not Started</Default>
カスタム コンテンツ タイプを作成するには
ソリューション エクスプローラーで、SharePoint の [コンテンツ タイプ] アイテムを ActingRole という名前で SharePoint アドイン プロジェクトに追加します。 ウィザードで基本のコンテンツ タイプを選択するように求められたら、[アイテム] を選択して、[完了] を選択します。
コンテンツ タイプ デザイナーが自動的に開かない場合は、ソリューション エクスプローラーで ActingRole コンテンツ タイプを選択して開きます。
デザイナーで [コンテンツ タイプ] タブを開き、テキスト ボックスに次のように入力します。
[コンテンツ タイプ名]: ActingRole
[説明]: 演劇または映画での役柄を表します。
[グループ名]: Theater and Movies
このタブのチェック ボックスがすべてオフになっていることを確認します。 [親コンテンツ タイプから列を継承する] チェック ボックスは既定でオンになっている場合があります。 必ずオフにしてください。
デザイナーの [列] タブを開きます。
グリッドを使用して、2 つのサイト列をコンテンツ タイプに追加します。 これらは、ドロップダウン リストに [Actor/Actress] および [CastingStatus] の表示名で一覧表示されます。 (一覧にない場合は、カスタム サイト列を追加してからプロジェクトを保存していない可能性があります。[すべて保存] を選択します)。
ファイルを保存し、デザイナーを閉じます。
次の手順では、未加工の XML でコンテンツ タイプを直接操作する必要があるので、ソリューション エクスプローラーで ActingRole コンテンツ タイプの子の elements.xml を選択します。
このファイルには、追加した 2 つの列に対する FieldRef 要素が既に存在します。 既に存在する 2 つの要素と対になるように、2 つの組み込みの SharePoint 列に対する FieldRef 要素を追加します。 以下は、これらの要素のマークアップです。 これらは、固定された ID を持つ組み込みのフィールドの種類なので、ID 属性に対して同じ GUID を使用する必要があります。 これらを、カスタムのサイト列に対する 2 つの FieldRef 要素よりも上に追加します。
<FieldRef Name="LinkTitle" ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}" DisplayName="Character" />
<FieldRef Name="Title" ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" DisplayName="Character" />
これらのフィールドにはカスタムの表示名として Character を指定してあることに注意してください。これは、演劇または映画の登場人物を意味しています。
カスタム リスト テンプレートとリスト インスタンスを作成するには
SharePoint のリスト アイテムを CharactersInShow という名前で SharePoint アドイン プロジェクトに追加します。 SharePoint カスタマイズ ウィザードの [リストの設定を選択] ページで、リスト表示名は既定の CharactersInShow のままにし、[次に基づいてカスタマイズ可能なリストを作成] オプション ボタンをオンにして、ドロップダウン リストで [既定 (空白)] を選択します。 [完了] を選択します。
ウィザードを終了すると、CharactersInShow リスト テンプレートが、CharactersInShowInstance という名前の子リスト インスタンスと共に作成されます。 リスト デザイナーが既定で開かれる場合があります。 これは後の手順で使用します。
CharactersInShow リスト テンプレートの子の elements.xml を開きます (CharactersInShowInstance の子の elements.xml ではありません)。
DisplayName 属性に空白を追加して、"Characters In Show" のように、よりわかりやすくします。
Description 属性を "演劇または映画の登場人物" と変更します。
その他すべての属性は既定のままにして、ファイルを保存して閉じます。
リスト デザイナーが開いていない場合は、ソリューション エクスプローラーで [CharactersInShow] ノードを選択します。
デザイナーで [列] タブを開き、[コンテンツ タイプ] ボタンを選択します。
[コンテンツ タイプの設定] ダイアログで、ActingRole コンテンツ タイプを追加します。
タイプの一覧で ActingRole コンテンツ タイプを選択し、[既定値として設定] ボタンを選択します。
[アイテム] コンテンツ タイプを選択し、コンテンツ タイプ名の左に表示される小さな矢印を右クリックして [削除] を選択します。
この手順を [フォルダー] コンテンツ タイプについても繰り返し、ActingRole だけがコンテンツ タイプの一覧に表示されるようにします。 [OK] を選択してダイアログを閉じます。
列のリストに 3 つの列が表示されている状態になります。 [タイトル] を選択し、コンテンツ タイプ名の左に表示される小さな矢印を右クリックして [削除] を選択します。 リストには [Actor/Actress] と [Casting Status] の 2 つの列だけが表示されている状態になります。
デザイナーの [リスト] タブを開きます。 このタブは、リスト テンプレートではなくリスト インスタンスに特定の値を設定するのに使用されます。
このタブの値を次のように変更します。
[タイトル]: Characters in Hamlet
[リストの URL]: Lists/CharactersInHamlet
[説明]: ハムレットの登場人物と配役情報。
チェックボックスは既定の状態のままにして、ファイルを保存してデザイナーを閉じます。
リスト インスタンスは、ソリューション エクスプローラーに古い名前で表示されることがあります。 その場合は、CharactersInShowInstance のショートカット メニューを開き、[名前の変更] を選択して、名前を CharactersInHamlet に変更します。
schema.xml ファイルを開きます。
ファイルには 2 つの ContentType 要素があり、1 つは ActingRole の Name 属性値を持ち、もう 1 つは ListFieldsContentType と呼ばれます。 ActingRole と呼ばれる要素のみが属しているため、他の ContentType 要素を削除します。
注:
ContentType 要素間には改行がない場合があるので、その場合、一見すると 1 つしかにように見えます。 右方向にスクロールして、他に要素がないか慎重にチェックします。
Fields 要素には 2 つの Field 要素があるはずです (要素間に改行がない場合は 1 行に表示されています)。 1 つは、Actor というサイト列の elements.xml にある Field 要素と正確に一致している必要があります。もう 1 つは、CastingStatus というサイト列の elements.xml にある Field 要素と正確に一致している必要があります。 子要素 (CHOICES 要素や MAPPINGS 要素) も含めて正確に一致していない場合は、サイト列の elements.xml ファイルから Field 要素をコピーし、schema.xml ファイル内で一致していない Field 要素の代わりに貼り付けます。
引き続き schema.xml ファイルで、BaseViewID 値が "0" の View 要素で、既存の ViewFields 要素を次のマークアップで置き換えます (
LinkTitle
という名前の FieldRef に、この GUID を正確にそのまま使用してください)。
<ViewFields>
<FieldRef Name="Title" ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" DisplayName="Character" />
<FieldRef Name="Actor" ID="{GUID from the site column elements.xml}" />
<FieldRef Name="CastingStatus" ID="{GUID from the site column elements.xml}" />
</ViewFields>
未指定の 2 つの ID 属性値を、それぞれのサイト列の elements.xml ファイルでの GUID で置き換えます。 中かっこ "{}" で囲むのを忘れないでください。
引き続き schema.xml ファイルで、BaseViewID 値が "1" の View 要素で、既存の ViewFields 要素を次のマークアップで置き換えます。 (
LinkTitle
という名前の FieldRef に、この GUID を正確にそのまま使用してください)。
<ViewFields>
<FieldRef Name="LinkTitle" ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}" DisplayName="Character" />
</ViewFields>
前のビューに追加した 2 つの FieldRef 要素
Actor
CastingStatus
を FieldRef の兄弟としてこの ViewFields 要素にLinkTitle
コピーします。schema.xml ファイルを保存して閉じます。
リスト インスタンス CharactersInHamlet の子の elements.xml ファイルを開きます。
ListInstance 要素の子として次のマークアップを追加し、ある程度の初期データをリストに入力します。
<Data>
<Rows>
<Row>
<Field Name="Title">Hamlet</Field>
<Field Name="Actor">Tom Higginbotham</Field>
<Field Name="CastingStatus">Committed to Role</Field>
</Row>
<Row>
<Field Name="Title">Claudius</Field>
<Field Name="Actor"></Field>
<Field Name="CastingStatus">Not Started</Field>
</Row>
<Row>
<Field Name="Title">Gertrude</Field>
<Field Name="Actor">Satomi Hayakawa</Field>
<Field Name="CastingStatus">Auditioned</Field>
</Row>
<Row>
<Field Name="Title">Ophelia</Field>
<Field Name="Actor">Cassi Hicks</Field>
<Field Name="CastingStatus">Committed to Role</Field>
</Row>
<Row>
<Field Name="Title">The ghost</Field>
<Field Name="Actor">Lertchai Treetawatchaiwong</Field>
<Field Name="CastingStatus">Role Offered</Field>
</Row>
</Rows>
</Data>
ソリューション エクスプローラーで、[Feature1] を選択してフィーチャー デザイナーを開きます。 デザイナーで、[タイトル] を "Theater and Movie Data Components" と設定し、[説明] を "劇場と映画に関するデータに対するサイト列、コンテンツ タイプ、およびリスト インスタンス" と設定します。 ファイルを保存し、デザイナーを閉じます。
ソリューション エクスプローラーで Feature1 の名前が変更されなかった場合、そのショートカット メニューを開き、[名前の変更] を選択して "TheaterAndMovieDataComponents" という名前に変更します。
リモート Web アプリケーション プロジェクトをコーディングするには
お好みのプラットフォーム スタック向けの他の Web アプリケーションの場合と同様に、Web アプリケーションを開発します。 Microsoft スタックの場合は、REST/OData Web サービスまたは SharePoint のクライアント オブジェクト モデルのいずれかを使用できます。 Microsoft 以外のスタックの場合は、SharePoint の REST/OData エンドポイントを使用して、アドイン Web のデータに対して作成/読み取り/更新/削除 (CRUD) 操作を実行できます。
注:
アセンブリへの参照を Visual Studio でこの Web アプリケーション プロジェクトに追加する場合は、アセンブリが Web サーバーにインストール済みであるか、アドインの展開前にインストールされることが確実な場合を除き、アセンブリの Copy Local プロパティを True に設定します。 .NET Framework は、Microsoft Azure Web ロールと Azure Web サイトにインストールされます。 ただし、SharePoint クライアント アセンブリと、各種の Microsoft マネージ コード拡張機能や基盤はインストールされません。 Office Developer Tools for Visual Studio は、SharePoint アドインでよく使われるいくつかのアセンブリへの参照を自動的に追加し、Copy Local プロパティを設定します。
続く例では、ASP.NET Web アプリケーションを開発します。 次の手順に従います。
- Default.aspx ファイルを開き、ファイルの body 要素を次のマークアップで置き換えます。 このマークアップにより、[Get the Cast] ボタンが追加されます。このボタンをクリックすると、アドイン Web にある [Characters in Hamlet] リストが読み取られて、そのデータが、ボタンのクリック後にだけ表示される GridView コントロールに表示されます。
<body >
<form id="form1" runat="server">
<div>
<h2>Local Theater</h2>
</div>
<asp:Literal ID="Literal1" runat="server"><br /><br /></asp:Literal>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Get the Cast"/>
<asp:Literal ID="Literal2" runat="server"><br /><br /></asp:Literal>
<asp:GridView ID="GridView1" runat="server" Caption="The Cast" ></asp:GridView>
</form>
</body>
- Default.aspx.cs ファイルを開き、次の using ステートメントをファイルに追加します。
using Microsoft.SharePoint.Client;
using Microsoft.IdentityModel.S2S.Tokens;
using System.Net;
using System.IO;
using System.Xml;
using System.Data;
using System.Xml.Linq;
using System.Xml.XPath;
using Microsoft.SharePoint.Samples;
これらのステートメントの最後の部分は、TokenHelper.cs ファイルで宣言された名前空間を参照します。
3. **Default** クラスに次のフィールドを追加します。 '''csharp SharePointContextToken contextToken;string accessToken;Uri sharepointUrl;```
- Page_Load メソッドを次のコードで置き換えます。このコードは、TokenHelper クラスを使用して、OAuth 準拠のセキュリティで保護されたトークン サーバーからトークンを取得します。 このアクセス トークンは、ボタンのクリック イベント ハンドラーが後で取得できるように、ボタンの CommandArgument プロパティに格納されます。
protected void Page_Load(object sender, EventArgs e)
{
TokenHelper.TrustAllCertificates();
string contextTokenString = TokenHelper.GetContextTokenFromRequest(Request);
if (contextTokenString != null)
{
// Get context token
contextToken = TokenHelper.ReadAndValidateContextToken(contextTokenString, Request.Url.Authority);
// Get access token
sharepointUrl = new Uri(Request.QueryString["SPAppWebUrl"]);
accessToken = TokenHelper.GetAccessToken(contextToken, sharepointUrl.Authority).AccessToken;
// Pass the access token to the button event handler.
Button1.CommandArgument = accessToken;
}
}
- 次のイベント ハンドラーを Default クラスに追加します。 このハンドラーは、まず、ボタンの CommandArgument プロパティに格納されたアクセス トークンを取得することから開始します。
protected void Button1_Click(object sender, EventArgs e)
{
// Retrieve the access token that the Page_Load method stored
// in the button's command argument.
string accessToken = ((Button)sender).CommandArgument;
}
- このハンドラーは、変更されたアドイン Web の URL をポストバック時に再取得する必要があるので、次のコードを追加します。
if (IsPostBack)
{
sharepointUrl = new Uri(Request.QueryString["SPAppWebUrl"]);
}
- 次の行を追加します。この行は、いずれかの SharePoint REST/OData エンドポイントを使用してリスト データを取得します。 この例では、このコードはアドイン Web に展開された [Characters in Hamlet] リストを読み取ります。 このサービスの API によって、1 行のコードで、リストを選択し、リストの 3 つのフィールドを指定して返すのが容易になります。
なお、OData URL には表示名ではなくフィールド (列) の内部名を使用する必要があるので、このコードでは、Character
、Actor/Actress
、Casting Status
ではなく、Title
、Actor
、CastingStatus
を使用します。 REST/OData Web サービスの詳細については、「SharePoint REST 要求で OData クエリ操作を使用する」を参照してください。
// REST/OData URL section
string oDataUrl = "/_api/Web/lists/getbytitle('Characters In Hamlet')/items?$select=Title,Actor,CastingStatus";
- 次のコードを追加します。このコードでは、System.Net 名前空間の HttpWebRequest クラスと HttpWebResponse クラスを使用して、HTTP 要求オブジェクトと応答オブジェクトを作成します。
// HTTP Request and Response construction section
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(sharepointUrl.ToString() + oDataUrl);
request.Method = "GET";
request.Accept = "application/atom+xml";
request.ContentType = "application/atom+xml;type=entry";
request.Headers.Add("Authorization", "Bearer " + accessToken);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
- ATOM 形式の応答 XML を解析するために、次のコードを追加します。 System.Xmlのクラスを使用します 。返 されるデータを解析し、SharePoint リストから項目の リスト<T> を構築する Linq 名前空間。 (System.Xml 名前空間のクラスも使用できます)。
SharePoint が返す XML では、entry 要素の子要素に、リスト項目に関するメタデータが保持されていることに注意してください。 SharePoint リスト項目の実際の未加工データは、2 階層下の properties 要素に入れ子になっています。 そのため、 Elements<T> 拡張メソッドは、上位レベルを除外するために 2 回使用されます。
// Response markup parsing section
XDocument oDataXML = XDocument.Load(response.GetResponseStream(), LoadOptions.None);
XNamespace atom = "http://www.w3.org/2005/Atom";
XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
List<XElement> entries = oDataXML.Descendants(atom + "entry")
.Elements(atom + "content")
.Elements(m + "properties")
.ToList();
- 次の LINQ クエリを追加して、必要なプロパティだけを含む匿名型の IEnumerable<T> コレクションを作成します。 なお、このコードは、内部名である
Title
によってアイテムのタイトル フィールドを参照する必要がありますが、その値が割り当てられる匿名型でのプロパティ名にはCharacter
という名前を使用できます。 その効果の 1 つとして、コレクションがグリッド コントロールにバインドされるときに、より適切な名前である [Character] がページに表示されます。
var entryFieldValues = from entry in entries
select new { Character=entry.Element(d + "Title").Value,
Actor=entry.Element(d + "Actor").Value,
CastingStatus=entry.Element(d + "CastingStatus").Value };
- ページ上の GridView コントロールにデータをバインドする次のコードを使用して、ハンドラーを完成させます。 グリッドの列ヘッダーは、既定で、匿名型のプロパティ名である
Character
、Actor
、CastingStatus
に設定されます。 GridView コントロールには、名前と書式設定列のヘッダーを制御できるプロパティがあるので、[Actor/Actress] と [Casting Status] を SharePoint での列のヘッダーと一致させることができます。 わかりやすくするために、これらの技法はここでは説明しません (DataGrid コントロールも使用できます)。
GridView1.DataSource = entryFieldValues;
GridView1.DataBind();
- すべてのファイルを保存します。
SharePoint アドインのテストとデバッグを行うには
SharePoint アドインとそのリモート Web アプリケーションをテストするには、Visual Studio で F5 キーを押します。 Web アプリケーションは localhost の IIS Express に展開されます。 SharePoint アドインはターゲット SharePoint Web サイトにインストールされます。 (この例では、リモート アドインがホスト Web およびアドインとのやり取りを試みることはなく、アドイン プリンシパルにはアドイン Web に対するアクセス許可が自動的に付与されるので、アクセス許可の付与を求められることはありません。) ターゲット SharePoint Web サイトの [サイト コンテンツ] ページが開き、新しいアドインが一覧に表示されているのがわかります。
SharePoint アドインを選択すると、AppManifest.xml ファイル内の StartPage 要素に指定したページにリモート Web アプリケーションが開きます。 必要に応じてこの Web アプリケーションを使用して、動作を確認します。 このトピックの一連の例では、ボタンを選択するだけにします。 それにより、グリッドが作成され、アドイン Web の [Characters in Hamlet] リストを使用してグリッドに値が入力されます。
SharePoint アドインを発行する
SharePoint アドインを発行するには、企業のアドイン カタログまたは Office アドイン ストアにアドイン パッケージをアップロードします。 詳細については、「Office ストアまたは組織のアドイン カタログに発行する」と「SharePoint アドインの発行」を参照してください。
トラブルシューティング
アドインが動作しない場合は、CAML マークアップの誤りによって SharePoint コンポーネントの展開が妨げられているのかどうかを検討します。 この例に基づいた次のような手順を使用して、展開を確認します。
アドイン Web のプロビジョニングをテストするには
ホスト Web の [サイトの設定] ページを開きます [サイト コレクションの管理] セクションで、[サイト階層] リンクを選択します。
[サイト階層] ページには、アドインが URL ごとに一覧表示されます。 アドインを起動しないでください。 その代わりに、URL をコピーして、以降の手順ではその URL を使用します。
URL_of_app_web/_layouts/15/ManageFeatures.aspx に移動し、開かれた [サイトの機能] ページで、ご使用の SharePoint アドインの機能のアルファベット順の一覧に [Theater and Movie Data Components] があり、その状態が Active であることを確認します。
URL_of_app_web/_layouts/15/mngfield.aspx に移動し、開かれた [サイト列] ページで、サイト列の一覧に Theater and Movies グループがあり、そこに新しいユーザー設定のサイト列である [Actor/Actress] と [Casting Status] が含まれていることを確認します。
URL_of_app_web/_layouts/15/mngctype.aspx に移動し、開かれた [サイト コンテンツ タイプ] ページで、コンテンツ タイプの一覧に [Theater and Movies] グループがあり、そこに新しい ActingRole コンテンツ タイプが含まれていることを確認します。
ActingRole コンテンツ タイプへのリンクを選択します。 開かれた [サイト コンテンツ タイプ] ページで、このコンテンツ タイプに 2 つの新しいサイト列のタイプである [Actor/Actress] と [Casting Status] があること、およびアイテムのタイトル フィールドにユーザー設定の表示名である [Character] が設定されていることを確認します。
URL_of_app_web/_layouts/15/mcontent.aspx に移動し、開かれた [サイトのライブラリとリスト] ページで、["Characters in Hamlet" のカスタマイズ] リンクがあることを確認します。
この ["Characters in Hamlet" のカスタマイズ] リンクをクリックし、リストの設定ページで、このリストのコンテンツ タイプがカスタムの ActingRole コンテンツ タイプだけであること、および 2 つの新しいサイト列である [Actor/Actress] と [Casting Status] が [列] セクションに一覧表示されていることを確認します ([タイトル] 列は、指定した表示名の [Character] ではなく内部名の [Title] で表示される場合があります)。
注:
ページに [コンテンツ タイプ] セクションがない場合は、コンテンツ タイプの管理を有効にする必要があります。 [詳細設定] リンクをクリックし、[詳細設定] ページでコンテンツ タイプの管理を有効にして、[OK] を選択します。 前のページに戻り、[コンテンツ タイプ] セクションのリストが表示されます。
- ページの上部にはリストの Web アドレスがあります。 これをコピーし、ご使用のブラウザーのアドレス バーに貼り付けて、リストに移動します。 リストには作成したサンプル項目があることを確認します。 ([タイトル] 列は、指定した表示名の [Character] ではなく内部名の [Title] で表示される場合があります)。