call

Dieser Ausdruck ruft eine statische Java-Methode auf, um eine komplexe Berechnung durchzuführen.

Der Ausdruck call deklariert Folgendes:

Die Java-Methode muss für eine Klasse definiert sein, die sich zum Zeitpunkt der Validierung des Regelwerks im Klassenpfad befindet. Das erste Argument der Methode muss ein Objekt Session sein. Die übrigen Argumente müssen mit den Angaben im Regelwerk übereinstimmen.

Achtung: Sie müssen sicherstellen, dass jeder Java-Code, der von einem Ausdruck call aufgerufen wird, nicht versucht, Werte von Regelobjektattributen zu ändern.

CER-Regelwerke verwenden generell unveränderliche Datentypen. Es besteht jedoch die Möglichkeit, eigene veränderliche Java-Klassen als Datentypen zu verwenden. Wenn Sie dies tun, müssen Sie sicherstellen, dass kein aufgerufener Code die Änderung eines angepassten Java-Datentypes zu ändern, da eine solche Änderung dazu führen könnte, das zuvor ausgeführte Berechnungen nun "falsch" sind.

package curam.creole.example;

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

public class Statics {

  /**
   * Calculates a person's favorite color.
   *
   * This calculation is too complex for rules and so has been
   * coded in java.
   *
   * @param session
   *          The rule session
   * @param person
   *          the person
   * @return the calculated favorite color of the specified person
   */
  public static String calculateFavoriteColor(
      final Session session, final RuleObject person) {

    // Note that the retrieval of the attribute value must be
    // cast to the correct type
    final String name =
        (String) person.getAttributeValue("name").getValue();
    final Number age =
        (Number) person.getAttributeValue("age").getValue();

    final String ageString = age.toString();
    // Calculate the person's favorite color according
    // to the digits in their age and their name
    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>
        <!-- Call a java static method
             to perform the calculation -->
        <call class="curam.creole.example.Statics"
          method="calculateFavoriteColor">
          <type>
            <javaclass name="String"/>
          </type>
          <arguments>
            <!-- Pass in this person
                 as an argument to the
                 static method -->
            <this/>
          </arguments>
        </call>
      </derivation>
    </Attribute>

  </Class>

</RuleSet>
Vorsicht:
Seit Cúram Version 6 unterstützen CER und der Abhängigkeitsmanager die automatische Neuberechnung von durch CER berechneten Werten, falls sich ihre Abhängigkeiten ändern.

Wenn Sie die Implementierung einer statischen Methode ändern, wissen CER und der Abhängigkeitsmanager nicht automatisch, dass Attributwerte neu berechnet werden müssen, die unter Verwendung der alten Version der statischen Methode berechnet wurden.

Sobald eine statische Methode in einer Produktionsumgebung für gespeicherte Attributwerte verwendet wurde, sollten Sie anstelle einer Änderung der Implementierung eine neue statische Methode erstellen (mit der erforderlichen neuen Implementierung) und Ihre Regelwerke so ändern, dass die neue statische Methode verwendet wird. Wenn Sie Ihre Regelwerkänderungen, die auf die neue statische Methode verweisen, veröffentlichen, berechnen CER und der Abhängigkeitsmanager automatisch alle Instanzen des betroffenen Attributwerts neu.