Saltar al contenido

Introducción a App Builder - Lección 7: Más sobre reglas

Esta es la séptima lección de la serie de tutoriales Introducción a App Builder.

Hemos estado utilizando reglas para desarrollar nuestra aplicación Northwinds desde la Lección 3, pero ahora profundizaremos nuestro entendimiento de ellas familiarizándonos con algunos conceptos más sobre las reglas y su uso.

Reglas predeterminadas

Si deseas que ciertos datos se agreguen por defecto a nuevos registros tan pronto como se crean, necesitas utilizar lo que llamamos una regla predeterminada. Por ejemplo, si estás agregando un nuevo producto, debe haber un precio predeterminado.

Las reglas predeterminadas se crean en la misma área de App Builder donde construyes otras reglas, pero antes de crear nuestra primera regla predeterminada, echaremos un vistazo a otro concepto importante: uniones.

Uniones

Cuando estamos creando reglas, a veces es necesario extraer datos de dos tablas separadas. Para hacer esto, unimos las tablas, utilizando lo que llamamos una unión. Hay tres tipos de uniones: interna, izquierda externa y derecha externa.

Tipos de unión

  • Unión interna: Una unión interna solo devuelve los valores que existen en ambas tablas.

  • Unión izquierda externa: Una unión izquierda externa devuelve todos los valores de la tabla izquierda, independientemente de si también aparecen o no en la tabla derecha.

  • Unión derecha externa: Una unión derecha externa devuelve todos los valores de la tabla derecha, independientemente de si también aparecen o no en la tabla izquierda.

Crear una regla predeterminada

Vamos a crear una regla predeterminada para el ejemplo que utilizamos arriba: no queremos que los usuarios finales de nuestra aplicación Northwinds establezcan un precio unitario. Por lo tanto, crearemos una regla que extraiga los precios unitarios de la fuente de datos.

En la Lección 6, ya hemos configurado los controles de Precio Unitario en la interfaz de usuario de la aplicación para que sean de solo lectura, así que ahora crearemos una regla que dicte específicamente este valor.

  1. Ve a App Workbench > Rules y haz clic en + Rule.

  2. Siguiendo las convenciones de nomenclatura de App Builder, dale el nombre OrderDetail (Default UnitPrice).

  3. En el campo Purpose, selecciona Default.

  4. En el campo Target, selecciona la tabla OrderDetail.

  5. Haz clic en Create.

  6. Una vez que App Builder crea la regla, verás la tabla OrderDetail en la pestaña Tables. Necesitaremos las columnas OrderID y ProductID.

  7. Aún en la pestaña Tables, haz clic en + Tables y selecciona también la tabla Product. Aparecerá vinculada a la tabla OrderDetail, porque están conectadas por una relación de clave foránea.

  8. Selecciona la columna UnitPrice en la tabla Product.

  9. App Builder escribirá automáticamente la unión, pero haz clic en la pestaña Joins para asegurarte de que no haya errores:

    Joins

  10. Como con todas las reglas, siempre es una buena práctica validarla haciendo clic en el botón Results. Deberías ver tres columnas, siendo una de ellas el precio unitario para un producto dado.

Agregar una regla predeterminada a un panel

Las reglas predeterminadas deben estar conectadas a un panel para tener algún efecto. Así que volvamos a la pantalla de edición de la página Orders y seleccionemos el panel OrderDetails.

  1. Haz clic en More > Defaults. Se abrirá el diálogo Defaults.

  2. Haz clic en Register y se abrirá otro diálogo, con algunas opciones:

    1. En el campo Type, selecciona Rule.

    2. En el campo Rule, selecciona OrderDetail (Default UnitPrice).

    3. En el campo Binding, selecciona Implicit.

      Nota

      Para aprender más sobre las dos opciones de enlace, consulta Implicit and explicit binding.

    4. Haz clic en Save.

Si regresas a la vista previa de la página Orders ahora y tratas de agregar una nueva entrada en el panel Order Details, verás que ahora el Unit Price se completa automáticamente cuando haces una selección en el campo Product, lo que significa que tu regla predeterminada está funcionando.

List retrieves

Las recuperaciones de lista son una forma de expandir la funcionalidad de los controles de lista. Un control de lista regular te permite obtener el valor de ID de un registro dado. Una recuperación de lista te permite también obtener otros valores. Demostraremos cómo funcionan las recuperaciones de lista mejorando nuestra regla existente de Producto (Lista).

  1. Navega a la regla de Producto (Lista) buscándola en App Workbench > Reglas.

  2. En la pestaña Columnas, haz clic en + Columna.

  3. En el campo Columna o Expresión, ingresa P.UnitPrice.

  4. En el campo Objetivo, selecciona UnitPrice.

  5. Haz clic en Guardar.

  6. Ahora actualicemos el control que utiliza esta regla. Navega a la pantalla de edición de la página de Órdenes buscándola en App Workbench > Páginas.

  7. En el panel de Detalles del Pedido, selecciona Controles para ver la lista de controles presentes en el panel.

  8. Haz doble clic en la fila del control de Producto.

    Nota

    También puedes acceder a estas mismas opciones previsualizando la página de Órdenes con el botón Ver Página, luego abriendo el diseñador en vivo en el cajón de acciones y seleccionando el control de Producto.

  9. En la pestaña Opciones de Lista, haz clic en el botón Recuperaciones.

  10. En el diálogo de Recuperaciones, haz clic en + Agregar Recuperación.

  11. En el campo Columna del Panel, selecciona UnitPrice. En el campo Columna (Fuente de Lista), selecciona UnitPrice.

  12. Haz clic en el ícono de confirmación para guardar y salir del diálogo.

App Builder tomará unos momentos para guardar. Después de que lo haga, regresa a la vista previa de la página de Órdenes y prueba editar uno de los productos en la página de Detalles del Pedido, verás que el control de Precio Unitario se actualiza automáticamente según tu selección.

Validation rules

Otro tipo de regla que puedes aprovechar son las reglas de validación. Como su nombre implica, pueden aplicarse a ciertas columnas para asegurar que solo se almacene en ellas datos de un tipo específico. Las reglas de validación pueden aplicarse directamente a tablas en la capa de datos o a objetos de negocio en la capa de negocio.

Demostraremos cómo funcionan las reglas de validación creando una que rechace cualquier descuento mayor al 10%. Para hacerlo, vamos a usar una cláusula WHERE.

  1. Ve a App Workbench > Rules.

  2. Haz clic en + Rule para crear una nueva regla.

  3. Siguiendo las convenciones de nomenclatura de App Builder, dale el nombre OrderDetail (Validación de Descuento).

  4. En el campo Purpose, selecciona Validation.

  5. En el campo Target, selecciona OrderDetail.

  6. Haz clic en Create.

  7. En la pestaña Where, haz clic en + Where Clause. Se abre un diálogo donde puedes crear cláusulas WHERE:

    Where clause dialog

  8. En el campo Left Expression, ingresa OD.Discount.

  9. En el campo Operator, selecciona >.

  10. En el campo Right Expression, ingresa .1.

  11. Haz clic en Save y cierra el diálogo. App Builder ha creado la regla de validación.

Ahora que se ha creado la regla de validación, asegurémonos de que se aplique al objeto de negocio para el cual la creamos.

  1. Ve a App Workbench > Rules.

  2. Selecciona OrderDetail (Source), el objeto de negocio que contiene los valores de descuento.

  3. Haz clic en Events. Se abre un diálogo llamado All Events.

  4. En la fila Save, puedes ver qué cosas ocurren cuando el usuario final guarda un nuevo registro. Ahí es donde necesitamos aplicar la regla de validación que acabamos de crear. Haz clic en Rule Event Detail en esa fila.

  5. En el panel Validations, haz clic en Register. Se abre el diálogo Validation:

    Validation dialog

  6. En el campo Type, selecciona Rule.

  7. En el campo Rule, selecciona OrderDetail (Validación de Descuento), la regla de validación que acabamos de crear.

  8. En el campo Binding, selecciona Implicit.

    Nota

    Para aprender más sobre las dos opciones de enlace, consulta Enlace implícito y explícito.

  9. En el campo Mensaje, ingresa qué mensaje se mostrará a los usuarios finales si intentan ingresar datos inválidos. Este campo es obligatorio.

  10. Deja los otros campos con sus valores predeterminados y haz clic en Guardar para salir del diálogo.

Regresa a la vista previa de la página Órdenes y trata de agregar un nuevo producto en el panel de Detalles del Pedido con un descuento mayor al 10%. Cuando intentes guardar, deberías ver un error aparecer, junto con el mensaje de error que escribiste.

Parámetros a nivel de aplicación

En lugar de limitar el descuento que los usuarios pueden aplicar directamente a través de una regla como la que acabamos de hacer, también podemos hacer que el límite de descuento sea un valor que los usuarios puedan modificar. La forma en que podemos hacer esto es agregándolo como un parámetro a nivel de aplicación y almacenándolo en la tabla Parámetro.

  1. En App Workbench > Páginas, navega a la página Parámetro, que creamos en Lección 4.

  2. En la pestaña Panel, encuentra el campo Fuente del Panel y haz clic en el ícono de tabla. Esto te llevará a la pantalla de edición de la tabla Parámetro.

  3. En la pestaña Columnas, agrega una nueva columna haciendo clic en + Columna.

  4. Asigna el nombre DiscountMaximum.

  5. En el campo Lógico, selecciona Número.

  6. En el campo Físico, selecciona Decimal.

  7. Haz clic en Guardar.

  8. Ahora, agreguemos la nueva columna al objeto de negocio que se basa en la pestaña Parámetro. Puedes encontrarlo en App Workbench > Reglas o regresando a la pantalla anterior y luego haciendo clic en el ícono de lógica de negocio junto al campo Fuente del Panel.

  9. Una vez que estés en la pantalla de edición de la regla Parámetro (Fuente), ve a la pestaña Tablas y encuentra la nueva columna DiscountMaximum en la lista de columnas de la tabla Parámetro. Haz clic en la marca de verificación para seleccionarla.

  10. Ahora regresa a la página Parámetro, ya sea encontrándola en App Workbench > Páginas o regresando a la pantalla anterior. Agrega la nueva columna DiscountMaximum a la lista de controles en el panel Parámetro.

  11. Ahora, en la vista previa de la página de Parámetro, utiliza el botón Editar para elegir el descuento máximo que desees. Por ejemplo, ingresa .3 para permitir descuentos de hasta el 30%.

Editar la regla de validación para usar el nuevo valor del parámetro

Aunque queremos permitir que nuestros usuarios determinen el descuento máximo, la regla de validación que creamos anteriormente utiliza un descuento máximo fijo y codificado, por lo que aún no tolerará descuentos mayores al 10%. Vamos a editarla para usar el valor que ingresamos en la página de Parámetro. Sigue estos pasos:

  1. Ve a App Workbench > Reglas y abre la regla OrderDetail (Validación de Descuento).

  2. En la pestaña Tablas, haz clic en + Tablas.

  3. Haz clic en Agregar para la tabla Parámetro.

  4. Ahora que la tabla Parámetro también se muestra en la pestaña Tablas, selecciona la columna DiscountMaximum.

  5. Ve a la pestaña Dónde. Necesitamos editar la cláusula WHERE que creamos porque ya no queremos usar un valor codificado aquí. Haz clic en el ícono de lápiz para editarlo.

  6. En el campo Expresión Derecha, ingresa P.DiscountMaximum. App Builder tomará un momento para guardar.

  7. Ahora, vuelve a la vista previa de la página de Órdenes. Si intentas agregar un nuevo producto en el panel de Detalles del Pedido, verás que ahora se te permite dar descuentos de hasta el 30%.

Si intentas dar un descuento superior al 30% ahora, no se te permitirá. Sin embargo, el mensaje de error aún dice el límite anterior, 10%, porque también lo codificamos cuando creamos la regla de validación por primera vez. Para evitar tener que editar el mensaje cada vez que cambie el límite, vamos a usar sustitución dinámica para que el mensaje se actualice automáticamente junto con el límite.

  1. En App Workbench > Reglas, navega a la regla OrderDetail (Fuente).

  2. Esta regla actualmente solo extrae datos de la tabla OrderDetail, así que en la pestaña Tablas, haz clic en + Tabla y selecciona la tabla Parámetro. Cuando aparezca, selecciona la columna DiscountMaximum.

  3. Ahora la regla tiene acceso al último descuento máximo y podrá "ver" cuándo cambia. Es una buena práctica darle un Alias que usaremos para referirnos a él en el mensaje, así que ingresa MaxDiscount en ese campo. Para asegurarte de que el número se muestre correctamente en la interfaz de usuario, ve a la pestaña de Columnas y conviértelo en un Porcentaje.

  4. A continuación, regresa al mensaje de error que escribimos anteriormente dirigiéndote al panel de Regla y haciendo clic en Eventos. Cuando se abra el diálogo, encuentra la fila de Guardar y haz clic en Detalle del Evento de Regla. La validación que implementamos se muestra en el panel de Validaciones. Haz clic para editarla.

  5. Finalmente, en el campo de Mensaje, reemplaza el 10% codificado de forma rígida con {{ MaxDiscount }}. Rodear el alias con llaves dobles hará que App Builder aplique una sustitución dinámica para mostrar el descuento máximo actual en lugar de un valor fijo e inmutable.

Reglas CRUD

El último tipo de regla que discutiremos son las reglas CRUD, que se utilizan para actualizar datos en grandes cantidades. Las reglas CRUD se pueden usar para crear, insertar, actualizar o eliminar registros, y a menudo necesitas hacer eso en tus aplicaciones de App Builder. Veremos cómo trabajar con reglas CRUD y, en el proceso, conoceremos dos funciones importantes. Trabajaremos en la página de Empleados esta vez.

Crear una regla CRUD superior

  1. Ve a App Workbench > Reglas.

  2. Haz clic en + Regla.

  3. Dale el nombre Empleado (Actualización de Nombre de Pila en Mayúsculas).

  4. En el campo de Propósito, selecciona CRUD.

  5. Aparece un nuevo campo, Acción. Selecciona Actualizar.

  6. En el campo de Capa de Destino, selecciona Capa de Datos.

  7. En el campo de Destino, selecciona Empleado.

  8. Haz clic en Crear.

  9. En la pestaña de Tablas, App Builder seleccionará automáticamente la columna EmployeeID, que es la clave primaria de la tabla Empleado. No necesitamos ninguna otra, así que adelante, haz clic en + Columna.

  10. Cuando se abra el diálogo de Agregar Columna, ingresa la siguiente sintaxis en el campo de Columna o Expresión: Upper(E.FirstName).

    Nota

    Esta sintaxis invoca la función de base de datos Upper(), que toma una cadena como argumento para ser capitalizada y luego devuelta. Varias otras funciones de base de datos están disponibles para usar con App Builder.

  11. En el campo Alias, ingresa UpperFirstName.

  12. En el campo Target, selecciona FirstName.

  13. Haz clic en Save.

Una vez que App Builder guarda la nueva regla, verifica si está funcionando haciendo clic en Results en el panel Rule. La función Upper toma el nombre de cada empleado y lo reescribe usando todas las letras mayúsculas.

Adjuntar la nueva regla CRUD Upper a un evento

Siempre es mejor colocar tus reglas CRUD en las tablas, porque eso ayuda a agilizar y organizar los eventos, especialmente si alguna vez necesitas hacer actualizaciones o cambios en el futuro.

  1. Localiza la regla Employee (Source) en App Workbench > Rules y ábrela.

  2. Haz clic en Events.

  3. Cuando se abra el diálogo All Events, haz clic en + Rule Event.

  4. Asigna el nombre Upper First Name. Puedes dejar los otros campos con sus valores predeterminados. Haz clic en Save.

  5. Cuando regreses al diálogo All Events, el nuevo evento que acabas de crear debería estar disponible. Haz clic en el botón Rule Event Detail.

  6. En el panel Actions, haz clic en Register.

  7. Cuando se abra el diálogo Action, usa el campo Rule para seleccionar Employee (FirstName Upper Update), la regla CRUD que hemos creado previamente. Haz clic en Save.

  8. Luego verás la página de confirmación, mostrando detalles sobre el nuevo evento:

    UpperFirstName event

    Nota el panel Bindings. Muestra qué columnas hemos utilizado para vincular los registros en la capa de UI (el campo Source Column) a los registros en la regla (el campo Rule Column). Con esta vinculación en su lugar, la regla solo se ejecutará contra los registros en la UI con valores correspondientes. Sin vinculación, la regla afectaría todas las filas devueltas en la regla CRUD.

Ahora que hemos creado un evento, vamos a agregar un botón que lo ejecute en nuestra página.

  1. Navega a la pantalla de edición de la página Empleados y accede a la lista de controles en el panel Empleados.

  2. Haz clic en + Control para agregar un nuevo control.

  3. En el campo Tipo de Control, selecciona Botón.

  4. En el campo Nombre, ingresa First Name Upper. Haz clic en Siguiente.

  5. En el campo Ejecutar un Evento, selecciona UpperFirstName, nuestro evento recién creado.

  6. Haz clic en Siguiente y luego en Finalizar.

Ahora, accede a la vista previa de la página Empleados y prueba el nuevo botón. Al hacer clic en él, el primer nombre de un empleado debería aparecer en letras mayúsculas.

Tiempo de práctica: Crea una regla CRUD en minúsculas

Para practicar, intenta repetir estos pasos que acabamos de seguir, pero esta vez creando un botón que realice el proceso opuesto. Usando la función de base de datos Lower(), crea un botón que cambie los nombres de los empleados para que se muestren en letras minúsculas.

Revisión y conclusión

En esta lección, hemos ampliado enormemente nuestro conocimiento sobre reglas en App Builder, aprendiendo sobre reglas predeterminadas, de validación y CRUD, así como parámetros a nivel de aplicación y recuperaciones de listas. Esto concluye esta serie de tutoriales.

¡Tu aplicación Northwinds ahora es funcional! Muestra información sobre clientes, los pedidos que realizan, empleados, proveedores y transportistas de manera organizada y eficiente. Los conceptos y técnicas que has aprendido durante su construcción se pueden aplicar para construir cualquier otra aplicación.