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
- 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
- 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
- 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).