共用方式為


使用 InfoPath 2003 物件模型存取外部數據源

在處理使用 InfoPath 2003 相容物件模型的 InfoPath 表單範本時,您可以撰寫程式碼來存取表單的次要資料來源,並操作這些資料來源中所包含的資料。

每一個次要資料來源都是由使用 DataSourceObject 介面執行個體化的物件所代表,並且會與儲存的資料對應,這些資料是從某個外部資料來源取得 (如資料庫或 Web 服務查詢)。 這些資料來源稱為次要資料來源,這是因為當使用者儲存 InfoPath 表單時,使用者只會在主要資料來源中儲存資料,而不會在次要資料來源中儲存資料。 資料來源的連線是由使用其中一個「資料中繼層」介面執行個體化的物件所代表,例如,代表連至 XML Web 服務之資料連線的 WebServiceAdapterObject 介面。

執行個體化的 DataSourceObject 物件代表由資料連線 (連至資料庫或 Web 服務查詢) 傳回的 XML 資料儲存區,而資料中繼層則代表資料連接本身。

InfoPath 物件模型支援透過使用 DataSourceObject 介面搭配 DataObjectsCollection 介面來存取表單的次要資料來源。

InfoPath 物件模型另外也提供一組資料中繼層物件,其中包含有關表單所用的資料連線資訊。

有兩種數據配接器:查詢配接器和提交配接器。 查詢配接器可用來取得接著儲存在次要數據源中的數據,而 Submit 配接器則是用來將數據提交至資料庫或 Web 服務,例如。 提交的數據會從主要或次要數據源複製。

DataObjectsCollection 介面的概觀

DataObjectsCollection 介面提供下列屬性和方法,讓表單開發人員可用來管理表單所包含的 DataSourceObject 執行個體。

名稱 描述
Count 屬性
會傳回集合中所包含的 DataSourceObject 執行個體計數。
GetEnumerator 方法
會傳回可用於逐一查看集合的 IEnumerator
Item 屬性
會傳回指定之 DataSourceObject 執行個體的參照。

DataSourceObject 介面的概觀

DataSourceObject 介面提供下列方法及屬性,讓表單開發人員可用來與 InfoPath 次要資料來源互動。

名稱 描述
查詢 方法
在資料中繼層上執行查詢,並以 XML 格式將傳回的資料插入與 DataSourceObject 關聯的 XML 文件物件模型 (DOM)。
DOM 屬性
會傳回 XML DOM 的參照,用以儲存及管理作使用 DataSourceObject 的資料。
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 屬性來存取。 例如,如果您建立名為「員工」的次要資料來源,以利從 Microsoft Access「北風貿易」資料庫的「員工」資料表擷取資料,可以使用 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 屬性來存取。 例如,如果您建立名為「員工」的次要資料來源,以利從 Microsoft Access「北風貿易」資料庫的「員工」資料表擷取資料,可以使用 DataAdapterObjects 集合,以設定代表連線至資料庫的 DataAdapterObject 參照。

在下列程式碼範例中,將次要資料來源的名稱傳遞給 DataAdaptersCollection 的上階屬性,在此狀況下,將會傳回代表連線至 Microsoft Access「北風貿易」資料庫的 ADOAdapterObject 執行個體參照。 為了讓此能夠正常地運作,必須明確地將傳回的物件指派為 ADOAdapterObjectADOAdapterObject 介面的 Connection 屬性用以在訊息方塊中顯示 ADO 連接字串。

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