Freigeben über


Szenarios und Beispiele für externe Automatisierung

Die Member, die von der primären Interop-Assembly für Microsoft Office InfoPath ("Microsoft.Office.Interop.InfoPath.dll") und der XML-Interop-Assembly für InfoPath ("Microsoft.Office.Interop.InfoPath.Xml.dll") verfügbar gemacht werden, unterstützen das Schreiben von verwaltetem Code für die Automatisierung von Microsoft Office InfoPath 2007.

Erstellen von Verweisen auf die primäre Interop-Assembly für Microsoft Office InfoPath und die XML-Interop-Assembly für InfoPath

Zum Schreiben von verwaltetem Code für die Automatisierung von InfoPath müssen Sie Verweise auf die primäre Interop-Assembly für Microsoft Office InfoPath und die XML-Interop-Assembly für InfoPath erstellen. Die primäre Interop-Assembly für Microsoft Office InfoPath verwendet die Member des Microsoft.Office.Interop.InfoPath-Namespace und ermöglicht so die Interoperabilität mit dem COM-Objektmodell, das von IPEDITOR.DLL verfügbar gemacht wird. Die XML-Interop-Assembly für InfoPath verwendet die Member des Microsoft.Office.Interop.InfoPath.Xml-Namespace und ermöglicht so die Interoperabilität mit dem COM-Objektmodell, das von Microsoft XML Core Services (MSXML) 5.0 für Microsoft Office verfügbar gemacht wird.

Wichtig:

Auf den Computern der Benutzer von Anwendungen mit verwaltetem Code für die Automatisierung von InfoPath müssen Office InfoPath 2007, die primäre Interop-Assembly für Microsoft Office InfoPath und die XML-Interop-Assembly für InfoPath installiert sein. Die Option .NET-Programmierunterstützung im Office InfoPath 2007-Setupprogramm ist bei einer Standardinstallation von InfoPath auf Von Arbeitsplatz ausführen festgelegt. Solange .NET Framework 1.1 Redistributable oder .NET Framework 1.1 Software Development Kit (SDK) installiert ist, werden diese Interop-Assemblys standardmäßig ebenfalls installiert. Wenn diese Interop-Assemblys nicht auf dem Computer eines Benutzer verfügbar sind, müssen Sie überprüfen, ob .NET Framework 1.1 installiert ist, und dann in der Systemsteuerung die Option Software ausführen und anschließend die Option .NET-Programmierunterstützung von Office InfoPath 2007 auf Von Arbeitsplatz ausführen festlegen.

Die folgenden Verfahren beschreiben das Festlegen von Verweisen auf die primäre Interop-Assembly für Microsoft Office InfoPath und die XML-Interop-Assembly für InfoPath in einem Visual Studio-Projekt.

Zum Festlegen eines Verweises auf die primäre Interop-Assembly "Microsoft.Office.Interop.InfoPath" legen Sie auf der Registerkarte COM des Dialogfelds Verweis hinzufügen einen Verweis auf die Microsoft InfoPath 2.0-Typbibliothek fest. Obwohl Sie einen Verweis auf der Registerkarte COM festlegen, wird vom InfoPath-Setupprogramm ein Verweis auf die primäre Interop-Assembly "Microsoft.Office.Interop.InfoPath.dll" erstellt, die im globalen Assemblycache (Global Assembly Cache, GAC) installiert ist.

Festlegen eines Verweises auf die primäre Interop-Assembly "Microsoft.Office.Interop.InfoPath"

  1. Öffnen Sie ein Visual Studio-Projekt mit verwaltetem Code.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Verweise, und klicken Sie dann auf Verweis hinzufügen.

  3. Doppelklicken Sie auf der Registerkarte COM auf Microsoft.InfoPath 2.0-Typbibliothek, und klicken Sie dann auf OK.

Navigieren Sie zum Festlegen eines Verweises auf die Interop-Assembly "Microsoft.Office.Interop.InfoPath.Xml" zur Datei "Microsoft.Office.Interop.InfoPath.Xml.dll", die standardmäßig im Ordner "<Laufwerk>:\Programme\Microsoft Office\OFFICE12" installiert wird. Obwohl Sie das Exemplar der Assembly im lokalen Dateisystem angeben, wird vom InfoPath-Setupprogramm ein Verweis auf die Assembly "Microsoft.Office.Interop.InfoPath.Xml.dll" erstellt, die im globalen Assemblycache (GAC) installiert ist.

Festlegen eines Verweises auf die Interop-Assembly "Microsoft.Office.Interop.InfoPath.Xml"

  1. Öffnen oder erstellen Sie ein Visual Studio-Projekt mit verwaltetem Code, z. B. eine Konsolenanwendung oder eine Windows-Anwendung.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Verweise, und klicken Sie dann auf Verweis hinzufügen.

  3. Klicken Sie auf der Registerkarte .NET auf Durchsuchen, navigieren Sie zum Ordner "<Laufwerk>:\Programme\Microsoft Office\OFFICE12", und klicken Sie dann auf "Microsoft.Office.Interop.InfoPath.Xml.dll".

  4. Klicken Sie auf OK.

Automatisieren der Änderung des Werts eines Felds

Angenommen, ein Kunde des Benutzers einer InfoPath-Formularvorlage für einen Umsatzbericht hat seinen Namen vor kurzem von "Company A" in "Company B" geändert. Ein Entwickler wird gebeten, Code zu schreiben, der die Umsatzberichtsformulare, die aus dieser Formularvorlage gespeichert wurden, automatisch aktualisiert, um die Namensänderung zu berücksichtigen. Im folgenden Szenario wird von einem Formular mit einem Textfeld ausgegangen, das an ein Feld mit dem Namen customerName gebunden ist.

Erstellen von Beispielformularvorlage und -formular

  1. Öffnen Sie InfoPath, und erstellen Sie eine leere Formularvorlage.

  2. Fügen Sie ein Textfeld-Steuerelement zum Formular hinzu, und nennen Sie das an das Steuerelement gebundene Feld customerName.

  3. Veröffentlichen Sie die Formularvorlage in einem Ordner mit dem Namen C:\Test, und übernehmen Sie den Standardnamen "Vorlage1".

  4. Öffnen Sie die Formularvorlage, fügen Sie den Namen "Company A" zum Textfeld hinzu, das an das Feld customerName gebunden ist, und speichern Sie das Formular anschließend als "Form1".

Erstellen einer Konsolenanwendung mit verwaltetem Code, die den Namen von 'Company A' in 'Company B' ändert

  1. Öffnen Sie Visual Studio, und erstellen Sie eine neue Visual C#- oder Visual Basic-Konsolenanwendung mit dem Namen UpdateCustomer.

  2. Erstellen Sie wie oben beschrieben Verweise auf die primäre Interop-Assembly für Microsoft Office InfoPath und die XML-Interop-Assembly für InfoPath.

  3. Fügen Sie den folgenden Code zur Datei "Program.cs" oder "Module1.vb" hinzu:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Office.Interop.InfoPath;
    using Microsoft.Office.Interop.InfoPath.Xml;
    
    namespace UpdateCustomer
    {
       class Program
       {
          static void Main(string[] args)
          {
    
             // Create an InfoPath Application object.
             Application myApp = 
                new Microsoft.Office.Interop.InfoPath.Application();
    
             // Get a reference the XDocuments collection 
             // and open the sample form.
             XDocumentsCollection myXDocs = myApp.XDocuments;
             XDocument myXDoc = myXDocs.Open("C:\\Test\\Form1.xml",
                (int) XdDocumentVersionMode.xdFailOnVersionOlder);
    
             // Access the XML DOM for the underlying XML document using
             // the DOM property. Note that you must cast to the 
             // IXMLDOMDocument2 type from the
             // Microsoft.Office.Interop.InfoPath.Xml namespace
             // to access the XML DOM.
             IXMLDOMDocument2 myXMLDoc = myXDoc.DOM as IXMLDOMDocument2;
    
             // Set the MSXML SelectionNamespaces property to the my
             // namespace of the form. IMPORTANT:Replace the namespace 
             // alias with that of your sample form.
             myXMLDoc.setProperty("SelectionNamespaces",
    "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2006-09-06T23:17:34'");
    
             // Select all instances of customerName that contain 
             //'Company A'.
             IXMLDOMNodeList myNames = 
                myXMLDoc.selectNodes(
                "//my:customerName[. = 'Company A']");
    
             // Check to determine if any nodes were returned.
             if (myNames.length < 1)
             Console.WriteLine(
                "No elements containing 'Company A' were found.");
    
             // Loop through the list updating to 'Company B'.
             IXMLDOMNode myName = myNames.nextNode();
    
             while (myName != null)
             {
                myName.text = "Company B";
                myName = myNames.nextNode();
    
             }
    
             // Save the updated form as Form2.xml and close out.
             myXDoc.SaveAs("C:\\Test\\Form2.xml");
             myXDocs.Close(0);
             myApp.Quit(false);
             Console.WriteLine("Finished!");
    
          }
       }
    }
    
    Imports Microsoft.Office.Interop.InfoPath
    Imports Microsoft.Office.Interop.InfoPath.Xml
    Module Module1
       Sub Main()
          ' Create an InfoPath Application object.
          Dim myApp As Application = _
             New Microsoft.Office.Interop.InfoPath.Application()
    
          ' Get a reference the XDocuments collection 
          ' and open the sample form.
          Dim myXDocs As XDocumentsCollection = myApp.XDocuments
          Dim myXDoc As XDocument = myXDocs.Open( _
             "C:\\Test\\Form1.xml", _
             XdDocumentVersionMode.xdFailOnVersionOlder)
    
          ' Access the XML DOM for the underlying XML document using
          ' the DOM property. Note that you must cast to the 
          ' IXMLDOMDocument2 type from the
          ' Microsoft.Office.Interop.InfoPath.Xml namespace
          ' to access the XML DOM.
          Dim myXMLDoc As IXMLDOMDocument2 = _
             DirectCast(myXDoc.DOM, IXMLDOMDocument2)
    
          ' Set the MSXML SelectionNamespaces property to the my
          ' namespace of the form. IMPORTANT:Replace the namespace 
          ' alias with that of your sample form.
          myXMLDoc.setProperty("SelectionNamespaces", _
    "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2006-09-06T23:17:34'")
    
          ' Select all instances of customerName that contain 
          ''Company A'.
          Dim myNames As IXMLDOMNodeList = _
       myXMLDoc.selectNodes("//my:customerName[. = 'Company A']")
    
          ' Check to determine if any nodes were returned.
          If (myNames.length < 1) Then
             Console.WriteLine( _
                "No elements containing 'Company A' were found.")
          Else
             ' Loop through the list updating to 'Company B'.
             Dim myName As IXMLDOMNode = myNames.nextNode()
             While (myName IsNot Nothing)
                myName.text = "Company B"
                myName = myNames.nextNode()
             End While
          End If
    
          ' Save the updated form as Form2.xml and close out.
          myXDoc.SaveAs("C:\\Test\\Form2.xml")
          myXDocs.Close(0)
          myApp.Quit(False)
          Console.WriteLine("Finished!")
       End Sub
    End Module
    
  4. Klicken Sie im Menü Debuggen auf Debuggen starten, um die Konsolenanwendung zu kompilieren und auszuführen.

    Die Anwendung öffnet das unter Form1.xml gespeicherte Formular, und durchläuft alle customerName-Elemente, die den Wert Company A enthalten, und ändert den Wert in Company B. Nach Abschluss der Operation wird im Ordner C:\Test ein neues Exemplar des Formulars mit dem Namen Form2.xml gespeichert.

    Hinweis:

    Öffnen Sie die Formularvorlage in InfoPath, um den Wert des xmlns:my-Namespaceattributs der Formularvorlage zu ermitteln, um die SelectionNamespaces-Eigenschaft festzulegen. Öffnen Sie den Aufgabenbereich Datenquelle, klicken Sie mit der rechten Maustaste auf das Feld customerName, und klicken Sie dann auf Eigenschaften. Der Wert des Namespace wird auf der Registerkarte Details angezeigt. Sie können diesen Wert auch ermitteln, indem Sie die Datei Form1.xml in einem Texteditor öffnen.

Automatisieren des Öffnen eines Formulars und des Ausfüllen von Feldwerten

Im folgenden Beispiel wird das Öffnen eines leeren Formulars und das Ausfüllen der Felder für Vorname, Nachname und Adresse im Formular automatisiert. In diesem Szenario wird davon ausgegangen, dass das Formular drei Textfelder enthält, die an Felder mit den Namen FirstName, LastName und Address gebunden sind.

Erstellen von Beispielformularvorlage und -formular

  1. Öffnen Sie InfoPath, und erstellen Sie ein leeres Formular.

  2. Fügen Sie drei Textfeld-Steuerelemente zum Formular hinzu, und nennen Sie die an die Steuerelement gebundenen Felder "FirstName", "LastName" und "Address". Fügen Sie ggf. beliebige weitere Felder hinzu.

  3. Veröffentlichen Sie die Formularvorlage in einem Ordner mit dem Namen "C:\Temp", und übernehmen Sie den Standardnamen "Vorlage1".

  4. Öffnen Sie die Formularvorlage, und speichern Sie in "C:\Temp" ein leeres Formular unter "Form1".

Erstellen einer Konsolenanwendung mit verwaltetem Code, um das Formular zu öffnen und die Felder auszufüllen

  1. Öffnen Sie Visual Studio, und erstellen Sie eine neue Visual C#- oder Visual Basic-Konsolenanwendung mit dem Namen "OpenForm".

  2. Erstellen Sie wie oben beschrieben Verweise auf die primäre Interop-Assembly für Microsoft Office InfoPath und die XML-Interop-Assembly für InfoPath.

  3. Fügen Sie den folgenden Code zur Datei "Program.cs" oder "Module1.vb" hinzu:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Office.Interop.InfoPath;
    using Microsoft.Office.Interop.InfoPath.Xml;
    
    namespace OpenForm
    {
       class Program
       {
          static void Main(string[] args)
          {
    
             // Create an InfoPath Application object.
             Application myApp=
                new Microsoft.Office.Interop.InfoPath.Application();
    
             // Create an InfoPath XDocument variable and open 
             // the blank form.
             XDocument myXDoc = myApp.XDocuments.Open(
                "c:\\temp\\Form1.xml",
                (int) XdDocumentVersionMode.xdFailOnVersionOlder);
    
             // Create an IXMLDOMDocument2 variable and access 
             // the XML DOM from the underlying XML document
             // using the DOM property of the XDocument object. 
             // Note that you must cast to IXMLDOMDocument2 to do so.
             IXMLDOMDocument2 doc= myXDoc.DOM as IXMLDOMDocument2;
    
             // Set the MSXML SelectionNamespaces property to the my
             // namespace of the form. IMPORTANT:Replace the namespace
             // with that of your sample form.
             doc.setProperty("SelectionNamespaces","xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2006-09-06T23:17:34'");
    
             // Pre-populate the fields with specified values.
             doc.selectSingleNode("//my:FirstName").text="My Name";
             doc.selectSingleNode("//my:LastName").text="My LastName";
             doc.selectSingleNode("//my:Address").text="My Address";
    
             // Save the form, leaving InfoPath open.
             myXDoc.Save();
    
          }
       }
    }
    
    Imports Microsoft.Office.Interop.InfoPath
    Imports Microsoft.Office.Interop.InfoPath.Xml
    
    Module Module1
    
       Sub Main()
          ' Create an InfoPath Application object.
          Dim myApp As Application = _
             New Microsoft.Office.Interop.InfoPath.Application
    
          ' Create an InfoPath XDocument variable and open 
          ' the blank form.
          Dim myXDoc As XDocument = myApp.XDocuments.Open( _
             "c:\\temp\\Form1.xml", _
             XdDocumentVersionMode.xdFailOnVersionOlder)
    
          ' Create an IXMLDOMDocument2 variable and access 
          ' the XML DOM from the underlying XML document
          ' using the DOM property of the XDocument object.
          Dim doc As IXMLDOMDocument2 = myXDoc.DOM
    
          ' Set the MSXML SelectionNamespaces property to the my
          ' namespace of the form. IMPORTANT:Replace the namespace
          ' with that of your sample form.
          doc.setProperty("SelectionNamespaces", "xmlns:my='https://schemas.microsoft.com/office/infopath/2003/myXSD/2006-09-06T23:17:34'")
    
          ' Pre-populate the fields with specified values.
          doc.selectSingleNode("//my:FirstName").text = "My Name"
          doc.selectSingleNode("//my:LastName").text = "My LastName"
          doc.selectSingleNode("//my:Address").text = "My Address"
    
          ' Save the form, leaving InfoPath open.
          myXDoc.Save()
    
       End Sub
    
    End Module
    
  4. Klicken Sie im Menü Debuggen auf Debuggen starten, um die Konsolenanwendung zu kompilieren und auszuführen.

    Die Anwendung öffnet das unter Form1.xml gespeicherte Formular und füllt die Felder "FirstName", "LastName" und "Address" mit den im Code angegebenen Werten. Anschließend wird das Formular gespeichert, ohne InfoPath zu beenden.

    Hinweis:

    Öffnen Sie die Formularvorlage in InfoPath, um den Wert des xmlns:my-Namespaceattributs der Formularvorlage zu ermitteln, um die SelectionNamespaces-Eigenschaft festzulegen. Öffnen Sie den Aufgabenbereich Datenquelle, klicken Sie mit der rechten Maustaste auf das Feld FirstName, und klicken Sie dann auf Eigenschaften. Der Wert des Namespace wird auf der Registerkarte Details angezeigt. Sie können diesen Wert auch ermitteln, indem Sie die Datei Form1.xml in einem Texteditor öffnen.

Siehe auch

Konzepte

Informationen zur primären Interop-Assembly für Microsoft Office InfoPath
Informationen zur XML-Interop-Assembly für InfoPath