|
VADELIA |
SADELIA |
WADELIA |
EADELIA |
(I/B) (C/S) |
(B) (S) |
(I/B) (C/S) |
(B) (C/S) |
Paragraphe d'utilisation
DECLARATION
Syntaxe
INDEX_LISTE NomIndex NomListe SuiteZonesAccès
SuiteZoneAccès |
→ |
SuiteZonesAccès, ZoneAccès | ZoneAccès Sens |
Sens |
→ |
*ASC | *DESC | Rien |
Description
Cet ordre permet de déclarer un index sur une liste.
La liste ne peut être qu'une liste mémoire (et non une liste graphique, ou une propriété LISTE d'une variable de type OBJET_GRAPHIQUE)
Les zones d'accès de l'index ne peuvent pas être de type IMAGE.
Remarques :
Les index ne sont créés que lors de leur première lecture (voir les ordres L4G permettant de manipuler l'index).
Le fait de déclarer de nombreux index sur une liste dégrade légèrement les performances lorsque celle-ci est modifiée (ajout, suppression, etc), car les index sont mis à jour automatiquement. Il est donc conseillé de ne créer les index (via LIRE_ELT, LIRE_P_ELT ou LIRE_D_ELT) que lors de leur utilisation, puis de les supprimer lorsqu'ils ne sont plus utilisés (via DETRUIRE_INDEX)
10 index au maximum peuvent être déclarés sur la liste.
L'élément lu par un index devient l'élément courant de la liste en affectant les valeurs aux variables qui composent la liste.
Les index ne transitent pas dans la gestion client/serveur. De ce fait, un index ne doit pas être lu alternativement en client/serveur (la lecture échouera). De plus, un index sera considéré comme n'étant plus à jour en début de service, si la liste sur laquelle il est déclaré est réceptionnée dans ce service.
Par exemple
LISTE MaListe Zone1 Zone2 Zone3 Zone4
INDEX_LISTE MonIndex1 MaListe Zone1
INDEX_LISTE MonIndex2 MaListe Zone1 *DESC
INDEX_LISTE MonIndex3 MaListe Zone3 *DESC, Zone2 *DESC
Remarques sur les listes paramètres :
Dans le cas d'une liste paramètre du programme, les index définis sur cette liste sont transmis, et sont mis à jour lors de la modification de la liste (d'où l'intérêt de les détruire dans le programme appelant s'ils sont devenus inutiles). Ils peuvent donc être manipulés en étant de nouveau déclarés dans ce programme : les zones d'accès doivent être les mêmes, même si leur nom est différent.
Exemple :
/* Programme n°1
LISTE MaListe Zon1 Zone2 Zone3 Zone4
INDEX MonIndex1 MaListe Zone2
APPELER Programme2 MaListe
/* Programme n°2
LISTE MaListeParam P2_Zone1 P2_Zone2 P2_Zone3 P2_Zone4
INDEX_LISTE NouvelIndex MaListeParam P2_Zone2
/* Cet index ne sera pas réellement nouveau, car la liste est un paramètre, et qu'elle possède déjà un index dont la définition est identique (même si le nom de la zone s'appelait Zone2 dans le premier programme, et P2_Zone2 ici, et que les index n'ont pas le même nom).
INDEX_LISTE MonIndex1 MaListeParam P2_Zone2 *DESC
/* Cet index sera réellement nouveau, car bien qu'il ait le même nom qu'un index déjà déclaré sur cette liste dans un autre programme, il n'existe encore aucun index avec cette définition d'accès (2eme zone de la liste de façon descendante).
PARAM MaListeParam
INSERER_ELT MaListeParam
/* Cette modification de la liste met à jour l'index défini sur la liste d'origine déclarée dans le programme n°1
Avertissement :
A partir de la version 14.7.0, ce comportement a changé. Cependant, il est possible de revenir au comportement initial en fixant à la valeur "1" la clé WIN_INDEX_LIST_STRING_COMPARE_IGNORE dans le fichier adeliws.ini.