Compartir a través de


Ejemplos y escenarios de la automatización externa

Los miembros expuestos por el ensamblado de interoperabilidad primario de Microsoft Office InfoPath (Microsoft.Office.Interop.InfoPath.dll) y por el ensamblado de interoperabilidad XML de InfoPath (Microsoft.Office.Interop.InfoPath.Xml.dll) admiten la escritura de código administrado para la automatización de Microsoft Office InfoPath 2007.

Establecimiento de las referencias tanto al ensamblado de interoperabilidad primario de Microsoft Office InfoPath como al ensamblado de interoperabilidad XML de InfoPath

Para escribir códigos administrados para la automatización de InfoPath, debe establecer referencias tanto al ensamblado de interoperabilidad primario de Microsoft Office InfoPath como al de interoperabiliad XML de InfoPath. El primero ofrece compatibilidad para la interoperabilidad con el modelo de objetos COM expuesto por IPEDITOR.DLL mediante el uso del espacio de nombres Microsoft.Office.Interop.InfoPath. Por otra parte, el segundo ofrece compatibilidad para la interoperabilidad con el modelo de objetos COM expuesto por Microsoft XML Core Services (MSXML) 5.0 para Microsoft Office mediante el uso de miembros del espacio de nombres Microsoft.Office.Interop.InfoPath.Xml.

Importante:

Los usuarios de las aplicaciones de código administrado que automatizan InfoPath deben tener instalados en los equipos Office InfoPath 2007, el ensamblado de interoperabilidad primario de Microsoft Office InfoPath y el ensamblado de interoperabilidad XML de InfoPath. La opción de Compatilidad con programación .NET del programa de instalación de Office InfoPath 2007 estará establecida en Ejecutar desde mi PC para una instalación típica de InfoPath. Como resultado, si está instalado el redistribuible .NET Framework 1.1 el kit de desarrollo de software (SDK) de .NET Framework, dichos ensamblados de interoperabilidad también estarán instalados de forma predeterminada. En caso de que dichos ensamblados no estén disponibles en el equipo del usuario, debe confirmar que .NET Framework 1.1 está instalado, a continuación, ejecutarAgregar o quitar programas desde el Panel de control y, por último, establecer la opción Compatibilidad con programación de .NET de Office InfoPath 2007 para Ejecutar desde mi PC.

El procedimiento siguiente describe la forma de establecer referencias tanto al ensamblado de interoperabilidad primario de Microsoft Office InfoPath como al ensamblado de interoperabilidad XML de InfoPath en un proyecto de Visual Studio.

Para establecer una referencia al ensamblado de interoperabilidad primario, primero establezca una referencia a Biblioteca de tipos de Microsoft InfoPath 2.0 en la ficha COM del cuadro de diálogo Agregar referencia. Aunque establezca una referencia desde la ficha COM, se establece una referencia al ensamblado de interoperabilidad primario Microsoft.Office.Interop.InfoPath.dll, que se instala en la caché de ensamblados global (GAC) mediante el programa de instalación de InfoPath.

Establecer una referencia al ensamblado de interoperabilidad primario Microsoft.Office.Interop.InfoPath

  1. Abra un proyecto con código administrado de Visual Studio.

  2. En el Explorador de soluciones, haga clic con el botón secundario en Referencias y, a continuación, en Agregar referencia.

  3. En la ficha COM, haga doble clic con el botón secundario en Biblioteca de tipos de Microsoft InfoPath 2.0 y, a continuación, haga clic en Aceptar.

Para establecer una referencia al ensamblado de interoperabilidad de Microsoft.Office.Interop.InfoPath.Xml, examine el archivo Microsoft.Office.Interop.InfoPath.Xml.dll que está instalado de forma predeterminada en la carpeta <unidad>:\Archivos de programa\Microsoft Office\OFFICE12. Aunque especifique una copia del ensamblado en el sistema de archivos local, este procedimiento establece una referencia al ensamblado Microsoft.Office.Interop.InfoPath.Xml.dll que está instalado en la caché de ensamblados global (GAC) mediante el programa de instalación de InfoPath.

Establecer una referencia al ensamblado de interoperabilidad Microsoft.Office.Interop.InfoPath.XML

  1. Abra o cree un proyecto con código administrado de Visual Studio, como una Aplicación de consola o una Aplicación para Windows.

  2. En el Explorador de soluciones, haga clic con el botón secundario en Referenciasy, a continuación, en Agregar referencia.

  3. En la ficha .NET , haga clic en Examinar, explore la carpeta <unidad>:\Archivos de programa\Microsoft Office\OFFICE12 y, a continuación, haga clic en Microsoft.Office.Interop.InfoPath.Xml.dll.

  4. Haga clic en Aceptar.

Cambio automatizado del valor de un campo

Suponga que uno de los clientes del usuario de una plantilla de formulario de un informe de ventas de InfoPath ha cambiado recientemente el nombre de "Compañía A" a "Compañía B." Se le solicita a un programador que escriba el código que actualice de forma automática el formulario del informe de ventas que se guardó desde esta plantilla de formulario con el fin de reflejar el cambio de nombre. El escenario siguiente asume un formulario que contiene un cuadro de texto enlazado a un campo llamado Nombredecliente.

Crear la plantilla de formulario de ejemplo y el formulario

  1. Abra InfoPath y cree una plantilla de formulario en blanco.

  2. Añada un control Cuadro de texto al formulario y nombre el campo enlazado al control Nombredecliente.

  3. Publique la plantilla de formulario en una carpeta llamada C:\Test y acepte el nombre predeterminado, Plantilla1.

  4. Abra la plantilla de formulario, agregue el nombre "Compañía A" al cuadro de texto enlazado al campo Nombredecliente y, por último, guarde el formulario como "Formulario1".

Crear una aplicación de consola con código administrado para cambiar el nombre de 'Compañía A' a 'Compañía B'

  1. Abra Visual Studio y cree una nueva aplicación de consola de Visual C# o de Visual Basic llamada Clienteactualizado.

  2. Establezca referencias tanto al ensamblado de interoperabilidad primario de Microsoft Office InfoPath como al ensamblado de interoperabilidad XML de InfoPath según se describe a continuación.

  3. Agregue el código siguiente a los archivos 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. Haga clic en Iniciar depuración en el menú Depurar para compilar y ejecutar la aplicación de consola.

    Dicha aplicación abrirá el formulario guardado como Formulario1.xml y realizará una operación de bucle por todos los elementos del Nombredecliente que contengan el valor Compañía A, cambiándolos a su vez al valor Compañía B. Cuando se completa la operación, se guarda una copia nueva del formulario con el nombre Formulario2.xml en la carpetaC:\Test.

    Nota:

    Para determinar el valor del atributo del espacio de nombres xmlns:my de la plantilla de formulario para el establecimiento de la propiedad SelectionNamespaces, abra dicha plantilla en InfoPath y, a continuación, abra el panel de tareas Origen de datos. Haga clic con el botón secundario en el campo Nombredecliente y, a continuación, haga clic en Propiedades. El valor del espacio de nombres se muestra en la ficha Detalles. También puede determinar este valor abriendo el archivo Formulario1.xml en un editor de texto.

Apertura de un formulario y relleno de los valores de campo de forma automatizada

El ejemplo siguiente automatiza la apertura de un formulario en blanco y el relleno en dicho formulario de los campos nombre, apellido y dirección. Este escenario asume un formulario que contiene tres cuadros de texto enlazados a campos llamados Nombre, Apellidoy Dirección.

Crear la plantilla de formulario de ejemplo y el formulario

  1. Abra InfoPath y cree un formulario en blanco.

  2. Añada los tres controles de cuadro de texto al formulario y nombre los campos enlazados a los controles: Nombre, Apellido y Dirección. Si lo desea, puede agregar otros campos.

  3. Publique la plantilla de formulario en una carpeta llamada C:\Temp y acepte el nombre predeterminado, Plantilla1.

  4. Abra la plantilla de formulario y guarde el formulario en blanco como "Formulario1" en C:\Temp.

Crear una aplicación de consola con código administrado para abrir el formulario y rellenar los campos

  1. Abra Visual Studio y cree una nueva aplicación de consola de Visual C# o de Visual Basic llamada Formularioabierto.

  2. Establezca referencias tanto al ensamblado de interoperabilidad primario de Microsoft Office InfoPath como al ensamblado de interoperabilidad XML de InfoPath según se describe a continuación.

  3. Agregue el código siguiente a los archivos 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. En el menú Depurar, haga clic en Iniciar depuración para compilar y ejecutar la aplicación de consola.

    Dicha aplicación abrirá el formulario guardado como Formulario1.xml y, a continuación, rellenará los campos de Nombre, Apellido y Dirección con los valores especificados en el código. Por último, guardará el formulario sin cerrar InfoPath.

    Nota:

    Para determinar el valor del atributo del espacio de nombres xmlns:my de la plantilla de formulario para el establecimiento de la propiedad SelectionNamespaces, abra dicha plantilla en InfoPath y, a continuación, abra el panel de tareas Origen de datos. Haga clic con el botón secundario en el campo Nombre y, a continuación, haga clic en Propiedades. El valor del espacio de nombres se muestra en la ficha Detalles. También puede determinar este valor abriendo el archivo Formulario1.xml en un editor de texto.

Vea también

Conceptos

Acerca del ensamblado de interoperabilidad primario de Microsoft Office InfoPath
Acerca del ensamblado de interoperabilidad XML de InfoPath