RELATE ONE
RELATE ONE ( tableN | champN {; discriminant} )
Paramètre | Type | Description | |
---|---|---|---|
tableN | champN | Table, Champ | → | Table pour laquelle définir tous les liens automatiques ou Champ avec lien manuel partant vers la table 1 |
discriminant | Field | → | Champ discriminant de la table 1 |
Cette commande n'est pas thread-safe, elle ne peut pas être utilisée dans du code préemptif.
Description
RELATE ONE accepte deux syntaxes.
La première syntaxe de la commande, RELATE ONE(tableN), active tous les liens aller automatiques (de N vers 1) pour la table tableN dans le process courant. Cela signifie que pour chaque champ de la tableN d'où part un lien aller automatique, la commande sélectionnera l'enregistrement lié dans chaque table liée. Cela peut donc modifier l'enregistrement courant dans la (les) table(s) liée(s) du process courant.
La seconde syntaxe, RELATE ONE(champN{;discriminant}), recherche l'enregistrement lié au champ champN. Il n'est pas nécessaire que le lien soit automatique. S'il existe, RELATE ONE charge en mémoire l'enregistrement lié, et en fait l'enregistrement et la sélection courants de la table à laquelle il appartient.
Le paramètre optionnel discriminant doit être un champ de la table liée. Il peut être uniquement de type Alpha, Texte, numérique, Date, Heure ou Booléen. En particulier, il ne peut pas être de type Image ou Blob. Si champN est spécifié, et si plus d'un enregistrement est trouvé dans la table liée, RELATE ONE affiche une liste des enregistrements qui correspondent à la valeur de champN, permettant à l'utilisateur de sélectionner un enregistrement. Dans cette liste, la colonne de gauche affiche les valeurs des champs liés, la colonne de droite affiche les valeurs de discriminant.
Généralement, plusieurs enregistrements sont trouvés lorsque champN se termine par le caractère Joker (@). S'il n'y en a qu'un seul, la liste de sélection n'apparaît pas.
Dans l'écran ci-dessous, un enregistrement est en train d'être saisi et une liste de sélection s'affiche au premier plan.
La commande suivante a fait apparaître la liste de sélection :
RELATE ONE([Personnes]Société;[Sociétés]Région)
L'utilisateur a saisi SARL@ pour visualiser la liste de toutes les sociétés dont le nom commence par SARL, ainsi que leur région.
Spécifier un champ dans discriminant est la même opération que celle qui consiste à définir un champ discriminant dans la boîte de dialogue de définition des propriétés d'un lien en mode Développement. Pour plus d'informations sur la définition d'un champ discriminant, reportez-vous au manuel Mode Développement de 4D.
Note : Cette commande ne prend pas en charge les champs de type Objet.
Exemple
Dans l'exemple suivant, la table [Factures] est reliée à la table [Clients] par deux liens manuels. Un lien part du champ [Factures]AuNomDe et va vers le champ [Clients]Numéro, l'autre lien va de [Factures]ExpédierA à [Clients]Numéro.
Voici le formulaire de la table [Factures] affichant les informations "AuNomDe" et "ExpédierA".
Comme les deux liens pointent vers la même table, [Clients], l'information qu'ils récupèrent doit être affichée dans des variables. Si le formulaire contenait les champs de [Clients], seules les valeurs issues du second lien seraient affichées.
Les deux méthodes suivantes sont les méthodes objet des champs [Factures]ExpédierA et [Factures]AuNomDe. Voici la méthode objet du champ [Factures]AuNomDe :
RELATE ONE([Factures]AuNomDe;[Clients]Adresse)
vAdresse1:=[Clients]Adresse
vVille1:=[Clients]Ville
vPays1:=[Clients]Pays
vCP1:=[Clients]Code postal
Voici la méthode objet du champ [Factures]ExpédierA :
RELATE ONE([Factures]ExpédierA;[Clients]Adresse)
vAdresse2:=[Clients]Adresse
vVille2:=[Clients]Ville
vPays2:=[Clients]Pays
vCP2:=[Clients]Code postal
Variables et ensembles système
Si la commande a été correctement exécutée et si les enregistrements liés ont bien été chargés, la variable système OK prend la valeur 1. Si l'utilisateur a cliqué sur le bouton Annuler dans la boîte de dialogue de choix d'enregistrement (qui apparaît si l'enregistrement lié avait été modifié), la variable OK prend la valeur 0.