Condividi tramite


Scenari ed esempi di automazione esterna

I membri esposti dall'assembly di interoperabilità primario di Microsoft Office InfoPath (Microsoft.Office.Interop.InfoPath.dll) e dall'assembly di interoperabilità XML di InfoPath (Microsoft.Office.Interop.InfoPath.Xml.dll) supportano la scrittura di codice gestito per l'automazione di Microsoft Office InfoPath 2007.

Definizione dei riferimenti all'assembly di interoperabilità primario di Microsoft Office InfoPath e all'assembly di interoperabilità XML di InfoPath

Per scrivere codice gestito per l'automazione di InfoPath, è necessario definire i riferimenti all'assembly di interoperabilità primario di Microsoft Office InfoPath e all'assembly di interoperabilità XML di InfoPath. L'assembly di interoperabilità primario di Microsoft Office InfoPath garantisce il supporto per l'interoperabilità con il modello a oggetti COM esposto da IPEDITOR.DLL mediante l'utilizzo dei membri dello spazio dei nomi Microsoft.Office.Interop.InfoPath. L'assembly di interoperabilità XML di InfoPath garantisce il supporto per l'interoperabilità con il modello a oggetti COM esposto da Microsoft XML Core Services (MSXML) 5.0 per Microsoft Office mediante l'utilizzo dei membri dello spazio dei nomi Microsoft.Office.Interop.InfoPath.Xml.

Importante

Nei computer degli utenti che utilizzano applicazioni con codice gestito che consentono di automatizzare InfoPath devono essere installati Office InfoPath 2007, l'assembly di interoperabilità primario di Office InfoPath e l'assembly di interoperabilità XML di InfoPath. In un'installazione tipica di InfoPath, l'opzione Supporto programmabilità .NET del programma di installazione di Office InfoPath 2007 è impostata su Esecuzione dal computer locale. Pertanto, purché sia installato .NET Framework 1.1 Redistributable o .NET Framework 1.1 Software Development Kit (SDK), per impostazione predefinita saranno installati anche tali assembly di interoperabilità. Se questi assembly di interoperabilità non sono disponibili nel computer locale, è necessario verificare che .NET Framework 1.1 sia installato e quindi eseguire Installazione applicazioni dal Pannello di controllo e impostare l'opzione Supporto programmabilità .NET di Office InfoPath 2007 su Esecuzione dal computer locale.

Le procedure seguenti consentono di impostare i riferimenti all'assembly di interoperabilità primario di Microsoft Office InfoPath e all'assembly di interoperabilità XML di InfoPath in un progetto di Visual Studio.

Per impostare un riferimento all'assembly di interoperabilità primario Microsoft.Office.Interop.InfoPath, impostare un riferimento alla libreria dei tipi di Microsoft InfoPath 2.0 nella scheda COM della finestra di dialogo Aggiungi riferimento. Sebbene si imposti un riferimento dalla scheda COM, viene definito un riferimento all'assembly di interoperabilità primario Microsoft.Office.Interop.InfoPath.dll installato nella Cache di assembly globale (CAG) dal programma di installazione di InfoPath.

Impostare un riferimento all'assembly di interoperabilità primario Microsoft.Office.Interop.InfoPath

  1. Aprire un progetto con codice gestito di Visual Studio.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse su Riferimenti, quindi scegliere Aggiungi riferimento.

  3. Nella scheda COM fare doppio clic su Libreria dei tipi di Microsoft InfoPath 2.0, quindi scegliere OK.

Per impostare un riferimento all'assembly di interoperabilità Microsoft.Office.Interop.InfoPath.Xml, accedere al file Microsoft.Office.Interop.InfoPath.Xml.dll installato per impostazione predefinita nella cartella <unità>:\Programmi\Microsoft Office\OFFICE12. Sebbene sia stata specificata la copia dell'assembly nel file system locale, tale procedura definisce un riferimento all'assembly Microsoft.Office.Interop.InfoPath.Xml.dll installato nella Cache di assembly globale (CAG) dal programma di installazione di InfoPath.

Impostare un riferimento all'assembly di interoperabilità Microsoft.Office.Interop.InfoPath.Xml

  1. Aprire o creare un progetto con codice gestito di Visual Studio, ad esempio un'Applicazione console o un'Applicazione Windows.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse su Riferimenti, quindi scegliere Aggiungi riferimento.

  3. Nella scheda .NET fare clic su Sfoglia, accedere alla cartella <unità>:\Programmi\Microsoft Office\OFFICE12, quindi scegliere Microsoft.Office.Interop.InfoPath.Xml.dll.

  4. Fare clic su OK.

Automatizzare la modifica del valore di un campo

Si supponga che, di recente, il nome di uno dei clienti dell'utente di un modello di modulo di rapporto sulle vendite di InfoPath sia stato modificato da "Company A" in "Company B". Allo sviluppatore viene richiesto di scrivere codice che eseguirà l'aggiornamento automatico dei moduli dei rapporti sulle vendite salvati a partire da tale modello di modulo per riflettere la modifica. Lo scenario seguente presuppone un modulo contenente una casella di testo associata a un campo denominato customerName.

Creare il modello di modulo e il modulo di esempio

  1. Aprire InfoPath e creare un modello di modulo vuoto.

  2. Aggiungere un controllo Casella di testo al modulo e assegnare al campo associato al controllo il nome customerName.

  3. Pubblicare il modello di modulo in una cartella denominata C:\Test e accettare il nome Template1.

  4. Aprire il modello di modulo, aggiungere il nome "Company A" alla casella di testo associata al campo customerName, quindi salvare il modulo con il nome "Form1".

Creare un'applicazione console con codice gestito per modificare il nome da "Company A" in "Company B"

  1. Aprire Visual Studio e creare una nuova applicazione console di Visual C# o Visual Basic denominata UpdateCustomer.

  2. Definire i riferimenti all'assembly di interoperabilità primario di Microsoft Office InfoPath e all'assembly di interoperabilità XML di InfoPath attenendosi alla procedura descritta in precedenza.

  3. Aggiungere il codice seguente al file Program.cs o Module1.vb:

    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. Scegliere Avvia debug dal menu Debug per compilare ed eseguire l'applicazione console.

    Verrà aperto il modulo salvato con il nome Form1.xml e verrà eseguito un ciclo in tutti gli elementi customerName contenenti il valore Company A e tale valore sarà modificato in Company B. Al termine dell'operazione, verrà salvata una nuova copia del modulo con il nome Form2.xml nella cartella C:\Test.

    Nota

    Per determinare il valore dell'attributo dello spazio dei nomi xmlns:my del modello di modulo per l'impostazione della proprietà SelectionNamespaces, aprire il modello di modulo in InfoPath, aprire il riquadro attività Origine dati, fare clic con il pulsante destro del mouse sul campo customerName, quindi scegliere Proprietà. Il valore dello spazio dei nomi viene visualizzato nella scheda Dettagli. È inoltre possibile determinare tale valore aprendo il file Form1.xml in un editor di testo.

Automatizzare l'apertura di un modulo e il popolamento dei valori dei campi

Nell'esempio seguente viene illustrata l'automazione dell'apertura di un modulo vuoto e del popolamento dei campi nome, cognome e indirizzo del modulo. In questo scenario si presuppone un modulo contenente tre caselle di testo associate a campi denominati FirstName, LastName e Address.

Creare il modello di modulo e il modulo di esempio

  1. Aprire InfoPath e creare un modulo vuoto.

  2. Aggiungere al modulo tre controlli casella di testo e assegnare ai campi associati ai controlli i nomi: FirstName, LastName e Address. Aggiungere eventuali altri campi necessari.

  3. Pubblicare il modello di modulo in una cartella denominata C:\Temp e accettare il nome Template1.

  4. Aprire il modello di modulo e salvare un modello vuoto con il nome "Form1" in C:\Temp.

Creare un'applicazione console con codice gestito per aprire il modulo e popolare i campi

  1. Aprire Visual Studio e creare una nuova applicazione console Visual C# o Visual Basic denominata OpenForm.

  2. Definire i riferimenti all'assembly di interoperabilità primario di Microsoft Office InfoPath e all'assembly di interoperabilità XML di InfoPath attenendosi alla procedura descritta in precedenza.

  3. Aggiungere il codice seguente al file Program.cs o Module1.vb:

    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. Scegliere Avvia debug dal menu Debug per compilare ed eseguire l'applicazione console.

    Verrà aperto il modulo salvato con il nome Form1.xml e i campi FirstName, LastName e Address verranno popolati con i valori specificati nel codice. Il modulo verrà quindi salvato e InfoPath rimarrà aperto.

    Nota

    Per determinare il valore dell'attributo dello spazio dei nomi xmlns:my del modello di modulo per l'impostazione della proprietà SelectionNamespaces, aprire il modello di modulo in InfoPath, aprire il riquadro attività Origine dati, fare clic con il pulsante destro del mouse sul campo FirstName, quindi scegliere Proprietà. Il valore dello spazio dei nomi viene visualizzato nella scheda Dettagli. È inoltre possibile determinare tale valore aprendo il file Form1.xml in un editor di testo.

Vedere anche

Concetti

Informazioni sull'assembly di interoperabilità primario di Microsoft Office InfoPath
Informazioni sull'assembly di interoperabilità XML di InfoPath