Cette fonction permet de créer et de modifier les tables de la base de données, en décrivant ses caractéristiques dans le dictionnaire de données du dossier. La validation de cette description permet alors de créer la table dans la base de données retenue ou d'en modifier les caractéristiques.

La gestion des tables permet de définir la liste potentielle des tables de la base. En effet, les codes activités permettent d'inhiber certains certaines tables et / ou certains index.

Par ailleurs, outre la structure de la table elle-même, on définit dans ce dictionnaire :

  • des liens vers d'autres tables (liens d'intégrité référentielle). Ces liens sont utilisés par les utilitaires d'annulation, par l'import-export, et par d'autres outils de ce type.
  • des informations proposées par défaut dans les écrans créés à partir de ces tables (mots-clés d'aide, informations de format…)

Une table est identifiée par son nom (alphanumérique majuscule commençant par une lettre), et possède une abréviation. La création de nouvelles tables, lors de la phase de personnalisation, suppose que ce nom commence par l'une des lettres X, Y ou Z. Le nom et l'abréviation doivent être uniques dans toute la base (il ne peut exister deux tables de même long, ce qui est logique, ni de même abréviation : cette dernière limitation n'est pas valable pour les écrans).

Une table peut être gérée ensuite à l'aide d'un objet, à condition de créer les écrans nécessaires.

Attention !
Il n'est pas possible d'ajouter des champs ou des perticularités spécifiques ou verticales sur les tables de type "système" ou "dictionnaire". Le spécifique n'est pas pérenne en cas de validation de dossier ou de migration.

Pré-requis

SEEREFERTTO Reportez-vous à la documentation de Mise en oeuvre

Gestion de l'écran

La définition d'une table se fait à l'aide de 3 onglets : un onglet général, l'onglet de définition des champs, et l'onglet de définition des index.

En-tête

Onglet Général

On y trouve les informations générales relatives à la table et à sa gestion.

Onglet Colonnes

Cet onglet permet de définir l'ensemble des champs de la table dans un tableau déroulant.

Dans chaque table, il est possible d'utiliser des champs dont le nom est normalisé, et qui sont automatiquement mis à jour s'ils existent par la gestion d'objet. Ces champs sont les suivants :

  • CREDAT et UPDDAT sont respectivement les dates de création et de dernière mise à jour.

  • CRETIM et UPDTIM sont respectivement les heures de création et de mise à jour.

  • CREUSR et UPDUSR sont les codes des utilisateurs ayant réalisé respectivement la création de l'enregistrement et sa dernière mise à jour.

  • EXPNUM est un numéro séquentiel permettant de dater les enregistrements vis à vis du module d'import/export (ce qui permet de n'exporter que ce qui a été mis à jour depuis le dernier export).

Un sixième champ peut en outre être mis dans chaque table. Ce champ s'appelle ENAFLG, et il correspond à un indicateur actif/inactif. Si la table en question est gérée par un objet, et qu'un type de données est associé à ce champ, les contrôles suivants seront faits sur les champs de ce type :

  • la fenêtre de sélection standard de l'objet appelée par la touche de sélection filtrera automatiquement les enregistrements inactifs.

  • un message d'erreur empêchera la saisie directe par son code d'une clé inactive

Ceci n'est bien entendu pas valable dans la gestion de l'objet lui-même (sinon, on ne pourrait pas réactiver des enregistrements rendus temporairement inactifs).

Onglet Index

Cet onglet permet de définir les différents index définis sur la table.

Onglet Audit

Cet onglet permet de créer le paramétrage permettant ensuite de tracer, par des triggers de base de données générés automatiquement, les insertions, suppressions, et modifications faites sur une table, en stockant si nécessaire des valeurs avant et après sur des champs particuliers. La modification d'enregistrement est tracée à la condition que l'une des conditions sur champs soit vérifiée.  Cette trace est stockée dans deux tables particulières (AUDITH et AUDITL). Elle peut simplement être consultée, ou donner lieu à des notifications automatisées par l'intermédiaire du Workflow.

Le principe de base est le suivant :

  • Dès lors qu'au moins un indicateur d'audit (création, modification, suppression) est coché, chaque opération de ce type crée une ligne dans la table AUDITH, ce indépendamment du fait que des champs soient tracés et que des modifications les concernant aient été faites.
  • A partir du moment où des champs sont listés dans le tableau des champs, toute modification qui modifie la valeur du champ et respecte la condition donnée provoquera la création d'une ligne dans AUDITL.

La technique des « triggers » permet de tracer les opérations même si elles sont effectuées par un programme autre qu’adonix. Les informations de cet onglet sont prises en compte par la re-validation de la table : les triggers sont automatiquement créés et / ou modifiés à ce moment-là.

Le traitement SUBTRIGGER contient la description des triggers en fonction de la base de données. Le traitement SPETRIGGER est réservé au spécifique afin de pouvoir éventuellement personnaliser leur description.

Les informations de cet onglet sont considérées comme du paramétrage. Le standard ne livre aucun paramétrage d'audit. Il n'est pas nécessaire de protéger par code activité X, Y ou Z toute modification faite dans cet onglet. 

L’audit est globalement conditionné par le code activité AUDIT.

Ne peuvent être auditées :

  • les tables d'audit elles-même
  • les champs de types clob et blob
  • les champs dont le type de données est AXX

Les résultats de l'audit peuvent être consultés par les fonctions suivantes :

Limites à respecter

Des limites existent lorsqu'on crée une table. Les limites sont les suivantes :

concernant la clé :

  • limitée à 15 index maximum
  • limitée à 16 champs maximum par index
  • limitée à 250 caractères maximum par index

concernant l'enregistrement :

  • limité à 32 Ko sous Oracle et SQL Server
  • limité à 255 champs par tables
  • limité à 512 colonnes ( champ1*dimension1 + champ2*dimension2 + ... + champN*dimensionN )
  • limité soit à un champ de type blob ou clob quelle que soit sa taille, soit à plusieurs champs, mais dans ce cas, la taille totale de la table est limitée à 64 Ko 

nombre de tables ouvertes :

  • limité à 255 tables

Etats

Par défaut, les états suivants sont associés à la fonction:

Mais ceci peut être modifié par paramétrage.

Boutons spécifiques

Validation

Cette fonction permet de créer ou de mettre à jour la table dans la base de données à partir du dictionnaire. Si la table n’existait pas, elle est créée vierge de données. Si elle existait, la structure de la table est remise à jour conformément à la nouvelle description donnée dans le dictionnaire (les champs nouveaux sont ajoutés, les champs supprimés sont enlevés, les champs dont la structure ou la dimension change sont recopiés : les enregistrements sont bien entendu conservés dans la table). On a une possibilité de validation forcée : c’est revalidation complète des données et des index. Si cette option n’est pas spécifiée et si la structure de la table n’a pas changé, seul les indexes seront recréés.

On peut au passage en profiter pour donner des valeurs par défaut à des champs de la table pour les enregistrements déjà existants : ceci se fait grâce au bouton Traitement dont le fonctionnement est expliqué ci dessous.

Traitement

Permet de créer un traitement temporaire, de nom WWINIXXX, où XXX est l'abréviation de la table, qui sera exécuté juste après la validation de la table (si elle existe déjà), afin de permettre de donner des valeurs par défaut à des champs des enregistrements existants. Un traitement par défaut est proposé lorsqu'on utilise ce bouton, et il est alors possible d'y ajouter des instructions.

Ce traitement est composé de 3 étiquettes qui sont :

  • $OUVRE qui est exécuté au départ avant le début de la transaction de mise à jour, et qui doit au minimum permettre d'ouvrir la table pour laquelle on fait la validation (et éventuellement d'autres).

  • $DEFAULT qui est exécuté après le début de la transaction, mais avant la lecture de l'enregistrement (on y place au minimum une instruction Default File pour que la table par défaut soit la table à mettre à jour)

  • $INIZON, qui est exécuté pour chaque enregistrement, juste avant la réécriture. C'est donc dans ce sous-programme que l'on peut écrire des instructions d'affectation des champs de la table.

Ainsi, par exemple, si on ajoute une zone numérique MAZONE dans la table, zone dont on voudrait qu'elle ait la même valeur qu'un champ AUTZONE existant déjà dans la table, augmenté de 1, on insèrerait tout simplement dans le traitement la ligne :

           MAZONE = AUTZONE + 1

Attention !
Le fonctionnement de ce traitement est différent de ce qui était fait dans les versions d'adonix précédentes (par exemples celles utilisées par les versions 2 et 3 d'ADONIX ENTREPRISE). En effet, le traitement est exécuté lorsque la phase de modification de structure est finie. Ainsi, si on veut renommer un champ XXX en l'appelant YYY, il ne faut réaliser cette opération en 2 étapes, en gardant tout d'abord les deux champs dans la base et en réalisant l'affectation YYY=XXX dans le traitement d'initialisation. Il est ensuite possible de supprimer le champ XXX. Si on essayait de réaliser ceci en une seule étape, le traitement ne fonctionnerait pas et provoquerait une erreur (le champ XXX étant devenu inexistant). On aurait ainsi perdu sa valeur.

Copie

Ce bouton permet de recopier la structure de la table vers un autre dossier. Attention, seule la description de la table dans le dictionnaire est recopiée : la table n'est pas créée dans le dossier destinataire (il faudra valider cette description pour que la table soit créée. A fortiori, les données de la table ne sont pas non plus recopiée.

Attention, le champ NBENREG 'nombre de fiches' ainsi que tous les champs de l'onglet 'audit' ne sont pas copiés.

Raz Cette fonction permet de supprimer les données d'une table. Pour des besoins de rapidité, la table est suprimée puis recrée à vide. Une confirmation est demandée, cette opération étant irréversible.
Supprimer

Il est à remarquer que ce bouton permet à la fois de supprimer la fiche du dictionnaire (c'est le comportement normal de ce type de bouton), mais également de supprimer physiquement la table de la base (c'est l'équivalent d'un Drop Table).

Les deux questions sont posées successivement (car on peut très bien ne vouloir qu'annuler la table sans effacer les données du dictionnaire).

Barre de menu

Options / Informations

Cette fonction permet d'afficher, dans une boîte d'information:

  • le nombre de champs de la table
  • la place prise (en octets) par une ligne de la table (lorsque tous les champs alphanumériques sont remplis)
  • le nombre de lignes actuellement présentes dans la table.
Options / Source

Cela permet de visualiser le fichier *.srf correspondant à la table courante dans l'application courante.

Cette option est notamment intéressante lorsqu'on est sur un serveur sur lequel on n'a pas les droits sur le répertoire FIL.

Options / Maintenance
Cette option de menu permet de passer directement en maintenance sur la table.
Documentation / Paragraphes
Cette fonction permet d'accéder à la gestion de la documentation, sur le premier paragraphe de la documentation (si elle existe) associé à la fiche courante.
Documentation / Liens
Cette fonction permet d'accéder à la gestion des liens. Elle permet de définir des liens entre la fiche courante et d'autres fiches (par exemple des liens entre fonctions et paramètres). Ces liens, purement documentaires, permettent d'alimenter la mécanique de génération des squelettes de documentation.
Documentation / Génération

Ce menu permet de lancer une génération de documentation. La génération peut se lancer également à partir du bouton [Génération] dans le bas de la fenêtre.

Trois types de génération peuvent être lancées, séparément ou simultanément:

  • la génération du squelette de documentation à partir du dictionnaire (tables ADOCUMENT, ADOCBLB, ADOCCLB).
  • la génération de la documentation à partir des tables précédentes.
  • la génération de la documentation sur champ.

Les bornes proposées par défaut tiennent compte de la fiche en cours, mais elles peuvent être modifiées au lancement.

Messages d'erreur

Outre les messages génériques, les messages d'erreur suivants peuvent apparaître lors de la saisie:

La table ne comporte aucune zone
On a créé une table sans définir au moins une zone.
La table ne comporte pas de clé primaire
Un index au minimum est nécessaire sur chaque table.
Le champ intitulé n'est pas référencé
Le champ intitulé saisi dans le premier onglet n'existe pas dans la liste des champs du deuxième onglet.
Abréviation déjà existante

Il doit y avoir unicité des abréviations dans le dossier. Ce message est affiché si on tente de créer une table avec une abréviation utilisée par une autre table.

message d'avertissment, lorsqu'on tente de saisir une abréviation sur une table qui est déjà existante pour une vue. Il est effectivement recommandé d'avoir des abréviations uniques.

Caractère interdit
On a tenté d'utiliser le caractère '"' dans un intitulé (ce caractère est interdit)
Le champ intitulé n'est pas référencé
On a indiqué dans l'un des champs intitulé de l'onglet général un champ non défini dans l'onglet des champs.
Numéro de menu local incorrect

la longueur est incorrecte en fonction du type interne du champ.

  • menu local : longueur doit être <= 30
  • entier court : longueur doit être <= 4
  • entier long : longueur doit être <= 8
  • décimal : partie entière + partie décimale <= 32
  • alphanumérique : longueur doit être <= 250
  • blob, clob : longueur doit être <= 20
Longueur incorrecte
La zone longueur a une valeur incorrecte (trop grande, ou nulle, par exemple).
Option incorrecte
On a tenté de saisir une option qui n'existe pas dans la colonne Option associée à une zone de la table.
Expression de lien incorrecte
L'expression de lien est syntaxiquement incorrecte.
Index déjà saisi
On a essayé de définir deux fois le même index sur une table.
Zone inexistante
On référence dans un index une zone qui n'existe pas dans la liste des champs.
Zone dimensionnée
On a essayé d'utiliser une zone dimensionnée dans un index (ce qui est interdit).
Nombre de colonnes trop grand
On est limité à 512 colonnes en tenant compte de la dimension des champs.
Nombre de zones trop grand
On est limité à 255 colonnes. Ici, les dimensions ne comptent pas.
Longueur de ligne trop grande

Il s'agit de la taille de l'enregistrement.

Sous SQL, la limite est de 8060 octets.

Sous Oracle, il n'y a pas de limite, mais sous Adonix la limite est de 32 K.

Clé trop longue
La taille d'un index ne peut pas excéder 256 caractères.
Trop de composantes de clé
On est limité à 16 champs par clé.
Pas de textes traduisibles dans cette table
On essaie de cocher la case "Génération texte traduisible" alors que la table principale gérée par l'objet ne contient pas de champ de type AXX, AX1, AX2 ou AX3.
Attention, cette modification nécessite une modification dans les états Crystal liés à cette table
Message d'avertissement. La modification de la case à cocher "Génération texte traduisible" détermine la méthode choisie pour l'édition des textes traduits dans les états Crystal report utilisant cette table. En modifiant cette case, on précise donc qu'on change de méthode, et il est impératif de modifier les états associés à cette table. Il est donc recommandé de ne pas modifier ce champ.
Autres erreurs susceptibles d'arriver

Lors de la revalidation de la table (par l'outil valfil), d'autres erreurs sont susceptibles de survenir. Ces erreurs sont visualisées sous la forme d'un fichier de trace. Parmi les erreurs susceptibles d'arriver, on trouvera les erreurs suivantes:

  • Erreur d'écriture (plus de place disque)
  • Erreur oracle / Erreur SQL SERVER (l'intitulé de l'erreur suit en clair)

Tables mises en oeuvre

SEEREFERTTO Reportez-vous à la documentation de Mise en oeuvre