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

Resumen

En este artículo se describe tres formas para 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 del formulario y las instrucciones que indican a Microsoft Windows Explorer o Microsoft Internet Explorer a la que pertenece la aplicación los datos XML de procesamiento de XML.

Puede cargar dinámicamente datos en InfoPath mediante uno de los tres métodos siguientes:
  • Utilizar 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 copiarlos en el formulario.
  • Automatizar el objetoExternalApplication de InfoPath.

    Este método crea un nuevo formulario que se basa en los datos de un origen externo.
    Nota: La opción de inicializar y comandos de los controles de ActiveX no marcados como seguros en Internet Explorer debe establecerse en
    Pedir datos o Activar 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 se abre como un archivo de formulario. Los datos XML contienen una referencia a la plantilla de formulario de InfoPath donde deben mostrarse los datos. InfoPath puede mostrar los datos sin problemas.

Crear un nuevo directorio virtual

  1. Inicie el Administrador de Microsoft Internet Information Services.
  2. Expanda el directorio de sitios Web en la vista de árbol.
  3. (Ratón) en el sitio Web donde desea crear el nuevo directorio virtual, seleccione nuevoy, a continuación, haga clic en
    Directorio virtual.
  4. Siga los pasos del Asistente para creación de directorio Virtual para crear un nuevo directorio virtual.

    Nota: Debe conceder permiso de escritura para 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
    En blanco la opción y, a continuación, haga clic en Aceptar.
  3. En Tareas de diseño, haga clic en
    Controles.
  4. Haga clic en Cuadro de texto dos veces para agregar dos controles de cuadro de texto al 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 redy, a continuación, haga clic en
    Siguiente.
  8. En el cuadro nombre de archivo y de ruta de acceso de la plantilla de formulario, 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 a la siguiente:
    http://myServer/myVirtualDirectory/twofield.xsn
  10. Haga clic en siguiente, haga clic en
    Publicary, 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 en Cuadro de texto dos veces para agregar dos controles de cuadro de texto al 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 un servidor Weby, a continuación, haga clic en
    Siguiente.
  7. En el cuadro dirección URL de Web y el 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 a la siguiente:
    http://myServer/myVirtualDirectory/twofield.xsn
  9. Haga clic en siguiente, haga clic en Finalizary, 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 notepady, a continuación, haga clic en
    OK.
  2. Pegue el código siguiente en Bloc de notas.
    <%@ 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 se rellenen.
  2. Haga clic en archivoy, 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 notepady, a continuación, haga clic en
    OK.
  5. Pegue el código siguiente en Bloc de notas.
    <%@ 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
    Abierta, haga clic en Form1.xmly, a continuación, haga clic en
    Abierto.
  9. Busque la xmlns: espacio de nombres my declaración en Form1.xml y, a continuación, copiar su valor.

    Nota: El valor es similar a la 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 strNamespacecon el valor que copió en el paso 9.
  12. Haga clic en Guardary 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. Inicie InfoPath.
  2. En InfoPath 2007, haga clic en diseñar una plantilla de formulario 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 PCen 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 es similar a la siguiente:
    http://myServer/myVirtualDirectory/twofield.xsn
  5. En el menú Herramientas , haga clic en
    Programacióny, a continuación, haga clic en el Evento OnLoad.
  6. Reemplace el código de evento OnLoad predeterminado con el código siguiente.
    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
    Guardey 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 es similar a la siguiente:
    http://myServer/IPDynamicData/TwoField.xsn
  2. Si se le pide, haga clic en
    Abierto.
Observe que InfoPath se inicia y el formulario de TwoField.xsn abre. Campo1 contiene "test campo 5" y Field2 contiene "test campo 6". Éstos son los valores que GetData.asp devuelve cuando su parámetro dataRequest está establecida a "3".

Cargar un formulario predeterminado mediante ExternalApplication.New

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

Observe que InfoPath se inicia y el formulario de TwoField.xsn abre. Campo1 contiene "test campo 3" y Field2 contiene "test campo 4". Éstos 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 el XML con 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 la página GetData.asp y, a continuación, haga clic en Aceptar. La ruta de acceso que escriba es similar a la 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". Éstos son los valores que GetData.asp devuelve cuando su parámetro dataRequest está establecida a "1".

Microsoft proporciona ejemplos de programación únicamente con fines ilustrativos, sin ninguna garantía expresa o implícita. Esto incluye, pero no se limita, a las garantías implícitas de comerciabilidad o idoneidad para un propósito particular. Este artículo asume 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: 17 ene. 2017 - Revisión: 1

Microsoft Office InfoPath 2007, Microsoft Office InfoPath 2003

Comentarios