all

Opera en una lista de valores booleanos para determinar si todos los valores de lista son true.

El cálculo se detiene en el primer valor false que se encuentra en la lista. Si la lista está vacía, esta expresión devuelve true.

La lista de valores booleanos la proporciona normalmente proporcionado por una fixedlist o dynamiclist.

Consejo: El orden de los elementos de la lista no cambia nada en el valor de esta expresión; sin embargo, por razones de rendimiento, es posible que desee estructurar una fixedlist para que los valores "fail fast" estén más cerca de la parte superior de la lista y los valores que pueden ser difíciles de calcular estén más cerca de la parte inferior de la lista.
Nota: Desde Cúram V6, CER ya no informa de errores en expresiones hijo en situaciones donde el error no afecta al resultado general.

Por ejemplo, si una lista fija de tres atributos booleanos tienen estos valores:

  • true;
  • <error durante el cálculo> y
  • false

el cálculo del valor de all de estos valores devolverá false, porque como mínimo uno de los elementos es falso (false) (concretamente el tercero de la lista), independientemente de que el segundo elemento devuelva un error.

Por el contrario, si otra lista fija de tres atributos booleanos tiene estos valores:

  • true;
  • <error durante el cálculo> y
  • true

el cálculo del valor de all para estos valores devolverá el error indicado por el segundo elemento de la lista, porque este error evita que se determine si todos los elementos tienen el valor 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>
        <!-- Ejemplo de <all> operando en una <fixedlist> -->
        <!-- Para considerarse como un "progenitor solo", una persona debe
             no estar casada y tener como mínimo un hijo -->
        <all>
          <fixedlist>
            <listof>
              <javaclass name="Boolean"/>
            </listof>
            <members>
              <!-- Sabemos que la mayoría de la gente de nuestra base de datos
                   está casada, por lo tanto probamos esta condición primero.

                   Si lo que sucede es que el valor isMarried no se ha
                   especificado para una persona, si esa persona
                   no tiene hijos, <all> devolverá false;
                   de lo contrario devolverá un error indicando que
                   el valor de isMarried no se ha especificado.
                   -->
              <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>
        <!-- Ejemplo de <all> operando en una <dynamiclist>.

             Si lo que sucede es que la edad de un hijo no se puede
             calcular y hay al menos un hijo de menos de 5 años de edad,
             <all> devolverá false; de lo contrario,
             devolverá el error que muestra por qué no se ha podido
             calcular la edad del hijo.
        -->

        <!-- Compruebe si los niños tienen todos más de 5 años de edad  -->
        <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>

    <!-- Los hijos de esta persona: cada hijo también es una persona.
 -->
    <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>