Capture et réponse à des événements dans le magasin de données
Le client peut écouter les changements sur un nœud et sur tous ses enfants et y répondre. Un complément peut répondre aux événements suivants.
Sur la collection CustomXMLParts :
- StreamAfterAdd permet à un client de répondre après l’ajout d’un nouveau magasin au document.
- StreamBeforeDelete permet à un client de répondre avant la suppression d’un magasin du document.
- StreamAfterLoad permet à un client de répondre après le chargement d’un élément de magasin avec XML.
Sur l'objet CustomXMLPart:
- NodeAfterInsert permet à un client de répondre après l’ajout d’un nouveau nœud à un magasin. Si le nœud ajouté contient une sous-arborescence, l’événement se déclenche une seule fois pour le nœud le plus haut.
- NodeAfterDelete permet à un client de répondre après la suppression d’un nœud. Si le nœud supprimé contient une sous-arborescence, l’événement se déclenche une seule fois pour le nœud le plus haut.
- NodeAfterReplace permet à un client de répondre après le remplacement d’un nœud XML dans le magasin.
Échantillon
Supposons qu'il existe un fichier XML, C:\test.xml, et deux contrôles de contenu de texte. Le fichier XML ressemble à ceci :
<?xml version="1.0" standalone="no"?>
<root xmlns="urn:test">
<a>NodeA</a>
<b>NodeB</b>
</root>
L'un des avantages du mappage XML est qu'il vous permet d'avoir un contrôle de contenu de texte mappé qui se met immédiatement à jour lorsqu'un utilisateur en met à jour un autre. À cet effet, vous utilisez des événements. Pour ce faire, créez une méthode avec des événements et exécutez-la.
Dim WithEvents objStream As CustomXMLPart
Sub Demo()
Set objStream = ThisDocument.CustomXMLParts(4)
End Sub
Si vous exécutez la sous-routine Demo, la variable objStream est configurée pour être à l'écoute des événements.
N’oubliez pas, dans le scénario précédent, que le document a deux contrôles de contenu de texte, l’un mappé au <a>
nœud et l’autre au nœud « b ». Supposons que vous souhaitiez configurer des événements de sorte que lorsque le texte du <a>
nœud est modifié, le nœud « b » effectue automatiquement une action. La sous-routine d’événement objStream_NodeAfterReplace suivante effectue cette opération.
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
Cette routine est déclenchée après que l'utilisateur a modifié le texte dans le premier contrôle de contenu de texte, mappé sur l'élément <a>
. Si le texte du nœud <a>
est modifié, le texte du dernier enfant dans la partie XML personnalisée est mis à jour. Étant donné que le flux n’a que deux nœuds, le dernier nœud est le nœud « b ». Une fois le texte du nœud mis à jour, le texte mis à jour de « Vous avez modifié un ! » apparaît automatiquement dans le deuxième contrôle de contenu de texte.
Bien que très simple, cet exemple montre ce qu'il est possible de faire avec les événements, le mappage XML et les contrôles de contenu. Utilisez du code comme celui-ci pour mettre à jour tout texte dans un document lorsqu’un contrôle de contenu de texte est modifié. Ce code est très utile car il ne présuppose rien concernant la mise en forme du document puisqu'il fonctionne indépendamment de cette mise en forme. Il se réfère au schéma que vous liez au document.
Voir aussi
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.