all

Fonctionne sur une liste de valeurs booléennes pour déterminer si toutes les valeurs de liste sont définies sur true.

Le calcul s'arrête à la première valeur faux rencontrée dans la liste. Si la liste est vide, cette expression retourne la valeur vrai.

La liste des valeurs booléennes est généralement fournie par une liste fixedlist ou une dynamiclist.

Conseil : L'ordre des éléments de la liste ne modifie pas la valeur de cette expression ; en revanche, pour des raisons de performances, vous souhaiterez peut-être structurer une fixedlist de sorte que les valeurs "fail fast" soient plus proches du haut de la liste et que les valeurs plus coûteuses soient plus proches du bas de la liste.
Remarque : Depuis Cúram V6, CER ne produit plus de rapports d'erreurs dans les expressions enfant lorsque l'erreur n'affecte pas le résultat global.

Par exemple, si une liste fixe de trois attributs booléens possède ces valeurs :

  • true;
  • <erreur lors du calcul>; et
  • false

le calcul de la valeur all pour ces valeurs est false, car au moins l'un des éléments l'est (le troisième dans la liste), indépendamment du deuxième élément qui retourne une erreur.

A l'opposé, si une autre liste fixe des trois attributs booléens possède ces valeurs :

  • true;
  • <erreur lors du calcul> ; et
  • vrai

le calcul de la valeur all pour ces valeurs renvoie une erreur signalée par le deuxième élément de la liste, car cette erreur empêche de déterminer si tous les éléments possèdent la valeur true.

<?xml version="1.0" encoding="UTF-8"?>
<RuleSet name="Example_all"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation=
"http://www.curamsoftware.com/CreoleRulesSchema.xsd">
  <Class name="Person">

    <Attribute name="isLoneParent">
      <type>
        <javaclass name="Boolean"/>
      </type>
      <derivation>
        <!-- Exemple d'opération <all> sur <fixedlist> -->
        <!-- Pour être considéré "parent isolé", une personne doit
             être à la fois non mariée et avoir au moins un enfant -->
        <all>
          <fixedlist>
            <listof>
              <javaclass name="Boolean"/>
            </listof>
            <members>
              <!-- Nous savons que la plupart des personnes de notre
 base de données
                   sont mariées. Nous testons d'abord cette condition.

                   Si la valeur isMarried n'est pas
                   spécifiée pour une personne et que cette personne n'a
                   pas d'enfants, la valeur <all> est définie sur false ;
                   dans le cas contraire, elle renvoie une erreur indiquant que
                   la valeur isMarried n'a pas été spécifiée.
                   -->
              <not>
                <reference attribute="isMarried"/>
              </not>
              <not>
                <property name="isEmpty">
                  <object>
                    <reference attribute="children"/>
                  </object>
                </property>
              </not>
            </members>
          </fixedlist>
        </all>
      </derivation>
    </Attribute>

    <Attribute name="hasNoYoungChildren">
      <type>
        <javaclass name="Boolean"/>
      </type>
      <derivation>
        <!-- Exemple d'opération <all> sur une liste <dynamiclist>.

             Si l'âge d'un enfant ne peut pas être
             calculé et qu'il y a u moins un enfant de moins de 5 ans,
             la valeur <all> est définie sur false ; dans le cas contraire, elle
             renvoie une erreur en indiquant pourquoi l'âge de l'enfant n'a pas pu
             être calculé.
        -->

        <!-- Vérifier que les enfants ont tous plus de 5 ans
 -->
        <all>
          <dynamiclist>
            <list>
              <reference attribute="children"/>
            </list>
            <listitemexpression>
              <compare comparison="&gt;">
                <reference attribute="age">
                  <current/>
                </reference>
                <Number value="5"/>
              </compare>
            </listitemexpression>
          </dynamiclist>
        </all>
      </derivation>
    </Attribute>

    <!-- Enfants de cette personne - chaque enfant est aussi une personne !
 -->
    <Attribute name="children">
      <type>
        <javaclass name="List">
          <ruleclass name="Person"/>
        </javaclass>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <Attribute name="isMarried">
      <type>
        <javaclass name="Boolean"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <Attribute name="age">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

  </Class>

</RuleSet>