Partager via


Modification du sélecteur XPath pour traiter plusieurs enregistrements

Des TypedXmlDocuments enfants distincts sont créés lorsqu’un TypedXmlDocument est déclaré dans le moteur ; consultez Assert. Le moteur détermine quels TypedXmlDocuments enfants créer en fonction des sélecteurs XPath définis dans les règles. Lorsque vous créez des règles dans l’Éditeur de règles d’entreprise, la valeur du sélecteur XPath est définie par défaut sur le nœud situé au-dessus du nœud sélectionné dans l’onglet Schémas XML de l’Explorateur de faits. La valeur par défaut du champ XPath est définie sur le nœud sélectionné, par rapport à son nœud parent.

Vous pouvez, dans certains cas, souhaiter personnaliser la valeur XPath par défaut créée par l’Éditeur de règles d’entreprise lors de la création de règles. Envisageons l’exemple de document XML suivant.

<Order>  
   <Orderline>  
      <Hat style="Baseball">                        
         <Cost>10</Cost>  
      </Hat>  
      <Shirt color="Black">  
         <Cost>20</Cost>  
      </Shirt>  
      <Total></Total>  
   </Orderline>  
   <Orderline>  
      <Hat style="Bowler">                        
         <Cost>20</Cost>  
      </Hat>  
      <Shirt color="Red">  
         <Cost>20</Cost>  
      </Shirt>  
      <Total></Total>  
   </Orderline>  
</Order>  

Supposons que vous vouliez créer une règle qui calcule la valeur Total de chaque Orderline. Votre règle se présenterait alors comme suit :

IF 1==1

THEN /Order/Orderline/Total = (/Orderline/Orderline/Hat/Cost + /Orderline/Orderline/Shirt/Cost)

La partie en gras des XPath indique la partie Sélecteur et le reste représente le XPath du champ. Il s’agit des valeurs par défaut créées par l'Éditeur. L’exécution de cette stratégie aboutirait toutefois à la création de 6 objets : 2 objets Orderline, 2 objets Hat et 2 objets Shirt. Les totaux de Orderline seraient calculés pour chaque combinaison d'objets Hat et Shirt et ils auraient toujours la même valeur, qui serait le résultat de la dernière exécution de la règle. La règle serait déclenchée 8 fois. Ce n’est pas ce qui est prévu dans ce scénario.

Une solution consisterait à modifier les valeurs XPath de la manière suivante.

IF 1==1

THEN /Order/Orderline/Total = (/Orderline/Orderline/Hat/Cost + /Orderline/Orderline/Shirt/Cost)

Les valeurs du Sélecteur XPath des trois champs ont été définies sur la même valeur /Order/Orderline et les valeurs XPath du champ ont été modifiées en conséquence. Pour ce faire, modifiez les valeurs du sélecteur XPath et du champ XPath dans le Fenêtre Propriétés lorsqu’un nœud est sélectionné dans l’onglet Schémas XML. Cette opération doit être effectuée avant de faire glisser le champ dans un argument de règle.

L’exécution de la stratégie avec cette modification aboutirait au calcul correct de la valeur Total pour chaque Orderline en fonction des valeurs Cost des nœuds Hat et Shirt appartenant à cet Orderline.