Syntaxe des liens entre les tables

Introduction

Ce document décrit la syntaxe utilisée dans la formulation des expressions utilisant des liens entre tables ou entre composants. Cette syntaxe intervient dans la définition des états (filtres, ruptures, ordre de parcours) et plus généralement dans toutes les expressions définies dans les états, écrans et les expressions évaluées par la fonction Interpreter du L4G Oxygène++.

La syntaxe de description des liens est indispensable pour utiliser le Générateur d'Editions sur les composants développés dans l'environnement Oxygène++.

On parle également parfois de "Clés étrangères".

Principes Généraux

Dans le cas de liens de type composants, tous les changements effectués dans le dictionnaire et sur les tables doivent être faits sur les tables et sur les structures d'interface associées.

Cette notation peut être aussi bien utilisée pour exprimer des liens entre tables que des liens entre composants. Dans le cas de tables, elle déclenche l'appel automatique à l'instruction Lire appropriée. Dans le cas de composants, c'est la méthode LECTURE du composant en lien qui est appelée.

Notation

 

Cas Composant :

 

Pour exprimer le lien entre n composants, on écrira une expression de la forme :

 

TABLE_COMPOSANT1->COMPOSANT2->....->COMPOSANTn.CODECHAMP

 

TABLE_COMPOSANT1 est la table principale du composant origine.

 

CODECHAMP est un champ de la structure d'interface du COMPOSANTn.

 

Pour évaluer cette expression, le moteur Oxygène :

- appellera la méthode LECTURE de COMPOSANT2 avec comme paramètre la valeur de la clé étrangère de COMPOSANT2 dans TABLE_COMPOSANT1 (défini dans le dictionnaire, généralement égal àCOMPOSANT2_IDENT)

- récupérera la valeur de la clé étrangère de COMPOSANT3 dans la structure d'interface I_COMPOSANT2 du composant COMPOSANT2

- appellera la méthode LECTURE de COMPOSANT3 etc…

récupérera la valeur de CODECHAMP dans la structure d'interface I_COMPOSANTn de COMPOSANTn après l'appel à la méthode LECTURE de ce composant.

 

Cas Table :

 

Pour exprimer le lien entre n tables, on écrira :

 

TABLE1->TABLE2->....->TABLEn.CODECHAMP

 

Pour évaluer cette expression, le moteur Oxygène :

- utilisera l'instruction Lire sur la table TABLE2 avec comme paramètre la valeur de la clé étrangère de TABLE2 dans TABLE1 (défini dans le dictionnaire)

- récupérera la valeur de la clé étrangère de TABLE3 dans la table TABLE2

- utilisera l'instruction Lire sur la table TABLE3 etc…

- récupèrera la valeur de CODECHAMP dans la table TABLEn après l'appel à l'instruction LIRE dans cette table.

 

Pour que ces évaluations fonctionnent correctement, il est indispensable d'identifier les clés primaires et les clés étrangères dans le dictionnaire des tables concernées. Ceci est l'objet des paragraphes suivants.

 

 

Définition dans le Descripteur de Données

 

Dans le cas de liens de type table, les clés primaires doivent être renseignées dans la fenêtre de propriétés du champ concerné. Néanmoins, il est préférable de désigner la clé primaire également dans les tables principales des composants pour des extensions futures.

 

Pour chaque champ en lien, la définition du lien se fait au niveau de la zone lien dans la même fenêtre. La syntaxe de la zone lien diffère suivant que les liens sont établis entre composants ou entre tables. Néanmoins, dans le cas composants, l'information doit être stockée au niveau de la table principale du composant et au niveau de sa structure d'interface.

 

Un bouton permet de choisir dans un écran les caractéristiques du lien. Cet écran permet de définir le type de lien sans connaître précisément la syntaxe :

 

 

La syntaxe générale est la suivante :

 

Lien entre composants :

C:COMPOSANT

 

Le lien se fait avec le champ IDENT de la table en lien.

 

Liens entre tables :

R:TABLE

 

Le lien se fait avec le champ déclaré en "Clé primaire" de la table en lien.

 

Utilisation d'un contexte de composant ou de table :

C (ou R):COMPOSANT=CONTEXTE

 

Extraction d'une partie de champ :

C (ou R):COMPOSANT(n,m)

 

n est le numéro du premier caractère et m le numéro du dernier caractère de la chaîne à extraire.

S'utilise sur les chaînes de caractères. Par exemple, dans un champ NUMERO composé de l'identifiant de l'entête et d'un numéro d'ordre, on extrait les 10 premier caractères correspondant à l'identifiant de la table des entêtes.

 

Extraction d'une partie de champ avec contexte :

 

C (ou R):COMPOSANT(n,m)=CONTEXTE

 

 Lien direct (ancienne notation : obsolète)

 

Dans certaines anciennes applications vous pouvez trouver un lien dans l'ancienne écriture. Le lien n'utilise pas la clé primaire mais définit directement le champ (<base> . <table> . <champ>).

Exemple : dans la table des factures, on peut avoir un champ NUM_CLIENT, dont le lien serait "GC.CLIENT.NUMERO" (base GC, table CLIENT, champ NUMERO).

 

Exemples d'utilisation des liens