Crear un formulario para crear registros de datos en una aplicación web de Oracle JET
Introducción
En este tutorial se muestra cómo utilizar la aplicación web Oracle JavaScript Extension Toolkit (Oracle JET) para crear un registro de datos y enviarlo a un servicio REST.
Objetivos
Al finalizar este tutorial, habrá aprendido a escribir datos en un servicio REST.
Requisitos
- Entorno de desarrollo configurado para crear aplicaciones de Oracle JET con el tiempo de ejecución de JavaScript, Node.js y la última interfaz de línea de comandos de Oracle JET instalada
- Finalización del tutorial anterior en esta ruta de aprendizaje, para que haya creado la aplicación web de Oracle JET en la carpeta
JET_Web_Applicationcon un proveedor de datos REST para recuperar datos
Tarea 1: Crear un cuadro de diálogo en la vista
Utilice el elemento HTML personalizado oj-dialog para recopilar la información del formulario que se transfiere a un observable.
-
Navegue al directorio
JET_Web_Application/src/ts/viewsy abra el archivodashboard.htmlen un editor. -
Busque el elemento
h3dondeid="itemsListHeader". A continuación, agregue un elementooj-buttony defina el atributoon-oj-actionen"[[showCreateDialog]]".<h3 id="itemsListHeader">Activity Items</h3> <oj-button id="createButton" on-oj-action="[[showCreateDialog]]">Create</oj-button> -
Busque el elemento
oj-bind-if test="[[itemSelected()]]"y, sobre él, agregue un elementooj-dialog. Defina el atributoiden"createDialog"y el estilo en"display:none".. . . </oj-list-view> </div> <oj-dialog id="createDialog" style="display: none" dialog-title="Create New Item" cancel-behavior="icon"> </oj-dialog> <oj-bind-if test="[[itemSelected()]]"> <div id="itemDetailsContainer" class="oj-flex-item oj-panel oj-bg-neutral-30 oj-md-6 oj-sm-12"> . . . -
Dentro del elemento
oj-dialogque ha creado, agregue dos elementosdivsecundarios con los atributosslot="body"yslot="footer".<oj-dialog id="createDialog" style="display: none" dialog-title="Create New Item" cancel-behavior="icon"> <div slot="body"> </div> <div slot="footer"> </div> </oj-dialog> -
Agregue un elemento
oj-buttondentro del elementodiv slot="footer"que ha creado y defina el atributoon-oj-action="[[createItem]]".<div slot="footer"> <oj-button id="submitBtn" on-oj-action="[[createItem]]">Submit</oj-button> </div> -
Dentro del elemento
div slot="body"que ha creado, agregue un elementooj-labely un elementooj-input-textpara cada uno de los valoresActivity IDyName.<div slot="body"> <oj-label class="oj-label oj-label-value" for="createActivityId">Activity ID</oj-label> <oj-input-text id="createActivityId" readonly value="[[activityKey]]"></oj-input-text> <oj-label class="oj-label" for="createNewName">Name</oj-label> <oj-input-text id="createNewName" value="{{itemName}}"></oj-input-text> </div>Tenga en cuenta que enlaza el valor
activityKeymediante corchetes, que indica un enlace unidireccional, porque el usuario no debe editar el valor de ID de actividad. El valoritemNamese enlaza mediante llaves, lo que indica un enlace bidireccional y permite al usuario sobrescribir el valor. -
Del mismo modo, debajo del elemento HTML personalizado
oj-input-text id="createNewName"que ha creado, agregue elementosoj-input-textpara los valoresPrice, Description, Quantity: In-StockyQuantity: Shipped.<div slot="body"> <oj-label class="oj-label oj-label-value" for="createActivityId">Activity ID</oj-label> <oj-input-text id="createActivityId" readonly value="[[activityKey]]"></oj-input-text> <oj-label class="oj-label" for="createNewName">Name</oj-label> <oj-input-text id="createNewName" value="{{itemName}}"></oj-input-text> <oj-label class="oj-label" for="createNewPrice">Price</oj-label> <oj-input-text id="createNewPrice" value="{{price}}"></oj-input-text> <oj-label class="oj-label" for="createNewDesc">Description</oj-label> <oj-input-text id="createNewDesc" value="{{short_desc}}"></oj-input-text> <oj-label class="oj-label" for="createNewInStock">Quantity: In-Stock</oj-label> <oj-input-text id="createNewInStock" value="{{quantity_instock}}"></oj-input-text> <oj-label class="oj-label" for="createNewShipped">Quantity: Shipped</oj-label> <oj-input-text id="createNewShipped" value="{{quantity_shipped}}"></oj-input-text> </div> -
Guarde el archivo
dashboard.html.El código debe ser similar a este archivo final-create-dashboard-html.txt.
Tarea 2: Manejo de la apertura del diálogo en ViewModel
Declare los nuevos observables y funciones a los que se hace referencia en la vista para que la aplicación web de Oracle JET se inicialice correctamente al servirla.
-
Navegue al directorio
JET_Web_Application/src/ts/viewModelsy abra el archivodashboard.tsen un editor. -
En la parte superior del archivo
dashboard.ts, importe los módulos de Oracle JET para los componentes Botón, Cuadro de diálogo y Texto de entrada.import * as AccUtils from "../accUtils"; . . . import { ojDialog } from "ojs/ojdialog"; import "ojs/ojdialog"; import "ojs/ojinputtext"; import { ojButtonEventMap } from "ojs/ojbutton"; . . . -
En la lista de observables, declare e inicialice los observables de los campos del cuadro de diálogo de creación.
class DashboardViewModel { . . . // Fields in Create dialog itemName: ko.Observable<string>; price: ko.Observable<number>; short_desc: ko.Observable<string>; quantity_instock: ko.Observable<number>; quantity_shipped: ko.Observable<number>; quantity: number; inputImageFile: string = 'css/images/product_images/jet_logo_256.png' . . . constructor() { . . . // Initialize fields in create dialog this.itemName = ko.observable<string>(); this.price = ko.observable<number>(); this.short_desc = ko.observable<string>(); this.quantity_instock = ko.observable<number>(); this.quantity_shipped = ko.observable<number>(); this.quantity = 0; // inputImageFile has already been initialized. } // Closing bracket for constructor method -
Debajo del método
constructor(), agregue un método denominadoshowCreateDialogpara abrir el cuadro de diálogo.. . . constructor() { . . . } // Closing bracket for constructor method // Open dialog public showCreateDialog(event: ojButtonEventMap["ojAction"]) { (document.getElementById("createDialog") as ojDialog).open(); } -
Debajo del método
showCreateDialogque ha creado, agregue un método denominadocreateItempara enviar los datos del cuadro de diálogo y agregue un comando de cierre.// Create item and close dialog public createItem = async (event: ojButtonEventMap["ojAction"]) => { (document.getElementById("createDialog") as ojDialog).close(); } -
Guarde el archivo
dashboard.ts.El código debe ser similar a este archivo create-dashboard-ts.txt.
-
En la ventana de terminal, ejecute y pruebe la aplicación web.
$ ojet serveEl panel Ítems de actividad ahora contiene un botón Crear. Al hacer clic en él, se abre un cuadro de diálogo.

-
Deje abierta la ventana de terminal y la ventana del explorador que muestra la aplicación web.
Tarea 3: Manejo del envío de la entrada de diálogo en ViewModel
Recupere los datos del cuadro de diálogo de ViewModel, envíelos al servicio REST mediante la API de recuperación y el método HTTP POST y, finalmente, utilice el método mutate de RESTDataProvider para actualizar la instancia RESTDataProvider.
-
En el archivo
dashboard.tsabierto, en el métodocreateItemsituado encima de la llamadaclose(), declare variables para contener los valores de entrada del cuadro de diálogo Crear nuevo elemento. Además, calcule el valor dequantityen función de los valores de entrada paraquantity_instockyquantity_shipped.// Create item and close dialog public createItem = async (event: ojButtonEventMap["ojAction"]) => { this.quantity = (Number(this.quantity_instock()) + Number(this.quantity_shipped())); const row = { name: this.itemName(), short_desc: this.short_desc(), price: this.price(), quantity_instock: this.quantity_instock(), quantity_shipped: this.quantity_shipped(), quantity: this.quantity, activity_id: this.activityKey, image: this.inputImageFile, }; (document.getElementById("createDialog") as ojDialog).close(); } -
Debajo de la declaración de variable
row, cree una solicitud para enviar los datos al servicio REST.. . . const row = { . . . image: this.inputImageFile, }; // Create and send request to REST service to add row const request = new Request(this.restServerURLItems, { headers: new Headers({ "Content-type": "application/json; charset=UTF-8", }), body: JSON.stringify(row), method: "POST", }); const response = await fetch(request); const addedRow = await response.json(); . . . -
Debajo de la variable
addedRow, cree un evento mutadoaddy llame al métodoRESTDataProvidermutatepara notificar a la instanciaRESTDataProviderque se ha agregado una nueva fila. También llama al métodoRESTDataProviderrefresh()para refrescar la visualización.. . . const addedRow = await response.json(); // Create add mutate event and call mutate method // to notify dataprovider that a row has been // added const addedRowKey = addedRow[this.keyAttributes]; const addedRowMetaData = { key: addedRowKey }; this.itemsDataProvider.mutate({ add: { data: [addedRow], keys: new Set([addedRowKey]), metadata: [addedRowMetaData], }, }); this.itemsDataProvider.refresh(); // Close dialog (document.getElementById("createDialog") as ojDialog).close(); } -
Guarde el archivo
dashboard.ts.El código debe ser similar a este archivo final-create-dashboard-ts.txt.
Tarea 4: Prueba del código y creación de un registro
-
En el explorador, vea los cambios dinámicos en la aplicación web.
-
En la aplicación web, haga clic en la actividad de Béisbol.
-
Haga clic en Crear.
Se abre el cuadro de diálogo Crear nuevo elemento.
-
Rellene los detalles de un nuevo artículo.
- Nombre:
SureFire Ball (Set of 4) - Precio:
20.5 - Descripción:
Canvas balls for practice - Cantidad: en stock:
35 - Cantidad: Enviada:
61
- Nombre:
-
Haga clic en Ejecutar.
La sección se refresca y el elemento forma parte de la lista de elementos de actividad de béisbol.
-
Haga clic en el elemento SureFire Ball (Juego de 4) de la lista y vea sus detalles.

-
Cierre la ventana o separador del explorador que muestra la aplicación web en ejecución.
-
En la ventana de terminal, pulse Ctrl+C y, si se le solicita, introduzca
ypara salir del trabajo por lotes de herramientas de Oracle JET.
Más recursos de aprendizaje
Explore otras prácticas en docs.oracle.com/learn o acceda a contenido de aprendizaje más gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de formación de Oracle.
Para obtener documentación sobre los productos, visite Oracle Help Center.
Create a form to create data records in an Oracle JET web app
F49682-01
February 2022
Copyright © 2022, Oracle and/or its affiliates.