Mettre à jour les enregistrements de données dans une application DOM virtuelle Oracle JET
Présentation
Ce tutoriel explique comment utiliser l'application DOM virtuelle Oracle JavaScript Extension Toolkit (Oracle JET) pour mettre à jour un enregistrement de données existant et le soumettre à un service REST.
Objectifs
Dans ce tutoriel, vous apprendrez à mettre à jour un enregistrement de données existant et à le soumettre à un service REST.
Conditions requises
- Environnement de développement configuré pour créer des applications DOM virtuelles Oracle JET incluant une installation de Node.js
- Achèvement du tutoriel précédent dans ce cheminement d'apprentissage, Créer un formulaire pour créer des enregistrements de données dans une application DOM virtuelle Oracle JET
Tâche 1 : Créer des composants pour gérer les informations de formulaire
Créez un composant qui affichera une boîte de dialogue pour appeler la fonctionnalité de mise à jour d'un enregistrement.
-
Naviguez jusqu'au répertoire
JET-Virtual-DOM-app/src/components/ActivityItem, créez un nouveau fichierEditItemDialog.tsxet ouvrez-le dans un éditeur. -
Ajoutez les entrées de paramètre fictif qui définissent un nom de fonction (
EditItemDialog) pour le nouveau composant.import { h } from "preact"; type Props = { message?: string; }; const EditItemDialog = (props: Props) => { return ( <div class="oj-web-applayout-max-width oj-web-applayout-content"> <p>content</p> </div> ); }; export default EditItemDialog;
Tâche 2 : Gérer l'ouverture de la boîte de dialogue
Déclarez le type et la fonction dans le composant ItemActionsContainer pour appeler le composant EditItemDialog qui contient la fonctionnalité permettant de mettre à jour un enregistrement.
-
Naviguez jusqu'au répertoire
JET-Virtual-DOM-app/src/components/ActivityItemet ouvrez le fichierItemActionsContainer.tsx. -
En haut du fichier, importez les crochets
useStateetuseEffectPreact, définissez les propriétés supplémentaires d'un alias de typePropsdont vous avez besoin pour utiliser le composantEditItemDialog, puis définissez un alias de typeItem.import { h } from "preact"; import "ojs/ojbutton"; import { useState, useEffect } from "preact/hooks"; type Props = { create: () => void; edit: () => void; itemSelected: Partial<Item>; }; type Item = { id: number; name: string; short_desc?: string; price?: number; quantity?: number; quantity_shipped?: number; quantity_instock?: number; activity_id?: number; image?: string; }; -
Avant l'énoncé
return, utilisez les crochets Preact que vous avez importés pour déterminer si un élément d'activité est sélectionné.const ItemActionsContainer = (props: Props) => { const [hideActions, setHideActions] = useState<boolean>(true); if (props.itemSelected?.id) { console.log("Selected: " + JSON.stringify(props.itemSelected)); } useEffect(() => { if (props.itemSelected?.id) { setHideActions(false); } else { setHideActions(true); } }, [props.itemSelected]); return ( -
Dans l'énoncé
return, ajoutez un nouvel élémentoj-buttonavec un attributonojActionqui référence la propriétéedit.const ItemActionsContainer = (props: Props) => { return ( <div> <oj-button id="createButton" onojAction={props.create}>Create</oj-button> <oj-button id="updateButton" disabled={hideActions} onojAction={props.edit}>Update</oj-button> </div>Enregistrez le fichier
ItemActionsContainer.tsx. Votre code doit être similaire àItemActionsContainer.tsx.txt -
En haut du fichier
EditItemDialog.tsx, importez les modules pour le composant Oracle JET Dialog, ainsi que les crochets PreactuseRef,useEffect,MutableRefetuseState.import { h } from "preact"; import { useRef, useEffect, useState, MutableRef } from "preact/hooks"; import "ojs/ojdialog"; import { ojDialog } from "ojs/ojdialog"; -
Dans l'alias de type
Props, créez les propriétés suivantes.type Props = { isOpened: boolean; closeDialog: (ref: MutableRef<ojDialog>, type: string) => void; editItem: (data: Partial<Item>, ref: MutableRef<ojDialog>) => void; itemData: Partial<Item>; }; -
Dans l'énoncé
return, remplacez l'élémentdivexistant par un élémentspanqui encapsule l'élément personnaliséoj-dialog.return ( <span> <oj-dialog id="editDialog" ref={editDialogRef as MutableRef<ojDialog>} dialogTitle="Update Item Details" onojClose={closeDialog} cancelBehavior="icon"> <div slot="body"> <oj-label-value labelEdge="inside"> <oj-label for="itemid" slot="label"> Item ID </oj-label> <div id="itemid" slot="value" class="slot-line"> {editFormData?.id} </div> </oj-label-value> <oj-form-layout> <oj-input-text id="name" labelHint="Name" onvalueChanged={onChangeHandler} value={editFormData?.name}></oj-input-text> <oj-input-text id="price" labelHint="Price" onvalueChanged={onChangeHandler} value={editFormData?.price}></oj-input-text> <oj-input-text id="short_desc" labelHint="Description" onvalueChanged={onChangeHandler} value={editFormData?.short_desc}></oj-input-text> </oj-form-layout> </div> <div slot="footer"> <oj-button id="submitBtn" onojAction={editItem}> Submit </oj-button> </div> </oj-dialog> </span> ); -
Avant l'énoncé
return, ajoutez les méthodes que les valeurs d'attribut dans les éléments personnalisés enfants de la référence d'élément personnaliséoj-dialog. Par exemple, la méthodeonChangeHandlerest appelée lorsqu'un composantoj-input-textdétecte une modification au moyen de son attributonvalueChanged.const EditItemDialog = (props: Props) => { const editDialogRef = useRef<ojDialog>(); const [editFormData, setEditFormData] = useState<Partial<Item>>({}); const onChangeHandler = (event: any) => { if (event.detail.updatedFrom === "internal") { setEditFormData({ ...editFormData, [event.currentTarget.id]: event.detail.value, }); } }; const closeDialog = () => { props.closeDialog(editDialogRef as MutableRef<ojDialog>, "edit"); }; const editItem = () => { console.log("data: " + JSON.stringify(editFormData)); props.editItem(editFormData, editDialogRef as MutableRef<ojDialog>); }; useEffect(() => { setEditFormData(props.itemData); props.isOpened ? editDialogRef.current?.open() : editDialogRef.current?.close(); }, [props.isOpened]); return ( -
Avant la déclaration de la fonction
EditItemDialog, définissez un alias de typeItemqui inclut des champs pour les données que vous mettez à jour et envoyez au service REST.type Item = { id: number; name: string | undefined; short_desc?: string; price?: number; quantity?: number; quantity_shipped?: number; quantity_instock?: number; activity_id?: number; image?: string; }; const EditItemDialog = (props: Props) => {Enregistrez le fichier
EditItemDialog.tsx. Votre code doit être similaire àEditItemDialog.tsx.txt
Tâche 3 : Utiliser le composant EditItemDialog
-
Ouvrez le fichier
ActivityItemContainer.tsxet importez le composantEditItemDialogque vous avez créé lors de la dernière tâche, ainsi que le crochetMutableRefde Preact et le module Oracle JET pour le composant Dialog.import { useState, useCallback, MutableRef, useRef } from "preact/hooks"; import EditItemDialog from "./EditItemDialog"; -
Dans l'alias de type
Props, mettez à jour l'entrée pourdataafin de prendre en charge le typeanypourRESTDataProvideret supprimez ou mettez en commentaire le typeActivityItemque le composant n'utilise plus.type Props = { data?: RESTDataProvider<any, any>; selectedActivity: Item | null; onItemChanged: (item: Item) => void; }; // type ActivityItem = { // id: number; // name: string; // items: Array<Item>; // short_desc: string; // image: string; // }; -
Dans l'énoncé
return, mettez à jour l'élémentItemActionsContaineravec les valeurs d'attributitemSelectedetedit. Après l'élémentCreateNewItemDialog, ajoutez un nouvel élément pour le composantEditItemDialogque vous avez importé.<div id="container"> <h3>Activity Items</h3> <ItemActionsContainer create={openCreateDialog} itemSelected={activityItemValue} edit={openEditDialog} /> . . . </div> <CreateNewItemDialog isOpened={isCreateOpened} createNewItem={createItem} closeDialog={handleDialogClose} /> <EditItemDialog isOpened={isEditOpened} editItem={editItem} closeDialog={handleDialogClose} itemData={itemData} /> . . . -
Avant l'énoncé
return, ajoutez la fonctionopenEditDialogpour ouvrir la boîte de dialogue de modification et la fonctioneditItempour envoyer l'élément d'activité mis à jour au service REST.const openEditDialog = () => { console.log("Item: " + JSON.stringify(itemData)); setIsEditOpened(true); console.log("Edit dialog opened"); }; const editItem = async (newItemData:Partial<Item>, editDialogRef = useRef<ojDialog>()) => { if (newItemData != null) { const row = { itemId: newItemData.id, name: newItemData.name, price: newItemData.price, short_desc: newItemData.short_desc, }; // Create and send request to update row on rest service const request = new Request(`${restServerURLItems}${itemData.id}`, { headers: new Headers({ "Content-type": "application/json; charset=UTF-8", }), body: JSON.stringify(row), method: "PUT", }); const response = await fetch(request); const updatedRow = await response.json(); // Create update mutate event and call mutate method // to notify dataprovider consumers that a row has been // updated const updatedRowKey = itemData.id; const updatedRowMetaData = { key: updatedRowKey }; props.data?.mutate({ update: { data: [updatedRow], keys: new Set([updatedRowKey]), metadata: [updatedRowMetaData], }, }); } // End if statement console.log("Edited item"); editDialogRef.current?.close(); };Enregistrez le fichier
ActivityItemContainer.tsx. Votre code doit être similaire àActivityItemContainer.tsx.txt
Tâche 4 : Tester le code et mettre à jour un enregistrement
-
Dans la fenêtre de terminal, accédez au répertoire
JET-Virtual-DOM-appet exécutez l'application DOM virtuelle.npx ojet serve - Dans le navigateur, affichez les modifications dynamiques de votre application DOM virtuelle.
- Dans l'application DOM virtuelle, cliquez sur l'activité Baseball, puis sur l'élément SureFire Ball (Jeu de 4).
-
Cliquez sur le bouton Mettre à jour.
La boîte de dialogue Mettre à jour les détails de l'élément s'affiche.
-
Remplacez le prix de
20.5par21et cliquez sur Soumettre.La section est actualisée et le prix de l'article a été mis à jour.

- Fermez la fenêtre ou l'onglet du navigateur qui affiche votre application DOM virtuelle en cours d'exécution.
- Dans la fenêtre de terminal, appuyez sur Ctrl+C et, si vous y êtes invité, entrez
ypour quitter la tâche par lots d'outils Oracle JET.
Étape suivante
Passez au tutoriel suivant dans ce module.
Ce tutoriel fait partie du module Opérations CRUD à l'aide d'un service REST.
- Extraire des données à partir de l'API REST dans Oracle JET
- Créer un formulaire pour créer des enregistrements de données dans une application DOM virtuelle Oracle JET
- Mettre à jour les enregistrements de données dans une application DOM virtuelle Oracle JET
- Supprimer des enregistrements de données dans une application DOM virtuelle Oracle JET
Vous pouvez retourner à la page principale du cheminement d'apprentissage DOM virtuel pour accéder à tous les modules de la création d'applications DOM virtuelles.
Ressources d'apprentissage supplémentaires
Explorez d'autres laboratoires sur le site docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir la documentation sur le produit, visitez Oracle Help Center.
Update data records in an Oracle JET virtual DOM app
G40694-01