create

Permet d'obtenir une nouvelle instance de classe de règles dans la mémoire de la session. Toutes les valeurs d'initialisation requises par l'objet de règle doivent être spécifiées en tant qu'éléments enfant de l'expression create.

Depuis Cúram V6, l'élément create peut être utilisé pour créer une instance de classe de règles à partir d'un jeu de règles différent, en définissant la valeur de l'attribut XML ruleset facultatif.

Remarque : Les objets de règle créés via l'élément create ne peuvent pas être extraits lors de l'exécution des règles, car cela violerait le principe d'organisation de CER.

Depuis Cúram V6, vous avez le choix entre plusieurs syntaxes pour transmettre les valeurs à un objet de règle créé :

Depuis Cúram V6, les objets de règle créés sont "regroupés" dans la session. Ce pool permet aux demandes identiques de créer un objet de règle afin qu'il soit traité par un seul objet de règle, qui peut conserver l'utilisation de la mémoire et également empêcher l'exécution de calculs en double pour réduire la charge UC. Deux demandes de création d'un objet de règle sont jugées identiques si elles demandent la même classe de règle et que les valeurs des attributs initialisés et spécifiés sont égales.

Dans l'exemple ci-dessous, si le numéro de téléphone professionnel d'une personne est identique à son numéro de téléphone personnel, un seul objet de règle sera utilisé pour chaque numéro. Par conséquent, la valeur dérivée pour isOutOfThisArea ne sera calculée qu'une seule fois. Si les numéros professionnel et personnel sont différents, deux objets de règle seront créés.

<?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">

    <!-- Détails des numéros de téléphone regroupés dans les informations collectées -->
    <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>

    <!-- Création d'objets de règle PhoneNumber
         et placement dans une liste -->
    <Attribute name="phoneNumbers">
      <type>
        <javaclass name="List">
          <ruleclass name="PhoneNumber"/>
        </javaclass>
      </type>
      <derivation>
        <fixedlist>
          <listof>
            <ruleclass name="PhoneNumber"/>
          </listof>

          <members>

            <!-- Détails du numéro de téléphone personnel. -->
            <create ruleclass="PhoneNumber">
              <!-- Valeur de PhoneNumber.owner -->
              <this/>
              <!-- Valeur de PhoneNumber.number -->
              <reference attribute="homePhoneNumber"/>
              <specify attribute="areaCode">
                <!-- Valeur de PhoneNumber.areaCode -->
                <reference attribute="homePhoneAreaCode"/>
              </specify>
            </create>

            <!-- Détails du numéro de téléphone professionnel.

                 Si le numéro de téléphone professionnel est identique à
                 son numéro de téléphone personnel (par ex., l'indicatif régional et
                 le numéro sont identiques), cette expression <create> renvoie
                 le même objet de règle que l'objet de règle renvoyé
                 par l'expression <create> ci-dessus.  Si les
                 numéros de téléphone ne sont pas identiques, deux objets
                 règles sont renvoyés.-->
            <create ruleclass="PhoneNumber">
              <this/>
              <reference attribute="workPhoneNumber"/>
              <specify attribute="areaCode">
                <reference attribute="workPhoneAreaCode"/>
              </specify>
            </create>

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

  </Class>

  <Class name="PhoneNumber">

    <Initialization>
      <!-- Les valeurs de ces attributs doivent être transmis, dans l'ordre,
           par une expression <create>. -->
      <Attribute name="owner">
        <type>
          <ruleclass name="Person"/>
        </type>
      </Attribute>
      <Attribute name="number">
        <type>
          <javaclass name="Number"/>
        </type>
      </Attribute>
    </Initialization>


    <!-- La valeur de cet attribut peut être transmise par un élément <specify>
         au sein d'une expression a <create>, qui va remplacer
         la dérivation par défaut ici. -->
    <Attribute name="areaCode">
      <type>
        <javaclass name="Number"/>
      </type>
      <derivation>
        <!-- Implémentation par défaut, utilisée si l'expression <create>
             n'<indique> pas de valeur pour cet attribut. -->
        <Number value="123"/>
      </derivation>
    </Attribute>

    <!-- Pour un objet de règle groupé, cette valeur dérivée ne sera
         calculée qu'une fois.

         Par exemple, si le numéro de téléphone professionnel d'une personne
         est identique à son numéro de téléphone personnel, le même objet de règle
         sera utilisé pour les numéros de téléphone personnel et professionnel,
         et la valeur "isOutOfThisArea" de cet objet de règle unique
         ne sera calculé qu'une fois.
      -->
    <Attribute name="isOutOfThisArea">
      <type>
        <javaclass name="Boolean"/>
      </type>
      <derivation>
        <not>
          <equals>
            <reference attribute="areaCode"/>
            <!-- Indicatif régional de l'agence -->
            <Number value="123"/>
          </equals>
        </not>
      </derivation>
    </Attribute>
  </Class>
</RuleSet>