Manipuler les données d'un enregistrement en mode expert

 

 

 

 

Préambule

 

Les informations ci-dessous s'adressent exclusivement aux utilisateurs ayant une très bonne connaissance de la manipulation des tableaux dans le langage 4D et de la manipulation des données Kentika.

 

Contexte d'utilisation

 

Lors du chargement d'un enregistrement en vue d'une mise à jour de ses données grâce à la fonction Record_Load, un certain nombre de tableaux sont créés en mémoire. Ces derniers comportent la description de la structure de l'enregistrement ainsi que les données.

 

Lors de l'enregistrement, les informations contenues dans les tableaux sont reventilées dans les enregistrements physiques de la base de données 4D et les index sont remis à jour. C'est pourquoi il est impératif de toujours utiliser ces fonctions sur les tables "Document" ; "Auteur" ; "Référence" ; "Personne" et "Revue" pour les données de la fiche signalétique (les données de gestion ne font pas l'objet du même mécanisme).

 

Variables et tableaux

 

Variable d'identification de l'enregistrement

 

LForm_Record_num : numéro d'enregistrement

eList_FileNum : numéro de table (deux derniers caractères du numéro d'enregistrement)

AForm_Record_Type : type (ne tient pas compte de la langue)

AForm_Record_Type_Lib : type dans la langue de l'utilisateur

AForm_Record_Site : code du site

EForm_Record_Filtre : numéro de requête correspondant au filtre de saisie éventuelle

 

 

Tableau de structure

 

Après l'exécution de Record_Load, que ce soit pour créer un nouvel enregistrement ou pour mettre à jour un enregistrement existant, les tableaux de description de structure suivants sont alimentés :

 

ETForm_numField : numéro des rubriques, tels qu'identifiées en structure

TTForm_Lib : intitulé de la rubrique (dans la langue de l'utilisateur)

TTForm_Att : attributs

 

L'attribut est une chaîne de 7 caractères suivi d'informations complémentaires optionnelles exprimées en mode xml (def : valeur par défaut ; UseTable : rubrique code utilisant les valeurs d'une autre table ; etiq : étiquette de la rubrique...)

 

Caractère        Contenu      

1 : nature        1 à 9 (1=code, 2=thesaurus, 3=format libre, 4=date

    5=nombre, 6=email, 7=URL, 8=lien, 9=adresse)

2 : obligatoire   0 ou 1

3 : multiple      0 ou 1

4 : visu   0 ou 1 (0 dans le cas où l'utilisateur n'a pas le droit de voir la rubrique)

5 : index0 ou 1

6 : alerte0 ou 1 (1 si une modification doit provoquer un log de type 3 vs 2 en cas de modification)

7 : code ordre  0, 1 ou 2 rubrique seule, tête de groupe, dépendant d'une autre

 

 

Exemple : "4101100" correspond à une rubrique date (4) obligatoire (1) mono valuée (0) visible (1) indexée (1) pas d'alerte (0) rubrique seule (0)

 

Tableau des valeurs

 

Les valeurs sont contenues dans des tableaux à deux dimensions. La première dimension correspond à la rubrique, la deuxième aux valeurs. Si une rubrique n'est pas multi-valuée, le tableau correspondant aura toujours une et une seule valeur.

 

TTForm_Val_code : code des valeurs (dépend de la nature)

TTForm_Val_lib : libellé des valeurs

 

Contenu des valeurs en fonction de la nature de la rubrique

 

Suivant la nature, les tableaux indiqués ci-dessus auront des contenus différents.

 

Nature   Contenu "TTForm_Val_Code"   Contenu "TTForm_Val_lib"       

1 (code) Code de la valeur  Libellé de la valeur (dans la langue)

2 (thes)  Record_Num (thesaurus)Descripteur

3 (valeur)                  Valeur

4 (date)  Début\Fin    Date telle que saisie

5 (nombre)      Nombre      Nombre saisi

6 (email)         email

7 (URL)          URL

8 (lien)   Record_Num (table liée) Intitulé de l'enregistrement

9 (adresse)      Adresse XML        ADresse en text

 

 

Exemple

 

Le script suivant modifie le contenu de la rubrique langue (dont l'étiquette est LA et dont on ne connaît pas, a priori, le Field_Num) de l'enregistrement 40103. Si ce dernier contient la valeur "FR", la valeur est changée en"AN"

 

LForm_Record_Num:=40103

Record_Load (3;1;LForm_Record_Num)

Ce1:=Chercher dans tableau(TTForm_Att;"@<etiq>LA</etiq>@")

Si (Ce1>0)

    Ce2:=Chercher dans tableau(TTForm_Val_code{Ce1};"FR")

    Si (Ce2>0)

             TTForm_Val_code{Ce1}{Ce2}:="AN"

             Record_Save (LForm_Record_Num)

    Fin de si

Fin de si