Freigeben über


Vorgehensweise: Zugreifen auf externe Datenquellen mit dem InfoPath 2003-Objektmodell

Beim Arbeiten mit einer InfoPath-Formularvorlage, die das InfoPath 2003-kompatible Objektmodell verwendet, können Sie Code schreiben, um auf die sekundären Datenquellen des Formulars zuzugreifen und die darin enthaltenen Daten zu bearbeiten.

Jede sekundäre Datenquelle wird durch ein mithilfe der DataSourceObject-Schnittstelle instanziiertes Objekt dargestellt und entspricht gespeicherten Daten, die aus einer externen Datenquelle stammen, wie z. B. einer Datenbank oder einer Webdienstabfrage. Diese Datenquellen werden als sekundär bezeichnet, da der Benutzer beim Speichern eines InfoPath-Formulars die Daten nur in der Hauptdatenquelle und nicht in den sekundären Datenquellen speichert. Die Verbindung mit einer Datenquelle wird durch ein mithilfe eines der Datenadapterschnittstellen instanziiertes Objekt dargestellt, wie z. B. die WebServiceAdapterObject-Schnittstelle, die eine Datenverbindung mit einem XML-Webdienst darstellt.

Das instanziierte DataSourceObject-Objekt stellt die Speicherung der von einer Datenverbindung zurückgegebenen XML-Daten dar (an eine Datenbank oder eine Webdienstabfrage), während der Datenadapter für die eigentliche Datenverbindung steht.

Das InfoPath-Objektmodell unterstützt den Zugriff auf die sekundären Datenquellen eines Formulars mithilfe der DataSourceObject-Schnittstelle in Kombination mit der DataObjectsCollection-Schnittstelle.

Das InfoPath-Objektmodell stellt auch verschiedene Datenadapterobjekte mit Informationen über die vom Formular verwendeten Datenverbindungen bereit.

Es gibt zwei Typen von Datenadaptern: Abfrageadapter und Absendeadapter. Abfrageadapter werden zum Abrufen der in einer sekundären Datenquelle gespeicherten Daten verwendet, während Absendeadapter zum Senden von Daten z. B. an eine Datenbank oder einen Webdienst verwendet werden. Die gesendeten Daten werden aus den Hauptdatenquellen oder den sekundären Datenquellen kopiert.

Übersicht über die DataObjectsCollection-Schnittstelle

Die DataObjectsCollection-Schnittstelle stellt die folgenden Eigenschaften und Methoden bereit, mit deren Hilfe Formularentwickler die im Formular enthaltenen DataSourceObject-Instanzen verwalten können.

Name

Beschreibung

Count-Eigenschaft

Gibt die Anzahl der DataSourceObject-Instanzen zurück, die in der Auflistung enthalten sind.

GetEnumerator-Methode

Gibt ein IEnumerator-Objekt zurück, das für die Iteration durch die Auflistung verwendet werden kann.

Item-Eigenschaft

Gibt einen Verweis auf die angegebene DataSourceObject-Instanz zurück.

Übersicht über die DataSourceObject-Schnittstelle

Die DataSourceObject-Schnittstelle stellt die folgenden Methoden und Eigenschaften bereit, die Formularentwickler für die Interaktion mit einer sekundären InfoPath-Datenquelle verwenden können.

Name

Beschreibung

Query-Methode

Führt die Abfrage des Datenadapters aus und fügt die zurückgegebenen Daten als XML in das XML-DOM (Document Object Model) ein, das der DataSourceObject-Schnittstelle zugeordnet ist.

DOM-Eigenschaft

Gibt einen Verweis auf das zum Speichern und Bearbeiten von Daten mithilfe der DataSourceObject-Schnittstelle verwendete XML-DOM zurück.

Name-Eigenschaft

Gibt einen Zeichenfolgenwert zurück, der den Namen der DataSourceObject-Schnittstelle angibt.

QueryAdapter-Eigenschaft

Gibt einen Verweis auf das zugeordnete Datenadapterobjekt zurück.

Übersicht über die Datenadapterschnittstellen

Die Schnittstellen für den Zugriff auf Datenadapter stellen unterschiedliche Eigenschaften und Methoden bereit, mit denen Daten über Verbindungen von externen Datenquellen abgerufen und an diese gesendet werden; der Datenadapter, der einem DataSourceObject-Objekt zugeordnet ist, hängt vom Typ der externen Datenverbindung ab. InfoPath implementiert die folgenden Schnittstellen für den Zugriff auf Datenadapter.

Name

Beschreibung

ADOAdapterObject-Schnittstelle

Stellt eine Verbindung zu ADO/OLE DB-Datenquellen her; beschränkt auf Microsoft Access und Microsoft SQL Server™.

SharepointListAdapterObject-Schnittstelle

Stellt eine Verbindung mit einer SharePoint-Liste oder einer Dokumentbibliothek her.

WebServiceAdapterObject-Schnittstelle

Stellt eine Verbindung zu XML-Webdiensten her.

XMLFileAdapterObject-Objekt

Stellt eine Verbindung zu einer XML-Datei her.

Verwenden der Schnittstellen "DataSourceObjects" und "DataSourceObject"

Der Zugriff auf die DataSourceObjects-Auflistung erfolgt über die DataObjects-Eigenschaft der XDocument-Schnittstelle. Wenn Sie z. B. eine sekundäre Datenquelle namens "Personal" erstellen, die Daten aus der Tabelle "Personal" in der Microsoft Access-Datenbank "Nordwind" abruft, können Sie mithilfe der DataSourceObjects-Auflistung einen Verweis auf das DataObject-Objekt festlegen, das die abgefragten Daten darstellt.

Im folgenden Codebeispiel wird der Name der sekundären Datenquelle an die Accessoreigenschaft der DataObjectsCollection-Schnittstelle übergeben, die einen Verweis auf das DataSourceObject-Objekt zurückgibt. Die Daten aus der sekundären Datenquelle werden mithilfe der DOM-Eigenschaft der DataSourceObject-Schnittstelle in einem Nachrichtenfeld angezeigt, um auf die xml-Eigenschaft des XML-DOM zuzugreifen.

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

Zur Bearbeitung der in einer sekundären Datenquelle enthaltenen Daten verwenden Sie die DOM-Eigenschaft der DataSourceObject-Schnittstelle, um einen Verweis auf das XML-DOM zurückzugeben, das die Daten enthält. Wenn der Verweis auf das XML-DOM vorliegt, können Sie beliebige seiner Eigenschaften und Methoden verwenden, um die enthaltenen Daten zu bearbeiten.

Verwenden der Schnittstellen "DataAdaptersCollection" und "DataAdapterObject"

Der Zugriff auf die DataAdaptersCollection-Schnittstelle erfolgt über die DataAdapters-Eigenschaft der XDocument-Schnittstelle. Wenn Sie beispielsweise eine sekundäre Datenquelle namens "Personal" erstellen, die Daten aus der Tabelle "Personal" in der Microsoft Access-Datenbank "Nordwind" abruft, können Sie mithilfe der DataAdapterObjects-Auflistung einen Verweis auf das DataAdapterObject-Objekt festlegen, das die Verbindung zur Datenbank darstellt.

Im folgenden Codebeispiel wird der Name der sekundären Datenquelle an die Accessoreigenschaft von DataAdaptersCollection übergeben, die in diesem Fall einen Verweis auf eine Instanz der ADOAdapterObject-Schnittstelle zurückgibt, die die Verbindung mit der Microsoft Access-Datenbank "Nordwind" darstellt. Dies funktioniert nur einwandfrei, wenn Sie das zurückgegebene Objekt explizit zu einer ADOAdapterObject-Schnittstelle umwandeln. Die Connection-Eigenschaft der ADOAdapterObject-Schnittstelle wird zum Anzeigen der ADO-Verbindungszeichenfolge in einem Meldungsfeld verwendet.

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