Evento FormEvents.Merge
Se produce cuando se invoca el comando Combinar formularios desde la interfaz de usuario o InfoPath se inicia con el modificador de la línea de comandos /aggregate.
Espacio de nombres: Microsoft.Office.InfoPath
Ensamblado: Microsoft.Office.InfoPath (en Microsoft.Office.InfoPath.dll)
Sintaxis
'Declaración
Public MustOverride Event Merge As MergeEventHandler
'Uso
Dim instance As FormEvents
Dim handler As MergeEventHandler
AddHandler instance.Merge, handler
public abstract event MergeEventHandler Merge
Excepciones
Excepción | Condición |
---|---|
InvalidOperationException | El programador intentó enlazar el evento en una ubicación que no es el método InternalStartup. |
Comentarios
Importante
El programador no debe crear instancias del evento Merge en el código de formulario. Sólo se deben agregar controladores de eventos para eventos de nivel de formulario desde la interfaz de usuario del modo de diseño de Microsoft InfoPath. Al agregar un controlador de eventos a la plantilla de formulario desde la interfaz de usuario de modo de diseño, InfoPath genera código en el método InternalStartup del archivo de código de formulario mediante la clase EventManager y el miembro de la clase FormEvents para enlazar el evento a su controlador de eventos. Para obtener información sobre cómo agregar controladores de eventos en el modo de diseño de InfoPath, vea Cómo agregar un controlador de eventos.
El evento Merge se enlaza utilizando el delegado MergeEventHandler.
El evento Merge se puede cancelar utilizando la propiedad CancelableArgs de la clase MergeEventArgs para establecer la propiedad Cancel en true.
Si cancela el evento, el funcionamiento de InfoPath depende de como se establezcan las propiedades Message y MessageDetails que se describen en la siguiente tabla.
Configuración Message y MessageDetails |
Cuadro de texto y texto mostrado |
---|---|
Establecer sólo la propiedad Message en una cadena de mensaje. |
El mensaje y "¿Desea continuar?" con los botones Sí, Sí a todo y Cancelar. |
Establecer sólo la propiedad MessageDetails en una cadena de mensaje. |
"Se ha producido un problema de Microsoft Office InfoPath para combinar el siguiente formulario: nombreDeFormulario.xml." y el mensaje pormenorizado, con los botones Sí, Sí a todo y Cancelar. |
Establecer las propiedades Message y MessageDetails en una cadena de mensaje. |
El mensaje y el mensaje pormenorizado con los botones Sí, Sí a todo y Cancelar. |
No establecer las propiedades Message y MessageDetails, o establecer las dos en una referencia null (Nothing en Visual Basic) o en una cadena vacía. |
No se muestra ningún cuadro de diálogo. |
Los comportamientos que se producirán cuando un usuario haga clic en los botones Sí, Sí a todo y Cancelar son los siguientes:
Botón en que se hace clic |
Comportamiento de combinación |
---|---|
Botón Sí |
Se realiza la operación de combinación y el usuario debe hacer clic en Sí para que se combine cada uno de los formularios. |
Botón Sí a todo |
Se realiza la operación de combinación y se combinan todos los formularios seleccionados. |
Botón Cancelar |
Se cancela la combinación de todos los formularios. Si el usuario había hecho clic en Sí para algún formulario antes de hacer clic en Cancelar, también se cancela la combinación de esos formularios. |
El objeto MergeEventArgs se pasa como parámetro al controlador de eventos del evento Merge de un formulario. El objeto MergeEventArgs proporciona propiedades que se pueden usar durante el evento Merge para interactuar mediante programación con el documento XML subyacente de un formulario y determinar propiedades de combinación como el número de archivos que se va a combinar. Las propiedades que proporciona el objeto MergeEventArgs sólo están disponibles durante este evento.
Durante una operación de combinación de formularios, se producirá el evento Merge (y se ejecutará el código de su controlador de eventos) una vez por cada archivo que se vaya a combinar.
Importante
En el modelo de objetos de InfoPath 2003, hay un evento OnAfterImport que ocurre después de completarse satisfactoriamente una operación de combinación. El modelo de objetos de Microsoft InfoPath no proporciona un evento equivalente. Sin embargo, puede obtenerse la misma funcionalidad en un controlador del evento Merge mediante la comparación de los valores de las propiedades Index y Count de la clase MergeEventArgs para confirmar que la operación de combinación ha finalizado, antes de realizar operaciones "post combinación".
Únicamente se puede acceder a este tipo o miembro desde el código que se ejecuta en los formularios abiertos en Microsoft InfoPath Filler.
Ejemplos
En el siguiente ejemplo, el controlador de eventos del evento Merge establece variables para indicar el estado de la operación de combinación, llama al método MergeForm(XPathNavigator) de la clase XmlForm para realizar la operación de combinación y muestra un mensaje al terminar la combinación.
private bool _merging = false;
public void FormEvents_Merge(object sender, MergeEventArgs e)
{
// Set global property to indicate that forms are being merged.
if (e.Index == 0)
{
_merging = true;
}
// Merge the current form.
MergeForm(e.Xml);
e.CancelableArgs.Cancel = false;
// Check to see if merging is finished.
if ((e.Index + 1) == e.Count)
{
_merging = false;
MessageBox.Show("Your request to merge " + e.Count +
" files is now complete.");
// Perform any "after merge" operations here.
}
}
Private _merging As Boolean = False
Public Sub FormEvents_Merge(ByVal sender As Object, _
ByVal e As MergeEventArgs)
' Set global property to indicate that forms are being merged.
If (e.Index = 0) Then
_merging = True
End If
' Merge the current form.
MergeForm(e.Xml)
e.CancelableArgs.Cancel = False
' Check to see if merging is finished.
If ((e.Index + 1) = e.Count) Then
_merging = False
MessageBox.Show("Your request to merge " + e.Count +
" files is now complete.")
' Perform any "after merge" operations here.
End If
End Sub