Compartir a través de


Capturar y responder a eventos del almacén de datos

El cliente puede escuchar y responder a los cambios de un nodo o en un nodo y en todos sus elementos secundarios. Un complemento puede responder a los siguientes eventos.

En la colección CustomXMLParts:

  • StreamAfterAdd permite que un cliente responda después de agregar un nuevo almacén al documento.
  • StreamBeforeDelete permite que un cliente responda antes de que se quite un almacén del documento.
  • StreamAfterLoad permite que un cliente responda después de cargar un elemento de almacén con XML.-

En el objeto CustomXMLPart:

  • NodeAfterInsert permite que un cliente responda después de agregar un nuevo nodo a un almacén. Si el nodo agregado contiene un subárbol, el evento se desencadena solo una vez para el nodo superior.
  • NodeAfterDelete permite que un cliente responda después de eliminar un nodo. Si el nodo eliminado contiene un subárbol, el evento se desencadena solo una vez para el nodo más alto.
  • NodeAfterReplace permite que un cliente responda después de reemplazar un nodo XML en el almacén.

Muestra

Suponga que hay un archivo XML, C:\test.xml, y dos controles de contenido de texto. El archivo XML tiene el siguiente aspecto:

<?xml version="1.0" standalone="no"?>  
<root xmlns="urn:test">  
  <a>NodeA</a>  
  <b>NodeB</b>  
</root>

Una de las cosas más eficaces que puede realizar con la asignación de código XML es disponer de un control de contenido de texto que se actualice inmediatamente cuando el usuario actualiza otro control de contenido de texto. Este proceso se lleva a cabo mediante el uso de eventos. Para ello, cree un método con eventos y ejecútelo.

Dim WithEvents objStream As CustomXMLPart 
 
Sub Demo() 
  Set objStream = ThisDocument.CustomXMLParts(4) 
End Sub

Si se ejecuta la subrutina Demo, se establece que la variable objStream escuche eventos.

Recuerde, en el escenario anterior, que el documento tiene dos controles de contenido de texto, uno asignado al <a> nodo y el otro asignado al nodo "b". Supongamos que desea configurar eventos para que, cuando se modifique el texto del <a> nodo, el nodo "b" haga algo automáticamente. La siguiente subrutina del evento objStream_NodeAfterReplace lo logra.

Private Sub objStream_NodeAfterReplace( _ 
        ByVal OldNode As Office.CustomXMLNode, _ 
        ByVal NewNode As Office.CustomXMLNode, _ 
        ByVal InUndoRedo As Boolean) 
 
    ' Check if NewNode, which is the node after the change, is 
    ' the "a" node by checking the BaseName of its ParentNode 
  If NewNode.ParentNode.BaseName = "a" Then 
    objStream.DocumentElement.LastChild.Text = "You changed a!" 
  End If 
 
End Sub

Esta rutina se desencadena después de que el usuario cambie el texto del primer control de contenido de texto, asignado al elemento <a>. Si cambia el texto del <a> nodo, se actualiza el texto del último elemento secundario del elemento XML personalizado. Dado que la secuencia solo tiene dos nodos, el último nodo es el nodo "b". Una vez actualizado el texto del nodo, el texto actualizado de "You changed a!" aparece automáticamente en el segundo control de contenido de texto.

Este ejemplo es muy sencillo, pero muestra lo que se puede hacer con eventos, asignación de XML y controles de contenido. Use código como este para actualizar cualquier texto de un documento cuando se cambie un control de contenido de texto. Esto es muy útil ya que no se presupone nada sobre el formato del documento ni no funciona con el formato del documento. En su lugar, funciona en el esquema adjuntado al documento.

Consulte también

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.