Comment fonctionne le moteur de règles

Qu'est ce qu'une règle

une règle est composée de 3 élements :
  • une description
  • une liste de critères
  • une liste d'actions
A l'heure actuelle, les règles servent pour :
  • les affectations de machines à des entités depuis OCS
  • les affectations des utilisateurs à des entités avec profils depuis LDAP
  • les règles de suivi métier

Les informations sur l'implémentation du moteur sont disponibles ici

Définition du type de règles

L'ajout d'un nouveau type de règle se résume à une nouvelle déclaration dans le fichier define.php

define("<mon type de règle>",<prochain ID libre>);

Classes utilisées par le moteur de règles

  • Rule : gestion unitaire d'une règle
  • RuleCollection : gère une liste de règles

Implémentation d'une règle

  • Créer une classe qui étend Rule
  • Créer une classe qui étend RuleCollection

Fonctions à implémenter

Dans votre classe qui étend Rule :
  • getTitle() : renvoie le titre du type de règle
Dans votre classe qui étend RuleCollection :
  • maxActionsCount() : renvoie un entier qui indique le nombre d'actions possibles pour ce type de règle
  • prepareInputDataForProcess($input,$params) : prépare les données à traiter dans la règle. Cette fonction sert à récupérer les données qui seront ensuite vérifiées (paramètres depuis la base OCS, attributs provenant du LDAP, etc...)
  • getTitleRule($target) : permet d'afficher des informations juste avant l'affichage d'une règle
  • getTitleCriteria($target) : permet d'afficher des informations juste avant l'affichage des critères d'une règle
  • getTitleAction($target) : permet d'afficher des informations juste avant l'affichage des actions d'une règle

Types de paramètres pour les critères et actions

  • table (critère & action) : nom de la table dans laquelle on va chercher la liste des valeurs du critère ou de l'action
  • field (critère) : nom du champs de la table depuis lequel on va récupérer la valeur à traiter dans la règle
  • name (critère & action) : libellé du critère ou de l'action pour affichage dans l'interface web
  • linkfield (critère) : nom du champs qui permet de faire le lien entre la table définie dans table et celle principale
  • type (critère & action) : indique la manière la liste de critères ou d'actions sera affichée dans l'interface (liste déroulante, etc...)
  • virtual (action) : indique que la récupération de la valeur du critère fait l'objet d'un traitement particulier
  • id (action) : indique le nom interne de l'action pour le moteur de règle (

Déclaration des paramètres d'une règle

Les paramètres de critère et d'action des règles sont définis dans le fichier rules.constant.php

Critères

L'ensemble des critères est stocké dans le tableau $RULES_CRITERIAS.

Exemple
L'exemple suivant indique un critère des règles d'affectation d'une machine à une entité. Celui-ci indique le serveur OCS depuis lequel la machine est remontée. La liste des serveurs OCS se trouve dans la table glpi_ocs_config, le champs qui sera affiché est 'name'. La liste sera affichée dans une liste déroulante (type = dropdown).
Ce critère est de type virtuel, c'est à dire que, dans ce cas précis, il ne provient pas d'une requête sur la base OCS mais d'un champs interne à GLPI.

$RULES_CRITERIAS[RULE_OCS_AFFECT_COMPUTER]['OCS_SERVER']['table']='glpi_ocs_config';
$RULES_CRITERIAS[RULE_OCS_AFFECT_COMPUTER]['OCS_SERVER']['field']='name';
$RULES_CRITERIAS[RULE_OCS_AFFECT_COMPUTER]['OCS_SERVER']['name']=$LANG[[ocsng]];
$RULES_CRITERIAS[RULE_OCS_AFFECT_COMPUTER]['OCS_SERVER']['linkfield']=_;
$RULES_CRITERIAS[RULE_OCS_AFFECT_COMPUTER]['OCS_SERVER']['type']='dropdown';
$RULES_CRITERIAS[RULE_OCS_AFFECT_COMPUTER]['OCS_SERVER']['virtual']='true';
$RULES_CRITERIAS[RULE_OCS_AFFECT_COMPUTER]['OCS_SERVER']['id']='ocs_server';

Actions
L'ensemble des actions est stocké dans le tableau $RULES_ACTIONS.

Exemple
L'exemple ci-dessous défini qu'un critère des règles d'affectation d'utilisateurs à des entités depuis LDAP est la liste des entités. Le champs sur lequel l'action va s'effectuer est FK_entities. Les valeurs possibles pour les entités se trouvent dans la table glpi_entities et seront affichées sous forme de liste déroulante.

$RULES_ACTIONS[RULE_LDAP_AFFECT_ENTITY]['FK_entities']['name']=$LANG[[entity]];
$RULES_ACTIONS[RULE_LDAP_AFFECT_ENTITY]['FK_entities']['type']='dropdown';
$RULES_ACTIONS[RULE_LDAP_AFFECT_ENTITY]['FK_entities']['table']='glpi_entities';

Paramètres d'exécution du moteur de règles

Le moteur peut se comporter de 2 manières différentes :
  • dès qu'une règle est vérifiée, le moteur arrête l'exécution et exécute la ou les action(s) prévues pour celle-ci
  • le moteur déroule toutes les règles, et exécute à la fin les actions prévues pour toutes les règles vérifiées
Exemple
  • Affectation d'une machine à une entité : dès qu'une règle est vérifiée par le moteur, on affecte la valeur prévue de l'entité à la machine. Le traitement des règles se termine dans évalue celles qui suivent
  • Affectation d'entités et profils à un utilsateur : le moteur exécute toutes les règles, et exécute les actions prévues seulement la liste terminée

Il est possible de règler ce comportement en donnant une valeur à la variable de classe $this->stop_on_first_match. Si la variable est omise, stop_on_fist_match est à la valeur FALSE (donc le moteur déroule toutes les règles).

Règles d'affectation des machines à des entités

Schéma

Image(affectocs_fr.png)

Règles d'affectation des utilisateurs à des entités avec des profils

Schéma

Image(affectuser_fr.png)

affectocs_fr.png (42.2 KB) walid, 04/23/2007 09:16 PM

affectuser_fr.png - Schéma en français de l'affectation des utilisateurs à des entités (42.4 KB) walid, 04/24/2007 11:41 AM