
Manipuler des enregistrements
Préambule
Ce qui est décrit ci-après correspond aux tables utilisant le dictionnaire virtuel mis en place dans Préférences>Structure. Les autres tables (informations de gestion) utilisent des ordres 4D directement pour leur manipulation.
Vue d'ensemble
Rechercher et consulter des enregistrements
Select (table ; rubriques ; valeur ; opérateur) : effectue une recherche sur la table en cherchant la valeur dans les différentes rubriques et en tenant compte de l'opérateur de comparaison.
Table_sort (rubrique) : tri les enregistrements de la table courante suivant la rubrique indiquée en paramètre.
Pour tri descendant, ajouter la commande BSort_Des:=vrai avant l'appel à Table_Sort
Select_sel2tab (numéro de table ; pointeur vers tableau à alimenter) : charge le tableau des numéros d'enregistrements de la sélection de la table.
Goto_record (record_num) : rend l'enregistrement dont le numéro (record_num) est passé en paramètre.
Valeur_rubrique (rubrique ; attribut) : permet d'obtenir la valeur d'une rubrique de l'enregistrement courant de la table à laquelle la rubrique appartient avec une mise en forme spécifiée dans le paramètre attribut.
Notion de sélection
Avertissement aux programmeurs 4D : la notion de sélection telle que gérée par 4D ne peut être utilisée directement ici car certaines rubriques étant des rubriques récursives (rubrique d'une table pointant sur un enregistrement de la même table), les sélections 4D sont en permanence modifiées. Pour balayer le contenu d'une sélection, vous devez charger les numéros d'enregistrements dans un tableau puis balayer les valeurs de ce tableau.
Exemple : exporter une sélection de titres de documents
Le script dont le code est reproduit ci-dessous effectue les opérations suivantes :
Recherche les documents de type Article ou Ouvrage et ayant MAC dans le titre (Select)
Tri la table par ordre de titre croissant (Table_Sort)
Charge le tableau de sélection (Select_sel2tab)
Si des documents ont été trouvés (Taille tableau), propose à l'utilisateur de créer un nouveau document (Creer document)
Si l'utilisateur a créé ce document (OK=1), pour chaque enregistrement du tableau de sélection (Boucle), charge une variable (TCom) contenant le titre du document (Valeur_rubrique) et ajoute un retour à la ligne à la fin et écrit cette variable dans le document (Envoyer paquet).
Un beep (Beep) est émis à la fin pour indiquer que le traitement est terminé.
Si aucun document n'a été trouvé à l'issue de la première recherche, un message (Alerte) en avertit l'utilisateur.
Select("03(Article;ouvrage)";"=21";"MAC";"*;p")
Table_Sort("=21")
Select_sel2tab(3)
Si (Taille tableau(LTNumRecList)>0)
Hx:=Creer document("";"txt")
Si (OK=1)
Boucle (Ex;1;Taille tableau(LTNumRecList))
Goto_record(LTNumRecList{Ex})
TCom:=Valeur_rubrique("=21";"encode=W")
TCom:=TCom+Caractere(13)+Caractere(10)
ENVOYER PAQUET(Hx;TCom)
Fin de boucle
FERMER DOCUMENT(Hx)
BEEP
Fin de si
Sinon
BEEP
ALERTE("Aucun article ou ouvrage ne contient MAC dans le titre")
Fin de si
Mettre à jour des enregistrements
Avant de procéder à des affectations de valeurs dans des champs, il faut d'abord charger l'enregistrement en mémoire (attention : il ne peut y avoir, à un instant T, qu'un seul enregistrement chargé en mémoire). Ensuite, après avoir procédé aux affectations, on procède à son enregistrement définitif dans la base.
Record_Load (table ; mode ; record_num ; type) : charge le contenu et la description d'un enregistrement.
Field_Get (rubrique ; attribut) : lit la valeur d'une rubrique en tenant compte de l'attribut spécifié.
Field_set (rubrique ; code valeur ; libellé valeur ; code de la valeur à remplacer ; libellé de la valeur à remplacer) : modifie le contenu d'une rubrique.
Record_Save : enregistre dans la base de données les nouvelles valeurs.
Dans certains cas, il sera nécessaire d'approndir encore vos connaissances sur la manipulation des données en mode expert pour réaliser certaines mise à jour.
Exemple : créer une fiche document de type Ouvrage
Dans les scripts suivants, une nouvelle fiche document est préparée en mémoire avec le type Ouvrage (Record_Load), un numéro d'enregistrement lui est affecté (x_GetRecordNum), les rubriques titre et date de parution sont alimentées (Field_Set) et ensuite, l'enregistrement est stocké dans la base de données (Record_Save)
Record_Load (3;2;0;"Ouvrage")
LForm_Record_num:=x_GetRecordNum (3)
Field_Set ("=21";"Voici le titre de mon nouvel ouvrage")
Field_Set ("=41";Chaîne(Date du jour))
Record_Save (LForm_Record_num)
Créer un descripteur par programmation
Thesaurus_Add (descripteur ; n° ou descripteur auquel le rattacher ; synonymes ; commentaire ; traduction)
Résultat : Record_Num du descripteur créé
Exemples
Le script suivant créera un nouveau descripteur attaché au descripteur dont le Record_Num est 758905, avec comme synonymes : Aide à domicile et Assistant domestique et comme note d'application : Services proposés à domicile.
Thesaurus_Add("Service à la personne";"758905";"Aide à domicile;Assistant domestique";"Services proposés à domicile")
Le script suivant créera un nouveau candidat-descripteur (ie : descripteur rattaché à Candidat) avec comme synonyme Volatile, comme note d'application : Animal à plumes et avec les traductions anglaise : Bird et Allemande : Vogel.
TAttributs:=""
x_SetParam ("Val_EN";"Bird";->TAttributs)
x_SetParam ("Val_DE";"Vogel";->TAttributs)
Thesaurus_Add ("Oiseau";"Candidat";"Volatile";"Animal à plumes";TAttributs)
NB : la traduction est un champ XML alimentée grâce à la fonction x_SetParam
Fonctions applicables aux enregistrements
Record_Aut (Record_num) : Permet de savoir quels sont les droits de l'utilisateur connecté sur l'enregistrement dont le Record_num est passé en paramètre, renvoie une valeur entière.
-1 = accès non autorisé ; 0 = consultation seulement ; 1 : modification autorisée ; 2 = suppression autorisée
Record_Delete (Record_Num) : Permet de supprimer un enregistrement en effaçant également les éventuels liens qui le rattachaient aux autres enregistrements, ainsi que les éventuelles images attachées. Cette opération est irréversible.
Record_Display (Record_Num) : Provoque l'affichage, dans l'application et dans une nouvelle fenêtre, de l'enregistrement.
Record_Locked (Record_Num) : Permet de vérifier si un enregistrement est verrouillé par un autre utilisateur ou un autre process ; renvoie une valeur booléenne : vrai si l'enregistrement est verrouillé, faux sinon. Si la fonction est appelée dans un contexte de serveur, la variable TMes contiendra l'intitulé "Cet enregistrement est verrouillé" ; sinon, une alerte est affichée à l'utilisateur.
NB : en maintenant la touche alt (ou option sur Mac), une information sur le process et la machine qui verrouillent l'enregistrement est ajoutée au message.
Record_Lib (Record_Num) : Permet d'obtenir l'intitulé d'un enregistrement
Record_Lib (Record_Num ; "*") : idem, avec le nom de la table en début (exemple : "Document : Le Rouge et le Noir")
Record_Lib (Record_Num ; "**") : idem, avec le type de l'enregistrement en début (exemple : "Ouvrage : Le Rouge et le Noir")
NB : à la place de Record_Num, on peut passer le numéro de la table. Dans ce cas, c'est l'enregistrement courant qui sera pris en compte.
NB : cette fonction tient compte de la langue choisie par l'utilisateur.
Table Contenu de l'intitulé
1 : Personne Nom Prénom (genre)
2 : Requête Intitulé de la Requête
3 : Document Titre
4 : Rubrique Libellé de la rubrique
5 : Thesaurus Descripteur
6 : AuteurNom de l'auteur
8 : Revue Nom de la revue
11 : Type objet Intitulé du type d'objet
13 : Maquette Nom de la maquette
14 : Service Nom
15 : Fournisseur Nom
16 : Commande Numero (date de commande) - Fournnisseur
17 : Ligne de commande Numéro de commande (n° de ligne) Titre
19 : RéférenceNom
20 : Emprunt Emp/Res : Identifiant - Type objet : libellé objet (date)
21 : TraductionLibellé utilisé
22 : Image (Record_Num - N° archive) Nom
24 : KV Titre (ou title suivant le paramétrage)
25 : Rubrique_Valeur Libellé (ou code si "c" passé en 2ème paramètre)
27 : Stat-Emprunt (idem emprunt)
28 : RessourceCode
31 : Mail Emetteur > Destinataire (Date) : Objet
36 : Groupe Intitulé
37 : Site Intitulé
38 : Icones Nom
39 : ParametreCode : Valeur