次の方法で共有


外部データ ソースにアクセスする方法

適用対象: InfoPath 2010 | InfoPath Forms Services | Office 2010 | SharePoint Server 2010 | Visual Studio | Visual Studio Tools for Microsoft Office

この記事の内容
DataSourceCollection クラスの概要
DataSource クラスの概要
データ接続クラスの概要
DataSourceCollection クラスと DataSource クラスを使用する
DataConnectionCollection クラスと DataConnection クラスを使用する

InfoPath フォーム テンプレートで作業しているときに、フォームのセカンダリ データ ソースにアクセスしてそこに含まれるデータを操作するコードを書くことができます。

各セカンダリ データ ソースは、DataSource クラスを使用してインスタンス化されたオブジェクトによって表現され、データベースや Web サービス クエリなどの外部データ ソースから取得された保管データに相当します。これらのデータ ソースがセカンダリと呼ばれる理由は、ユーザーが InfoPath フォームを保存する際、メインのデータ ソース (プライマリ データ ソース) のデータのみが保存され、これらのデータ ソースのデータは保存されないためです。データ ソースへの接続は、"データ接続" クラスを使用してインスタンス化されたオブジェクトによって表されます。このようなクラスには、XML Web サービスへのデータ接続を表す WebServiceConnection などがあります。

インスタンス化された DataSource オブジェクトは、データベースまたは Web サービス クエリからデータ接続によって返される XML データの格納場所を表し、"データ接続" クラスはデータ接続自体 ([データ] タブの [データ接続] コマンドを使用して定義および指定するデータ接続) を表します。

InfoPath オブジェクト モデルは、DataSourceCollection クラスに関連した DataSource クラスの使用によるフォームのセカンダリ データ ソースへのアクセスをサポートしています。

InfoPath オブジェクト モデルは、フォームによって使用されるデータ接続に関する情報を格納したデータ接続クラスのセットも提供します。

注意

Microsoft InfoPath 2003 では、データ接続のことをデータ アダプターと呼びます。

データ接続には 2 つの種類があります。クエリ接続は、データを取得するために使用されます。取得されたデータは、セカンダリ データ ソースに格納されます。送信用接続は、データベースや Web サービスなどにデータを送信するために使用されます。送信されるデータは、メインまたはセカンダリのデータ ソースからコピーされます。

DataSourceCollection クラスの概要

DataSourceCollection クラスには、次のプロパティとメソッドがあります。フォームの開発者は、これらを使用することにより、フォームに含まれている DataSourceCollection オブジェクトのインスタンスを管理できます。

名前

説明

Count プロパティ

コレクションに含まれている DataSource オブジェクト インスタンスの数を返します。

GetEnumerator メソッド

コレクションの反復処理に使用できる IEnumerator を返します。

Item[Int32] プロパティ

指定した DataSource オブジェクトへの参照をインデックス値で返します。

Item[String] プロパティ

指定した DataSource オブジェクトへの参照を名前で返します。

DataSource クラスの概要

DataSourceCollection クラスには、次のメソッドとプロパティがあります。フォームの開発者は、これらを使用することにより、InfoPath セカンダリ データ ソースを操作することができます。

名前

説明

CreateNavigator メソッド

データ ソースへのアクセスおよび編集のための XPathNavigator オブジェクトを返します。

QueryConnection プロパティ

関連付けられたデータ接続オブジェクトへの参照を取得します。

データ接続に対してクエリを実行し、返されたデータを、DataSource オブジェクトに関連付けられた XML ノードに XML として挿入するには、関連付けられたデータ接続オブジェクトの Execute メソッドを使用します。

Name プロパティ

DataSource オブジェクトの名前を取得します。

ReadOnly プロパティ

データ ソースが読み取り専用状態かどうかを示す値を取得します。

GetNamedNodeProperty メソッド

指定した XML ノードの名前付きプロパティの値を取得します。このノードは、メイン データ ソースの nonattribute ノードである必要があります。

SetNamedNodeProperty メソッド

指定した XML ノードの名前付きプロパティの値を設定します。このノードは、メイン データ ソースの nonattribute ノードである必要があります。

データ接続クラスの概要

データ接続にアクセスするためのクラスは、さまざまなプロパティとメソッドを提供し、これらは外部データ ソースへの接続を通じてデータを取得および送信します。DataSource オブジェクトに関連付けられるデータ接続は、外部データ接続の種類に依存します。InfoPath は、データ接続にアクセスするために以下のクラスを実装します。

名前

説明

AdoQueryConnection クラス

ADO/OLEDB データ ソースのクエリを実行します。Microsoft Access および Microsoft SQL Server に限定されます。

AdoSubmitConnection クラス

ADO/OLEDB データ ソースにデータを送信します。Microsoft Access および Microsoft SQL Server に限定されます。

SharePointListRWQueryConnection クラス

SharePoint リストまたはドキュメント ライブラリのクエリを実行します。

SharePointListRWSubmitConnection

SharePoint リストまたはドキュメント ライブラリにデータを送信します。

WebServiceConnection クラス

XML Web サービスに接続します。

FileQueryConnection クラス

XML ファイルのクエリを実行します。

FileSubmitConnection クラス

XML ファイルにデータを送信します。

EmailSubmitConnection クラス

フォームを電子メールの添付ファイルとして送信します。

BdcQueryConnection クラス

SharePoint Foundation 2010 または SharePoint Server 2010 を実行しているサーバーで、外部リストのクエリを実行します。

BdcSubmitConnection クラス

SharePoint Foundation 2010 または SharePoint Server 2010 を実行しているサーバー上の外部リストにデータを送信します。

DataSourceCollection クラスと DataSource クラスを使用する

フォーム テンプレートに関連付けられたデータ ソースのコレクションを表す DataSourceCollection オブジェクトにアクセスするには、XmlForm クラスの DataSources プロパティを使用します。たとえば、Northwind データベースの Employees テーブルからデータを取得する Employees という名前のセカンダリ データ ソースを作成した場合、DataSourceCollection オブジェクトを使用して、取得されたデータを表す DataSource オブジェクトへの参照を設定することができます。

以下のコード例では、DataSourceCollection クラスのアクセサー プロパティにセカンダリ データ ソースの名前が渡されて、取得された Employees テーブルのデータを表す DataSource オブジェクトへの参照が返されます。その後、DataSource クラスの CreateNavigator メソッドを使用して XPathNavigator クラスの InnerXml プロパティにアクセスすることにより、セカンダリ データ ソースから取得されたデータを格納している XML ノードがメッセージ ボックスに表示されます。

// Instantiate a variable to access the specified data source
// from the DataSourceCollection of the form.
DataSource myDataSource = 
   this.DataSources["Employees"];

// Display the XML data from the secondary data source.
MessageBox.Show("Data source data: " +
   myDataSource.CreateNavigator().InnerXml.ToString());
' Instantiate a variable to access the specified data source
' from the DataSourceCollection of the form.
Dim myDataSource As DataSource = _
   Me.DataSources("Employees")

' Display the XML data from the secondary data source.
MessageBox.Show("Data source data: " & _
   myDataSource.CreateNavigator().InnerXml.ToString())

セカンダリ データ ソースに格納されているデータを操作するには、DataSource クラスの CreateNavigator メソッドを使用して、そのセカンダリ データが格納されているノードにある XPathNavigator オブジェクトへの参照を取得します。この XPathNavigator クラスのプロパティやメソッドを使用して、データを操作できます。詳細については、「[方法] XPathNavigator クラスおよび XPathNodeIterator クラスを操作する方法」を参照してください。

DataConnectionCollection クラスと DataConnection クラスを使用する

フォーム テンプレートに関連付けられたデータ接続のコレクションを表す DataConnectionCollection オブジェクトにアクセスするには、XmlForm クラスの DataConnections プロパティを使用します。たとえば、Northwind データベースの Employees テーブルからデータを取得する Employees という名前のセカンダリ データ ソースを作成した場合、フォーム テンプレートに関連付けられた DataConnectionCollection オブジェクトを使用して、データベースへの接続を表す DataConnection への参照を設定することができます。

以下のコード例では、DataConnectionCollection クラスのアクセサー プロパティにセカンダリ データ ソースの名前が渡されて、今度は、Northwind データベースへの接続を表す ADOQueryConnection オブジェクトへの参照が返されます。これを正常に動作させるには、返されるオブジェクトを ADOQueryConnection 型に明示的にキャストする必要があります。メッセージ ボックス内での ADO 接続文字列の表示には ADOAdapterObject インターフェイスの Connection プロパティが使用されます。

// Instantiate a variable to access the specified data connection
// from the DataConnectionCollection of the form. 
// You must cast to the specific data connection type
// (ADOQueryConnection) before you can access the data connection.
ADOQueryConnection myADOConnection = 
   (ADOQueryConnection)this.DataConnections["Employees"];

// Display the connection information for the data connection.
MessageBox.Show("Connection string: " + myADOConnection.Connection);
' Instantiate a variable to access the specified data connection
' from the DataConnectionCollection of the form. 
' You must cast to the specific data connection type
' (ADOQueryConnection) before you can access the data connection.
Dim myADOConnection As ADOQueryConnection = _
   DirectCast(Me.DataConnections("Employees"), ADOQueryConnection)

' Display the connection information for the data connection.
MessageBox.Show("Connection string: " & myADOConnection.Connection)

関連項目

概念

InfoPath Forms Services で動作する InfoPath フォーム テンプレートを作成する