Accueil > WebObjects > Applications Web : Développer une Application Enterprise Objects

Applications Web : Développer une Application Enterprise Objects

Par Apple Computer, Inc. © 2002 (Dernière mise à jour 3 Janvier 2002),

Traduit par Thierry, 20/03/2003.

Ce chapitre décrit la création d’un projet similaire à ceux que nous avons vus dans les chapitres précédents, mais avec comme fonctionnalité supplémentaire la gestion de données stockées dans un base. Au fur et à mesure que vous suivrez ces exemples, référez-vous aux chapitres précédents pour être sûr que vous comprenez les concepts sur lesquels chaque étape repose.

Dans ce chapitre, vous allez :

  • créer une base de données en utilisant OpenBase Manager,
  • créer un modèle de données contenant une entité en utilisant EOModeler,
  • créer une table de base de données à partir d’une définition d’entité en utilisant EOModeler,
  • effectuer des opérations de recherche, d’insertion, de mise à jour et de suppression sur stock d’objet,
  • sauvegarder dans un stock de données les changements apportés au contexte d’édition.

Création de la Base de Données Auteurs

La première étape consiste à créer la base de données Authors. Ce paragraphe décrit comment utiliser OpenBase Manager pour créer la base de données.

  1. Lancez OpenBase Manager.OpenBase Manager est situé dans /Applications/OpenBase.

    [image: ../art/ob.gif]

  2. Créez la base de données Authors :
    1. Choisissez Database > New.
    2. Saisissez Authors dans le champ Database Name.
    3. Sélectionnez l’option “Start Database at Boot”.
    4. Choisissez UNICODE UTF-8 dans le menu Internal Encoding et cliquez sur Set.

      [image: ../art/obauthors.gif]

  3. Démarrez la base de données Authors :
    1. Dans la liste des bases de données, sélectionnez Authors sous localhost.
    2. Cliquez sur Start Database.Une fois terminé, la fenêtre de OpenBase Manager devrait ressembler à celle de la Figure 11-1.

      Figure 11-1 La fenêtre de OpenBase Manager avec la base de données Authors
      [image: ../art/obdatabaselist.gif]

Création du Modèle de Données Authors

Ce paragraphe vous montre comment créer un modèle de données nommé Authors avec une entité nommée Author et une table de base de données correspondante nommée AUTHOR. La table stocke le prénom et le nom des auteurs de livres.

Vous allez utiliser EOModeler pour créer le modèle de vos données. Vous y définissez les entités qui serviront d’interfaces entre votre code et la base de données.

  1. Lancez EOModeler.EOModeler est situé dans /Developer/Applications.
  2. Choisissez Model > New.
  3. Sélectionnez l’adaptateur à utiliser.Avec l’adaptateur JDBC fourni avec votre package WebObjects, vous pouvez communiquer avec toute base de données comprenant un pilote JDBC. Pour plus d’informations sur les pilotes JDBC, reportez-vous à Inside WebObjects: Deploying Applications.

    [image: ../art/modadaptors.gif]

    Sélectionnez JDBC à partir de la liste et cliquez sur Next.

  4. Fournissez les informations relatives à la connexion JDBC.Les fichiers de modèle comprennent les informations nécessaires à la connexion à la base. Vous saisissez ces informations dans le dialogue intitulé JDBC Connection. Dans le cadre de cet exercice, vous n’aurez à spécifier que l’URL utilisée pour la connexion à la base de données Authors.

    [image: ../art/modconnectioninfo.gif]

    Saisissez jdbc:openbase://localhost/Authors dans le champ URL et cliquez sur OK.

  5. Sélectionnez ce qui doit être inclus à votre modèle.Ce panneau est l’endroit où vous indiquez à EOModeler comment configurer les entités du modèle à partir d’une base de données existante. Compte tenu du fait que vous créez une base de données, aucune de ces options ne doit être sélectionnée. Si vous voulez savoir à quoi correspondent ces options, reportez-vous à Inside WebObjects: Using EOModeler.

    [image: ../art/modschemainfo.gif]

    Désélectionnez toutes les options et cliquez sur Finish. L’écran suivant s’affiche alors :

[image: ../art/moduntitled.gif]

Ajout de l’Entité Author au Modèle

Ce paragraphe vous montre comment ajouter une entité appelée Author au modèle. Cette entité représente la table AUTHOR de la base de données Authors.

L’entité Author contient trois attributs : firstName, lastName et authorID. L’attribut authorID sert de clé primaire de l’entité ; sa valeur n’est pas affichée dans l’interface utilisateur de l’application. Vous n’avez même pas à vous inquiéter de la mise à jour de la valeur de cet attribut lorsque vous créez des objets Author ; Enterprise Objects le fait pour vous. Au moment de définir l’entité Author, vous donnez aussi à EOModeler les informations qu’il requiert pour créer la table AUTHOR.

  1. Ajoutez une entité.Choisissez Property > Add Entity.
  2. Configurez l’entité.Choisissez Tools > Inspector.

    Le Entity Inspector vous permet de saisir des informations variées en rapport avec l’entité.

    1. Nommez l’entité Author.
    2. Saisissez AUTHOR dans le champ Table Name.
    3. Saisissez Author dans le champ Class.

      [image: ../art/modentityinspctr.gif]

  3. Ajoutez et configurez les attributs de l’entité Author :
    1. Vérifiez que l’entité Author est sélectionnée dans la liste des entités.
    2. Choisissez Property > Add Attribute.
    3. Nommez l’attribut firstName.
    4. Saisissez FIRSTNAME comme nom de colonne.
    5. Saisissez char dans le champ External Type (type de donnée externe).
    6. Choisissez String comme type de donnée interne.
    7. Saisissez 30 dans le champ External Width (longueur externe).

      [image: ../art/modfirstname.gif]

    8. Cliquez sur le second bouton de la barre d’outils du panneau Attribute Inspector pour afficher le Advanced Attribute Inspector.
    9. Sélectionnez l’option Allow Null Value (valeur nulle autorisée).

      [image: ../art/modadvattrinspctr.gif]

    10. Répétez ces dernières étapes pour ajouter l’attribut lastName.

    Maintenant, ajoutez l’attribut qui servira de clé primaire :

    1. Ajoutez un attribut et nommez le authorID.
    2. Saisissez AUTHOR_ID comme nom de colonne.
    3. Saisissez int dans le champ External Type.
    4. Choisissez Integer comme type de donnée interne.

    [image: ../art/modauthorid.gif]

  4. Sélectionnez une clé primaire pour l’entité Author :
    1. Dans la ligne authorID de la liste des attributs d’auteur, cliquez sur la colonne ayant une image de clé en en-tête de façon à ce qu’une clé apparaisse dans la ligne.
    2. Cliquez sur la colonne, représentée par un diamant, dans la ligne authorID de façon à faire disparaître le diamant.L’attribut authorID n’est rien d’autre qu’un artifice de bases de données relationnelles requis pour vérifier que les lignes soient uniques dans la table AUTHOR ; il n’a pas de sens pour vous ou pour l’utilisateur de l’application. L’icône en forme de diamant indique qu’un attribut est une propriété rendue disponible pour la logique d’une application et, si nécessaire, pour l’utilisateur de l’application. Du fait que authorID n’apporte aucune information supplémentaire sur un auteur, cet attribut n’est pas nécessaire aux opérations normales de l’application.
  5. Sauvegardez le modèle et nommez le Authors.

La Fenêtre de EOModeler

Le panneau de gauche de la fenêtre principale de EOModeler liste les entités présentes dans le modèle. Si vous cliquez sur une entité, les détails de ses propriétés (ses attributs et reations) sont affichés dans les panneaux de droite.

La Figure 11-2 montre la fenêtre du modèle Authors. La liste des Attributs de Author montre les définitions de chacun de ses attributs.

Figure 11-2 Le modèle Authors avec l’entité Author
[image: ../art/modauthors.gif]

Par défaut, les colonnes les plus souvent utilisées sont affichées dans cette vue. Pour afficher d’autres colonnes, utilisez le menu Add Column situé dans le coin inférieur gauche du panneau Author Attributes. Voici les colonnes disponibles du panneau et leurs descriptions :

Clé Primaire
L’icône clé primaire, dans la première colonne, indique que l’attribut est utilisé pour identifier de manière unique une ligne. Dans l’entité Author, seule authorID est une clé primaire.
Propriété de Classe
La présence d’un diamant dans la seconde colonne indique que l’attribut est une propriété de classe. Une propriété de classe est une propriété pour laquelle EOModeler génére des méthodes d’accès. En général, les propriétés de classe sont celles qui sont pertinentes du point de vue de la logique métier ; par exemple, firstName dans Author. Les propriétés qui n’existent seulement que pour satisfaire aux méthodologies du moteur de la base, telles que les clés primaires et secondaires, ne devraient pas être des propriétés de classe.
Verrou
Indique que l’attribut pourrait être utilisé pour verrouiller la ligne. Cela veut dire que Enterprise Objects pourra utiliser un attribut spécifique pour déterminer qu’une modification a été effectuée sur la ligne d’une instance d’un objet enterprise-object par un autre traitement ou un autre utilisateur. Pour plus de détails sur les verrouillages, reportez-vous à Inside WebObjects: Enterprise Objects.
Attribut côté-client
Dans les applications Client-Serveur Java, la colonne avec les deux flèches opposées sert à indiquer si la valeur de l’attribut est envoyée à partir du serveur vers le client. Pou rplus d’informations sur la technologie Client-Serveur de Java, reportez-vous à Inside WebObjects: Java Client Desktop Applications.
Null autorisé
Indique que la colonne de la base de données peut contenir une valeur null.
Name (nom)
Le nom de l’attribut qui détermine le nom de la méthode que EOModeler génére quand il crée la définition de la classe.
Value Class (Java)
La classe utilisée pour représenter un attribut.
External Type (Type de donnée externe)
Le type de donnée utilisé par la base pour représenter l’attribut.
Width (longueur)
La longueur maximum de l’attribut, utilisé en général pour les chaînes de caractères.
Column (colonne)
Le nom de la colonne de la base de données qui correspond à un attribut particulier.
Definition
La définition d’une colonne dérivée. Une colonne dérivée n’existe pas réellement dans la base de données. Un attribut ne peut avoir des valeurs à la foios pour Colonne et pour Définition. Le réglage de l’un efface celui de l’autre.
Precision
Le nombre de chiffres significatifs à inclure. Utilisé pour certaines types de données numériques.
Prototype
Le prototype à partir duquel les caractéristiques d’un attribut sont héritées. Vous pouvez utiliser des prototypes pour régler des types d’attribut par défaut.
Read Format (format de lecture)
Définit le formattage à appliquer aux données qui sont lues dans la base avant de remplir l’attribut enterprise-object.
Scale (échelle)
Le nombre de chiffres placés à droite du point décimal dans un attribut numérique.
Value Type (type de valeur)
Ce type est utilisé dans le décodage de valeurs pour les objets entreprises représentés par des classes Objective-C plutôt que par des classes Java.
Write Format (format d’écriture)
Utilisé en tandem avec le format de lecture pour écrire les données dans la base selon un format spécial.

L’attribut External Type doit être l’un des types définis par l’adaptateur JDBC. Voici les plus courants :

blob
Un objet binaire large. Utilisé pour stocker des images et de grands fichiers de données. Représenté en général sous forme d’objet NSData (com.webobjects.foundation).
char
Utilisé pour stocker des caractères représentés par un java.lang.String. Un attribut ayant un type externe char doit avoir une longueur de définie.
date, datetime
Utilisé pour stocker des informations de type date et heure généralement représentées par un objet NSTimestamp (com.webobjects.foundation).
double
Utilisé pour stocker des nombres à virgule flottante et généralement représentés par un java.lang.Number.
int
Utilisé pour stocker des nombres entiers et généralement représentés par un objet Number. Les clés primaires et secondaires sont généralement mieux modélisées sous forme d’entiers.
long
Utilisé pour stocker de très grands nombres entiers.

Création de la Table AUTHOR

Après avoir défini l’entité Author, la création de la table AUTHOR est facile.

  1. Sélectionnez l’entité Author dans la liste des entités.
  2. Choisissez Property > Generate SQL.
  3. Vérifiez que seule l’option Create Tables est sélectionnée.

    [image: ../art/modauthorsql.gif]

  4. Cliquez sur Execute SQL.
  5. Quittez EOModeler.

Création du Projet Authors

Ce paragraphe vous guide dans la création du projet application Authors. L’application permet à ses utilisateurs d’ajouter, d’éditer et de suprimer des auteurs dans la base de données Authors.

En même temps qu’il explique chaque étape, ce paragraphe présente l’utilisation des classes enterprise-object (classes personnalisées déduites des entités définies dans un modèle permettant l’accès aux informations de la base de données) et des méthodes dont on se servira pour ajouter des objets au stock de données (en ajoutant des lignes à la table AUTHOR de la base Authors). Vous utiliserez EOModeler pour créer le fichier Author.java. Après l’avoir ajouté à votre projet, vous pourrez créer des objets Author dans votre code. Puis, vous ajouterez ces objets au stock de données.

  1. Créez une application WebObjects et nommez la Authors.
  2. Choisissez le framework Java JDBC Adaptor dans le panneau Choose EOAdaptors de l’Assistant de Project Builder.
  3. Dans le panneau Choose EOModels de l’Assistant, cliquez sur Add, sélectionnez le fichier modèle Authors que vous avez créé dans “Création du Modèle de Données Authors”, et cliquez sur Choose.

Une fois terminé, la fenêtre principale de Project Builder devrait ressembler à celle de la Figure 11-3. Remarquez que Project Builder a placé une copie du fichier modèle Authors dans le dossier projet et l’a ajouté au groupe des Ressources de la liste Files.

Figure 11-3 Le projet Authors dans Project Builder
[image: ../art/pbauthors.gif]

Personnalisation du Composant Main

La fonctionnalité de l’application tout entière est procurée par le composant Main. Il comprend un tableau authorList dans lequel les auteurs sont maintenus lorsque l’application tourne. Lorsque l’utlisateur clique sur Sauvegarder, les changements effectués dans authorList sont sauvegardés dans la base. Le composant Main comprend des éléments pour éditer les données d’un auteur et des actions pour ajouter, éditer, mettre à jour et supprimer les auteurs. Un WORepetition montre le contenu de authorList.

Personnalisation du Composant Main dans WebObjects Builder

Après avoir suivi ces étapes, Main.wo devrait prendre l’apparence de la Figure 11-4.

  1. Ouvrez Main.wo dans WebObjects Builder.
  2. Ajoutez trois clés :
    1. Nommez la première clé author, réglez son type sur EOGenericRecord et n’incluez pas de méthodes accesseurs.
    2. Nommez la seconde clé authorItem, réglez son type sur EOGenericRecord et n’incluez pas de méthodes accesseurs.
    3. Nommez la troisième clé authorList, choisissez “Mutable array of” et EOGenericRecord pour son type, et n’incluez pas de méthodes accesseurs.
  3. Ajoutez six actions, toute retournant null, qui indiquent à WebObjects de retourner le composant web courant, Main, au lieu d’un nouveau composant (la même instance de Main persiste tout au long des opérations de l’application) :

    addAuthor
    deleteAuthor
    editAuthor
    revertChanges
    saveChanges
    updateAuthor

  4. Ajoutez un élément WOForm pour editer les données d’un auteur :
    1. Choisissez Forms > WOForm.
    2. Dans le WOForm Binding Inspector, choisissez true pour l’attribut multipleSubmit.
    3. Dans le WOForm, saisissez le texte “Last Name : “, suivi d’un WOTextField, et pressez Majuscule-Retour.
    4. Reliez l’attribut value du WOTextField Nom à author.lastName.
      Note : Puisque author, authorItem et authorList sont du type EOGenericRecords, WebObjects Builder ne sait pas quels sont leur propriété. Vous devez indiquer le chemin d’accès manuellement.
    5. Saisissez le texte “First Name : “, suivi d’un WOTextField et pressez Majuscule-Retour.
    6. Reliez l’attribut value du WOTextField Nom à author.firstName.
    7. Ajoutez deux WOSubmitButtons au WOForm.Saisissez “Update” dans l’attribut value du premier WOSubmitButton (y compris les guillemets), et reliez son attribut action à l’action updateAuthor.

      Saisissez “Add” dans l’attribut value du second WOSubmitButton et reliez son attribut action à l’action addAuthor.

  5. Ajoutez un second WOForm sous le premier pour les WOSubmitButtons Save et Revert :
    1. Réglez l’attribut multipleSubmit du WOForm sur true.
    2. Ajoutez un WOSubmitButton dans le WOForm, saisissez “Revert” dans son attribut value, et reliez son attribut action à revertChanges.
    3. Ajoutez un autre WOSubmitButton dans le WOForm, saisissez “Save” dans son attribut value, et reliez son attribut action à saveChanges.
  6. Ajoutez un WORepetition pour afficher la liste des auteurs :
    1. Ajoutez un WORepetition sous le second WOForm.
    2. Ajoutez deux WOHyperlinks, séparés par un espace, dans le WORepetition.Saisissez Editer comme titre du premier WOHyperlink et reliez son attribut action à editAuthor.

      Saisissez Supprimer comme titre du deuxième WOHyperlink et reliez son attribut action à deleteAuthor.

    3. Ajoutez deux WOStrings, séparés par “, “ (une virgule et un espace) à droite du deuxième WOHyperlink.Reliez le premier WOString à authorItem.lastName et le second à authorItem.firstName.

      Placez le curseur à droite du second WOString et pressez Majuscule-Retour.

    4. Reliez l’attribut list du WORepetition à authorList, et son attribut item à authorItem.
  7. Sauvegardez Main.wo.

Figure 11-4 Le composant Main dans WebObjects Builder dotés d’éléments pour maintenir les données d’un auteur
[image: ../art/wobmainauthors.gif]

Personnalisation de la Classe Main dans Project Builder

Maintenant, ajoutez la logique propre à l’application à la classe Main en éditant le fichier Main.java.

  1. Ajoutez les variables d’instance suivantes :
    /**
      * Fait référence au contexte d'édition par défaut.
      */
     private EOEditingContext editingContext;
    
     /**
      * Stocke la description de la classe de l'entité Author.
      */
     private EOClassDescription authorClassDescription;
    
     /**
      * Stocke les spécifications de recherche utilisées pour récupérer les Authors
      * dans le stock de données.
      */
     private EOFetchSpecification fetchSpec;

    Plusieurs méthodes de la classe Main nécessitent l’utilisation d’un contexte d’édition, d’une description de classe et de spécifications de recherche. Le fait que le constructeur de la classe stocke ces objets dans des variables d’instance réduit le nombre de lignes de code requises pour implémenter ces méthodes.

  2. Editez le constructeur pour effectuer une initialisation propre.Lorsque le composant Main est créé, il doit requérir et stocker le contexte d’édition, et récupérer les auteurs stockés dans la base (la première fois que vous lancez l’application, il n’y a rien à récupérer).

    Editez le constructeur de façon à ce qu’il ressemble au Listing 11-1.

    Listing 11-1 Le constructeur dans la classe Main

    public Main(WOContext context) {
         super(context);
    
         // Construire les spécifications de recherche.
         fetchSpec = new EOFetchSpecification("Author", null, null);
    
         // Obtenir le contexte d'édition.
         editingContext = session().defaultEditingContext();
    
         // Rechercher les auteurs.
         authorList = new NSMutableArray(editingContext.objectsWithFetchSpecification(fetchSpec));
    
         // Obtenir la description de la classe Author à partir de l'entité Author.
         authorClassDescription = EOClassDescription.classDescriptionForEntityName("Author");
    
         // Créer un objet Author (où les données formulaire sont stockées).
         author = new EOGenericRecord(authorClassDescription);
     }

    Il y a trois parties dans la récupération de données d’une base avec Enterprise Objects : La spécification de la recherche, le contexte d’édition et la récupération.

    • EOFetchSpecification Un EOFetchSpecification (com.webobjects.eocontrol) est une représentation d’une requête d’objets à partir de la base de données. Il décrit les objets que vous souhaitez récupérer. Vous pouvez créer des spécifications de recherche par programme ou les définir dans le fichier modèle. Pour plus de détails sur la saisie de spécifications de recherche dans un fichier modèle, se reportez à Inside WebObjects: Using EOModeler.Une spécification de recherche est définie en trois parties, l’entité à chercher, les restrictions utilisées pour filtrer les objets rapportés et l’ordre de tri du résultat. Les deux dernières parties sont optionnelles mais la première doit être fournie lorsque la spécification est créée.
    • Contexte d’édition Les recherches sont effectuées au travers d’un contexte d’édition (com.webobjects.eocontrol), qui est responsable du maintien du diagramme objet des objets rapportés.
    • Récupération Après avoir défini les spécifications de recherche, vous pouvez les utiliser pour rapporter les données à partir du stock d’objets. Enterprise Objects traduit les spécifications de recherche en instructions SQL que votre système de base de données puisse comprendre. La base retourne une liste de lignes que la technologie Enterprise Object transforme en objets entreprise (instances de EOGenericRecord) avant de les retourner dans un NSArray.
  3. Editez la méthode addAuthor de façon à ce qu’elle ressemble au Listing 11-2.


    Listing 11-2 La méthode addAuthor de la classe Main

    public WOComponent addAuthor() {
         // Ajoute l'auteur seulement s'il n'est pas dans la liste.
         if (!authorList.containsObject(author)) {
             // Ajoute l'auteur à la liste.
             authorList.addObject(author);
    
             // Insère l'auteur dans le contexte d'édition.
             editingContext.insertObject(author);
    
             // Crée un nouvel auteur.
             author = new EOGenericRecord(authorClassDescription);
         }
    
         return null;
     }

    La technologie Enterprise Object facilite l’insertion de lignes dans les tables de votre base ; tout ce que vous avez à faire consiste à ajouter des éléments dans un tableau. Après la création d’une instance enterprise-object, insérez la dans un contexte d’édition. L’objet est alors maintenu dans le diagramme objet tout comme les autres objets rapportés du stock d’objets. Quand votre application invoque saveChanges, Enterprise Objects crée une ligne dans les tables appropriées pour chaque objet ajouté au contexte d’édition.

    La méthode addAuthor est invoquée lorsque l’utilisateur clique sur Ajouter. Si l’utilisateur n’est pas en train d’éditer un auteur existant, la méthode insère l’objet Author que l’utilisateur édite (au travers des champs du premier formulaire) dans la liste authorList, et l’insère aussi dans le diagramme objet maintenu par le contexte d’édition. Il crée alors un objet Author, où les données d’un autre auteur peuvent être stockées. (Notez que la nouvelle instance n’est ajoutée au diagramme objet que si l’utilisateur clique de nouveau sur Ajouter).

  4. Editez la méthode deleteAuthor pour qu’elle ressemble au Listing 11-3.


    Listing 11-3 La méthode deleteAuthor de la classe Main

    public WOComponent deleteAuthor() {
         // Retire de auteurList l'objet Author contenu dans authorItem.
         auteurList.removeObject(authorItem);
    
         // Récupère le contexte d'édition de authorItem.
         EOEditingContext ec = authorItem.editingContext();
    
         // Retire l'objet Author du contexte d'édition.
         ec.deleteObject(authorItem);
    
         return null;
     }

    Dans les applications multi-utilisateurs, un objet peut être dans un contexte d’édition différente de celui par défaut. Lorsque vous devez supprimer une instance enterprise-object d’un stock de données, vous devez demander à l’objet quel est son propre contexte d’édition. Puis vous invoquez la méthode deleteObject de ce contexte d’édition.

  5. Editez la méthode editAuthor pour qu’elle ressemble au Listing 11-4.


    Listing 11-4 La méthode editAuthor de la classe Main

    public WOComponent editAuthor() {
         // Positionne l'auteur à éditer sur celui que l'utilisateur a sélectionné.
         author = authorItem;
    
         return null;
     }

    Quand l’utilisateur clique sur Editer, authorItem contient l’objet Author à éditer. La prochaine fois que la page sera dessinée, les champs texte seront remplis par les données de l’auteur sélectionné.

  6. Editez la méthode updateAuthor pour qu’elle ressemble au Listing 11-5.


    Listing 11-5 La méthode updateAuthor de la classe Main

    public WOComponent updateAuthor() {
         // Crée un objet Author.
         author = new EOGenericRecord(authorClassDescription);
    
         return null;
     }

    Quand l’utilisateur clique sur Modifier, l’objet Author en cours d’édition est mis à jour avec les valeurs saisies dans les champs du formulaire (l’objet est déjà dans la liste). Par conséquent, la seule chose que cette méthode doit faire est de créer un objet Author. Au prochain rendu de la page, les champs sont remplis par rien (car ils obtiennent leurs données à partir du nouvel objet Author qui est vide), permettant à l’utilisateur de saisir les données du nouvel auteur.

  7. Editez la méthode saveChanges pour qu’elle ressemble au Listing 11-6.


    Listing 11-6 La méthode saveChanges de la classe Main

    public WOComponent saveChanges() {
         // Sauvegarde les changements apportés dans le contexte d'édition
         // dans le stock d'objets.
         editingContext.saveChanges();
    
         return null;
     }
  8. Editez la méthode revertChanges pour qu’elle ressemble au Listing 11-7.


    Listing 11-7 La méthode revertChanges de la classe Main

    public WOComponent revertChanges() {
         // Annule les changements apportés au contexte d'édition.
         editingContext.revert();
    
         // Rapporte de nouveau.
         authorList = new NSMutableArray(editingContext.objectsWithFetchSpecification(fetchSpec));
    
         return null;
     }

    Quand l’utilisateur clique sur Annuler, la méhode revertChanges indique au contexte d’édition d’annuler tout changement apporté depuis que les objets enterprise qui y sont contenus ont été dernièrement rapportés ou sauvegardés. Cependant, le tableau authorList n’est pas attaché au contexte d’édition de quelque manière que ce soit. Par conséquent, vous devez récupérer une nouvelle liste d’auteurs à partir du stock d’objets et l’assigner à authorList, ainsi l’utilisateur voit des données à jour. (La liste précédente est traitée par le collecteur de déchets—garbage collector—de l’environnement d’exécution Java quand plus aucune variable de votre application n’y fait référence).

  9. Sauvegardez Main.java.
  10. Construisez et lancez l’application.

Lancement de l’Application Authors

La Figure 11-5 illustre l’application Authors après que quelques noms d’auteurs aient été ajoutés.

Figure 11-5 L’application Authors
[image: ../art/webauthors.gif]

Il n’y a qu’une seule instance de Main tout au long de l’exécution de l’application (toutes les actions renvoient null). Lorsque Main est créée, elle lit les auteurs de la base de donénes et les stocke dans la variable d’instance authorList. Au fur et à mesure que l’utilisateur apporte des changements, authorList (et son contexte d’édition) est mis à jour. L’élément WORepetition affiche le contenu de authorList et les liens de façon à ce que l’utilisateur puisse éditer ou supprimer un auteur. Les changements sont sauvegardés lorsque l’utilisateur clique sur Save.

Notez que toutes les complications qui sont normalement requises lorsque vous avez affaire à une base de données ont été remplacées par la simple utilisation des instances enterprise-object.

Consultation de la Base de Données

La consultation des données brut d’une base de données peut vous aider à voir ce que Enterprise Objects fait à votre place et peut servir comme outil de debugging. EOModeler a la faculté de pouvoir consulter les tables et d’effectuer des filtrages basiques, ce qui est utile lors de la phase de développement de l’application. Cette simple faculté vous permet de jeter un oeil “en coulisse” à vos données.

  1. Ouvrez le modèle Authors dans EOModeler.Double-cliquez sur Authors.eomodeld sous le groupe Resources de la liste Files de la fenêtre principale de Project Builder.
  2. Sélectionnez l’entité Author.
  3. Choisissez Tools > Data Browser.


    Figure 11-6 La fenêtre Data Browser de EOModeler
    [image: ../art/moddatabrowser.gif]

    La fenêtre Data Browser montre les données stockées dans la table Author. Le bouton Refetch vous permet de rafraîchir ces données à la demande.

    EOModeler vous permet aussi d’effectuer de simples filtrages pour limiter le nombre de lignes affichées, comme illustré dans la Figure 11-7.

    Figure 11-7 Utilisation de filtres avec le Data Browser
    [image: ../art/moddatabrowserfilter.gif]

Allez plus loin

Le troisième paramètre du constructeur de EOFetchSpecification peut être un NSArray constitué de EOSortOrderings (com.webobjects.eocontrol), ce qui voous permet de modifier l’ordre dans lequel les objets sont rapportés. Vous pouvez examiner la classe EOSortOrdering en utilisant le Java Browser ou en consultant la documentation de l’API WebObjects.

Pour créer un EOSortOrdering, spécifiez l’attribut à trier et le sélecteur à utiliser pour trier. Quatre sélecteurs sont définis dans la classe EOSortOrdering :

  • CompareAscending (ordre croissant)
  • CompareDescending (ordre décroissant)
  • CompareCaseInsensitiveAscending (ordre croissant sans tenir compte de la casse)
  • CompareCaseInsensitiveDescending (ordre décroissant sans tenir compte de la casse)

Les versions insensibles à la casse des sélecteurs croissant et décroissant sont à utiliser avec les chaînes de caractères ; elles ignorent la casse des caractères lors du tri.

Une spécification de recherche créée avec un ordre de tri en place pourrait ressembler au listing Listing 11-8.

Listing 11-8 Spécification de recherche qui utilise des ordres de tri

// Tri croissant sur le nom sans tenir compte de la casse.
EOSortOrdering lastNameSort = new EOSortOrdering("lastName", EOSortOrdering.CompareCaseInsensitiveAscending);
// Tri croissant sur le prénom sans tenir compte de la casse.
EOSortOrdering firstNameSort = new EOSortOrdering("firstName", EOSortOrdering.CompareCaseInsensitiveAscending);
// Crée un tableau avec les deux ordres de tri.
NSMutableArray sortOrderings = new NSMutableArray();
sortOrderings.addObject(lastNameSort);
sortOrderings.addObject(firstNameSort);
// Crée la spécification de recherche.
EOFetchSpecification authorFetch = new EOFetchSpecification("Author", null, sortOrderings);

Textes originaux en anglais sur developer.apple.com : WebObjects Web Application - Developing an Enterprise Objects Application

Thierry WebObjects , ,

  1. Pas encore de commentaire
  1. Pas encore de trackbacks
S'abonner aux commentaires de cet article