段階3:更新処理の追加
次に、外部リストからSQL Azure上のItemsテーブルに書き戻しができるようにしてみます。そのためには、外部コンテンツタイプのモデルに更新メソッドを追加し、更新処理を実装します。
[9]モデルに更新メソッドを追加する
デザイナー上に表示されている[ItemEntity]モデルの[メソッド]を右クリックし、[新しいメソッドの追加]をクリックします(図21)。メソッド名を[UpdateItem]とします。
次に[BDCメソッドの詳細]ウィンドウで、[メソッド]-[UpdateItem]-[インスタンス]-[メソッドインスタンスの追加]をクリックし、一覧から[Finderインスタンスの作成]をクリックしてメソッドを追加します。プロパティウィンドウで[名前]を[UpdateItem]に、[型]を[Finder]から[Updater]に変更します(図22)。これにより、更新処理のためのメソッドであることを指定できます。型には、[Creator]や[Deleter]など、アイテム作成や削除処理のための型も定義されています。
[10]UpdateItemメソッドのパラメーターを追加する
[BDCメソッドの詳細]ウィンドウで、[メソッド]-[UpdateItem]-[パラメーター]-[パラメーターの追加]をクリックし、一覧から[パラメーターの作成]をクリックします。プロパティウィンドウで、パラメーターの[名前]を[id]に変更します。[BDCメソッドの詳細ウィンドウ]で、追加したパラメーターの[型記述子]の[idTypeDescriptor]をクリックします。プロパティウィンドウで、型記述子の[名前]を[ItemID]、型の名前を[System.String]から[Int32]に変更します。さらに、[識別子]に[ItemID]を設定します。そして、BDCエクスプローラー上で、[UpdateItem]メソッドの[id]パラメーター内の[ItemID]をクリックし、プロパティウィンドウで[Pre-Updaterフィールド]を[True]に設定します。
次に、UpdateItemメソッドのパラメーターをもう一つ追加します。更新のためのUpdateItemメソッドには、更新後のエンティティをパラメーターとして渡してあげる必要があるためです。
先ほどの[id]パラメーターと同様に、パラメーターを追加し名前を[itemEntity]に変更します。[BDCメソッドの詳細ウィンドウ]で、型記述子[itemEntityTypeDescriptor]をクリックし、プロパティウィンドウで、[名前]を[Entity1]、[型]を[Sytem.String]から[BdcModelProjectSample.BdcModel1.ItemEntity, BdcModel1]に変更します。そして、BDCエクスプローラー上で、[UpdateItem]メソッドの[itemEntity]パラメーター内の[Entity1]に対して、次のように型記述子を4つ追加します。
1番目として、名前を[ItemID]、型の名前を[Int32]、識別子を[ItemID]、Updaterフィールドを[True]に設定します。2番目として、名前を[ItemName]、型の名前を[System.String]のまま、Updaterフィールドを[True]に設定します。3番目として、名前を[Price]、型の名前を[Int32]、Updaterフィールドを[True]に設定します。最後の4番目として、名前を[Description]、型の名前を[System.String]のまま、Updaterフィールドを[True]に設定します。
最終的に、UpdateItemメソッドに追加したパラメーターは、図23のようになります。
[11]UpdateItemメソッドを実装する
デザイナー上で、[ItemEntity]モデルの[UpdateItem]メソッドを右クリックし、[コードの表示]をクリックします。すると、生成されたUpdateItemメソッドが表示されます。このメソッドに、リスト5のようにコードを追加します。
public static void UpdateItem(int id, ItemEntity itemEntity) { using (var db = new DataClasses1DataContext(connectionString)) { // (4)Itemデータの取得 var item = db.Items.Single(i => i.ItemID == itemEntity.ItemID); // (5)Itemデータの更新 item.ItemName = itemEntity.ItemName; item.Price = itemEntity.Price; item.Description = itemEntity.Description; db.SubmitChanges(); }; }
(4)では、SQL Azure上のItemsテーブルから該当するデータを取得しています。
(5)では、パラメーターとして受け取った更新用ItemEntityの内容に基づいて、SQL Azure上のItemsテーブルのデータを更新しています。
以上で、サンプルは完成です。
最終的なサンプルの実行
それでは、SharePointの外部リストでSQL Azureのデータを更新できるかどうかを確認してみましょう。
作成した外部コンテンツタイプを配置し、SharePointサイトを起動します。そして、先ほど作成した外部リストを表示します。
リストから特定のアイテムを右クリックし、[アイテムの編集]をクリックします。表示された[アイテムの編集]ウィンドウで、データ内容を変更し、[保存]アイコンをクリックします(図24)。
すると、外部リストのデータが更新されたことが確認できます(図25)。
まとめ
今回は、Visual Studio 2010を使用して外部コンテンツタイプを作成し、SharePoint 2010と外部データを連携する方法を解説しました。そして、SharePoint 2010とSQL Azureを連携するサンプルを実際に作成しました。
次回は、SharePointとSilverlightとの連携について解説する予定です。