Dieser Ausdruck ruft alle externen (also durch Client-Code erstellten) Regelobjektinstanzen einer Regelklasse ab. Interne (also aus Regeln erstellte) Regelobjektinstanzen werden mit diesem Ausdruck nicht abgerufen.
Weitere Details über die Erstellung von Regelobjekten finden Sie im Abschnitt Externe und interne Regelobjekte.
Seit Cúram Version 6 kann der Ausdruck readall verwendet werden, um Instanzen einer Regelklasse aus einem anderen Regelwerk abzurufen, indem für das optionale XML-Attribut ruleset ein Wert definiert wird.
Seit Cúram Version 6 unterstützt der Ausdruck readall ein optionales Element match. Dieses Element bewirkt, dass der Ausdruck readall nur diejenigen Regelobjekte abruft, deren Wert für ein bestimmtes Attribut mit dem in der Suchbedingung angegebenen Wert übereinstimmt.
Bei CER-Sitzungen, die einen Datenbankdatenspeicher verwenden (siehe CER-Sitzungen), kann mit der in Cúram Version 6 eingeführten Syntax readall / match im Allgemeinen jedoch ein besseres Leistungsverhalten erzielt werden. Dies trifft in den folgenden Situationen zu:
Bei Fällen, in denen Regelobjekte mit mehreren Bedingungen übereinstimmen müssen, sollten Sie mit der Syntax readall / match eine Übereinstimmung mit dem selektivsten Attribut erzielen und anschließend die Ergebnisse in einen Ausdruck "filter" (siehe filter) einschließen, um eine zusätzliche Filterung nach den übrigen Bedingungen vorzunehmen.
<?xml version="1.0" encoding="UTF-8"?>
<RuleSet name="Example_readall"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation=
"http://www.curamsoftware.com/CreoleRulesSchema.xsd">
<Class name="Person">
<Attribute name="socialSecurityNumber">
<type>
<javaclass name="String"/>
</type>
<derivation>
<specified/>
</derivation>
</Attribute>
<!--
Retrieve the one-and-only claim which will have been used to
seed the session
-->
<Attribute name="claim">
<type>
<ruleclass name="Claim"/>
</type>
<derivation>
<singleitem onEmpty="error" onMultiple="error">
<readall ruleclass="Claim"/>
</singleitem>
</derivation>
</Attribute>
<!--
Retrieve the benefit rule objects for this person (created from
client code, probably by querying external storage).
This implementation uses a <readall> with a nested <match> to
retrieve only the matching rule objects, and (depending on data
storage) will be more performant than the
"benefitsFilterReadall" implementation below.
-->
<Attribute name="benefitsReadallMatch">
<type>
<javaclass name="List">
<ruleclass name="Benefit"/>
</javaclass>
</type>
<derivation>
<readall ruleclass="Benefit">
<match retrievedattribute="socialSecurityNumber">
<reference attribute="socialSecurityNumber"/>
</match>
</readall>
</derivation>
</Attribute>
<!--
Retrieves the same rule objects as for "benefitsReadallMatch"
above, but (depending on data storage) may not be as performant.
-->
<Attribute name="benefitsFilterReadall">
<type>
<javaclass name="List">
<ruleclass name="Benefit"/>
</javaclass>
</type>
<derivation>
<filter>
<list>
<!-- retrieve all Benefit rule objects from external
storage -->
<readall ruleclass="Benefit"/>
</list>
<listitemexpression>
<equals>
<!-- match up the social security numbers on
the person rule object and the benefit
rule object -->
<reference attribute="socialSecurityNumber">
<current/>
</reference>
<reference attribute="socialSecurityNumber"/>
</equals>
</listitemexpression>
</filter>
</derivation>
</Attribute>
<!--
Retrieves the person's benefits of type "IncomeAssistance",
using a <match> to retrieve all the person's benefits, and then
a <filter> to extract only the "Income Assistance" benefits from
the benefits for that person.
This implementation may be suitable when the
socialSecurityNumber is the most selective attribute for a
Benefit in the data storage (i.e. there are many Benefit rule
objects, but each socialSecurityNumber value is present on
relatively few Benefit rule objects).
-->
<Attribute name="incomeAssistanceBenefitsMatchSSNFilterType">
<type>
<javaclass name="List">
<ruleclass name="Benefit"/>
</javaclass>
</type>
<derivation>
<filter>
<list>
<!-- retrieve all Benefit rule objects for the Person
-->
<readall ruleclass="Benefit">
<match retrievedattribute="socialSecurityNumber">
<reference attribute="socialSecurityNumber"/>
</match>
</readall>
</list>
<listitemexpression>
<equals>
<!-- filter the Benefit rule objects for the Person
down to those of type "Income Assistance" only
-->
<reference attribute="type">
<current/>
</reference>
<Code table="BenefitType">
<!-- The value for Income Assistance -->
<String value="BT1"/>
</Code>
</equals>
</listitemexpression>
</filter>
</derivation>
</Attribute>
<!--
Retrieves the person's benefits of type "IncomeAssistance",
using a <match> to retrieve all the "Income Assistance"
benefits, and then a <filter> to extract only the "Income
Assistance" benefits for this Person.
This implementation may be suitable when the type is the most
selective attribute for a Benefit in the data storage (i.e.
there are few Benefit rule objects of each type).
-->
<Attribute name="incomeAssistanceBenefitsMatchTypeFilterSSN">
<type>
<javaclass name="List">
<ruleclass name="Benefit"/>
</javaclass>
</type>
<derivation>
<filter>
<list>
<!-- retrieve all Benefit rule objects of type "Income
Assistance" -->
<readall ruleclass="Benefit">
<match retrievedattribute="type">
<Code table="BenefitType">
<!-- The value for Income Assistance -->
<String value="BT1"/>
</Code>
</match>
</readall>
</list>
<listitemexpression>
<equals>
<!-- filter the Benefit rule objects of type "Income
Assistance" down to those for this Person only
-->
<reference attribute="socialSecurityNumber">
<current/>
</reference>
<reference attribute="socialSecurityNumber"/>
</equals>
</listitemexpression>
</filter>
</derivation>
</Attribute>
<!--
Retrieves the rule objects for Benefits whose amount is greater
than 100.
Because "greater than" is not an exact match predicate, a
<filter> must be used (<match> can only be used for an exact
match criterion).
-->
<Attribute name="highPaymentBenefits">
<type>
<javaclass name="List">
<ruleclass name="Benefit"/>
</javaclass>
</type>
<derivation>
<filter>
<list>
<!-- retrieve all Benefit rule objects for the Person
-->
<readall ruleclass="Benefit">
<match retrievedattribute="socialSecurityNumber">
<reference attribute="socialSecurityNumber"/>
</match>
</readall>
</list>
<listitemexpression>
<!-- filter the Benefit rule objects for the Person down
to those of amount greater than 100 only -->
<compare comparison=">">
<reference attribute="amount">
<current/>
</reference>
<Number value="100"/>
</compare>
</listitemexpression>
</filter>
</derivation>
</Attribute>
</Class>
<Class name="Benefit">
<Attribute name="socialSecurityNumber">
<type>
<javaclass name="String"/>
</type>
<derivation>
<specified/>
</derivation>
</Attribute>
<Attribute name="type">
<type>
<codetableentry table="BenefitType"/>
</type>
<derivation>
<specified/>
</derivation>
</Attribute>
<Attribute name="amount">
<type>
<javaclass name="Number"/>
</type>
<derivation>
<specified/>
</derivation>
</Attribute>
</Class>
<!--
This rule set expects that the code creating the session also
creates a "bootstrap" single instance of this Claim rule
class.
-->
<Class name="Claim">
<Initialization>
<Attribute name="claimIdentifier">
<type>
<javaclass name="String"/>
</type>
</Attribute>
<Attribute name="claimDate">
<type>
<javaclass name="curam.util.type.Date"/>
</type>
</Attribute>
</Initialization>
</Class>
</RuleSet>