L'exploitation des données d'interface
Nous savons maintenant qu'un composant rend public un certain nombre de ses données persistantes par l'intermédiaire de la structure d'interface définie depuis le descripteur de données d'Oxygène. Nous allons maintenant décrire comment les données d'interface transitent vers l'objet utilisateur. Bien qu'à l'utilisation cet échange soit assez intuitif, la compréhension des mécanismes mis en œuvre est fondamentale.

Dans le schéma ci-dessus, l'objet GESTION du composant CLIENT fait appel à l'une des méthodes publiques du composant FAMILLE. La structure d'interface sert de "relais" entre les deux composants. Les flèches numérotées du schéma symbolisent les opérations effectuées sur les données d'interface. Nous allons détailler chacune des opérations en précisant par qui elles sont traitées.
Opération n° 1 :
L'opération n° 1 est implicite. C'est une opération de mise à jour des données d'interface qui est directement prise en charge par les instructions AppliquerMethodeComposant et AppliquerMethodeComposantLire. En conséquence, l'appel à une méthode publique de type "écriture" ne nécessite pas de manipulations particulières. Il suffit d'affecter les champs de la structure d'interface et d'appeler la méthode.
//Appel d'une méthode publique de type "écriture"
I_FAMILLE.IDENT=""
I_FAMILLE.CODE="DIVERS"
I_FAMILLE.DESIG="Famille divers"
AppliquerMethodeComposant "FAMILLE"."ECRITURE"("")
//Création d'une famille
Opération n° 2 :
L'opération n° 2 est une opération de lecture des données d'interface qui vient en complément de l'opération n°1. Elle est directement programmée dans les méthodes de type "écriture", c'est-à-dire dans toutes les méthodes qui considère les données d'interface comme des paramètres en entrée. Pour être précis, l'objet INTERFACE possède un contexte de travail sur les données d'interface dont le code est TABLE_INTERFACE. La récupération des données s'opère en utilisant l'instruction LireCourant sur ce contexte, comme dans l'exemple ci-dessous :
//Programmation d'une méthode publique de type ECRITURE
Methode ECRITURE
…
LireCourant TABLE_INTERFACE
//Copie des données d'interface vers les données persistantes
AppliquerMethode "AFFECT_TABLE"
Ecrire TABLE
…
FinMethode
Opération n° 3 :
L'opération n° 3 intervient dans les méthodes de type "lecture" qui convertissent les données privées du composant en données publiques. Il y a donc, au bout du compte une affectation et une mise à jour des données d'interface.
L'affectation est par défaut traitée par la méthode AFFECT_INTERFACE du modèle d'objets INTERFACE. Celle-ci remplit les champs de la structure d'interface par ceux de la table principale qui ont le même code.
La mise à jour est alors simple à réaliser puisqu'il suffit d'utiliser l'instruction Modifier sur le contexte TABLE_INTERFACE, comme dans l'exemple ci-dessous.
//Programmation d'une méthode publique de type LECTURE
Methode LECTURE
Parametres : Chaine pIdent
Lire TABLE.IDENT, EgalA, pIdent
//Copie des données persistantes vers les
données d'interface
AppliquerMethode "AFFECT_INTERFACE"
Modifier TABLE_INTERFACE //Mise à jour des
données d'interface
FinMethode
Opération n° 4 :
Enfin, l'opération n° 4 est une opération de lecture des données d'interface. Cette opération n'est pas implicite, elle doit être clairement demandée par un objet utilisateur. Pour cela l'appelant dispose de l'instruction LireInterface ou de l'instruction AppliquerMethodeComposantLire qui enchaîne l'appel et la récupération du résultat.
En pratique, on utilise l'instruction AppliquerMethodeComposantLire lorsque les données d'interface sont toujours significatives. C'est le cas de la méthode LECTURE du modèle d'objets INTERFACE qui prend soin d'initialiser les données lorsque la lecture n'aboutit pas.
L'instruction LireInterface intervient lorsque la récupération des données est conditionnée par le résultat de la méthode. Par exemple, dans le cas de l'appel à une méthode CHOIX, les données d'interface ne sont significatives que lorsque l'utilisateur fait effectivement un choix. En cas d'abandon, l'appelant souhaite en général conserver les valeurs initiales.
//Appel à une méthode CHOIX
Variables : Chaine vIdent
AppliquerMethodeComposant "FAMILLE"."CHOIX" (vIdent)
Si ErreurRendue<>1 Alors
LireInterface "FAMILLE"
CLIENT.FAMILLE_IDENT=I_FAMILLE.IDENT
FinSi
NB : L'appel d'une méthode CHOIX est plus ou moins complexe suivant le modèle qui l'effectue.
Les contextes de travail sur les données d'interface
Le schéma ci-dessous complète le précédent en faisant apparaître les deux contextes de travail manipulés lors de l'appel à une méthode publique.

Le concept de contexte est décrit dans le manuel de référence d'Oxygène++ au paragraphe Notion de contextes de table du chapitre Utilisation de la base de données. Les contextes de travail sur les données d'interface fonctionnent de la même manière et la structure d'interface est une sorte de table mémoire que le composant partage avec les objets utilisateurs.
Les instructions
Lire, LireCourant, Modifier
peuvent être utilisées sur les contextes d'interface ; néanmoins les mécanismes
d'appel standards et les méthodes spécialisées du modèle d'objet INTERFACE
prennent en charge ces opérations. Ces instructions sont donc la plupart
du temps inutiles.