Modèle de requête
Ph.Leroy
2018-07-03
Modèle de requête
Sisal permet d'effectuer des requêtes sur les bases produit. Pour cela il faut definir des modèles de requête, qui permettent à l'utilisateur d'exploiter tous les possibilites de recherche de produit dans une ou plusieurs bases de donnees.
A partir d'un modèle de requête, un utilisateur peut definir une requête en precisant des critères de selection et des attributs d'affichage. Cette requête peut être sauvegardees et être re-executee ulterieurement.
L'ecran associe à une requête comprend trois parties. La colonne de gauche decrit l'arbre des attributs que l'on peut selectionner pour definir un critère ou un champ d'affichage. La partie superieure affiche la liste des critères de selection des produits, à chaque critère l'utilisateur associe une borne inferieure et une borne superieure. La partie inferieure comprend la liste des produits selectionnes, l'utilisateur precise les champs qu'il desire afficher en les selectionnant à partir de l'arbre de s attributs.
Modèle de requête par defaut
Sisal permet de creer un modèle de requête par defaut associe à une base produit unique. Il faut selectionner Fichier/Ouvrir/Requête, de selectionner base-produit comme type de requête et d'ouvrir une base-produit. Sisal demande alors le nom du fichier dans laquelle sera sauvegardee la requête generee par Sisal.
Description d'un modèle de requête
Un modèle de requête (extension .mrq par defaut) est un fichier texte contenant une description hierarchique des informations pouvant être recuperees d'une ou plusieurs base-produit. Une information elementaire est la valeur d'un attribut pour un produit particulier.
Chaque ligne est une directive de description d'attribut.
Un commentaire commence par les deux caractères // et se termine à la fin de la ligne.
Une directive se compose d'un identifiant suivi d'un descripteur et de paramètres, et se termine par un point-virgule.
Identifiant Descripteur { , parametres} ;
Par exemple
V2 Item, "Vitesse N°2", Turbines.V2, "%.0f", 8;
Un identifiant identifie uniquement un attribut dans le modèle, il peut être reference par des expressions ou des requêtes.
Descripteur de definition
On peut definir des chaines de caractère par un identifiacteur et chaque fois que cet identificateur apparaitra dans une expression on y substituera la chaine de caractère.
Identifiant Define, ChaineASubstituer;
Par exemple
DateDeValeur Define, "Root.Date + 86400";
Il s'agit d'une subtitution textuelle, elle doit donc être exprimee entre guillemet et ele peut comprendre une expression quelconque.
Descripteur de gamme
Etant donne qu'un modèle de requête peut s'interfacer simultanement à plusieurs base-produit donc à plusieurs lignes, on ne peut identifier sans ambiguite la game fonctionnelle applicable. Il est donc necessaire de definir explicitement la ou les gammes fonctionnelles qui seront utilisees dans le modèle de requête.
Identifiant Range {, Nombre DesignationDeLafonction};
Identifiant definit la gamme ainsi declaree, Range est le mot cle qui definit une gamme et derrière se trouve la liste des fonctions de cette gamme fonctionnelle.
Une fonction se declare donc par un numero correspondant au rang de la fonction dans la gamme operationnelle et une chaine de caractère quelconque qui designe cette fonction.
Par exemple
GammeFonctionnelle Range, 1 "Chargement de la palette"
, 2 "Assemblage du circuit"
, 5 "Vissage du circuit"
, 6 "Pose de l'ecran";
Dans ce cas on definit une gamme fonctionnelle à 4 fonctions.
Ce descripteur de gamme definit en fait un type d'attribut qui peut être utilise dans une declaration d'attribut. Dans ce cas lorsque l'utilisateur editera une tolerance d'un attribut de ce type, une fenêtre affichera la liste des fonctions avec les fonctions selectionnees mises en valeurs et lorsqu'une expression de ce type sera afichee on utilisera le format specifique aux gammes, c'est à dire un nombre hexadecimal precede du caractère "§".
De plus lorsqu'un attribut est de type Range la comparaison par rapport aux tolerances ensembliste, c'est à dire que tous les fonctions incluses dans la tolerance minimale doivent être presentes dans la valeur testee et aucune fonction absente de la tolerance maximale ne doit être presente dans la valeurs testee.
Descripteur de modèle
On peut associer une fiche-modèle qui permet d'afficher et d'imprimer la fiche-produit d'un produit particulier. Une seule fiche-modèle peut être definie dans un modèle.
Identifiant Model, CheminDAcces ;
Fiche Model, "C:SisalL982L982.rtf";
Une fiche-modèle est un fichier texte au format RTF, edite sous Wordpad par exemple et qui contient des champs balises par #Ident#. Au moment de l'affichage d'une fiche produit, Sisal substitue au vol les champs balises par les valeurs correspondantes à l'attribut de même nom.
Par exemple
Fiche-Produit
Date : #Date# Code à barre : #CAB#
Pour que cette fiche-produit soit affichable, il faut que le modèle de requête definisse au moins deux attributs : Date et CAB.
Descripteur de base-produit
Un descripteur de base-produit permet d'identifier une base-produit Sisal sur laquelle pourra être effectuee des recherches de produit.
Identifiant Product, CheminDAcces ;
Prod Product, " C:SisalL982L982.prd " ;
Le chemin d'accès est defini en statique sur un fichier base-produit. Une requête peut travailler sur des bases actives ou archivees, elle n'a pas de lien avec l 'exploitation courante.
Un champ de la base-produit pourra être accede dans le reste de la requête par la notation pointee. Par exemple :
Prod.Date
Descripteur d'attribut
Un attribut peut être simple ou compose. Un attribut simple ne definit que lui-même et apparaà®t comme une simple ligne dans l'arbre des attributs (partie de gauche d'un ecran de requête).
Identifiant Item, Libelle, Expression, Type, Format, Largeur ;
Date Item," Date de creation", Date, " %.1t", 8 ;
Un attribut compose definit des sous-attributs que l'utilisateur peut selectionner en cliquant sur le bouton " + " associe à l'attribut compose. Un attribut peut être selectionnable et dans ce cas il s'agit d'un " Item ", ou ne pas être selectionnable et dans ce cas il s'agit d'un " Node "
Identifiant Item, Libelle, Expression, Type, Format, Largeur, Begin { Sous-attribut ;} End ;
Identifiant Node Libelle, begin { Sous-attribut ;} End ;
Par exemple
Select Item, "Cote 1", Prod.Cote1, "%.3f", 6, begin
Max Item, "Cote maximale", Prod.Cote1.Max, "%.3f", 6;
Min Item, "Cote minimale", Prod.Cote1.Min, "%.3f", 6;
End;
Select Node, "Contrà´les electriques", begin
Starter Item, "Tension d'allumage", Prod.Starter, "%.3f V", 6;
Decharge Item, "Tension de decharge", Prod.Ballast, "%.3f", 6;
End;
Le libelle apparaà®tra dans l'arbre des attributs pour decrire cet attribut.
L'expression est une expression qui calculee pour un produit particulier dans la table des critères, rend une valeur comparable à ces bornes minimales et maximales.
Le type definit le type d'expression, ce qui permet de faire les comparaisons. Les types reconnus sont: Int, Float, String, Date, Time, Range et les types gamme declares dans le modèle de requête.
Le format est un format identique à ceux de la fonction Format, il permet de transformer l'expression calculee pour affichage dans la table des produits selectionnes.
La largeur definit par defaut, la largeur d'affichage de la colonne dans la table des produits selectionnes.
Entre les mots-cles "Begin" et "End", apparaissent les sous-attributs associes à ce premier attribut. Ces sous-attributs peuvent eux-mêmes definir des sous-attributs.
Expression
Une expression est une expression calculee qui rend une valeur. Les principes de calculs sont les mêmes que les calculs fait dans un script. L'expression n'est pas typee, c'est seulement à la fin avant comparaison dans la table de critères, que la valeur est convertie dans le type final.
Les operateurs ont les priorites suivantes:
Noms |
Operateur |
Priorite |
Remarques |
Parenthèse |
() |
1 |
Permet d'effecteur des souscalculs, 10*( 4+ 2) |
Multiplication |
|
2 |
Multiplication1 |
Division |
/ |
2 |
Division1 |
Addition |
+ |
3 |
Addition de valeurs numeriques, |
Rajout d'une duree en seconde à une date |
|
|
|
Soustraction |
3 |
Soustraction de valeurs numeriques, |
|
Soustraction d'une duree en seconde à une date |
|
|
|
Decalage gauche |
<< |
4 |
L'operande de droite doit être entier (n), |
Decalage vers la gauche d'un champ de bit, |
|
|
|
Suppression des n caractères de gauche pour une chaà®ne de caractère. |
|
|
|
Decalage Droite |
>> |
4 |
L'operande de droite doit être entier (n), |
Decalage vers la droite d'un champ de bit, |
|
|
|
Suppression des n caractères de droite pour une chaà®ne de caractère. |
|
|
|
Concatenation de chaà®nes de caractères |
: |
5 |
Force les operandes en chaà®ne de caractères avant de les concatener. |
Superieur |
> |
6 |
Comparaison superieure stricte |
Superieur ou egal |
>= |
6 |
Comparaison superieure ou egale |
Inferieur |
< |
6 |
Comparaison inferieure stricte |
Inferieur ou egal |
<= |
6 |
Comparaison inferieur ou egale |
Egalite |
= |
7 |
Egalite des operandes |
Difference |
! |
7 |
Difference des operandes |
Et binaire |
& |
8 |
Ne s'applique qu'à des entiers ou des ranges |
Ou Exclusif binaire |
^ |
9 |
Ne s'applique qu'à des entiers ou des ranges |
Ou binaire |
| |
10 |
Ne s'applique qu'à des entiers ou des ranges |
Et |
And |
11 |
Et logique |
Ou |
Or |
12 |
Ou logique |
Lien exact |
Where Is |
13 |
Operateur ternaire, permet d'etablir un lien entre deux bases-produit |
Lien au plus proche |
Where Near |
14 |
Operateur ternaire, permet d'etablir un lien entre deux bases-produit |
Les operandes peuvent être des constantes, des variables, des donnees d'un produit d'une base-produit, ou un attribut calcule de la requête.
Selection
La première ligne de critère est inamovible, elle porte sur la date de creation de la base principale et permet d'effectuer la selection dans la base-produit.
Lorsque l'utilisateur lance une requête, l'outil de selection de produit va charger en memoire chaque produit de la base principale et evaluer à chaque fois et successivement chacun des critères de selection. Chaque critère rend une valeur donne pour ce produit, si cette valeur est en dehors des tolerances le produit est rejete.
Si le produit est retenu, il est enregistre dans la liste de selection. La table des produits selectionnes est affiche d'après le contenu de la liste de selection. L'affichage peut se derouler concurremment à la selection, dans ce cas la selection est prioritaire et les champs sont affiches avec des valeurs arbitraires "...".
Requêtes multi_base
Les requêtes multi-base permettent de realiser des selections avec des critères très complexes. Elles permettent de realiser des selections de produits en croisant les donnees venant de plusieurs bases.
Le principe est simple un attribut peut être calcule en fonction d'une valeur obtenue dans une autre base indexe par une valeur calculee.
Le plus simple est de prendre des exemples afin de comprendre.
Lien exact
Supposons que pour des raisons de compacite, le schema des donnees comprennent deux bases-produit: une base Composant et une base Produit_fini. Chaque element de chacune de ces bases est identifie par un code à barre et la base Produit_fini garde pour chaque produit fini le code à barre du composant assemble.
Voici nos deux bases
Champ de Composant |
Type |
Description |
Date |
Date |
Date de creation |
Cab |
Int |
Code à barre |
Mesure1 |
Measure |
Une mesure particulière |
Champ de Produit_fini |
Type |
Description |
Date |
Date |
Date de creation |
Cab |
Int |
Code à barre |
Composant |
Int |
Code à barre du composant |
On suppose de plus que Composant est indexee sur Cab.
On veut selectionner les produits finis dont la mesure du composant est comprise entre 95 et 105. On va definir le modèle de requête suivant:
Fini Product, "C:SisalTestProduit_fini.prd";
Comp Product, "C:SisalTestComposant.prd";
Fin Node, "Produit fini", Begin
Date Item, "Date de creation", Fini.Date, "%.3t", Date, 8;
Cab Item, "Code à barre", Fini.Cab, "%d", Int, 8;
Comp Item, "Composant", Fini.Composant, "%d", Int, 8, begin
Cdate Item, "Date du composant", Comp.Date Where Comp.Cab Is Fini.Composant, "%.3t", Date, 8;
Mes1 Item, "Mesure 1", Comp.Mesure1 Where Comp.Cab Is Fini.Composant, "%3f V", Float, 8;
End;
End;
Le deuxième critère sera Mes1 avec comme borne inferieure 95 et comme borne superieure 105.
Lorsque Sisal evaluera un produit de la base Produit_Fini, il rend une valeur pour l'expression "Fini.Composant" et l'operateur "Where .. Is .." recherche alors dans la base Composant le composant dont le code à barre "Comp.Cab" est egale à "Fini.Composant".
Si on trouve le composant correspondant, l'expression rendra la valeur du champ "Comp.Mesure1" de l'enregistrement correspondant. Après on compare aux bornes inferieures et superieures.
Si on ne trouve pas le composant correspondant, l'expression rend une valeur indefinie et le produit est rejete.
Lien au plus proche
Dans cette exemple on a une base-produit qui enregistre les produits finis, et une autre base-produit qui est utilisee pour journaliser la temperature d'un four toutes les dix minutes.
Voici nos deux bases
Champ de Four |
Type |
Description |
Date |
Date |
Date d'enregistrement |
Temperature |
Flottant |
Temperature du four |
Champ de Fini |
Type |
Description |
Date |
Date |
Date de creation |
Cab |
Int |
Code à barre |
On veut selectionner les produits finis qui ont ete fabrique 2 heures avant que la temperature du four soit inferieure à 185°C.
On va definir le modèle de requête suivant:
Fini Product, "C:SisalTestFini.prd";
Four Product, "C:SisalTestFour.prd";
Fin Node, "Produit fini", Begin
Date Item, "Date de creation", Fini.Date, "%.3t", Date, 8;
Cab Item, "Code à barre", Fini.Cab, "%d", Int, 8;
End;
Four Node, "Temperatures du four", Begin
Temp Item, "Temperature de cuisson", Four.Temperature Where Comp.Date Near Fini.Date+2*3600, "%3f °C", Float, 4;
End;
Le deuxième critère sera Temp avec comme borne inferieure 0 et comme borne superieure 185.
Lorsque Sisal evaluera un produit de la base Fini, il rend une valeur pour l'expression "Fini.Date+2*3600", c'est à dire deux heures pares la creation du produit.
L'operateur "Where .. Near .." recherche alors dans la base Four la journalisation de temperature dont la date est la plus proche superieure à deux heures après la creation du produit.
Si on trouve la journalisation correspondante, l'expression rendra la valeur du champ "Four.Temperature" de l'enregistrement correspondant et après on compare aux bornes inferieures et superieures.
Si on ne trouve pas le composant correspondant, l'expression rend une valeur indefinie et le produit est rejete.