Cómo cargar dinámicamente los datos en un formulario de InfoPath

Seleccione idioma Seleccione idioma
Id. de artículo: 896451 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo describe tres maneras de cargar dinámicamente los datos en un formulario de Microsoft Office InfoPath. Puede utilizar el evento OnLoad , automatizar el objeto ExternalApplication de InfoPath o crear una página ASP. Se proporcionan ejemplos de código.

INTRODUCCIÓN

En este artículo se describe cómo cargar dinámicamente los datos en un formulario de Office InfoPath.

Más información

Un formulario de InfoPath es un archivo XML. El archivo contiene los datos desde el formulario y el procesamiento de instrucciones que indican a Microsoft Windows Explorer o Microsoft Internet Explorer al que pertenece la aplicación los datos XML de XML.

Puede cargar dinámicamente datos en InfoPath mediante uno de los tres métodos siguientes:
  • Utilice el evento OnLoad .

    En el evento OnLoad , puede llamar a una página ASP u otro origen de datos externo para recuperar los datos y cópielo en el formulario.
  • Automatizar el objeto ExternalApplication de InfoPath.

    Este método crea un nuevo formulario que se basa en los datos desde un origen externo.
    Nota La opción de inicializar y activar la secuencia de comandos de los controles ActiveX no marcados como seguros en Internet Explorer debe establecerse en Preguntar o Habilitar para este método funcione.
    Los datos de origen externo también deben ser XML de InfoPath válido.
  • Crear una página ASP.

    La página ASP devuelve datos XML en el formato correcto para que InfoPath abrir como un archivo de formulario. Los datos XML contienen una referencia a la plantilla de InfoPath Form donde se deben mostrar los datos. InfoPath puede mostrar los datos sin un problema.

Crear un nuevo directorio virtual

  1. Iniciar los servicios de Microsoft Internet Information Manager.
  2. Expanda el directorio sitios Web en la vista de árbol.
  3. Haga clic con el botón secundario en el sitio Web donde desea crear el nuevo directorio virtual, seleccione nuevo y, a continuación, haga clic en Directorio Virtual .
  4. Siga los pasos de la crear un directorio Virtual Asistente para crear un nuevo directorio virtual.

    Nota Debe conceder permiso de escritura en el directorio virtual.

Diseñar un formulario de InfoPath

InfoPath 2007

  1. Inicie InfoPath. En el panel izquierdo, haga clic en diseñar una plantilla de formulario .
  2. En Diseñar nuevo , haga clic para seleccionar la opción de Plantilla de formulario , haga clic para seleccionar la opción en blanco y, a continuación, haga clic en Aceptar .
  3. En Tareas de diseño , haga clic en controles .
  4. Haga clic dos veces en El cuadro de texto para agregar dos controles de cuadro en el formulario.
  5. Guarde el formulario.
  6. En el menú archivo , haga clic en publicar .
  7. En el Asistente para la publicación, haga clic en siguiente . Haga clic en una ubicación de red y, a continuación, haga clic en siguiente .
  8. En el formulario plantilla ruta y el nombre de archivo del cuadro, escriba la dirección URL del directorio virtual que ha creado.
  9. En el cuadro nombre de la plantilla de formulario , escriba twofield.xsn .

    Nota Asegúrese de que la dirección URL similar al siguiente:
    http:// myServer / myVirtualDirectory /twofield.xsn
  10. Haga clic en siguiente , haga clic en publicar y, a continuación, haga clic en Cerrar .
  11. Salga de InfoPath.

InfoPath 2003

  1. Inicie InfoPath. En el panel izquierdo, haga clic en diseñar un formulario .
  2. En diseñar un formulario , haga clic en Nuevo formulario en blanco .
  3. En Tareas de diseño , haga clic en controles .
  4. Haga clic dos veces en El cuadro de texto para agregar dos controles de cuadro en el formulario.
  5. En el menú archivo , haga clic en publicar .
  6. En el Asistente para la publicación, haga clic en siguiente , haga clic en servidor para un Web y, a continuación, haga clic en siguiente .
  7. En el cuadro dirección URL Web y nombre de archivo , escriba la dirección URL del directorio virtual que ha creado.
  8. En el cuadro nombre del formulario , escriba twofield.xsn .

    Nota Asegúrese de que la dirección URL similar al siguiente:
    http:// myServer / myVirtualDirectory /twofield.xsn
  9. Haga clic en siguiente , haga clic en Finalizar y, a continuación, haga clic en Cerrar .
  10. Salga de InfoPath.

Crear la página default.ASP

  1. Haga clic en Inicio , haga clic en Ejecutar , escriba notepad y, a continuación, haga clic en Aceptar .
  2. Pegue el código siguiente en el lenguaje de Notepad.
    <%@ Language=VBScript %>
    
    <%
    
      dim serverName, hrefPath, fileNamePos, serverPath
    
      serverName = Request.ServerVariables("SERVER_NAME")
    
      hrefPath = Request.ServerVariables("PATH_INFO")
    
      fileNamePos = InStr( 1, hrefPath, "/Default.asp", 1 )
    
      hrefPath = Left(hrefPath, fileNamePos )
    
      serverPath = "http://" + serverName + hrefPath
    
    %>
    
    <HTML>
    
    <head>
    
    <SCRIPT LANGUAGE=VBScript>
    
    Sub ButtonClick()
    
     Dim oInfoPathApp
    
     set oInfoPathApp = CreateObject("InfoPath.ExternalApplication")
    
     oInfoPathApp.New "<%=serverPath%>GetData.asp?dataRequest=2"
    
     set oInfoPathApp = Nothing
    
     window.close
    
    End Sub
    
    </SCRIPT>
    
    </HEAD>
    
    <BODY onload="ButtonClick">
    
    </BODY>
    
    </HTML>
  3. Guarde el archivo como default.ASP. Guarde el archivo en el directorio virtual que creó en la sección "Crear un nuevo directorio virtual".

Crear una página ASP para generar dinámicamente un formulario

  1. Busque y, a continuación, haga doble clic en el formulario de Twofield.xsn que acaba de publicar.
    Nota Se abre un nuevo formulario en blanco para que poder rellenar.
  2. Haga clic en archivo y, a continuación, haga clic en Guardar como .
  3. Guarde el archivo como Form1.xml.
  4. Haga clic en Inicio , haga clic en Ejecutar , escriba notepad y, a continuación, haga clic en Aceptar .
  5. Paste the following code in Notepad.
    <%@ Language=VBScript %>
    <%
      ' Define the XML namespace for the form.
      Dim strNamespace
      strNamespace = "http://schemas.microsoft.com/office/infopath/2003/myXSD/2003-04-21T15:25:26"
     
      'Calculate the path of this server directory.
      dim serverName, hrefPath, fileNamePos, serverPath
      serverName = Request.ServerVariables("SERVER_NAME")
      hrefPath = Request.ServerVariables("PATH_INFO")
      fileNamePos = InStr( 1, hrefPath, "/GetData.asp", 1 )
      hrefPath = Left(hrefPath, fileNamePos )
      serverPath = "http://" + serverName + hrefPath
     
      ' Set our return content type.
      Response.ContentType = "text/xml"
    
      'Create an XML document to return.
      Dim oXML
      Set oXML = Server.CreateObject("MSXML.DOMDocument")
     
      'Create the XML header that all XML documents must have.
      dim myPI1
      set myPI1 = oXML.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")
      oXML.insertBefore myPI1, oXML.childNodes.item(0)
     
      'Create the mso-infopathSolution processing instruction that binds the XML from this page to the 
      'TwoField.xsn InfoPath form template.
      dim myPI2
      set myPI2 = oXML.createProcessingInstruction("mso-infoPathSolution", "solutionVersion=""1.0.0.1"" productVersion=""11.0.5531"" PIVersion=""1.0.0.0"" href=""" + serverPath + "TwoField.xsn""")
      oXML.insertBefore myPI2, oXML.childNodes.item(1)
     
      'Create the mso-application processing instruction that marks the XML from this page as an InfoPath form.
      dim myPI3
      set myPI3 = oXML.createProcessingInstruction("mso-application", "progid=""InfoPath.Document""")
      oXML.insertBefore myPI3, oXML.childNodes.item(2)
     
      'Generate the XML for the form.
      dim myFields
      set myFields = oXML.createNode( 1, "myFields", strNamespace )
      oXML.appendChild myFields
     
      dim field1
      set field1 = oXML.createNode( 1, "field1", strNamespace )
     
      dim field2
      set field2 = oXML.createNode( 1, "field2", strNamespace )
     
      dim requestedData
      requestedData = Request("dataRequest")
      Select Case requestedData
         Case "1"
            field1.text = "test field 1"
            field2.text = "test field 2"
         Case "2"
            field1.text = "test field 3"
            field2.text = "test field 4"
         Case "3"
            field1.text = "test field 5"
            field2.text = "test field 6"
         Case Else
            field1.text = "test field 7"
            field2.text = "test field 8"
      end Select
     
      myFields.appendChild field1
      myFields.appendChild field2
     
      'Return the XML to the client.
      Response.Write oXML.XML
    %>
    
  6. En el menú archivo , haga clic en Guardar como , escriba GetData.asp en el cuadro nombre de archivo y, a continuación, haga clic en Guardar .
  7. Iniciar una segunda instancia del Bloc de notas.
  8. En el menú archivo , haga clic en Abrir , haga clic en Form1.xml y, a continuación, haga clic en Abrir .
  9. Busque el xmlns: espacio de nombres my declaración en Form1.xml y copiar su valor.

    Nota El valor similar al siguiente:
    http://schemas.Microsoft.com/Office/InfoPath/2003/myXSD/2003-04-21T15:25:26
  10. En el archivo GetData.asp, busque la línea siguiente:
    strNamespace = "http://schemas.microsoft.com/office/infopath/2003/myXSD/2003-04-21T15:25:26"
  11. Reemplace el valor de la variable strNamespace con el valor que copió en el paso 9.
  12. Haga clic en Guardar y salga de Bloc de notas.
  13. Copie el archivo GetData.asp en el mismo directorio virtual donde se encuentra la plantilla de formulario Twofield.xsn.

Agregue código al formulario de InfoPath para cargar automáticamente datos desde la página ASP

  1. Iniciar InfoPath.
  2. En InfoPath 2007, haga clic en diseñar un formulario plantilla en el panel izquierdo. En InfoPath 2003, haga clic en diseñar un formulario en el panel izquierdo.
  3. En InfoPath 2007, haga clic en Mi PC , en Abrir una plantilla de formulario . En InfoPath 2003, haga clic en Mi PC en Abrir un formulario en modo de diseño en el panel de tareas diseñar un formulario .
  4. Escriba la dirección URL de la plantilla de formulario que ha publicado.

    Nota La dirección URL similar al siguiente:
    http://myServer/myVirtualDirectory/twofield.xsn
  5. En el menú Herramientas , haga clic en programación y, a continuación, haga clic en Evento OnLoad .
  6. Reemplace el código de evento OnLoad predeterminado con el código siguiente. función
    function XDocument::OnLoad(eventObj)
    {
       //Only load data if the fields are empty.
       if (XDocument.DOM.selectSingleNode("/my:myFields/my:field1").text == "" )
       {
          //Work out the location of the data file based on the current install directory.
        searchExpression = new RegExp( "TwoField.xsn", "ig" );
        searchResults = XDocument.Solution.URI.match( searchExpression );
        if (searchResults.length == 0)
         return;
         
        //Clear the "TwoField.xsn" part of the string.
        var targetDirectory = XDocument.Solution.URI.slice(0, searchResults.index );
     
          //Load the example data into and XML document.
          var objExternalData = new ActiveXObject("MSXML2.DomDocument.5.0");
          objExternalData.async = false;
          objExternalData.validateOnParse = false;
          objExternalData.load( targetDirectory + "getData.asp?dataRequest=3" );
     
          //Set the SelectionNamespaces property so that we can search the example data.
          var strSelectionNamespaces = XDocument.DOM.getProperty("SelectionNamespaces");
          objExternalData.setProperty("SelectionNamespaces", strSelectionNamespaces );
     
          //Find the root node in the example data and import it into the InfoPath document.
          var objExternalXML = objExternalData.selectSingleNode("my:myFields");
          var objReplacementXML = XDocument.DOM.importNode( objExternalXML, true );
          
          //Find the original data in the form and replace it with the example data.
          var objOriginalXML = XDocument.DOM.selectSingleNode("my:myFields"); 
        XDocument.DOM.replaceChild( objReplacementXML, objOriginalXML );
     }
    }
    
  7. En el menú archivo , haga clic en Guardar y, a continuación, cierre el formulario de InfoPath.

Probar el formulario de InfoPath

Cargar datos mediante el evento OnLoad

El evento OnLoad de formulario de TwoField.xsn carga datos de la página GetData.asp Si no hay otros datos en el formulario. Para cargar los datos, siga estos pasos:
  1. Haga clic en Inicio , haga clic en Ejecutar , escriba la ruta de acceso del formulario y, a continuación, haga clic en Aceptar . La ruta de acceso que escriba similar al siguiente:
    http:// myServer / IPDynamicData /TwoField.xsn
  2. Si se le pide, haga clic en Abrir .
Observe que InfoPath se inicia y el formulario TwoField.xsn abre. Campo1 contiene "test campo 5", y Field2 contiene "test campo 6". Estos son los valores que devuelve GetData.asp cuando su parámetro dataRequest está establecida en "3".

Cargar un formulario predeterminado mediante ExternalApplication.New

La página default.ASP crea comandos de cliente para automatizar el objeto ExternalApplication para iniciar InfoPath y después crear un nuevo formulario. El nuevo formulario se basa en los datos XML que es devuelto por GetData.asp. Para crear el nuevo formulario, haga clic en Inicio , haga clic en Ejecutar , escriba la ruta de acceso de la página default.ASP y, a continuación, haga clic en Aceptar . La ruta de acceso que escriba similar al siguiente:
http:// myServer / IPDynamicData / .asp default
Nota Para utilizar este método, debe hacer clic en Preguntar o Habilitar para la configuración inicializar y activar la secuencia de comandos de los controles ActiveX no marcados como seguros en Internet Explorer.

Observe que InfoPath se inicia y el formulario TwoField.xsn abre. Campo1 contiene "prueba campo 3" y Field2 contiene"prueba campo 4". Estos son los valores que GetData.asp devuelve cuando su parámetro dataRequest está establecida a "2".

Cargar un formulario existente desde una página ASP

La página GetData.asp devuelve XML en el formato correcto para que InfoPath abrirlo como un archivo de formulario. Para ello, haga clic en Inicio , haga clic en Ejecutar , escriba la ruta de acceso de la página GetData.asp y, a continuación, haga clic en Aceptar . La ruta de acceso que escriba similar al siguiente:
http:// myServer / IPDynamicData /getData.asp?dataRequest=1
Observe que InfoPath se inicia y el formulario GetData.asp abre. Campo1 contiene "test campo 1" y Field2 contiene "test campo 2". Estos son los valores que GetData.asp devuelve cuando su parámetro dataRequest está establecida a "1".

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos.

Propiedades

Id. de artículo: 896451 - Última revisión: martes, 27 de marzo de 2007 - Versión: 3.1
La información de este artículo se refiere a:
  • Microsoft Office InfoPath 2007
  • Microsoft Office InfoPath 2003
  • Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
Palabras clave: 
kbmt kbscript kbasp kbhowto KB896451 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 896451

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com