Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede usar la función Retract para quitar objetos de la memoria de trabajo del motor de reglas de negocios. En los siguientes párrafos se describe el comportamiento asociado a la retracción de entidades de diferentes tipos de la memoria de trabajo del motor de reglas.
Objetos de .NET
Un objeto .NET se retira en una directiva mediante la función Retract . Esta función está disponible en el Business Rule Composer como un elemento de vocabulario Functions: arrastre la clase (no el ensamblado o el método) al parámetro Retirar.
Nota:
Si arrastra un método a la función Retract, el motor intenta retirar el objeto que devuelve el método.
Retirar un objeto .NET lo quita de la memoria de trabajo del motor de reglas y tiene el siguiente impacto:
Las reglas que utilizan el objeto en un predicado tienen sus acciones eliminadas de la agenda (si hay alguna en la agenda).
Las acciones de la agenda que utilizan los objetos se quitan de la agenda.
Nota:
Es posible que se hayan ejecutado otras acciones más altas en el orden del día antes de llamar a la función Retract .
El motor ya no evalúa el objeto.
TypedXmlDocument
Puede retirar el TypedXmlDocument original que se afirmó en el motor o retirar uno de los TypedXmlDocument secundarios creados a partir de un nodo del XmlDocument primario.
Con el siguiente XML como ejemplo, puede retirar el TypedXmlDocument asociado con el pedido o uno o ambos de los TypedXmlDocuments asociados a la línea de pedido.
<order>
<orderline customer="Joe" linenumber="001">
<product name="router" quantity="10" cost="550" />
</orderline>
<orderline customer="Jane" linenumber="002">
<product name="switch" quantity="1" cost="300" />
</orderline>
</order>
Para retirar el objeto orden, arrastraría el nodo superior del esquema en el panel de hechos de Esquemas XML. Este nodo termina en ".xsd" y representa el nodo raíz del documento (no el nodo del elemento de documento); tiene un selector "/" que hace referencia al TypedXmlDocument inicial. Cuando se retira el typedXmlDocument primario, todas las instancias de TypedXmlDocument asociadas a TypedXmlDocument (todos los typedXmlDocumentcreados llamando a la función Assert en función de los selectores usados en la directiva) se quitan de la memoria de trabajo.
Para retirar solo un typedXmlDocument secundario individual (es decir, una línea de orden), puede arrastrar este nodo desde el panel Esquemas XML a la función Retract . Es importante tener en cuenta que todos los TypedXmlDocumentestán asociados con el TypedXmlDocument de nivel superior que se afirmó originalmente, y no con el TypedXmlDocument que aparece encima de él en la jerarquía de árbol XML. Por ejemplo, product es un TypedXmlDocument debajo del objeto orderline; por lo tanto, se asociaría con el orden TypedXmlDocument y no con orderline TypedXmlDocument. En la mayoría de los casos, esta distinción no es importante. Sin embargo, si retira el objeto de pedido, también se retiran los objetos de línea de pedido y los objetos de producto. Si retira el objeto orderline, solo ese objeto se retira y no el objeto del producto.
El motor solo funciona con instancias de objeto y realiza un seguimiento de las instancias de objeto (TypedXmlDocuments) que creó cuando typedXmlDocument se afirmó inicialmente. Si crea nodos adicionales (por ejemplo, nodos del mismo nivel de un nodo seleccionado a través de un selector de la directiva), estos nodos no se evalúan en reglas a menos que se creen y se aserten TypedXmlDocument para ellos. La aserción de estos nuevos typedXmlDocuments de nivel inferior hace que se evalúen en reglas, pero el typedXmlDocument de nivel superior no tiene conocimiento de ellos. Cuando el TypedXmlDocument de nivel superior se retira, el nuevo TypedXmlDocument que se aserta de forma independiente no se retira automáticamente. Como resultado, si se crean nuevos nodos, normalmente es más sencillo retirar y volver a implementar el xmlDocument completo.
La clase TypedXmlDocument admite una serie de métodos útiles a los que se puede llamar dentro de un miembro personalizado de .NET como parte de una acción. Entre ellas se incluye la capacidad de obtener el XmlNode asociado con el TypedXmlDocument o el TypedXmlDocument padre.
TypedDataTable
Puede retractar TypedDataRows individuales o todo el TypedDataTable. Si retira una tabla, todas las filas que contienen se retiran de la memoria de trabajo.
Para retirar toda la TypedDataTable , debe usar una función auxiliar para acceder a la propiedad Parent en TypedDataRow, por ejemplo:
Retract(MyHelper.GetTypedDataTable(TypedDataRow))
En la acción anterior, arrastraría la tabla a TypedDataRow. En GetTypedDataTable , devolvería el valor de TypedDataRow.Parent.
Al igual que con TypedXmlDocuments, si insertas nuevos TypedDataRows adicionales para la misma DataTable después de establecer el TypedDataTable, se tratan como entidades individuales y retirar el TypedDataTable no provoca la eliminación de estos TypedDataRows adicionales. Solo se retiran las TypedDataRow contenidas en TypedDataTable cuando se declaró.
DataConnection
Cuando se retira DataConnection, todos los objetos TypedDataRow recuperados de la base de datos a través de la consulta construida por DataConnection se retiran de la memoria de trabajo. El propio DataConnection también se retira, lo que significa que no se recuperarán más TypedDataRowa través de DataConnection (es decir, mediante el uso de DataConnection en otros predicados o acciones).
Cuando se usa una clase DataConnection, cualquier operación de retracción en un TypedDataRow individual coloca el motor en un estado incoherente. Por lo tanto, no se permiten operaciones en TypedDataRow individuales asociadas a un DataConnection. Si arrastra la tabla (usando el parámetro DataConnection) dentro de la función Retract, estará retractando el DataConnection.