User Index (définition, manipulations)

BoTTom |   
  USER INDEX
 
Type d'objet disponible depuis la V2R10, mais les APIs de manipulation ne
 ne sont fournies que depuis la V2R30.
 
C'est un index dont toutes les entrées sont automatiquement triées
 A L'INSERTION.
                soit sur la totalité de la valeur de chaque poste
                soit sur une notion de clé
                                    (contigue à partir du premier octet)
Cela permet :
             -  D'avoir une liste de paramètres automatiquement triés,par ex
             -  C'est beaucoup plus souple qu'un fichier PF de travail
                  cela apporte moins de sécurité(pas de données permanantes)
             -  C'est beaucoup plus performant qu'une table triée par pgm
                 au dela d'un certain nombre de postes.
 
Utilisation:   Tri automatique d'un grand nombre de données par pgm
               Stockage de paramètres dans UN SEUL objet
               (peut éviter une multiplication de DATA AREA)
               L'API d'extraction permet un accès direct même en CLP.
 


|   
  Contenu interne d'un user index            AS/400 DUMP
DMPOBJ PARAMETERS
OBJ- index                           CONTEXT- bibli
OBJTYPE- *USRIDX
INDEX ATTRIBUTES-
  000000   00FFFF00 00000071 0E0AC6C9 E7C5C440   40404040 40404040 40404040 4040
  000020   40404040 40404040 E0000000 00000000   00000000 00800000 00000000 0000
  000040   00000000 00000000 000800E2 85000400   00000000 00000000 00000000 0000
  000060   20003200 0A000000 03000000 01000000   00
INDEX ENTRIES-
. 00001-
  000000   C3D3C5F1 82969591 96A49940 40404040   40404040 40404040 40404040 4040
  000020   40404040 40404040 40404040 40404040   4040
          *CLE1bonjour                     *
          *                                *
 
. 00002-
  000000   C3D3C5F2 81A44099 85A59689 99404040   40404040 40404040 40404040 4040
  000020   40404040 40404040 40404040 40404040   4040
          *CLE2au revoir                   *
          *                                *
        * * * * *  E N D  O F  L I S T I N G


|   
 
 API de création d'un user index
 
                    + QUSCRTUI 
 
                      - CHAR(20) <--user index-><--bibli-->
                                                   un nom
                                                   *CURLIB
                      - CHAR(10) attribut (ce que vous voulez)
 
                      - CHAR(1)  F = entrées (postes) à lg fixe
                                 V = entrées à lg variable
 
                      - BIN(4)   lg d'une entrée
                                    lg fixe, 1 à 2000 octets.
                                    lg var., 0 =  120 maxi
                                            -1 = 2000 maxi
                      - CHAR(1)  insertion par clé
                                 0 = pas de clé (classement sur la valeur
                                     de chaque entrée, qui doit être unique)
                                 1 = notion de clé
 


|   
                      - BIN(4)  lg de la clé
                                 nombre d'octets à partir du premier,
                                  si insertion par clé
 
                      - CHAR(1) màj synchrone (idem frcratio 1)
                                 0 = non
                                 1 = oui
 
                      - CHAR(1) optimisé pour:
                                 0 = accès direct
                                 1 = accès séquentiel
 
                      - CHAR(10) autorisations pour *PUBLIC
                                 *ALL,*USE,*CHANGE,....
 
                      - CHAR(50) texte descriptif
 
                groupe optionnel de paramètres N° 1
                      - CHAR(10) REPLACE : *YES, *
 
                      - CHAR(??) code erreur
 


|   
 
                groupe optionnel de paramètres N° 2
                      - CHAR(10) DOMAINE : *DEFAULT
                                           *SYSTEM
                                           *USER
 
                        Ce paramètre intervient avec un niveau de
                           sécurité 40 ou  supérieur.
 
 API d'extraction des attributs d'un user index.
 
                    + QUSRUIAT 
 
                      - CHAR(??) variable en retour
 
                      - BIN(4)   lg de la variable en retour
 
                      - CHAR(8)  format = IDXA0100
 
                      - CHAR(20) <--user index--><--bibli-->
 
                      - CHAR(??) code erreur


|   
 
 API d'écriture dans un user index
 
                    + QUSADDUI 
 
                      - CHAR(10) bibliothèque en retour
 
                      - BIN(4)   nombre d'entrées ajoutées (retour d'infos)
 
                      - CHAR(20) <--user index--><--bibli-->
 
                      - BIN(4)   type d'insertion
                                 1 = argument unique (index sans clé)
                                      si l'entrée existe ==> erreur
                                 2 = remplacement (index avec clé)
                                 3 = sans remplacement (index avec clé)
                                      si la clé existe ==> erreur
 
                      - CHAR(??) les entrées à ajouter
                                 si lg fixe le système utilise ce paramètre
                                  fonction de la longueur indiquée à la
                                  création.


|   
                                 SI lg variable le système utilisera la
                                  structure donnant lg et offset de chaque
                                  entrée.
 
                      - BIN(4) lg de la variable précédente
                                (contenant les entrées)
 
                      - CHAR(??) lg et offset des entrées pour un index
                                  à lg variable
                                 = x fois la structure suivante (8 octets)
                                   . BIN(4) lg de l'entrée
                                   . BIN(4) offset pour atteindre l'entrée
 
                      - BIN(4)   nombre d'entrées à ajouter
 
                      - CHAR(??) code erreur.
 
 Pour un index à lg fixe la zone "entrées" fera (nb d'entrées) fois la lg
                         la zone "lg et offset" n'est pas utilisée
 
 Pour un index à lg variable la zone "entrée" contiendra les entrées
 contigues, la zone "lg et offset" contiendra (nb d'entrées) fois 8 octets.


|   
 
 Soit un index à lg fixe (15 c) 
 
 Nombre d'entrées: 2
 
 Entrées         : de 1 à 15 la première
                     16 à 30 la deuxième.
 Offset          : (inutilisée)
 
 Soit un index à lg variable 
 
 Nombre d'entrées: 2
 
 Entrées          : de 1 à  7 "bonjour"   (lg 7)
                       8 à 18 "à suivre..."  (lg 11)
 
 Offset  (lg 16)  : ! 7 ! 1 !11 ! 8 !
                     lg   ^  lg   ^
                          !       !-déplacement pour atteindre la deuxième
                          !
                          !- déplacement pour atteindre la première entrée
 


|   
 API d'extraction d'entrées dans un user index
 
                    + QUSRTVUI 
 
                      - CHAR(??) variable en retour
 
                      - BIN(4) lg de la variable précédente
 
                      - CHAR(??) lgs et offsets en retour
 
                      - BIN(4) lg de la variable précédente
 
                      - BIN(4) nombre d'entrées retournées
 
                      - CHAR(10) bibliothèque en retour
 
                      - CHAR(20) <--user index--><--bibli-->
 
                      - CHAR(8)  format : IDXE0100
 
                      - BIN(4) nombre maxi d'entrées à retourner
 


|   
                      - BIN(4) type de recherche
                               1 = *EQ
                               2 = *GT
                               3 = *LT
                               4 = *GE
                               5 = *LE
                               6 = la première entrée
                               7 = la dernière entrée
                               8 = compris entre deux valeurs
 
                      - CHAR(??) argument de recherche
                                 ignoré pour 6 et 7
                                 doit contenir deux valeurs pour 8
                                               une valeur pour 1,2,3,4,5
 
                      - BIN(4)   lg de la variable précédente
 
                      - BIn(4)   offset pour la deuxième valeur dans le
                                  paramètre argument si type = 8.
 
                      - CHAR(??) code erreur.
 


|   
 
 La variable en retour (format IDXE0100) est découpée comme suit:
 
    1 à 4 (BIN 4) nbr d'octets retournés
    5 à 8 (BIN 4) nbr d'octets nécessaires
                    (si 1 à 4 < 5 à 8, toutes les entrées ne tiennent
                                        pas dans la variable)
    9 à ... toutes les entrées contigues
 
 La variable en retour contenant lg et offset est découpée comme suit :
 
    1 à 4 (BIN 4) nbr d'octets retournés
    5 à 8 (BIN 4) nbr d'octets nécessaires
   puis une structure de 8 octets répétée (nb d'entrées retournées) fois.
    9 à 12 (BIN 4) lg de la première entrée
   13 à 16 (BIN 4) déplacement à partir du début de la variable
                    précédente pour atteindre la première entrée.
    .....
   .. à .. (BIN 4) lg de l'entrée X
   .. à .. (BIN 4) déplacement à partir du début de la variable
                    précédente pour atteindre l'entrée X
 


|   
 
 API de suppression d'entrées dans un user index (renvoi les entrées
                                                  supprimées)
                    + QUSRMVUI 
 
                      - BIN(4) nombre d'entrées supprimées
 
                      - CHAR(??) variable en retour(entrées supprimées)
 
                      - BIN(4) lg de la variable précédente
 
                      - CHAR(??) lgs et offsets en retour
 
                      - BIN(4) lg de la variable précédente
 
                      - CHAR(10) bibliothèque en retour
 
                      - CHAR(20) <--user index--><--bibli-->
 
                      - CHAR(8)  format : IDXE0100
 
                      - BIN(4) nombre maxi d'entrées à supprimer


|   
 
                      - BIN(4) type de recherche
                               1 = *EQ
                               2 = *GT
                               3 = *LT
                               4 = *GE
                               5 = *LE
                               6 = la première entrée
                               7 = la dernière entrée
                               8 = compris entre deux valeurs
 
                      - CHAR(??) argument de recherche
                                 ignoré pour 6 et 7
                                 doit contenir deux valeurs pour 8
                                               une valeur pour 1,2,3,4,5
 
                      - BIN(4)   lg de la variable précédente
 
                      - BIn(4)   offset pour la deuxième valeur dans le
                                  paramètre argument si type = 8.
 
                      - CHAR(??) code erreur.


|   
Exemple d'utilisation:
 
 Un mémo entreprise:
 
    INDEX : MEMO lg fixe 266,clé : 10 (profil utilisateur+ 256 = notes)
 
    Pgm de traitement en CLP retrouvant le profil en cours et le profil
                                                                 de groupe
                     ........................................ 
                     : Mémo : utilisateur  AF400            : 
                     :  Ne pas oublier de ........          : 
                     :                                      : 
                     :                                      : 
                     :                                      : 
                     :                                      : 
                     :                                      : 
                     :  Rendre dossier yyyyyyyyyy !!!       : 
                     :                                      : 
                     :  F3= Exit, F10 = Groupe.             :                   
                     :                                      :                   
                     :......................................:                   
 


|   
 
 Avec F10 le pgm propose de retrouver le mémo associé au groupe de travail
  (profil de groupe)
 
 Il serait assez simple d'imaginer un niveau entreprise, .. etc ...
 
 
 
                     ........................................ 
                     : Mémo : - groupe -   QPGMR            : 
                     :  Notes destinées au groupe:          : 
                     :   Réunion du xx/xx/xx                : 
                     :    9 à 10 H ------                   : 
                     :   10 à 12 H ------                   : 
                     :                                      : 
                     :  Bernard fait un pot pour son        :
                     :   départ en retraite le zz/zz/zz     : 
                     :                                      : 
                     :  F3= Exit, F12 = retour utilisateur  :               ... 
                     :                                      :                 : 
                     :......................................:                 : 
 





©AF400