2017-03-01 2 views
0

J'utilise drools 6.5.0.Final pour créer mon projet de drools. J'essaie d'utiliser les tables de décision guidées (.gdst) dans le plan de travail. Je veux utiliser un code java dans WHEN et alors partie des règles, comme je suis autorisé dans les .drl fichiers, comme ci-dessous:Comment utiliser le code java dans les règles créées dans drools workbench

rule "filter rule" 
when 
    //conditions 
    $Cp : CpClass(name == "Tom", 
        Math.abs(score) > 10 
       && 
        // How do I use functions like below? 
        ($Cp.parseTime(CurrTime).getTime() - 
         $Cp.parseTime(PrevTime).getTime())/1000 > 120 
       ) 
then 
    //actions 
    System.out.println("Rule passed for : "+ $Cp.toString()); 
    $Cp.isGoodCp = true; 
end 

L'objet utilisé dans l'exemple ci-dessus:

public class CpClass { 

    public String name; 
    public String currTime; 
    public String prevTime; 
    public boolean isGoodCp = false; 

    // Function to parse string to date 
    public Date parseTime(String time) { 
     SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); 
     Date parsedDate = null; 
     try { 
      if(time != null) 
       parsedDate = sdf.parse(time.substring(11)); 
      else 
       parsedDate = sdf.parse("00:00:00"); 
     } catch (Exception e) { 
      System.out.println("Error parsing:"+e); 
     } 
     return parsedDate; 
    } 
} 

Existe-t-il un moyen d'utiliser les fonctions java définies par l'utilisateur/intégrées comme je l'ai ici dans une table de décision guidée?

+0

C'est plutôt sommaire: Quels sont '$ tickCp',' 'CurrTime' et PrevTime'? Laquelle des valeurs voulez-vous varier dans les lignes de votre table de décision? Avez-vous pensé à cacher les "fonctions Java" comme méthodes de classe 'CpClass'? – laune

+0

Désolé, le tickCp était une faute de frappe. 'CurrTime' et' PrevTime' sont des membres de la classe définie par l'utilisateur 'CpClass', et' Cp' est un objet de la même classe. Si je fais les fonctions une méthode de la classe, comme 'parseTime()' sera-je capable de l'utiliser dans une table guidée? – ar7

Répondre

0

Y at-il un moyen d'utiliser les fonctions java définies par l'utilisateur/intégrées comme je l'ai ici dans une table de décision guidée?

Oui, dans toutes les règles. Ils clé met le code à leur disposition. KIE WorkBench et KIE Execution Server utilisent tous les deux l'outil de génération Maven pour la gestion des dépendances; par conséquent, la réponse est avec la configuration et l'utilisation de Maven. [0]

Fondamentalement, construisez votre code supplémentaire dans un pot et déployez-le dans un dépôt Maven distant disponible pour KWB et KES. La façon dont vous construisez, empaquetez et déployez le pot vers le repo distant est votre choix; utilisent généralement Maven ou Gradle. Ceci est fait à l'extérieur du KWB.

Ensuite, modifiez le fichier pom.xml pour le projet KWB en ajoutant la dépendance jar. Le "Project Editor" de KWB a une fonction pour ajouter une dépendance ou vous pouvez l'ajouter manuellement [1]. L'éditeur de projet KWB n'a pas de fonction d'interface utilisateur pour ajouter la section, alors passez à la "vue du référentiel" sur l'icône des paramètres de la dent et éditez directement le fichier pom.xml [2]. De même, si vous utilisez un référentiel Maven distant avec des informations d'identification, configurez settings.xml pour que KWB y accède par la page de plug-in Maven.

Maintenant, le contenu du pot est disponible pour l'utilisation des règles comme avec n'importe quel code Drools.

[0] http://maven.apache.org/guides/index.html

[1] https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management

[2] http://maven.apache.org/plugins/maven-deploy-plugin/usage.html

+0

Je comprends que je peux importer ces fonctions à partir de dépendances maven, mais ma question était de savoir comment utiliser ces fonctions dans des tables de décision guidées, où la source n'est pas vraiment éditable. Est-ce que le dialecte MVEL aide? – ar7

+1

Oh, j'ai inféré votre question incorrectement. Après avoir la classe sur les importations, si les types de condition/action de base ne fonctionnent pas pour votre situation, utilisez la condition/le type d'action BRL et utilisez la lettre de crédit pour le contenu. – Jeff

+0

Mais si je fais cela, je ne serai pas en mesure de définir des valeurs différentes pour les différentes lignes à droite? Est-il possible d'utiliser des fonctions membres de l'objet à partir d'une formule ou quelque chose? – ar7