Personalizar una plantilla de formulario mediante una secuencia de comandos

Importante:  Este artículo se ha traducido con traducción automática; vea la declinación de responsabilidades. Para su referencia, puede encontrar la versión en inglés de este artículo aquí.

Si está familiarizado con la escritura de secuencias de comandos, puede agregar una secuencia de comandos a la plantilla de formulario de Microsoft Office InfoPath usando Microsoft JScript o el lenguaje de secuencias de comandos Microsoft Visual Basic Scripting Edition (VBScript). Agregar secuencias de comandos le permite personalizar la plantilla de formulario más allá de lo que está disponible con reglas, fórmulas, validación de datos o formato condicional. Por ejemplo, puede agregar una secuencia de comandos que crea y envía un mensaje de correo electrónico cuando un usuario cambia una vista en un formulario basado en su plantilla de formulario. Puede configurar una plantilla de formulario para crear y enviar un mensaje de correo electrónico únicamente con una secuencia de comandos.

En este artículo

Información general

Consideraciones de compatibilidad

Establecer el lenguaje de secuencias de comandos para una plantilla de formulario

Mostrar un mensaje cada vez que se produce un evento

Agregar una secuencia de comandos que se ejecuta cuando el usuario guarda los datos del formulario

Agregar una secuencia de comandos que se ejecuta cuando un usuario envía los datos del formulario

Agregar una secuencia de comandos que se ejecuta cuando el usuario hace clic en un botón

Agregar una secuencia de comandos que se ejecuta cuando se combinan formularios existentes

Agregar una secuencia de comandos para actualizar los formularios existentes

Agregar una secuencia de comandos para otros eventos

Descripción general

Puede personalizar la plantilla de formulario de InfoPath usando reglas, fórmulas, validación de datos y formato condicional. Aunque estas características son muy flexibles y pueden realizar una amplia variedad de tareas, algunas tareas exceden de las capacidades de estas características. Por ejemplo, no puede usar reglas para enviar un mensaje de correo electrónico cuando un usuario introduce un valor en un cuadro de texto de un formulario. Si necesita personalizar la plantilla de formulario en una forma que exceda las capacidades de estas características y está familiarizado con la escritura de secuencias de comandos usando el lenguaje de secuencias de comandos JScript o VBScript, puede agregar una secuencia de comandos que se ejecute cuando el usuario abra un nuevo formulario o modifique uno existente basado en la plantilla de formulario.

Cuando agrega una secuencia de comandos a una plantilla de formulario, InfoPath inicia el Editor de secuencias de comandos de Microsoft (MSE), que le permite agregar, editar y depurar secuencias de comandos de una plantilla de formulario y coloca el cursor en el evento elegido. InfoPath agrega automáticamente un controlador de eventos a la secuencia de comandos. Un controlador de eventos es el código de función de una plantilla de formulario de InfoPath que responde a una acción del usuario o a un cambio en los datos XML de un formulario. Por ejemplo, si desea que los usuarios guarden sus formularios en diversas ubicaciones de red, puede agregar una secuencia de comandos al controlador de eventos OnSaveRequest. Cuando agrega una secuencia de comandos para que se ejecute cuando el usuario guarda el formulario basado en su plantilla de formulario, InfoPath da inicio al editor de secuencias de comandos y agrega uno de los siguientes códigos a la secuencia de comandos.

Nota: El código que agrega InfoPath depende del lenguaje de secuencias de comandos elegido.

JScript

//=======
// The following function handler is created by Microsoft Office InfoPath.
// Do not modify the name of the function, or the name and number of arguments.
//=======
function XDocument::OnSaveRequest(eventObj)
{
// Write the code to be run before saving here.
eventObj.IsCancelled = eventObj.PerformSaveOperation();
// Write the code to be run after saving here.
eventObj.ReturnStatus = true;
}

VBScript

'=======
' The following function handler is created by Microsoft Office InfoPath.
' Do not modify the name of the function, or the name and number of arguments.
'=======
Sub XDocument_OnSaveRequest(eventObj)
' Write the code to be run before saving here.
eventObj.IsCancelled = eventObj.PerformSaveOperation
' Write the code to be run after saving here.
eventObj.ReturnStatus = True
End Sub

Puede entonces agregar código en los lugares adecuados del controlador de eventos que guarda el formulario en una ubicación de red diferente. Cuando un usuario guarda un formulario basado en esta plantilla de formulario, InfoPath ejecuta el código en el controlador de eventos OnSaveRequest

Nota: En este artículo se proporciona una vista de alto nivel de la creación de eventos en una plantilla de formulario. Para obtener más información sobre los objetos, métodos, eventos y propiedades del Editor de secuencias de comandos de Microsoft usados en InfoPath, vea la referencia del programador de InfoPath.

InfoPath agrega automáticamente controladores de eventos a todos excepto a uno de los siguientes eventos.

Event handler

Description

Steps for creating

OnAfterChange

This event runs after a user changes the value in the specified control bound to a field. For example, you can display a custom HTML task pane after a user selects an item in a list box control. This event runs after the OnValidate event.

Right-click a control on the form template or a field in the Data Source task pane, point to Programming on the shortcut menu, and then click On After Change Event.

OnAfterImport

This event runs after the user successfully merges several forms into one form.

Manually add the OnAfterImport event handler declaration directly to the script file by using MSE. This event handler cannot be created in design mode.

OnBeforeChange

This event runs after a user changes the value in a control and before the value is added to the specified field bound to that control. For example, you can prevent a user from adding an additional row before filling out the last row in a repeating table.

Right-click a control on the form template or a field in the Data Source task pane, point to Programming on the shortcut menu, and then click On Before Change Event.

OnClick

This event runs when a user clicks a button associated with this event. This event is available after you add a button to the form template. For example, you can perform a complex calculation by using the values in fields in the main data source when a user clicks the button.

Double-click the button control and then on the General tab of the Button Properties dialog box, click Edit Form Code.

OnContextChange

This event runs when the focus changes in the form. For example, this event runs when a user navigates from a text box to a date picker, or when a user switches views. This event occurs after all other events have occurred.

On the Tools menu, point to Programming, and then click On Context Change Event.

OnLoad

This event runs whenever a user creates a new form or opens an existing form based on your form template. For example, you can copy a list of items from a secondary data source to the main data source when a user opens the form.

On the Tools menu, point to Programming, and then click On Load Event.

OnMergeRequest

This event runs when forms based on your form template are merged. For example, you can display the number of forms that were merged to give a user a status during the merge operation.

On the Tools menu, click Form Options. In the Category list, click Advanced. Under Merge forms, select the Merge using custom code check box, and then click Edit.

OnSaveRequest

This event runs when a user saves a form based on your form template. For example, you can save the form based on this form template to more than one location when a user saves the form. InfoPath adds two additional lines of code to this event: a line that saves the form and another line that tells you if InfoPath successfully saved the form.

On the Tools menu, click Form Options. In the Category list, click Open and Save. Under Save behavior, select the Save using custom code check box, and then click Edit.

OnSign

This event runs when a user applies a digital signature to a form. For example, you can add additional data to the digital signature of an expense report form when a user signs it.

On the Tools menu, point to Programming, and then click On Sign Event.

OnSubmitRequest

This event runs when a user submits his or her form data. For example, you can submit the form data to a secure Web service when the user clicks Submit on the File menu. Since InfoPath does not support a data connection to a secure Web service, you need to add a custom data connection that works with your secure Web service.

On the Tools menu, click Submit Options. Select the Allow users to submit this form check box, click Perform custom action using Code, and then click Edit Code.

OnSwitchView

This event runs when a user opens a form based on your form template or switches to another view in the form. For example, when a user switches to a specific view, you can create an e-mail message that contains data from the fields in the form's main data source.

On the Tools menu, click Programming, and then click On Switch View Event.

OnValidate

This event runs when a user changes the value in a control bound to a field. For example, when the user changes the value in a specific control, you can calculate a new value for another control by using the number that the user entered and a number that is in the script. This event occurs after the OnBeforeChange event handler runs.

Right-click a control on the form template or a field in the Data Source task pane, point to Programming on the shortcut menu, and then click On After Validate Event.

OnVersionUpgrade

This event runs when a user opens an existing form and the version number of the form template used by the existing form is older than the version number of the form template in the publish location. When a user opens an existing form, InfoPath checks the version number of the form template associated with the existing form. If the form template has a newer version number, InfoPath runs the OnVersion event handler when the user opens the existing form. For example, imagine that you add a new field to an existing form template and republish it, and you want the new field to be added to the main data source if a user opens an existing form. This event adds the new field to the main data source when a user opens an existing form.

On the Tools menu, click Form Options. In the Category list, click Versioning. In the On version upgrade list, click Use custom event, and then click Edit.

Volver al principio

Consideraciones de compatibilidad

No puede agregar una secuencia de comandos a una plantilla de formulario compatible con el explorador. Puede agregar una secuencia de comandos únicamente en una plantilla de formulario cuyos formularios se rellenarán en InfoPath. Puede personalizar una plantilla de formulario compatible con el explorador sólo mediante código administrado.

Volver al principio

Establecer el lenguaje de secuencias de comandos para una plantilla de formulario

Para personalizar una plantilla de formulario usando secuencias de comandos, puede usar Microsoft JScript o Microsoft Visual Basic Scripting Edition (VBScript). De forma predeterminada, InfoPath está configurado para agregar el script mediante JScript. Si la plantilla de formulario no contiene secuencias de comandos o código administrado, y prefiere usar VBScript como el lenguaje de secuencias de comandos, puede cambiar el lenguaje de secuencias de comandos para la plantilla de formulario a VBScript. No puede utilizar ambos lenguajes de secuencias de comandos en la misma plantilla de formulario.

Si la plantilla de formulario ya contiene secuencia de comandos en un idioma y desea utilizar el otro idioma, debe guardar la secuencia de comandos existente para que se puede convertir el script en el otro idioma, quitar la secuencia de comandos de la plantilla de formulario mediante el cuadro de diálogo Opciones de formulario y, a continuación, agregue la secuencia de comandos convertida a la plantilla de formulario. InfoPath no puede convertir las secuencias de comandos a un nuevo lenguaje de secuencias de comandos. Cambiar el idioma de secuencia de comandos en el cuadro de diálogo Opciones de formulario solo afecta a esta plantilla de formulario. Otras plantillas de formulario tendrán JScript como lenguaje de secuencias de comandos predeterminado.

  1. En el menú Herramientas, haga clic en Opciones de formulario.

  2. En la lista categoría, en el cuadro de diálogo Opciones de formulario, haga clic en programación.

  3. En la lista lenguaje del código de plantilla de formulario, en el lenguaje de programación, haga clic en VBScript.

    Notas: 

    • Después de establecer el lenguaje de secuencias de comandos y crear uno o varios controladores de eventos para una plantilla de formulario, no puede cambiar el lenguaje de la plantilla de formulario.

    • Si ha instalado Microsoft Visual Studio 2005 Tools para aplicaciones, el idioma predeterminado es .NET de Microsoft Visual Basic. Aún puede usar este procedimiento para cambiar el idioma de scripting VBScript.

Volver al principio

Mostrar un mensaje cada vez que tiene lugar un evento

Si desea saber qué controladores de eventos se ejecutan en respuesta a una acción o a otro evento, puede agregar código temporal para mostrar un cuadro de mensaje siempre que se ejecute el controlador de eventos. Puede usar este código para determinar cuándo se ejecuta un controlador de eventos. Después de agregar este código, puede usar la vista previa para ver el formulario basado en esta plantilla de formulario o para publicar la plantilla de formulario y, después, crear una nueva plantilla de formulario. Algunos controladores de eventos se ejecutan únicamente si crea un formulario después de publicar la plantilla de formulario. Después puede ejecutar una acción que cree podría ejecutar el controlador de eventos. Cuando se ejecuta el controlador de eventos, verá un cuadro de mensaje.

Después de determinar las acciones o eventos que ejecutará el controlador de eventos, quite el código y reanude el diseño de la plantilla de formulario. Si no quita este código y publica después la plantilla de formulario, los usuarios verán este cuadro de mensaje cuando se ejecute el controlador de eventos.

  1. Agregue el controlador de eventos.

  2. Para agregar código en JScript, escriba XDocument.UI.Alert ("el evento nombre acaba de ejecutar"); Reemplazar por el nombre del controlador de eventos. Por ejemplo, si agrega este código al controlador de eventos OnValidate , podría escribir XDocument.UI.Alert ("el OnValidate solo ha encontrado el controlador de eventos");

  3. Para agregar código en VBScript, escriba XDocument.UI.Alert ("el evento nombre acaba de ejecutar") , por ejemplo, si agrega este código al controlador de eventos OnSaveRequest , podría escribir XDocument.UI.Alert ("el OnSaveRequest solo ha encontrado el controlador de eventos")

  4. Para probar el código, haga clic en Vista previa en el menú Archivo o presione CTRL+MAYÚS+B y, a continuación, ejecute una acción de usuario que pueda iniciar el evento. Cuando tiene lugar el evento con la línea de código, un cuadro de mensaje muestra el mensaje.

    Nota: Algunos eventos requieren que publique la plantilla de formulario y que luego cree un formulario basado en esta plantilla de formulario antes de poder ejecutar una acción de usuario para iniciar el evento.

  5. Antes de publicar la plantilla de formulario y de habilitar a los usuarios que rellenen formularios basados en esta plantilla de formulario, elimine el código que ha usado para mostrar el cuadro de mensaje.

Volver al principio

Agregar una secuencia de comandos que se ejecuta cuando un usuario guarda los datos del formulario

  1. En el menú Herramientas, haga clic en Opciones de formulario.

  2. En la lista Categoría, en el cuadro de diálogo Opciones de formulario, haga clic en Abrir y guardar.

  3. En Guardar comportamiento, active la casilla de verificación Guardar utilizando código personalizado y, a continuación, haga clic en Modificar. El Editor de secuencias de comandos de Microsoft comienza con el cursor situado en el controlador de eventos OnSaveRequest.

    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function XDocument::OnSaveRequest(eventObj)
    {
    // Write the code to be run before saving here.
    eventObj.IsCancelled = eventObj.PerformSaveOperation();
    // Write the code to be run after saving here.
    eventObj.ReturnStatus = true;
    }

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub XDocument_OnSaveRequest(eventObj)
    ' Write the code to be run before saving here.
    eventObj.IsCancelled = eventObj.PerformSaveOperation
    ' Write the code to be run after saving here.
    eventObj.ReturnStatus = True
    End Sub
  4. Siga uno o ambos de estos procedimientos:

    • Para agregar una secuencia de comandos que se ejecuta antes de que InfoPath guarde el formulario, reemplace el comentario Write the code to be run before saving here. por su código.

    • Para agregar una secuencia de comandos que se ejecute después de que InfoPath guarde el informe, reemplace el comentario Write the code to be run after saving here. por su código.

  5. Para probar sus cambios, haga clic en Vista previa en la barra Estándar, o presione CTRL+MAYÚS+B.

    Nota: Si el controlador de eventos se ejecuta sólo después de crear un formulario basado en la plantilla de formulario, publique la plantilla de formulario haciendo clic en Publicar en el menú Archivo y, a continuación, complete el Asistente para la publicación. Después de publicar la plantilla de formulario, cree un formulario y, a continuación, ejecute una acción para ejecutar el controlador de eventos.

Volver al principio

Agregar una secuencia de comandos cuando un usuario envía los datos del formulario

  1. En el menú Herramientas, haga clic en Opciones de envío.

  2. En el cuadro de diálogo Opciones de envío, seleccione la casilla de verificación Permitir a los usuarios enviar este formulario.

  3. Haga clic en Realizar una acción personalizada utilizando código y, a continuación, haga clic en Modificar código. El Editor de secuencias de comandos de Microsoft comienza con el cursor situado en el controlador de eventos OnSubmitRequest.

    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function XDocument::OnSubmitRequest(eventObj)
    {
    // If the submit operation is successful, set
    // eventObj.ReturnStatus = true;
    // Write your code here
    }

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub XDocument_OnSubmitRequest(eventObj)
    ' If the submit operation is successful, set
    ' eventObj.ReturnStatus = True
    ' Write your code here
    End Sub
  4. Reemplace el comentario If the submit operation is successful, set eventObj.ReturnStatus = true Write your code here por su código.

  5. Para probar sus cambios, haga clic en Vista previa en la barra Estándar, o presione CTRL+MAYÚS+B.

Volver al principio

Agregar una secuencia de comandos que se ejecuta cuando un usuario hace clic en un botón

  1. Agregue un nuevo botón a una vista en la plantilla de formulario y, a continuación, haga doble clic en el botón.

    Nota: Si está agregando una secuencia de comandos a un botón existente, haga doble clic en este botón.

  2. Haga clic en la ficha General.

  3. Haga clic en Editar código del formulario. El Editor de secuencias de comandos de Microsoft comienza con el cursor situado en el controlador de eventos OnSubmitRequest.

    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function Button Name::OnClick(eventObj)
    {
    // Write your code here
    }

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub Button Name_OnClick(eventObj)
    ' Write your code here
    End Sub
  4. Reemplace el comentario Write your code here por su código.

  5. Para probar sus cambios, haga clic en Vista previa en la barra Estándar, o presione CTRL+MAYÚS+B.

Volver al principio

Agregar una secuencia de comandos que se ejecuta cuando se combinan formularios existentes

  1. En el menú Herramientas, haga clic en Opciones de formulario.

  2. En la lista Categoría del cuadro de diálogo Opciones de formulario, haga clic en Avanzadas.

  3. En Combinar formularios, active la casilla de verificación Habilitar la combinación de formularios.

  4. Active la casilla de verificación Combinar usando código personalizado y, a continuación, haga clic en Modificar. El Editor de secuencias de comandos de Microsoft comienza con el cursor situado en el controlador de eventos OnMergeRequest.

    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function XDocument::OnMergeRequest(eventObj)
    {
    // Write the code that handles each form being merged here.
    XDocument.ImportDOM(eventObj.DOM);
    eventObj.ReturnStatus = true;
    }

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub XDocument_OnMergeRequest(eventObj)
    ' Write the code that handles each form being merged here.
    XDocument.ImportDOM(eventObj.DOM)
    eventObj.ReturnStatus = True
    End Sub
  5. Reemplace el comentario Write the code that handles each form being merged here. por su código.

  6. Para probar el código de este evento, publique la plantilla de formulario, cree varios formularios basados en esta plantilla de formulario y, a continuación, combine las plantillas de formulario.

    Nota: En la sección Vea también encontrará vínculos para obtener más información acerca de la publicación de la plantilla de formulario modificada.

Volver al principio

Agregar una secuencia de comandos para actualizar los formularios existentes

Si ha actualizado una plantilla de formulario previamente publicada y desea actualizar los formularios existentes basándose en dicha plantilla, puede agregar una secuencia de comandos a la plantilla de formulario actualizada que se ejecute cuando un usuario abre uno de los formularios existentes. Cuando un usuario abre un formulario existente, InfoPath comprueba el número de versión de la plantilla de formulario asociada en la ubicación de publicación. Si el número de versión de la plantilla de formulario en la ubicación de publicación es más reciente que el número de versión del formulario existente, lo que indica que se ha actualizado, InfoPath ejecuta el código de este evento para actualizar el formulario existente.

  1. En el menú Herramientas, haga clic en Opciones de formulario.

  2. En la lista Categoría del cuadro de diálogo Opciones de formulario, haga clic en Control de versiones.

  3. En la lista Al actualizar la versión, haga clic en Utilizar evento personalizado y, a continuación, haga clic en Modificar. El Editor de secuencias de comandos de Microsoft comienza con el cursor situado en el controlador de eventos OnVersionUpgrade.

    JScript

    //=======
    // The following function handler is created by Microsoft Office InfoPath.
    // Do not modify the name of the function, or the name and number of arguments.
    //=======
    function XDocument::OnVersionUpgrade(eventObj)
    {
    // Write your code here
    }

    VBScript

    '=======
    ' The following function handler is created by Microsoft Office InfoPath.
    ' Do not modify the name of the function, or the name and number of arguments.
    '=======
    Sub XDocument_OnVersionUpgrade(eventObj)
    ' Write your code here
    End Sub
  4. Reemplace el comentario Write your code here por su código.

  5. Para probar el código en este evento, publique la plantilla de formulario, cree varios formularios basándose en esta plantilla de formulario, modifique y publique una versión actualizada de la plantilla y, a continuación, abra un formulario existente basándose en la versión más antigua de esta plantilla de formulario.

    Nota: En la sección Vea también encontrará vínculos para obtener más información acerca de la publicación de la plantilla de formulario modificada.

Volver al principio

Agregar una secuencia de comandos para otros eventos

Este procedimiento se puede usar para agregar los siguientes controladores de eventos a la plantilla de formulario:

  • OnAfterChange

  • OnBeforeChange

  • OnContextChange

  • OnLoad

  • OnSwitchView

  • OnSign

  • OnValidate

  • En el menú Herramientas, elija Programación y, a continuación, haga clic en el evento para agregarlo al controlador de eventos. El Editor de secuencias de comandos de Microsoft comienza con el cursor situado en el controlador de eventos que haya seleccionado.

  • Reemplace el comentario Write your code here por su código.

Volver al principio

Nota: Declinación de responsabilidades de traducción automática: Este artículo se ha traducido con un sistema informático sin intervención humana. Microsoft ofrece estas traducciones automáticas para que los hablantes de otros idiomas distintos del inglés puedan disfrutar del contenido sobre los productos, los servicios y las tecnologías de Microsoft. Puesto que este artículo se ha traducido con traducción automática, es posible que contenga errores de vocabulario, sintaxis o gramática.

Ampliar sus conocimientos
Explorar los cursos
Obtener nuevas características primero
Únase a los participantes de Office Insider

¿Le ha sido útil esta información?

¡Gracias por sus comentarios!

Gracias por sus comentarios. Quizá le interese ponerse en contacto con uno de nuestros agentes de soporte de Office.

×