SharePoint Online の Business Connectivity Services の概要

概要:  Microsoft Business Connectivity Services (BCS) を使用して Microsoft SharePoint Online 用のアプリケーションを開発するために必要な基本概念、ベスト プラクティス、および設計パターンについて説明します。

最終更新日: 2011年12月12日

SharePoint Online で使用可能

この記事の内容
Business Connectivity Services とは
外部コンテンツ タイプ
BDC モデル
外部リスト
外部データ列
ビジネス データ Web パーツ
外部コンテンツ タイプの選択
外部アイテム ピッカー
Secure Store
SharePoint クライアント モデル
BCS アプリケーションの開発
まとめ
その他の技術情報

適用対象: Business Connectivity Services | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio

提供元:  Rodney Farris、Microsoft Corporation

目次

  • Business Connectivity Services とは

  • 外部コンテンツ タイプ

  • BDC モデル

  • 外部リスト

  • 外部データ列

  • ビジネス データ Web パーツ

  • 外部コンテンツ タイプの選択

  • 外部アイテム ピッカー

  • Secure Store

  • SharePoint クライアント モデル

  • まとめ

  • その他の技術情報

Business Connectivity Services とは

Microsoft Business Connectivity Services (BCS) (旧称、ビジネス データ カタログ) を使用すると、ユーザーは、Web サービス、データベース、および Microsoft .NET Framework 経由で、Microsoft SharePoint 2010 および Microsoft SharePoint Online 内から外部システムのデータの読み取りと書き込みができます。SharePoint 2010 と SharePoint Online には、外部データを直接使用できる機能があります。開発者は、豊富な機能セットにアクセスし、Microsoft Visual Studio 2010、Microsoft SharePoint Designer 2010 などの使い慣れたツールを使用して、ソリューションを迅速に構築できます。

SharePoint Online を初めて使用する場合は、この記事をお読みください。この記事では、BCS を使用して SharePoint Online 用のアプリケーションを開発するために必要な基本概念、ベスト プラクティス、設計パターンについて説明しています。

ヒントヒント

SharePoint Online のベスト プラクティスおよび設計パターンの詳細については、「SharePoint Online: 開発者向けの概要紹介」を参照してください。

外部コンテンツ タイプ

BCS の主要概念は、外部コンテンツ タイプです。外部コンテンツ タイプは、SharePoint Online に格納される再利用可能な接続定義で、基本的な接続情報を知らなくても外部データへのアクセスを可能にします。

これらの定義には、接続情報のメタデータ記述とデータ定義、および特定のカテゴリの外部データに適用する動作が含まれます。外部コンテンツ タイプを使用すると、ユーザーは、顧客、注文などのビジネス エンティティのメタデータと動作を集中的に管理および再利用し、その外部データとプロセスに対してより有意義な方法で対話的作業ができます。

たとえば、顧客というビジネス エンティティについて検討します。このビジネス エンティティを操作するときは、SharePoint リスト内にある種類が顧客のアイテムを操作するか、ユーザーが Web パーツの顧客リストから顧客を選択できるようにするとよいでしょう。一度作成した外部コンテンツ タイプは、必要に応じてどこででも再利用できます。

注意

外部リストのスキーマは XML で定義された (および次のセクションで説明する) BDC モデルに依存しており、通常のリストに行うようにリストに新しい列を追加して拡張することはできません。本リリースでは、外部リストは、ワークフロー、コンテンツ タイプ、バージョン管理、チェックイン、およびチェックアウトなどの、一般的な SharePoint リストが持つすべての機能を提供するわけではありません。

外部コンテンツ タイプには以下の利点があります。

  • 再利用性   外部コンテンツ タイプはビジネス エンティティの再利用可能なデータ定義です。作成した外部コンテンツ タイプを任意の BCS の表示機能で使用し、外部データと対話するための充実したユーザー操作を提供できます。

  • 外部システムへの簡素化されたアクセス   外部コンテンツ タイプを使用すると、インフォメーション ワーカーは、外部システムの複雑性に対処することなく、ビジネス ソリューションを組み立てることができます。たとえば、接続情報またはプログラム インターフェイスを把握する必要はありません。経験豊富なユーザーまたは開発者が作成した外部コンテンツ タイプは、あらゆるユーザーが、必要なあらゆる方法で使用できます (外部コンテンツ タイプの操作および外部データのアクセスに対する権限がある場合)。ただし、ユーザーは、外部データの場所や外部データの接続方法について知る必要はありません。

  • SharePoint の組み込み動作   外部コンテンツ タイプは、SharePoint の動作 (リスト、Web パーツなど) および機能 (検索、オフライン作業など) を外部のデータやサービスに提供します。これにより、ユーザーは、使い慣れた作業環境で作業できます。データを探したり、さまざまな (および独自の) ユーザー インターフェイスを習得したり、そのユーザー インターフェイスと対話したりする必要はありません。

  • セキュリティで保護されたアクセス   外部コンテンツ タイプは、外部システムおよび SharePoint 製品とテクノロジの両方によって設定されたセキュリティを順守します。SharePoint でセキュリティを構成することで、どのユーザーがどのデータにアクセスできるかを完全に制御できます。

  • 簡略化された保守   外部コンテンツ タイプは一度作成するだけで、複数のソリューションでさまざまなシナリオで使用できます。したがって、外部コンテンツ タイプの管理は容易です。たとえば、外部コンテンツ タイプのアクセス許可、接続定義、およびデータ定義を 1 か所で集中して管理できます。

BDC モデル

BDC モデルは Business Data Connectivity (BDC) service の中核を成します。外部システムに関する複雑な情報を抜き出す エンティティ (外部コンテンツ タイプ)、メソッドなどのデータ構造は、まとめて MetadataObjects と呼ばれ BDC モデルを構成します。外部システム用の BDC モデルは、基本的に XML ファイルです。SharePoint Designer 2010 を使用するときに、このファイルが自動的に生成されます。ただし、Visual Studio または別の XML 編集ユーティリティを使用している場合は、公開された BDC スキーマに従って BDC モデルを手動で生成する必要があります。

外部リストを使用すると、外部システムに書き戻すことができます (外部システムでそれが許可されていて、その外部システムが外部コンテンツ タイプによって適切にモデル化されている場合)。これは、ユーザーが外部データを SharePoint Online 内から直接編集できることを意味します。リスト内のアイテムに対して行われた変更は、外部システムと自動的に同期されます。リストの [データの更新] ボタンを使用すると、外部システムとの間で自動的にデータの同期と更新が行われます。

外部リスト

外部リストは、SharePoint リスト データがアクセスされるのと同じ方法で、外部システムからデータにアクセスできるようにします。外部リストは、データ ソースとして外部コンテンツ タイプを使用します。外部リストは、その他の SharePoint リストと同様の外見を持ち同様に動作する外部データを持つ SharePoint リストを作成するために、外部コンテンツ タイプについて定義済みのメタデータを使用できるようにします。

注意

SharePoint コンテンツ データベースにデータが保存される SharePoint リストと異なり、外部リストのデータは外部システムにのみ保存されます。ユーザーがリストに移動する実行時に、外部データは SharePoint リストとして取り込まれますが、元のデータは外部システムに残ります。

外部データ列

Microsoft Office SharePoint Server 2007 では、ビジネス データ リスト列タイプが提供されていました。このタイプは、SharePoint Online の (外部リストを除く) すべての SharePoint リストで利用できるようになりました。ビジネス データ リスト列タイプは、外部データ列という名前に変更されています。外部データ列は、ユーザーが外部コンテンツ タイプのデータを標準の SharePoint リストに追加できるようにします。外部リストと同じように、外部データ列は BDC でモデル化された任意の外部コンテンツ タイプのデータを表示することができます。図 1 は、顧客外部コンテンツ タイプの外部データ列により拡張された SharePoint リストを示します。

図 1. 外部データ列が追加された SharePoint リスト

外部データ列が追加された SharePoint リスト

ビジネス データ Web パーツ

BCS には、外部コンテンツ タイプによって表される読み取り専用データにアクセスするための以下の Web パーツがあります。

  • 外部データ リスト

  • 外部データ アイテム

  • 外部データ アイテム ビルダー

  • 外部データ関連リスト

  • 外部データ接続フィルター

詳細については、「外部データを表示できる場所」を参照してください。

外部コンテンツ タイプの選択

外部コンテンツ タイプの選択を使用すると、SharePoint Online で利用できる外部コンテンツ タイプのリストから事前定義された外部コンテンツ タイプを選択できます。

外部アイテム ピッカー

外部アイテム ピッカーは、サーバーとリッチ クライアント Microsoft Office アプリケーション上で外部アイテムを選択し、解決する機能を提供します。顧客リストの顧客 John などの外部アイテムをユーザーが選択できるようにする必要があるシナリオで、フォームまたはページに選択機能を埋め込むことができます。

Secure Store

Secure Store Service は、アカウント名、パスワードなどの資格情報の格納およびマッピングを実現する共有サービスです。このサービスは、外部システムに接続するために必要な資格情報を提供し、特定の ID、あるいは ID のグループにそれらの資格情報を関連付けるデータをセキュリティで保護して保存できるようにします。複数のユーザーが外部システム上で一連の資格情報を使用して、その外部システムにアクセスできるように Secure Store Service を設定することができます。

注意

Secure Store は、SharePoint Online の外部システムでユーザーを認証するためにサポートされている唯一のメカニズムです。

たとえば、"Fred" という名前のユーザーが SharePoint Online でホストされている 1 つのアカントを持ち、Windows Communication Foundation (WCF) アプリケーション内にもう 1 つのアカントを持っている場合、SharePoint の Secure Store Service メカニズムにより、WCF 資格情報を Secure Store 内のグループにマップできます。その結果、ユーザーが SharePoint Online のソリューションを使用して WCF アプリケーションからデータを取得する場合、SharePoint Online はサーバーの Secure Store Service データベースを検索し、Fred に代わり、グループの資格情報を WCF サービスに提供します。このようにして Fred は、WCF サービスによって安全が確保されているデータにアクセスするため、個別にログオンする必要はありません。

SharePoint クライアント モデル

SharePoint クライアント オブジェクト モデルは、ブラウザー内でクライアント アプリケーションから SharePoint サイトを対話的に操作する方法を提供します。

クライアント オブジェクト モデルには、SharePoint サーバー オブジェクト モデル内でのコア オブジェクトの 3 つの対等かつ類似の表現があります。それらは, .NET Framework マネージ モデル、Microsoft Silverlight モデル、および JavaScript モデルです。こうしたクライアント オブジェクト モデルにより、SharePoint データおよび機能へのリモート アクセスが可能になります。

クライアント オブジェクト モデルは、SPList クラスに基づいて作成されており、SharePoint Web サービスを使用して CRUD 操作をクライアントから実行します。

BCS アプリケーションの開発

BCS アプリケーションの開発を始めるときに役立つ情報を以下に示します。

BCS アプリケーションの開発に使用するツール

BCS のアプリケーションおよびコンポーネントを開発するときは、基本的に 2 つの選択肢 (Visual Studio 2010 と SharePoint Designer 2010) があります。ただし、現在、SharePoint Online から外部データ ソースに接続するときにユーザー設定コードを利用できないため、お勧めのツールは SharePoint Designer 2010 になります。

SharePoint Designer 2010 は、SharePoint アプリケーションの開発を簡素化し、Visual Studio 開発者のために、コードを使用せずにアプリケーションを素早く開発するための優れたツールを提供します。

外部コンテンツ タイプと関連付けの作成

前に説明したように、外部コンテンツ タイプは、接続情報とデータ定義、および特定のカテゴリの外部データに適用する動作を含むメタデータをまとめて再利用できるようにしたものです。BCS を使用して外部データ ソースのデータを SharePoint Online に組み込むとき、通常、最初に外部コンテンツ タイプを作成します。外部コンテンツ タイプを作成すると、Office アプリケーション用の外部リスト、外部データ列、外部コンテンツ コントロールなど、BCS のさまざまな表示機能とともに外部コンテンツ タイプを使用して、SharePoint Online で外部データを表示できます。

SharePoint Online で外部コンテンツ タイプを作成するには、以下の手順を実行します。

  1. 外部データ ソースとユーザーが実行できる操作を公開する WCF エンド ポイントを作成します。

  2. SharePoint Designer または Visual Studio を使用して、必要な資格情報で WCF サービスに接続する外部コンテンツ タイプを作成します。

  3. WCF サービスによって許可されたユーザー アカウントに SharePoint Online ユーザーをマップする Secure Store Service エントリを作成します。

  4. 新しく作成された外部コンテンツ タイプを使用して、外部リストを作成します。

SharePoint Designer と SharePoint Online を使用して外部コンテンツ タイプを作成する方法の詳細については、以下のリソースを参照してください。

以下の例では、WCF サービスに接続する BDC モデルを定義する方法を示します。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Model Name="ExampleApplicationDefinition" 
 xmlns="https://schemas.microsoft.com/windows/2007/BusinessDataCatalog">
  <LobSystems>
    <LobSystem Name="ExampleCRM" Type="Wcf">
      <Properties>
        <Property Name="WcfMexDiscoMode" Type="System.String">Disco</Property>
        <Property Name="WcfMexDocumentUrl" Type="System.String">http://example.org/?wsdl</Property>
        <Property Name="WcfProxyNamespace" Type="System.String">ExampleCrmNamespace</Property>
        <Property Name="WsdlFetchAuthenticationMode" Type="System.String">PassThrough</Property>
      </Properties>
      <LobSystemInstances>
        <LobSystemInstance Name="ExampleServer">
          <Properties>
            <Property Name="WcfAuthenticationMode" Type="System.String">PassThrough</Property>
            <Property Name="WcfEndpointAddress" Type="System.String">http://example.org</Property>
          </Properties>
        </LobSystemInstance>
      </LobSystemInstances>
      <Entities>
        <Entity Name="Customer" Namespace="example.com" Version="1.0.0.0">
          <Identifiers>
            <Identifier Name="CustomerIdentifier" TypeName="System.Int32" />
          </Identifiers>
          <Methods>
            <Method Name="GetCustomers">
              <Parameters>
                <Parameter Name="CustomerId" Direction="In">
                  <TypeDescriptor Name="Id" TypeName="System.Int32" 
                   IdentifierName="CustomerIdentifier" />
                </Parameter>
                <Parameter Name="Customers" Direction="Return">
                  <TypeDescriptor Name="CustomerArray" 
                   TypeName="ExampleCrmNamespace.Customer[], ExampleCRM" IsCollection="true">
                    <TypeDescriptors>
                      <TypeDescriptor Name="Customer" 
                       TypeName="ExampleCrmNamespace.Customer, ExampleCRM">
                        <TypeDescriptors>
                          <TypeDescriptor Name="Id" 
                           TypeName="System.Int32" IdentifierName="CustomerIdentifier" />
                          <TypeDescriptor Name="FirstName" TypeName="System.String" />
                          <TypeDescriptor Name="LastName" TypeName="System.String" />
                        </TypeDescriptors>
                      </TypeDescriptor>
                    </TypeDescriptors>
                  </TypeDescriptor>
                </Parameter>
              </Parameters>
              <MethodInstances>
                <MethodInstance Name="GetCustomer" Type="SpecificFinder" 
                 ReturnParameterName="Customers" 
                 ReturnTypeDescriptorPath="CustomerArray[0]" />
              </MethodInstances>
            </Method>
          </Methods>
        </Entity>
      </Entities>
    </LobSystem>
  </LobSystems>
</Model>

BCD モデルを作成する方法の詳細については、以下のリソースを参照してください。

注意

複数タイプの外部システムに接続する方法を示していますが、現時点で SharePoint Online によって許可されているのは WCF 接続のみです。

クライアント オブジェクト モデルを使用した BCS の操作

SharePoint Online でプログラムによって外部データを操作するには、クライアント オブジェクト モデルを使用する必要があります。クライアント オブジェクト モデル API はリモートで実行されるので、この API には、サンドボックス ソリューションまたはサーバー側ソリューションに適用される制限と同じ制限は受けません。

BCS のクライアント オブジェクト モデルの使用は、SharePoint ネイティブ データの操作と似ています。以下のコード例は、特定のリスト内のアイテムを取得する方法を示します。

using System;
using Microsoft.SharePoint.Client;

class Program
{
    static void Main()
    {
        ClientContext clientContext = new ClientContext("http://intranet.contoso.com");
        List list = clientContext.Web.Lists.GetByTitle("Customer Info");
        CamlQuery camlQuery = new CamlQuery();
        camlQuery.ViewXml = "<View/>";
        ListItemCollection listItems = list.GetItems(camlQuery);
        clientContext.Load(list);clientContext.Load(listItems);
        clientContext.ExecuteQuery();
        foreach (ListItem listItem in listItems)
            Console.WriteLine("Id: {0} Title: {1}", listItem.Id, oListItem["Title"]);
    }
}

クライアント オブジェクト モデルによるクライアント オブジェクトの更新は、きわめて簡単です。オブジェクトを取得し、プロパティを変更し、変更する各オブジェクトに対して Update メソッドを呼び出し、次に ExecuteQuery メソッドを呼び出します。以下の例では、Client API Test List 内のアイテムを変更し、すべての開発アイテムの見積もりを 50 パーセント増やします (共通操作)。

using System;
using Microsoft.SharePoint.Client;

class Program
{
    static void Main(string[] args)
    {
        ClientContext clientContext = new ClientContext("http://intranet.contoso.com");
        List list = clientContext.Web.Lists.GetByTitle("Client API Test List");
        CamlQuery camlQuery = new CamlQuery();
        camlQuery.ViewXml =
            @"<View>
                <Query>
                  <Where>
                    <Eq>
                      <FieldRef Name='Category'/>
                      <Value Type='Text'>Development</Value>
                    </Eq>
                  </Where>
                </Query>
                <RowLimit>100</RowLimit>
              </View>";
        ListItemCollection listItems = list.GetItems(camlQuery);
        clientContext.Load(
             listItems,
             items => items.Include(
                 item => item["Category"],
                 item => item["Estimate"]));
        clientContext.ExecuteQuery();
        foreach (ListItem listItem in listItems)
        {
            listItem["Estimate"] = (double)listItem["Estimate"] * 1.5;
            listItem.Update();
        }
        clientContext.ExecuteQuery();
    }
}

クライアント オブジェクトの削除も同様に簡単です。しかし、クライアント オブジェクト コレクションからクライアント オブジェクトを削除する場合は、1 つの非常に重要な力関係が存在します。コレクションを反復処理してオブジェクトを削除することはできません。最初のオブジェクトを削除すると、すぐにクライアント オブジェクト コレクションの反復子が誤動作します。反復子は例外をスローする可能性があります。あるいは何もせずに終了しますが、コレクション内のすべてのアイテムにアクセスしない可能性があります。代わりに、ToList メソッドを使用して、コレクションを List<T> に具現化してから、そのリストを反復処理してクライアント オブジェクトを削除する必要があります。

以下の例では、Client API Test List からテスト アイテムを削除します。コレクションを反復処理する前に、ToList メソッドを使用してコレクションを具現化する方法を示します。

using System;
using System.Linq;
using System.Collections.Generic;
using Microsoft.SharePoint.Client;

class Program
{
    static void Main(string[] args)
    {
        ClientContext clientContext = new ClientContext("http://intranet.contoso.com");
        List list = clientContext.Web.Lists.GetByTitle("Client API Test List");
        CamlQuery camlQuery = new CamlQuery();
        camlQuery.ViewXml =
            @"<View>
                <Query>
                  <Where>
                    <Eq>
                      <FieldRef Name='Category'/>
                      <Value Type='Text'>Test</Value>
                    </Eq>
                  </Where>
                </Query>
                <RowLimit>100</RowLimit>
              </View>";
        ListItemCollection listItems = list.GetItems(camlQuery);
        clientContext.Load(
             listItems,
             items => items.Include(
                 item => item["Title"]));
        clientContext.ExecuteQuery();
        foreach (ListItem listItem in listItems.ToList())
            listItem.DeleteObject();
        clientContext.ExecuteQuery();
    }
}

クライアント オブジェクト モデルの使用の詳細については、以下のリソースを参照してください。

まとめ

BCS は、SharePoint の外部にあるシステムからデータを集めて使用するための強力なツールです。2011 年 11 月の Service Update から、開発者は SharePoint Online アプリケーションで BCS を使用できます。

その他の技術情報

詳細については、次のリソースを参照してください。