サンプル:BCSを使用してSQL Azureと接続する
それでは実際に、Visual Studio 2010を使用してSharePoint 2010の外部コンテンツタイプを作成してみましょう。
サンプル内容
Visual Studio 2010でクラウド上のSQL Azureのデータに接続する外部コンテンツタイプを作成し、SharePoint上の外部リストとして表示するようにします(図3)。加えて、外部リストからデータ更新も行えるようにします。
サンプル作成のための準備
このサンプルを実行するためには、前もってSQL Azure上にテーブルを作成しておく必要があります。
SQL Azureの詳細やサーバー、データベース、テーブルなどを作成する方法については、CodeZineの過去の記事『SQL Azureの概要とSQL Azure Databaseを使ったアプリケーション開発』などを参照してください(注1)。
上記記事の執筆時点になかった情報として、現在では、Windows Azure開発者ポータル上のDatabase Managerや、SQL Server 2008 R2 Management Studio(2008 R2以降、SQL Azureに対応)などを使用すると、簡単にテーブルを作成できます。
SQL AzureにSampleDBという名前でデータベースを作成し、表1にあるようにItemsテーブルを作成します。表1の見出しは、Database Managerにおける表現に合わせています。加えて、テストデータを数件登録しておきます。
Column | Select type | Is Identity? | Is Required? | In Primary Key? |
ItemID | int | Yes | Yes | Yes |
ItemName | nvarchar(50) | Yes | ||
Price | int | Yes | ||
Description | nvarchar(max) |
図4は、Database Managerを使用してItemsテーブルを作成している様子を示したものです。
これで、サンプル作成のための準備が整いました。
段階1:プロジェクト作成まで
以下の手順で、サンプルを作成します。
[1]新しいプロジェクトを作成する
SharePoint 2010の外部コンテンツタイプのための新しいプロジェクトを作成します。
管理者権限でVisual Studio 2010を起動します。[新しいプロジェクト]ダイアログボックスで、[Visual C#]-[SharePoint]-[2010]を選択し、プロジェクトテンプレートの一覧から[ビジネスデータ接続モデル]を選択します。[名前]に「BdcModelProjectSample」と入力し、最後に[OK]ボタンをクリックします(図5)。
次に表示された[デバッグのサイトとセキュリティレベルの指定]ダイアログボックスで、[デバッグに使用するローカルサイト]にSharePointサイトのURLを入力し、[完了]ボタンをクリックします。
これで、ビジネスデータ接続モデルのプロジェクトが作成されました。作成直後の状態として、外部コンテンツタイプのデザイナー画面にはEntity1という名前のメタデータモデルが表示されています(図6)。
このままの状態でも、読み取り専用の外部コンテンツタイプとして動作するようダミーコードが記述されています。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BdcModelProjectSample.BdcModel1 { public partial class Entity1 { public string Identifier1 { get; set; } public string Message { get; set; } } }
Entity1.csでは、エンティティの定義を記述しています(生成コメントは削除)。ここではダミーとして、Identifier1とMessageの2つのプロパティが定義されています。このクラスは、デザイナー上のEntity1メタデータモデルにマッピングされており、次に説明するエンティティサービスクラス(Entity1Service.cs)で使用されます。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BdcModelProjectSample.BdcModel1 { public class Entity1Service { public static Entity1 ReadItem(string id) { Entity1 entity1 = new Entity1(); entity1.Identifier1 = id; entity1.Message = "Hello World"; return entity1; } public static IEnumerable<Entity1> ReadList() { Entity1[] entityList = new Entity1[1]; Entity1 entity1 = new Entity1(); entity1.Identifier1 = "0"; entity1.Message = "Hello World"; entityList[0] = entity1; return entityList; } } }
Entity1Service.csは、エンティティのCRUDメソッドを実装するサービスクラスで、デザイナー上のEntity1メタデータモデルにマッピングされています(生成コメントは削除)。ここでは、1件のデータ読み取りを行うReadItemメソッドと、複数データの読み取りを行うReadListメソッドを実装しています。それぞれダミーデータを返すようになっています。