call

Appelle une méthode Java statique pour effectuer un calcul complexe.

L'expression call déclare ce qui suit :

La méthode Java doit se trouver sur une classe qui se trouve sur le chemin de classes au moment de la validation du jeu de règles. Le premier argument de la méthode doit être un objet Session et les arguments restants doivent correspondre à ceux spécifiés dans le jeu de règles.

avertissement : Vérifiez qu'un code Java appelé par une expression call ne tente pas de modifier les valeurs des attributs d'objet de règle.

En général, les jeux de règles CER utilisent des types de données non modifiables, mais il est possible d'utiliser vos propres classes Java modifiables en tant que types de données ; si c'est le cas, il est de votre responsabilité de vérifier qu'aucun code appelé n'entraîne la modification du type de données Java personnalisé, car les calculs précédemment effectués deviendraient alors "faux".

package curam.creole.example;

import curam.creole.execution.RuleObject;
import curam.creole.execution.session.Session;

public class Statics {

  /**
   * Calcule la couleur préférée d'une personne.
   *
   * Ce calcul est trop complexe pour les règles et a été codé
   * en java.
   *
   * @param session
   *          Session de la règle
   * @param person
   *          Personne
   * @retourner la couleur préférée calculée de la personne spécifiée
   */
  public static String calculateFavoriteColor(
      final Session session, final RuleObject person) {

    // Notez que la récupération de la valeur d'attribut doit être
    // transtypée vers le type correct
    final String name =
        (String) person.getAttributeValue("name").getValue();
    final Number age =
        (Number) person.getAttributeValue("age").getValue();

    final String ageString = age.toString();
    // Calculer la couleur préférée de la personne en fonction
    // des chiffres inclus dans leur âge et leur nom
    if (ageString.contains("5") || ageString.contains("7")) {
      return "Blue";
    } else if (name.contains("z")) {
      return "Purple";
    } else {
      return "Green";
    }

  }
}
<?xml version="1.0" encoding="UTF-8"?>
<RuleSet name="Example_call"
  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="name">
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>
        <specified/>
      </derivation>
    </Attribute>

    <Attribute name="favoriteColor">
      <type>
        <javaclass name="String"/>
      </type>
      <derivation>
        <!-- Appeler une méthode Java statique
             pour effectuer le calcul -->
        <call class="curam.creole.example.Statics"
          method="calculateFavoriteColor">
          <type>
            <javaclass name="String"/>
          </type>
          <arguments>
            <!-- Transmettre à cette personne
                 en tant qu'argument de la
                 méthode statique -->
            <this/>
          </arguments>
        </call>
      </derivation>
    </Attribute>

  </Class>

</RuleSet>
ATTENTION :
Depuis Cúram V6, CER et le gestionnaire de dépendance prennent en charge le recalcul automatique des valeurs calculées par CER si leurs dépendances changent.

Si vous changez l'implémentation d'une méthode statique, CER et le gestionnaire de dépendance ne sauront pas automatiquement comment recalculer les valeurs d'attribut qui ont été calculées via l'ancienne version de votre méthode statique.

Une fois qu'une méthode statique a été utilisée dans un environnement de production pour les valeurs d'attribut enregistrées, plutôt que de modifier l'implémentation, vous devez créer une nouvelle méthode statique (avec la nouvelle implémentation requise) et modifier vos jeux de règles pour utiliser la nouvelle méthode statique. Lorsque vous publiez vos changements de jeu de règles afin qu'ils désignent la nouvelle méthode statique, CER et le gestionnaire de dépendance recalculent automatiquement toutes les instances des valeurs d'attribut affectées.