Retirar
Puede usar la función Retirar para quitar objetos de la memoria de trabajo del motor de reglas de negocios. En los párrafos siguientes se describe el comportamiento asociado con la retirada de entidades de tipos diferentes de la memoria de trabajo del motor de reglas.
Un objeto .NET se retira en una directiva mediante la función Retract . Esta función está disponible en el compositor de reglas de negocios como un elemento de vocabulario de Functions : arrastre la clase (no el ensamblado o el método) al parámetro Retract .
Nota
Si arrastra un método a la función Retract , el motor intenta retirar el objeto devuelto por el método .
Retirar un objeto .NET lo quita de la memoria de trabajo del motor de reglas y tiene el impacto siguiente:
Las acciones de las reglas que utilizan el objeto en un predicado se retiran de la agenda (de existir alguna en la agenda).
Las acciones de la agenda que utilizan los objetos se quitan de la agenda.
Nota
Es posible que otras acciones más altas en la agenda ya se hayan ejecutado antes de llamar a la función Retract .
El objeto ya no es evaluado por el motor.
Puede retirar el TypedXmlDocument original que se afirmó en el motor o retirar uno de los TypedXmlDocumentsecundarios creados a partir de un nodo del xmlDocument primario.
Con el siguiente XML como ejemplo, puede retirar el TypedXmlDocument asociado con el orden o uno o ambos de typedXmlDocumentasociados a orderline.
<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 de pedido, arrastre el nodo superior del esquema en el panel de hechos 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 con TypedXmlDocument (todas las instancias typedXmlDocumentcreadas mediante una llamada a la función Assert basada en 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 Retirar . Es importante tener en cuenta que todos los TypedXmlDocumentestán asociados con el TypedXmlDocument de nivel superior que se afirmó originalmente, y no con 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 producto y la orderline. Si retira el objeto de la orderline, solo se retira ese objeto y no el objeto de producto.
El motor solo funciona con instancias de objeto (TypedXmlDocuments) que creó cuando typedXmlDocument se afirmó inicialmente. Si crea nodos adicionales (por ejemplo, nodos relacionados con 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 asercionen TypedXmlDocumentpara ellos. La aserción de estos nuevos TypedXmlDocuments de nivel inferior hace que se evalúen en reglas, pero typedXmlDocument de nivel superior no tiene conocimiento de ellos. Cuando se retira typedXmlDocument de nivel superior, el nuevo objeto TypedXmlDocumentaserido de forma independiente no se retira automáticamente. Como resultado, si se crean nuevos nodos, normalmente es más sencillo retirar y restablecer el xmlDocument completo.
La clase TypedXmlDocument admite una serie de métodos útiles que se pueden 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 a TypedXmlDocument o al objeto TypedXmlDocument primario.
Puede retirar typedDataRowindividual o todo TypedDataTable. Si retira una tabla, todas las filas contenedoras se retiran de la memoria de trabajo.
Para retirar toda la clase TypedDataTable , debe usar una función auxiliar para tener acceso 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 afirma más, el nuevo TypedDataRows para la misma DataTable después de la aserción de TypedDataTable, se tratan como entidades individuales y retirar TypedDataTable no da lugar a la retracción de estos TypedDataRows adicionales. Solo se retiran las clases TypedDataRowcontenidas en TypedDataTable cuando se afirmó.
Cuando se retira un objeto DataConnection , todos los objetos TypedDataRowrecuperados 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 typedDataRowindividuales asociadas a dataConnection. Si arrastra la tabla (mediante el parámetro DataConnection ) a la función Retract , se retirará DataConnection.