Altova MobileTogether Designer

Pour ajouter de nouveaux livres, nous pouvons utiliser Éditer page pour remplir des données d’auteurs et de livres. Cette page utilise la source de page \$EditBook, qui sélectionne et affiche les données d’un livre : L’ID de l’auteur et l’ID du livre à sélectionner sont obtenues depuis l’arborescence \$PERSISTENT. Donc maintenant, si nous voulons utiliser cette sous-page comme notre formulaire pour les données de remplissage pour notre nouveau livre et afficher une page avec des champs d’entrée vide, alors nous ne devons pas sélectionner d’enregistrement existant de la BD et présenter des champs vides pour la saisie de données. Nous pouvons faire ceci en définissant les ID dans l’arborescence \$PERSISTENT dans le string vide, et ce respectivement, avant d’ouvrir la sous-page.

 

Toutefois, nous devons assurer d’utiliser les ID pour les clés primaires du nouvel enregistrement de l’auteur du nouvel enregistrement du livre. Nous pouvons faire ceci en incrémentant chacune de ces valeurs de un sur la valeur ID existante la plus large dans les tables respectives.

 

Les champs de texte et le champ de l’image de la source de page \$EditBook peuvent être édités de la même manière que les valeurs sont modifiées. Lorsque \$EditBook est enregistré, les nouvelles données auront été enregistrées dans un nouvel enregistrement d’auteur et un nouvel enregistrement de livre dans les tables Auteurs et Livres, respectivement. Les nouveaux enregistrements auront non seulement de nouvelles ID uniques mais aussi une clé étrangère correcte dans la table Books une qui met en lien l’auteur correct.

 

Le mécanisme décrit ci-dessus est mis en œuvre par les actions (i) du bouton Ajouter Nouveau Livre sur la Page principale, et (ii) les actions OnPageLoad de Éditer page. Ces deux ensembles d’actions sont décrits ci-dessous.

 

Ajouter des actions Nouveau Livre (Page principale)

Ces actions pour aller vers la sous-page Éditer page sont définies sur le bouton Ajouter Nouveau Livre (voir la capture d’écran ci-dessous).

Cliquez pour expansion/compression

Les actions sont les mêmes que pour celles des actions d’édition d’un livre dans lequel le Groupe d'Action Éditer Author est appelé. Notez, toutefois, qu’avant l’appel du Groupe d’Action, les données dans l’arborescence \$PERSISTENT sont réinitialisées avec le Genre étant défini comme All.

MTDTutDBHAddNewBookActions

Dans l’appel du Groupe d’action Edit Author (voir la capture d’écran ci-dessus, les paramètres \$AuthorID et \$BookID sont définis dans le string vide. Dans le Groupe d’action Éditer Author, les nœuds EditAuthorID et EditBookID de l’arborescence \$PERSISTENT sont mis à jour avec ces valeurs (voir la capture d’écran ci-dessous). Ceci est important car la source de page \$EditBook de la sous-page Éditer page sélectionne le livre à afficher selon les valeurs correspondantes dans l’arborescence \$PERSISTENT. Puisque ces valeurs sont un string vide, il n’existe pas d’enregistrement dans la BD qui sera sélectionnée. En conséquence, les nœuds de la source de page \$EditBook seraient vides - comme les champs de saisie sur la page.

MTDTutDBHEditAuthorActionGroup

Toutefois, il existe trois champs de BD qui ne doivent pas être vides. Il s’agit des trois clés primaires du nouvel enregistrement Authors et du nouvel enregistrement Books, ainsi que la clé étrangère de l’enregistrement Books qui lie cet enregistrement Books au nouvel enregistrement Authors. Les valeurs de ces clés sont spécifiées comme actions de l’événement OnPageLoad de la sous-page, tel que décrit ci-dessous.

 

Actions OnPageLoad (Éditer page)

Les actions de l’événement OnPageLoad font les choses suivantes :

 

Assurer que la source de page \$EditBook a la structure attendue du parent Authors, y compris l’élément enfant Books. Ceci est fait avec la fonction d’extension XPathmt-get-page-source-structure (voir la capture d’écran ci-dessous).

Trouvez la valeur entière la plus parmi les ID d’auteur. Mettre à jour trois nœuds avec cette valeur incrémentée de 1 : (i) \$PERSISTENT/Root/EditAuthorID; (ii) le nœud correspondant à la clé primaire de la table Authors (Row/@Author_ID); (iii) le nœud correspondant à la clé étrangère de la table Books (Row/Books/Row/@Author_ID).

Trouvez la valeur entière la plus élevée parmi les ID de livres. Mettre à jour deux nœuds avec cette valeur incrémentée de 1 : (i) \$PERSISTENT/Root/EditBookID; (ii) le nœud correspondant à la clé primaire de la table Books (Row/Books/Row/@Book_ID).

 

Note :les nœuds Author_ID et Book_ID sont les clés primaires des tables Authors et Books, respectivement. Chaque ID doit pour cela être unique, et c’est la raison pour laquelle une nouvelle ID est rendue plus grande de 1 que l’ID la plus élevée des ID existantes. Toutefois, ceci n’est pas une approche idéale dans certaines situations, et une approche alternative est indiquée dans la prochaine section ci-dessous, à savoir Auto-incrementing Primary Keys.

Cliquez pour expansion/compression

Veuillez noter les points suivants :

 

La première expression IF vérifie si les nœuds des ID dans l’arborescence \$PERSISTENT sont vides. Nous les avons défini pour être vides quand l’utilisateur ajoute un nouvel enregistrement (voir Ajouter des Actions pour un Nouveau Livre ci-dessus).

La deuxième expression IF vérifie si tout enregistrement a été importé depuis la BD. Puisqu’il n’y en aura pas, la structure de source de page est ajoutée.

La première des deux actions Exécuter BD (en surbrillance bleue) interroge la BD pour la valeur entière la plus élevée parmi les ID d’auteur et enregistre la valeur comme un attribut appelé @pk dans la variable dynamique\$MT_DBExecute_Result. (Cette variable est une arborescence XML ; elle peut être sérialisée avec la fonction XPath sérialiser si vous voulez voir sa structure)

Le premier ensemble d’actions Mettre à jour le nœud est utilisé pour mettre à jour les nœuds ID des auteurs dans l’arborescence \$PERSISTENT et la source de page \$EditBook.

La deuxième des deux actions Exécuter BD est semblable à la première. Elle interroge la BD pour la valeur entière la plus élevée parmi les ID de livres et enregistre la valeur comme attribut appelé @pk dans la variable dynamiqueMT_DBExecute_Result.

Le deuxième ensemble d’actions Mettre à jour le nœud est utilisé pour mettre à jour les nœuds ID des Livres dans l’arborescence \$PERSISTENT et la source de page \$EditBook.

 

L’enregistrement a désormais ses champs d’ID importants remplis d’ID uniques pertinentes, et est affiché pour les données de saisie dans la sous-page Éditer page. Les données qui sont saisies dans la source de page \$EditBook. En enregistrant la source de page, les nouvelles données sont ajoutées comme enregistrement Authors et un enregistrement Books à la BD, associées les unes aux autres par la clé étrangère Books de l’enregistrement. Les actions d’enregistrement et de suppression sont les mêmes que celles utilisées quand vous éditez un enregistrement.

 

Clés primaires auto-incrément

Dans notre exemple ci-dessus, nous avons calculé la valeur d’une nouvelle clé primaire de l’enregistrement de la manière suivante : Nous trouvons le plus grand entier parmi toutes les ID de la table respective, ajoutons 1 à cette valeur et attribuons la valeur résultant comme ID du nouvel enregistrement.

 

Toutefois, cette approche ne serait pas idéale si, tandis qu’un utilisateur ajoute un nouvel enregistrement et ne l’a pas encore enregistré, le deuxième utilisateur commence à ajouter un nouvel enregistrement. Dans ce cas, les deux nouveaux enregistrements auraient la même ID, le critère d’unicité serait satisfait et, en conséquence, un des enregistrements serait rejeté par la BD.

 

Une approche alternative serait de définir les champs de clé primaire de la BD à auto -incrémenter quand un nouvel enregistrement est ajouté à la BD. Il ne serait donc pas nécessaire de saisir une valeur pour le champ de clé primaire, encore moins une valeur unique. Ceci est dû au fait qu’une valeur unique sera saisi automatiquement par la BD quand l’enregistrement est saisi.

 

Vous pouvez saisir un champ BD pour auto-incrémenter d’une des manières suivantes :

 

Dans la BD, définissez le champ à auto-incrémenter. Quand un nouvel enregistrement est enregistré de la solution à la BD, le champ de clé primaire sera automatiquement incrémenté avec une valeur unique.

Dans le Volet de sources de page de votre design, cliquez avec la touche de droite dans le champ de source de page que vous voulez auto-incrémenter et sélectionnez Champ BD | Est Auto-incrément. Quand l’enregistrement est enregistré dans la BD, le champ sera auto-incrémenté.

 

© 2017-2023 Altova GmbH