InfoPath 2003 互換オブジェクト モデルを使用する InfoPath フォーム テンプレートの作業を行う際に、フォームのセカンダリ データ ソースにアクセスし、格納されているデータを操作するためのコードを書くことができます。
各セカンダリ データ ソースは、DataSourceObject インターフェイスを使用してインスタンス化されたオブジェクトによって表現され、データベースや Web サービス クエリなどの外部データ ソースから取得された保管データに応答します。これらのデータ ソースがセカンダリと呼ばれる理由は、ユーザーが InfoPath フォームを保存する際、メインのデータ ソースのデータのみが保存され、これらのデータ ソースのデータは保存されないためです。データ ソースへの接続は "データ アダプタ" インターフェイスを使用してインスタンス化されたオブジェクトによって表されます。このようなインターフェイスには、XML Web サービスへのデータ接続を表す WebServiceAdapterObject などがあります。
インスタンス化された DataSourceObject オブジェクトは、データベースまたは Web サービス クエリへのデータ接続によって返される XML データの格納場所を表し、データ アダプタはデータ接続自体を表します。
InfoPath オブジェクト モデルは、DataObjectsCollection インターフェイスに関連した DataSourceObject インターフェイスの使用によるフォームのセカンダリ データ ソースへのアクセスをサポートしています。
InfoPath オブジェクト モデルは、フォームによって使用されるデータ接続に関する情報を格納したデータ アダプタ オブジェクトのセットも提供します。
データ アダプタには、クエリ アダプタと送信アダプタの 2 種類があります。クエリ アダプタは、セカンダリ データ ソースに保管されるデータの取得に使用され、送信アダプタは、データベースや Web サービスなどへのデータの送信に使用されます。送信されるデータは、メインまたはセカンダリのデータ ソースからコピーされます。
DataObjectsCollection インターフェイスの概要
DataObjectsCollection インターフェイスは以下のプロパティとメソッドを提供します。フォームの開発者は、これらを使用して、フォームが格納する DataSourceObject インスタンスを管理することができます。
名前 | 説明 |
---|---|
Count プロパティ |
コレクションに含まれる DataSourceObject インスタンスの数を返します。 |
GetEnumerator メソッド |
コレクションの反復処理に使用できる IEnumerator を返します。 |
Item プロパティ |
指定した DataSourceObject インスタンスへの参照を返します。 |
DataSourceObject インターフェイスの概要
DataSourceObject インターフェイスは、以下のメソッドとプロパティを提供します。フォームの開発者は、これらを使用して、InfoPath セカンダリ データ ソースを操作することができます。
名前 | 説明 |
---|---|
Query メソッド |
データ アダプタ上でクエリを実行し、返されたデータを、DataSourceObject に関連付けられた XML Document Object Model (DOM) に XML として挿入します。 |
DOM プロパティ |
DataSourceObject を使用してデータの格納と操作に使用される XML DOM への参照を返します。 |
Name プロパティ |
DataSourceObject の名前を示す文字列値を返します。 |
QueryAdapter プロパティ |
関連付けられたデータ アダプタ オブジェクトへの参照を返します。 |
データ アダプタ インターフェイスの概要
データ アダプタにアクセスするためのインターフェイスは、さまざまなプロパティとメソッドを提供し、これらは外部データ ソースへの接続を通じてデータを取得および送信します。DataSourceObject オブジェクトに関連付けられるデータ アダプタは、外部データ接続の種類に依存します。InfoPath は、データ アダプタにアクセスするために以下のインターフェイスを実装します。
名前 | 説明 |
---|---|
ADOAdapterObject インターフェイス |
ADO/OLEDB データ ソースに接続します。Microsoft Access および Microsoft SQL Server™ に限定されます。 |
SharepointListAdapterObject インターフェイス |
SharePoint リストまたはドキュメント ライブラリに接続します。 |
WebServiceAdapterObject インターフェイス |
XML Web サービスに接続します。 |
XMLFileAdapterObject オブジェクト |
XML ファイルに接続します。 |
DataSourceObjects インターフェイスと DataSourceObject インターフェイスの使用
DataSourceObjects コレクションは、XDocument インターフェイスの DataObjects プロパティを通じてアクセスされます。たとえば、Employees という名のセカンダリ データ ソースを作成し、このデータ ソースが Northwind Traders Microsoft Access データベースの Employees テーブルからデータを取得する場合、DataSourceObjects コレクションを使用して、取得されたデータを表す DataObject オブジェクトへの参照を設定することができます。
以下のコード例では、セカンダリ データ ソースの名前は、DataObjectsCollection インターフェイスのアクセサ プロパティに渡され、その後 DataSourceObject オブジェクトへの参照を返します。セカンダリ データ ソースからのデータは、DataSourceObject インターフェイスの DOM プロパティを使用してメッセージ ボックス内に表示され、XML DOM の xml プロパティにアクセスできます。
public void CTRL1_5_OnClick(DocActionEvent e)
{
// Instantiate a variable to access the specified data object
// from the DataObjectsCollection of the form.
// You must explicitly cast to the DataSourceObject type
// before you can access the data object.
DataSourceObject myDataObject =
thisXDocument.DataObjects["Employees"] as DataSourceObject;
// Display the data from the secondary data source using the
// XML DOM.
thisXDocument.UI.Alert("Data Adapter: " + myDataObject.DOM.xml);
}
Public Sub CTRL1_5_OnClick(ByVal e As DocActionEvent)
' Instantiate a variable to access the specified data object
' from the DataObjectsCollection of the form.
Dim myDataObject As DataSourceObject = _
thisXDocument.DataObjects("Employees")
' Display the data from the secondary data source using the
' XML DOM.
thisXDocument.UI.Alert("Data Adapter: " + myDataObject.DOM.xml)
End Sub
セカンダリ データ ソースに格納されているデータを操作するには、DataSourceObject インターフェイスの DOM プロパティを使用して、データを格納している XML DOM への参照を返します。XML DOM への参照がある場合、そのあらゆるプロパティまたはメソッドを使用して、そこに格納されているデータを操作できます。
DataAdaptersCollection インターフェイスと DataAdapterObject インターフェイスの使用
DataAdaptersCollection インターフェイスは、XDocument インターフェイスの DataAdapters プロパティを通じてアクセスされます。たとえば、Employees という名のセカンダリ データ ソースを作成し、このデータ ソースが Northwind Traders Microsoft Access データベースの Employees テーブルからデータを取得する場合、DataAdapterObjects コレクションを使用して、データベースへの接続を表す DataAdapterObject への参照を設定することができます。
以下のコード例では、セカンダリ データ ソースの名前は、DataAdaptersCollection のアクセサ プロパティに渡され、この場合は、その後、Northwind Microsoft Access データベースへの接続を表す ADOAdapterObject のインスタンスへの参照を返します。これを正常に動作させるには、ADOAdapterObject として返されるオブジェクトを明示的にキャストする必要があります。メッセージ ボックス内での ADO 接続文字列の表示には ADOAdapterObject インターフェイスの Connection プロパティが使用されます。
public void CTRL1_5_OnClick(DocActionEvent e)
{
// Instantiate a variable to access the specified data object
// from the DataAdaptersCollection of the form.
// You must explicitly cast to the specific adapter type
// (ADOAdapterObject) before you can access the data adapter.
ADOAdapterObject myADOAdapter =
thisXDocument.DataAdapters["Employees"] as ADOAdapterObject;
// Display the connection information for the data adapter.
thisXDocument.UI.Alert("Data Adapter: " + myADOAdapter.Connection);
}
Public Sub CTRL1_5_OnClick(ByVal e As DocActionEvent)
' Instantiate a variable to access the specified data object.
' You must explicitly cast to the specific adapter type
' (ADOAdapterObject) before you can access the data adapter.
Dim myADOAdapter As ADOAdapterObject = _
thisXDocument.DataAdapters("Employees")
' Display the connection information for the data adapter.
thisXDocument.UI.Alert("Data Adapter: " + myADOAdapter.Connection)
End Sub