create

Obtiene una instancia nueva de una clase de regla en la memoria de la sesión. Los valores de inicialización necesarios para el objeto de regla debe especificarse como elementos hijo de la expresión create.

Desde Cúram V6, se puede utilizar create para crear una instancia nueva de una clase de regla de un conjunto de reglas diferente, estableciendo el valor del atributo XML ruleset opcional.

Nota: Los objetos de regla creados utilizando create no se pueden recuperar durante la ejecución de reglas, porque si se hiciera se violaría el principio de orden de CER.

Desde Cúram V6, hay una opción de sintaxis al pasar valores a un objeto de regla creado:

Desde Cúram V6, los objetos de regla creados se "agrupan" en la sesión. Esta agrupación permite que las solicitudes idénticas creen un objeto de regla que deberá ser atendido por un solo objeto de regla, que puede conservar el uso de memoria y también evitar que tengan lugar cálculos idénticos, lo que hace que se reduzca la carga de la CPU. Dos solicitudes para crear un objeto de regla se consideran idénticas si solicitan la misma clase de regla y los valores de todos los atributos inicializados y especificados son iguales.

En el ejemplo siguiente, si el número de teléfono del trabajo de una persona es idéntico al número de teléfono de casa de la persona, se utilizará un solo objeto de regla para cada número y, por consiguiente, el valor derivado para isOutOfThisArea sólo se calculará una vez. De lo contrario, si los números de teléfono de trabajo y de casa son diferentes, se crearán dos objetos de regla diferentes.

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

  <Class name="Person">

    <!-- Detalles de número de teléfono reunidos como pruebas -->
    <Attribute name="homePhoneAreaCode">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

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

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

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

    <!-- Crear objetos de regla PhoneNumber
         y ponerlos en una lista -->
    <Attribute name="phoneNumbers">
      <type>
        <javaclass name="List">
          <ruleclass name="PhoneNumber"/>
        </javaclass>
      </type>
      <derivation>
        <fixedlist>
          <listof>
            <ruleclass name="PhoneNumber"/>
          </listof>

          <members>

            <!-- Número de teléfono para los detalles de casa. -->
            <create ruleclass="PhoneNumber">
              <!-- El valor para PhoneNumber.owner -->
              <this/>
              <!-- El valor para PhoneNumber.number -->
              <reference attribute="homePhoneNumber"/>
              <specify attribute="areaCode">
                <!-- El valor para PhoneNumber.areaCode -->
                <reference attribute="homePhoneAreaCode"/>
              </specify>
            </create>

            <!-- Número de teléfono para los detalles de trabajo.

                 Si el número de teléfono de trabajo de una persona es idéntico al
                 número de teléfono de casa de la persona (es decir, el prefijo local y el
                 número son los mismos), esta expresión <create>
                 devolverá el mismo objeto de regla que el objeto de regla
                 devuelto por la expresión <create> anterior. Si los
                 números de teléfono no son idénticos, se devolverán dos
                 objetos de regla diferentes.-->
            <create ruleclass="PhoneNumber">
              <this/>
              <reference attribute="workPhoneNumber"/>
              <specify attribute="areaCode">
                <reference attribute="workPhoneAreaCode"/>
              </specify>
            </create>

          </members>
        </fixedlist>
      </derivation>
    </Attribute>

  </Class>

  <Class name="PhoneNumber">

    <Initialization>
      <!-- Los valores para estos atributos los debe pasar, en orden,
           cualquier expresión <create>. -->
      <Attribute name="owner">
        <type>
          <ruleclass name="Person"/>
        </type>
      </Attribute>
      <Attribute name="number">
        <type>
          <javaclass name="Number"/>
        </type>
      </Attribute>
    </Initialization>


    <!-- El valor de este atributo se puede pasar mediante un elemento <specify>
         en una expresión <create>, que alterará temporalmente
         aquí la derivación predeterminada. -->
    <Attribute name="areaCode">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <!-- Implementación predeterminada, utilizada si la expresión <create>
             no <especifica> un valor para este atributo.-->
        <Number value="123"/>
      </derivation>
    </Attribute>

    <!-- Para un objeto de regla agrupado, este valor derivado sólo se
         calculará una vez.

         Por ejemplo, si el número de teléfono de trabajo de una persona es idéntico
         al número de teléfono de casa de la persona, se utilizará el mismo objeto
         de regla para los números de teléfono de casa y del trabajo
         y el valor "isOutOfThisArea" para este objeto de regla
         individual se calculará una sola vez.
      -->
    <Attribute name="isOutOfThisArea">
      <type>
        <javaclass name="Boolean"/>
      </type>
      <derivation>
        <not>
          <equals>
            <reference attribute="areaCode"/>
            <!-- El prefijo local para el área de la agencia -->
            <Number value="123"/>
          </equals>
        </not>
      </derivation>
    </Attribute>
  </Class>
</RuleSet>