Creates a new list by evaluating an expression on each item in an existing list.
The new list will have one entry corresponding to each entry in the existing list, with ordering preserved.
A dynamiclist expression specifies:
The existing list; and
The expression to evaluate on each item in the existing list.
A dynamiclist can be used when the number of items in the desired list is not known as design time (i.e. it can differ from execution to execution, depending on the value of other attributes). If the number of items is fixed (i.e. is known at design time), consider using fixedlist instead.
<?xml version="1.0" encoding="UTF-8"?> <RuleSet name="Example_dynamiclist" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "http://www.curamsoftware.com/CreoleRulesSchema.xsd"> <Class name="Person"> <Attribute name="age"> <type> <javaclass name="Number"/> </type> <derivation> <specified/> </derivation> </Attribute> <Attribute name="isDisabled"> <type> <javaclass name="Boolean"/> </type> <derivation> <specified/> </derivation> </Attribute> <Attribute name="totalIncome"> <type> <javaclass name="Number"/> </type> <derivation> <specified/> </derivation> </Attribute> <Attribute name="pets"> <type> <javaclass name="List"> <ruleclass name="Pet"/> </javaclass> </type> <derivation> <specified/> </derivation> </Attribute> </Class> <Class name="Pet"> <Initialization> <Attribute name="name"> <type> <javaclass name="String"/> </type> </Attribute> </Initialization> </Class> <Class name="Household"> <Attribute name="members"> <type> <javaclass name="List"> <ruleclass name="Person"/> </javaclass> </type> <derivation> <specified/> </derivation> </Attribute> <Attribute name="containsDisabledPerson"> <type> <javaclass name="Boolean"/> </type> <derivation> <any> <!-- gets a list of Booleans, corresponding to the isDisabled attribute on each Person members of this Household --> <dynamiclist> <list> <reference attribute="members"/> </list> <listitemexpression> <reference attribute="isDisabled"> <current/> </reference> </listitemexpression> </dynamiclist> </any> </derivation> </Attribute> <Attribute name="totalIncomeOfAdultMembers"> <type> <javaclass name="Number"/> </type> <derivation> <sum> <dynamiclist> <list> <!-- filter the members down to just the adults --> <filter> <list> <reference attribute="members"/> </list> <listitemexpression> <compare comparison=">="> <reference attribute="age"> <current/> </reference> <Number value="18"/> </compare> </listitemexpression> </filter> </list> <listitemexpression> <reference attribute="totalIncome"> <current/> </reference> </listitemexpression> </dynamiclist> </sum> </derivation> </Attribute> <Attribute name="memberAges"> <type> <javaclass name="List"> <javaclass name="Number"/> </javaclass> </type> <derivation> <dynamiclist> <list> <reference attribute="members"/> </list> <listitemexpression> <reference attribute="age"> <current/> </reference> </listitemexpression> </dynamiclist> </derivation> </Attribute> <Attribute name="youngestAge"> <type> <javaclass name="Number"/> </type> <derivation> <min> <reference attribute="memberAges"/> </min> </derivation> </Attribute> <!-- get all the pets in the household, by joining together each person's list of pets --> <Attribute name="allPets"> <type> <javaclass name="List"> <ruleclass name="Pet"/> </javaclass> </type> <derivation> <joinlists> <!-- a list of list of pets, one list for each household member --> <dynamiclist> <list> <reference attribute="members"/> </list> <listitemexpression> <reference attribute="pets"> <current/> </reference> </listitemexpression> </dynamiclist> </joinlists> </derivation> </Attribute> </Class> </RuleSet>