Compartilhar via


Capturar e responder a eventos no Data Store

O cliente pode ouvir e responder alterações em um nó ou em um nó e em todos os seus filhos. Um suplemento pode responder aos seguintes eventos.

Na coleção CustomXMLParts:

  • StreamAfterAdd permite que um cliente responda depois que um novo repositório é adicionado ao documento.
  • StreamBeforeDelete permite que um cliente responda antes que um repositório seja removido do documento.
  • StreamAfterLoad permite que um cliente responda depois que um item da loja é carregado com XML.-

On the CustomXMLPart object:

  • NodeAfterInsert permite que um cliente responda depois que um novo nó é adicionado a um repositório. Se o nó adicionado contiver uma sub-árvore, o evento será disparado apenas uma vez para o nó mais alto.
  • NodeAfterDelete permite que um cliente responda depois que um nó é excluído. Se o nó excluído contiver uma sub-árvore, o evento será disparado apenas uma vez para o nó mais alto.
  • NodeAfterReplace permite que um cliente responda depois que um nó XML é substituído no repositório.

Amostra

Assume that there is an XML file, C:\test.xml, and two text content controls. The XML file looks like this:

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

One of the powerful things that you can accomplish with XML mapping is to have one mapped text content control update immediately when a user updates another text content control. This is accomplished using events. Para isso, crie um método com os eventos e o execute.

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

A execução da sub-rotina demo configura a variável objStream para ouvir os eventos.

Lembre-se, do cenário anterior, de que o documento tem dois controles de conteúdo de texto, um dados mapeados para o <a> nó e os outros dados mapeados para o nó "b". Suponha que você queira configurar eventos para que, quando o texto no <a> nó for modificado, o nó "b" faça algo automaticamente. A sub-rotina de evento objStream_NodeAfterReplace a seguir realiza isso.

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

Essa rotina é disparada depois que o usuário altera o texto no primeiro controle de conteúdo de texto, mapeado para o elemento <a>. Se o texto no <a> nó for alterado, o texto da última criança na parte XML personalizada será atualizado. Como o fluxo tem apenas dois nós, o último nó é o nó "b". Depois que o texto do nó é atualizado, o texto atualizado de "Você alterou um!" é exibido automaticamente no segundo controle de conteúdo de texto.

This example is very simple, but it shows what you can do with events, XML mapping, and content controls. Use um código como esse para atualizar qualquer texto em um documento quando um controle de conteúdo de texto for alterado. This is powerful because it assumes nothing about the document formatting, and it does not work with the document formatting. Instead, it works against the schema that you attach to the document.

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.