Compartir a través de


Cómo editar el selector XPath para procesar varios registros

Se crean TypedXmlDocuments secundarios independientes cuando se introduce un TypedXmlDocument en el motor; consulte Assert. El motor determina qué documentos TypedXmlDocuments secundarios crear en función de los selectores XPath definidos en las reglas. Al compilar reglas en Composer, el valor del selector XPath tiene como valor predeterminado el nodo situado encima del nodo seleccionado en la pestaña Esquemas XML del 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, es posible que desee personalizar la XPath predeterminada que crea Composer al compilar reglas. Supongamos 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>  

Supongamos que desea crear una regla que calcule el valor total de cada línea de pedido. La 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 XPaths indica la parte Selector y el resto representa el campo XPath. Estos son los valores predeterminados creados por Composer. La ejecución de esta directiva, sin embargo, resultaría en la creación de 6 objetos: 2 objetos Orderline, 2 objetos Hat y 2 objetos Shirt. Los totales de la línea de pedido se calcularían para cada combinación de objetos Sombrero y Camisa, y los totales siempre se fijarían en el mismo valor, que resultaba de la última ejecución de la regla. La regla se activaría 8 veces. Esto no es lo que se pretende en este escenario.

Una solución sería editar los valores XPath para que sean los siguientes.

IF 1==1

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

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

La ejecución de la política con este cambio resultaría en que el valor total se calcule correctamente para cada línea de pedido en función de los valores de costo de los nodos de Camisa y Sombrero dentro de esa línea de pedido.