Compartir a través de


Cómo editar el selector XPath para procesar varios registros

Se crean TypedXmlDocuments secundarios independientes cuando se afirma un TypedXmlDocument en el motor; consulte Assert. El motor determina los TypedXmlDocuments secundarios que se van a crear según los selectores XPath que estén definidos en las reglas. Cuando genera reglas en el Compositor, el valor predeterminado del selector XPath es el nodo que hay por encima del nodo seleccionado en la pestaña Esquemas XML en el Explorador de hechos. El valor de campo XPath tiene como valor predeterminado el propio nodo seleccionado, en relación con su nodo primario.

En algunas situaciones tal vez desee personalizar el XPath predeterminado que el Compositor crea cuando genera reglas. Observe el siguiente documento XML de ejemplo.

<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>  

Suponga que desea generar una regla que calcule el valor Total para cada Orderline. Su regla tendría el siguiente aspecto.

IF 1==1

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

La parte en negrita de los XPath indica la parte del Selector y el resto representa el XPath de campo. Estos son los valores predeterminados que genera el Compositor. La ejecución de esta directiva, sin embargo, daría lugar a la creación de 6 objetos: 2 objetos Orderline, 2 objetos Hat y 2 objetos Shirt. Los totales de Orderline se calcularán para cada combinación de objetos Hat y Shirt, y los totales siempre se establecerán con el mismo valor, que se obtuvo de la última ejecución de la regla. La regla se activará 8 veces. Esto no es lo que se pretende en este escenario.

Una solución sería editar los valores de XPath de la siguiente manera.

IF 1==1

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

Los valores del selector XPath para los tres campos se han establecido con el mismo valor /Order/Orderline y los valores de XPath de campo se han editado en consecuencia. Esto se hace cambiando los valores XPath Selector y Campo XPath de la ventana Propiedades cuando se selecciona un nodo en la pestaña Esquemas XML. Esto se debe hacer antes de arrastrar el campo a un argumento de regla.

Si ejecuta la directiva con este cambio, el valor de Total se calcularía correctamente para cada Orderline según los valores de Cost de los nodos Shirt y Hat dentro de esa Orderline.