次の方法で共有


Office 2010 の Business Connectivity Services を使用した .NET Framework ソースへの接続

Office Visual How To

概要:  .NET Framework ソースに基づく Office 2010Business Connectivity Services 外部コンテンツ タイプの作成方法について説明します。

適用対象: Excel 2010 | Office 2010 | Open XML | PowerPoint 2010 | VBA | Word 2010

公開: 2010 年 2 月

提供元: Joel Krist、iSoftStone (英語)

概要

Office 2010 および SharePoint 2010 に付属する Microsoft Business Connectivity Services (BCS) は、Microsoft Office SharePoint Server 2007 に付属するビジネス データ カタログの機能を基に構築され、書き戻しのサポート、リッチ コンテンツの統合などの新機能を導入しています。Visual Studio 2010 は、ビジネス データ接続モデル プロジェクト テンプレートや、いくつかの新しいツールを備え、BCS モデルの作成と、外部データと外部ソースを使用する Office ソリューションの展開を容易にします。この Visual How To では、Visual Studio 2010 を使用して BCS 外部コンテンツ タイプを作成する方法について説明します。外部コンテンツ タイプは, .NET Framework アセンブリに接続されます。この .NET Framework アセンブリは、Linq to XML を使用して、単純な XML データ ファイルに格納されるデータへの読み取り/書き込みアクセスを提供します。外部コンテンツ タイプは、SharePoint 外部リストからの使用中に表示されます。

コード化する

この Visual How To では, .NET Framework ベースの BCS 外部コンテンツ タイプを作成および使用する方法について説明します。

  1. XML データ ファイルを作成して、バックエンド データ ストアをシミュレートします。

  2. Visual Studio 2010 で SharePoint 2010 ビジネス データ接続モデル プロジェクトを作成します。

  3. Visual Studio によって生成される既定のエンティティをモデルから削除します。

  4. プロジェクトに Customer クラスを追加します。

  5. モデルに Customer エンティティを追加します。

  6. プロジェクトに Microsoft.BusinessData への参照を追加します。

  7. Customer 外部コンテンツ タイプにコードを追加して、Finder、Specific Finder、Creator、Updater、および Deleter ステレオタイプを実装します。

  8. SharePoint にソリューションを展開し、SharePoint 外部リストを作成して Customer 外部コンテンツ タイプをテストします。

シミュレートされたバックエンド データ ストアを作成する

この Visual How To では、Customer エンティティに基づく外部コンテンツ タイプを作成します。この Customer エンティティは、非常にシンプルで、CustomerID と CustomerName の 2 つのフィールドで構成されます。複雑になるのを避けるために、この Visual How To では、単純な XML データ ファイルを使用して、顧客データのバックエンド データ ストアをシミュレートします。次の手順では、顧客データ ファイルを作成する方法について説明します。

  1. 任意の XML エディターを起動して、新しいファイルを作成します。

  2. 次の XML をコピーして新しいファイルに貼り付けます。

    <?xml version="1.0" encoding="utf-8"?>
    <Customers NextCustomerId="2">
      <Customer ID="0">
        <CustomerName>Customer 0</CustomerName>
      </Customer>
      <Customer ID="1">
        <CustomerName>Customer 1</CustomerName>
      </Customer>
    </Customers>
  3. 新しいファイルを C:\Dev\Temp\CustomerData.xml として保存します。

Visual Studio 2010 で SharePoint 2010 ビジネス データ接続モデル プロジェクトを作成する

  1. 管理者として Microsoft Visual Studio 2010 を開始します。

  2. Visual Studio で、[ファイル] メニューの [新規作成] を選択し、[プロジェクト] をクリックします。

  3. [新しいプロジェクト] ダイアログ ボックスの [インストールされたテンプレート] ウィンドウで、[Visual C# SharePoint 2010] テンプレート タイプを選択します。

  4. テンプレートの一覧で、[ビジネス データ接続モデル] テンプレートを選択します。

  5. プロジェクトとソリューションの名前を CustomerModel とします。

    図 1. ソリューションの作成


    ソリューションの作成

  6. [OK] をクリックします。SharePoint カスタマイズ ウィザードが表示されます。

  7. 展開とデバッグに使用するローカル サイトの URL を入力します。

    図 2. SharePoint カスタマイズ ウィザード


    SharePoint カスタマイズ ウィザード

  8. [完了] をクリックしてウィザードを完了し、ソリューションを作成します。ソリューションが作成され、[外部のコンテンツ タイプ デザイナー] にモデルが表示されます。

    図 3. 外部のコンテンツ タイプ デザイナーの新しいモデル


    新しいモデル

Visual Studio によって生成される既定のエンティティをモデルから削除する

Visual Studio では、新しい Business Data Connectivity Shared Service モデルを作成すると、既定のエンティティが作成されます。この Visual How To では、CustomerName という名前の新しいエンティティの作成に必要な手順を簡素化するために、既定のエンティティを削除するという方針で作業を進めます。

  1. [外部のコンテンツ タイプ デザイナー] に表示される [Entity1] エンティティを右クリックし、コンテキスト メニューから [削除] を選択します。

    図 4. 既定のエンティティの削除


    Default エンティティの削除

  2. ソリューション エクスプローラーで、[BdcModel1] ノードを展開し、[Entity1.cs] を右クリックして [削除] をクリックします。

  3. 削除を確認するメッセージが表示されたら、[OK] をクリックします。Entity1Service.cs ファイルに対して同じ操作を行います。これらの操作の結果、空の BDC モデルができます。

    図 5. 空の BDC モデル


    空の BDC モデル

プロジェクトに Customer クラスを追加する

Customer クラスは、顧客のデータをカプセル化します。このクラスは、Customer エンティティの実装に使用します (実装については後で説明します)。

  1. Visual Studio のソリューション エクスプローラーで、[CustomerModel] プロジェクト ノードを展開し、[BdcModel1] ノードを右クリックします。

  2. [追加] を選択し、[クラス] をクリックします。[クラス] テンプレートが選択された状態で [新しいアイテムの追加] ダイアログ ボックスが表示されます。

  3. クラス ファイルの名前に「Customer.cs」と入力し、[追加] をクリックしてクラスを作成します。コード エディターで Customer.cs ファイルが開きます。

  4. Customer.cs ファイルのコンテンツを次のコードに置き換えます。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace CustomerModel.BdcModel1
    {
        public class Customer
        {
            public Int32 CustomerID { get; set; }
            public string CustomerName { get; set; }
        }
    }
  5. 変更内容を Customer.cs ファイルに保存します。

モデルに Customer エンティティを追加する

次の手順では、モデルに Customer エンティティを追加し、そのエンティティに CustomerID 識別子を追加する方法について説明します。

  1. Visual Studio で、BdcModel1.bdcm ファイルを選択して、[外部のコンテンツ タイプ デザイナー] を表示します。

  2. Visual Studio で、[表示] メニューの [ツールボックス] をクリックします。

  3. ツールボックスの [BusinessDataConnectivity] タブから [外部のコンテンツ タイプ デザイナー] にエンティティをドラッグします。デザイナーに新しいエンティティが表示され、ファイルに EntityService.cs という名前のプロジェクトが追加されます。

  4. [表示] メニューの [プロパティ ウィンドウ] をクリックします。

  5. [プロパティ] ウィンドウで、新しいエンティティの [名前] プロパティを [Customer] に設定します。EntityService.cs ファイルの名前が CustomerService.cs に変更されます。

  1. [外部のコンテンツ タイプ デザイナー] で、[Customer] エンティティを右クリックし、[追加] をクリックして、[識別子] をクリックします。エンティティに新しい識別子が表示されます。

  2. [プロパティ] ウィンドウで、新しい識別子の名前を [CustomerID] に変更します。

  3. [型名] ドロップダウン リストの一覧の [System.Int32] をクリックします。

  4. 次の図に、CustomerID 変数を追加した Customer エンティティを示します。

    図 6. CustomerID 変数を追加した Customer エンティティ


    CustomerID 変数を指定した Customer エンティティ

プロジェクトに Microsoft.BusinessData への参照を追加する

この Visual How To に付属するサンプル コードでは、Microsoft.BusinessData.dll アセンブリの Microsoft.BusinessData.Runtime 名前空間に定義される例外を使用します。

  1. Visual Studio のソリューション エクスプローラーで、[CustomerModel] プロジェクトを選択します。

  2. Visual Studio で、[プロジェクト] メニューから [参照の追加] を選択します。[参照の追加] ダイアログ ボックスが表示されます。

  3. [参照] タブを選択し、C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI に移動します。Microsoft.BusinessData.dll アセンブリが表示されるまでスクロールし、そのアセンブリを選択して、[OK] をクリックします。

    図 6a. Microsoft.BusinessData への参照の追加


    Microsoft.BusinessData への参照の追加

外部コンテンツ タイプにコードを追加する

次の手順では、Finder、Specific Finder、Creator、Updater、および Deleter ステレオタイプまたはメソッドを Customer 外部コンテンツ タイプに実装する方法について説明します。

Finder メソッドは、Business Data Connectivity (BDC) Shared Service によって Customer エンティティの一覧を要求するために呼び出されます。

Finder メソッドを追加する

Finder メソッドを追加するには

  1. Visual Studio の [外部のコンテンツ タイプ デザイナー] で、[Customer] エンティティを選択します。

  2. Visual Studio で、[表示] メニューの [その他のウィンドウ] をクリックし、[BDC メソッドの詳細] をクリックします。

  3. [BDC メソッドの詳細] ウィンドウで、[メソッドの追加] ボックスの一覧の [Finder メソッドの作成] をクリックします。ReadList という名前のメソッド、customerList という名前の戻り値パラメーター、および CustomerList という名前の型記述子が追加されます。

  4. [BDC メソッドの詳細] ウィンドウで、CustomerList 型記述子に表示されるドロップダウン リストをクリックし、[編集] をクリックします。BDC エクスプローラーが開きます。BDC エクスプローラーにはモデルを階層的に表示するビューがあります。

  5. [プロパティ] ウィンドウで、CustomerList 型記述子の [型名] プロパティを [System.Collections.Generic.IEnumerable`1[CustomerModel.BdcModel1.Customer, BdcModel1]] に設定します。

  6. BDC エクスプローラーで、[CustomerList] 型記述子ノードを展開し、子の [Customer] 型記述子ノードを選択します。

  7. [プロパティ] ウィンドウで、[Customer] 型記述子の [型名] プロパティを [CustomerModel.BdcModel1.Customer, BdcModel1] に設定します。

  8. BDC エクスプローラーで、[Customer] 型記述子ノードを右クリックし、[型記述子の追加] をクリックします。[TypeDescriptor] という名前の新しい型記述子が BDC エクスプローラーの [Customer] ノードの下に表示されます。

  9. [プロパティ] ウィンドウで、新しい型記述子の [名前] プロパティを [CustomerID] に設定します。

  10. [CustomerID] 型記述子の [型名] プロパティを [System.Int32] に設定します。

  11. ドロップダウン リストを使用して、[CustomerID] 型記述子の [識別子] プロパティを [CustomerID] に設定します。

  12. BDC エクスプローラーで、[Customer] 型記述子ノードを右クリックし、[型記述子の追加] をクリックします。TypeDescriptor という名前の新しい型記述子が BDC エクスプローラーの [Customer] ノードの下に表示されます。

  13. [プロパティ] ウィンドウで、新しい型記述子の [名前] プロパティを [CustomerName] に設定します。

  14. 次の図に、Finder メソッドを追加した後のモデルを示します。

    図 7. Finder メソッドを追加したモデル


    Finder メソッドを使用したモデル

  15. [外部のコンテンツ タイプ デザイナー] の [Customer] エンティティで、[ReadList] メソッドをダブルクリックします。CustomerService.cs ファイルがコード エディターに開きます。

  16. Customer 外部コンテンツ タイプで使用する .NET Framework アセンブリは、Linq to XML を使用して、XML データ ファイルに格納されるデータへの読み取り/書き込みアクセスを提供します。また、前述のとおり、このアセンブリは、Microsoft.BusinessData.Runtime 名前空間に定義される例外も使用します。次の using 文を CustomerService.cs ファイルの先頭の Visual Studio で追加した using 文の下に追加します。

    using System.Xml.Linq;using Microsoft.BusinessData.Runtime;
  17. 次の変数宣言を、CustomerService.cs ファイルに定義される CustomerService クラスに追加します。dataFilePath 変数を使用して、顧客データが含まれる XML データ ファイルの場所を指定します。このデータ ファイルが別のフォルダーに作成されている場合は、それに応じて、dataFilePath 変数の値を変更します。

    private const string dataFilePath = @"C:\Dev\Temp\CustomerData.xml";
  18. CustomerService.cs ファイルの ReadList メソッドの定義を次のコードに置き換えます。

    public static IEnumerable<Customer> ReadList(){  try  {
        var customers =
          XElement.Load(dataFilePath).Elements("Customer");
        var customersList =
          from cust in customers
          orderby (string)cust.Attribute("ID")
          select new Customer
          {
            CustomerID = (Int32)cust.Attribute("ID"),
            CustomerName = (string)cust.Element("CustomerName")
          };
          return customersList;
      }
      catch (Exception generalException)
      {
        throw new RuntimeException(
          "There was a problem reading customer data.",
          generalException);  }}

Specific Finder メソッドを追加する

Specific Finder メソッドは、BDC Shared Service によって特定の Customer エンティティのデータを要求するために呼び出されます。

  1. [外部のコンテンツ タイプ デザイナー] で、[Customer] エンティティを選択します。

  2. [BDC メソッドの詳細] ウィンドウで、[メソッドの追加] ボックスの一覧の [SpecificFinder メソッドの作成] をクリックします。ReadItem という名前のメソッド、customerID という名前の入力パラメーター、customer という名前の戻り値パラメーター、Customer および CustomerID という名前の型記述子が追加されます。

    次の図に、Specific Finder メソッドを追加した後のモデルを示します。

    図 8. Specific Finder メソッドを追加したモデル


    特定の Finder メソッドを使用したモデル

  3. [外部のコンテンツ タイプ デザイナー] で、[Customer] エンティティの [ReadItem] メソッドをダブルクリックします。CustomerService.cs ファイルがコード エディターに開きます。

  4. CustomerService.cs ファイルの ReadItem メソッドの定義を次のコードに置き換えます。

    public static Customer ReadItem(int customerID)
    {
      try
      {
        var customers =
          XElement.Load(dataFilePath).Elements("Customer");
    
        var customerList =
          from cust in customers
          where (Int32)cust.Attribute("ID") == customerID
          select new Customer
          {
            CustomerID = (Int32)cust.Attribute("ID"),
            CustomerName = (string)cust.Element("CustomerName")
          };
    
          // The following will throw InvalidOperationException if the
          // customerNameElements collection is empty meaning a
          // customer with the specified ID does not exist.
          return customerList.First();
      }
      catch (InvalidOperationException )
      {
        throw new ObjectNotFoundException(
          "Unable to read data for the customer with ID = " +
          customerID.ToString() +
          ". The customer no longer exists.");
      }
      catch (Exception generalException)
      {
        throw new RuntimeException(
          "There was a problem reading customer data.",
          generalException);
      }
    }

Creator メソッドを追加する

Creator メソッドは、BDC Shared Service によって新しい Customer エンティティを作成するために呼び出されます。

  1. [外部のコンテンツ タイプ デザイナー] で、[Customer] エンティティを選択します。

  2. [BDC メソッドの詳細] ウィンドウで、[メソッドの追加] ボックスの一覧の [Creator メソッドの作成] をクリックします。Create という名前のメソッド、newCustomer という名前の入力パラメーター、returnCustomer という名前の戻り値パラメーター、NewCustomer および ReturnCustomer という名前の型記述子が追加されます。

  3. [BDC メソッドの詳細] ウィンドウで、Create メソッドの newCustomer 入力パラメーターの NewCustomer 型記述子に表示されるドロップダウン リストをクリックし、[編集] をクリックします。これにより、[NewCustomer] 型記述子ノードが選択されます。

    BDC エクスプローラーで、[NewCustomer] 型記述子ノードを展開し、子の [CustomerID] 型記述子を選択します。[プロパティ] ウィンドウで、[CustomerID] 型記述子の [Creator フィールド] プロパティを [False] に設定します。このように設定すると、顧客 ID 用のユーザー インターフェイス コントロールが、外部リストの新しい顧客フォームに表示されなくなります。顧客 ID 値はバックエンドで管理され、ユーザーが編集できないようにする必要があるので、必ずこのように設定してください。

    次の図に、Creator メソッドを追加した後のモデルを示します。

    図 9. Creator メソッドを追加したモデル


    Creator メソッドを使用したモデル

  4. [外部のコンテンツ タイプ デザイナー] で、[Customer] エンティティの [Create] メソッドをダブルクリックします。CustomerService.cs ファイルがコード エディターに開きます。

  5. CustomerService.cs ファイルの Create メソッドの定義を次のコードに置き換えます。

    public static Customer Create(Customer newCustomer)
    {
      try
      {
        XElement customers = XElement.Load(dataFilePath);
        Int32 nextCustomerId =
          (Int32)customers.Attribute("NextCustomerId");
    
        Customer returnCustomer = new Customer();
    
        returnCustomer.CustomerID = nextCustomerId;
        returnCustomer.CustomerName = newCustomer.CustomerName;
    
        XElement newCustomerElement = new XElement("Customer");
        newCustomerElement.SetAttributeValue("ID", nextCustomerId);
    
        XElement newCustomerNameElement = new XElement("CustomerName",
          returnCustomer.CustomerName);
    
        newCustomerElement.Add(newCustomerNameElement);
        customers.Add(newCustomerElement);
    
        customers.SetAttributeValue("NextCustomerId",
          nextCustomerId + 1);
        customers.Save(dataFilePath);
    
        return returnCustomer;
      }
      catch (Exception generalException)
      {
        throw new RuntimeException(
          "There was a problem creating a new customer.",
          generalException);
      }
    }

Updater メソッドを追加する

Updater メソッドは、BDC Shared Service によって既存の Customer エンティティを編集するために呼び出されます。

  1. [外部のコンテンツ タイプ デザイナー] で、[Customer] エンティティを選択します。

  2. [BDC メソッドの詳細] ウィンドウで、[メソッドの追加] ボックスの一覧の [Updater メソッドの作成] をクリックします。Update という名前のメソッド、customer という名前の入力パラメーター、および Customer という名前の型記述子が追加されます。

  3. [BDC メソッドの詳細] ウィンドウで、Update メソッドに別の入力パラメーターを追加します。その新しいパラメーターの [名前] プロパティを [customerID] に設定します。この新しいパラメーターの型記述子を選択します。[プロパティ] ウィンドウで、[名前] プロパティを [CustomerID] に、[型名] プロパティを [System.Int32] に、[Pre-Updater フィールド] プロパティを [True] に設定します。

    次の図に、Updater メソッドを追加した後のモデルを示します。

    図 10. Updater メソッドを追加したモデル


    Updater メソッドを使用したモデル

  4. [外部のコンテンツ タイプ デザイナー] で、[Customer] エンティティの [Update] メソッドをダブルクリックします。CustomerService.cs ファイルがコード エディターに開きます。

  5. CustomerService.cs ファイルの Update メソッドの定義を次のコードに置き換えます。

    public static void Update(Customer customer, Int32 customerID)
    {
      try
      {
        XElement customers = XElement.Load(dataFilePath);
    
        var customerNameElements =
          from cust in customers.Elements("Customer")
          where (Int32)cust.Attribute("ID") == customer.CustomerID
          select cust.Element("CustomerName");
    
        // The following will throw InvalidOperationException if
        // the customerNameElements collection is empty meaning a
        // customer with the specified ID does not exist.
        XElement customerNameElement = customerNameElements.First();
        customerNameElement.SetValue(customer.CustomerName);
    
        customers.Save(dataFilePath);
      }
      catch (InvalidOperationException)
      {
        throw new ObjectNotFoundException(
          "Unable to update the customer with ID = " +
          customerID.ToString() +
          ". The customer no longer exists.");
      }
      catch (Exception generalException)
      {
        throw new RuntimeException(
          "There was a problem updating the customer with ID = " +
          customerID.ToString() + ".", generalException);
      }
    }

手順

この Visual How To では、XML データ ファイルに対して読み取り/書き込み操作を実行可能な .NET Framework アセンブリを使用する BCS 外部コンテンツ タイプの作成手順と、そのサンプル コードについて説明します。次のセクションでは、サンプル コードのコード スニペットを使用して、この Visual How To でのアプローチについて説明します。

Finder メソッドの実装

Finder メソッドは、BDC Shared Service によってエンティティの一覧を返すために使用されます。次のチュートリアルでは、Customer エンティティの Finder メソッドは、SharePoint に外部リストの顧客アイテムの一覧が表示されるときに呼び出されます。上記のサンプル コードでは、Customer エンティティの Finder メソッドは、CustomerService.ReadList メソッドによって実装されています。

ReadList メソッドは、最初に、XML データ ファイルを開いて Customer 要素のコレクションを取得します。

var customers = XElement.Load(dataFilePath).Elements("Customer");

次に、Customer オブジェクトのコレクションを作成して返します。この Customer オブジェクトは、各 Customer 要素から作成されます。

var customersList =  from cust in customers
  orderby (string)cust.Attribute("ID")
  select new Customer
  {    CustomerID = (Int32)cust.Attribute("ID"),
    CustomerName = (string)cust.Element("CustomerName")
  };return customersList;

Specific Finder メソッドの実装

Specific Finder メソッドは、BDC Shared Service によって特定のエンティティのインスタンスを返すために使用されます。次のチュートリアルでは、Customer エンティティの Specific Finder メソッドは、外部リストの顧客アイテムの編集または表示を選択するときに呼び出されます。上記のサンプル コードでは、Customer エンティティの Specific Finder メソッドは、CustomerService.ReadItem メソッドによって実装されています。

ReadItem メソッドは、要求された顧客インスタンスの一意の ID を表す Int32 パラメーターを受け取ります。

public static Customer ReadItem(int customerID)

ReadItem メソッドは、最初に、XML データ ファイルを開いて Customer 要素のコレクションを取得します。

続いて、メソッドに渡された顧客 ID と同じ ID 属性を持つ Customer 要素のそれぞれから Customer オブジェクトのコレクションが作成されます。顧客 ID は一意なので、コレクションには 1 つの顧客しか含まれないため、このメソッドは、コレクション内の先頭のアイテムを返します。

var customerList =
    from cust in customers
    where (Int32)cust.Attribute("ID") == customerID
    select new Customer
    {
      CustomerID = (Int32)cust.Attribute("ID"),
      CustomerName = (string)cust.Element("CustomerName")
    };

  return customerList.First();

Creator メソッドの実装

Creator メソッドは、BDC Shared Service によって新しいエンティティのインスタンスを作成するために呼び出されます。上記のチュートリアルでは、Customer エンティティの Creator メソッドは、新しい顧客アイテムを外部リストに追加するときに呼び出されています。上記のサンプル コードでは、Customer エンティティの Creator メソッドは、CustomerService.Create メソッドによって実装されています。

Create メソッドは、外部リストの新しいアイテム フォームから入力された顧客データを表す Customer パラメーターを受け取ります。

public static Customer Create(Customer newCustomer)

Create メソッドは、最初に、XML データ ファイルを開いて最上位の Customers 要素を取得します。続いて、新しい顧客のために使用する ID の値を NextCustomerId 属性から読み取ります。

XElement customers = XElement.Load(dataFilePath);
Int32 nextCustomerId =
  (Int32)customers.Attribute("NextCustomerId");

このメソッドは、新しい Customer オブジェクトを作成し、その Customer オブジェクトの CustomerID プロパティに読み取った値を設定し、その CustomerName プロパティに、メソッドに渡された Customer オブジェクトの CustomerName プロパティの値を設定します。

Customer returnCustomer = new Customer();

returnCustomer.CustomerID = nextCustomerId;
returnCustomer.CustomerName = newCustomer.CustomerName;

次に、このメソッドは、新しい Customer 要素と CustomerName 要素を作成し、その Customer ID 属性と CustomerName 値を設定した後、それらの要素を最上位の Customers 要素に追加します。

XElement newCustomerElement = new XElement("Customer");
newCustomerElement.SetAttributeValue("ID", nextCustomerId);

XElement newCustomerNameElement = new XElement("CustomerName",
  returnCustomer.CustomerName);

newCustomerElement.Add(newCustomerNameElement);
customers.Add(newCustomerElement);

最後に、NextCustomerId 属性の値が増分し、すべての変更内容が XML データ ファイルに保存されます。

customers.SetAttributeValue("NextCustomerId", nextCustomerId + 1);
customers.Save(dataFilePath);

Updater メソッドの実装

Updater メソッドは、BDC Shared Service によって既存のエンティティのインスタンスを編集するために呼び出されます。このチュートリアルでは、Customer エンティティの Updater メソッドは、外部リストの顧客を編集するときに呼び出されます。上記のサンプル コードでは、Customer エンティティの Updater メソッドは、CustomerService.Update メソッドによって実装されています。

Update メソッドは、Customer パラメーターと Int32 パラメーターを受け取ります。Customer パラメーターは、外部リストのアイテム編集フォームからユーザーが入力した顧客データを表し、Int32 パラメーターは、更新する顧客の一意の ID を表します。

public static void Update(Customer customer, Int32 customerID)

Update メソッドは、最初に、XML データ ファイルを開いて最上位の Customers 要素を取得します。

XElement customers = XElement.Load(dataFilePath);

続いて、メソッドに渡された顧客 ID と同じ ID 属性を持つ Customer 要素のそれぞれから Customer オブジェクトのコレクションが作成されます。

var customerNameElements =
  from cust in customers.Elements("Customer")
  where (Int32)cust.Attribute("ID") == customer.CustomerID
  select cust.Element("CustomerName");

顧客 ID は一意なので、コレクションには 1 つの顧客しか含まれないため、このメソッドは、コレクション内の先頭のアイテムを取得します。最後に、すべての変更内容が XML データ ファイルに保存されます。

XElement customerNameElement = customerNameElements.First();
customerNameElement.SetValue(customer.CustomerName);

customers.Save(dataFilePath);

Deleter メソッドの実装

Deleter メソッドは、BDC Shared Service によって既存のエンティティのインスタンスを削除するために呼び出されます。このチュートリアルでは、Customer エンティティの Deleter メソッドは、ユーザーが外部リストから顧客アイテムを削除するときに呼び出されます。上記のサンプル コードでは、Customer エンティティの Deleter メソッドは、CustomerService.Delete メソッドによって実装されています。

Delete メソッドは、削除する顧客の一意の ID を表す Int32 パラメーターを受け取ります。

public static void Delete(int customerID)

Delete メソッドは、最初に、XML データ ファイルを開いて最上位の Customers 要素を取得します。

XElement customers = XElement.Load(dataFilePath);

続いて、メソッドに渡された顧客 ID と同じ ID 属性を持つ Customer 要素のそれぞれから Customer オブジェクトのコレクションが作成されます。

var customerElements =
  from cust in customers.Elements("Customer")
  where (Int32)cust.Attribute("ID") == customerID
  select cust;

顧客 ID は一意なので、コレクションには 1 つの顧客しか含まれないため、このメソッドは、コレクション内の先頭のアイテムを取得して削除します。最後に、すべての変更内容が XML データ ファイルに保存されます。

XElement customer = customerElements.First();
customer.Remove();

customers.Save(dataFilePath);
ビデオ

ビデオを見る

ビデオを見る (英語)

長さ: 25:12 | サイズ: 28.6 MB | 形式: WMV

クリックしてコードを取得

コードを取得する (英語)

関連情報