Acceder a datos en SQL Server
Agregar un origen de datos
Acceso directo:
Si elige la opción Comenzar con datos al crear una aplicación, la propiedad Elementos de su galería tiene una fórmula de Power Fx con un nombre de origen de datos que apunta directamente a la tabla de la base de datos.
Por ejemplo, si tiene una tabla BOOKLENDING
, verá la siguiente fórmula:
Search([@'[dbo].[BOOKLENDING]'], SearchInput1.Text, author, author,book_name,category)
Vistas y procedimientos almacenados:
Un patrón profesional común de acceso a datos es utilizar vistas y luego procedimientos almacenados para crear, actualizar y eliminar en lugar de permitir el acceso directo. Si desea utilizar vistas o procedimientos almacenados, debe cambiar la fórmula de ejemplo. Del mismo modo, el formulario para el registro tampoco usa el enfoque directo integrado de la fórmula SubmitForm()
.
Desencadenadores:
Un patrón de base de datos consiste en utilizar desencadenadores en las tablas. Si una tabla tiene un desencadenante, no se puede utilizar el patrón directo Submit()
para crear, actualizar y eliminar. Submit()
tiene un conflicto entre el manejo de desencadenantes SQL y el comportamiento incorporado Power Apps, que utiliza el mismo parámetro de salida.
Sin embargo, puede acceder directamente a la tabla con fines de consulta, pero para manejar Create
, Update
o Delete
debe llamar a un procedimiento almacenado.
[!NOTA]
El conector de servidor SQL, como todos los conectores que trabajan con datos relacionales, asume que las tablas tienen una clave principal. Una clave principal es fundamental para encontrar registros específicos para actualizar. Si una tabla del servidor SQL no tiene una clave principal, los datos se tratarán como de solo lectura. Si tiene derechos de acceso y edición en la tabla SQL Server, considere la posibilidad de agregar una clave generada automáticamente.
Usar una vista
Una vista es una consulta guardada que se muestra como una sola tabla de datos.
Las vistas aparecen en la lista de tablas que puede seleccionar al agregar un origen de datos. Las vistas solo admiten consultas, no actualizaciones. Debe utilizar un procedimiento almacenado para las actualizaciones.
Si crea una tabla con la opción Start with data
, obtendrá pantallas y fórmulas que muestran registros en una galería y un formulario. Puede ver las fórmulas y la funcionalidad para la creación, edición y eliminación. Sin embargo, si usa una vista, solo verá una pantalla de visualización para la galería y el formulario.
Es posible que desee las pantallas autogeneradas de Start with data
para las vistas.
Para esta opción generada automáticamente:
- Elija
Start with data
con una tabla básica. - Elimine y reemplace el origen de datos de la tabla.
Ejemplo:
Por ejemplo, si tuviera una tabla BOOKLENDINGVIEW
y la agregara como origen de datos para Power Apps, la fórmula podría ser tan simple como:
BOOKLENDINGVIEW
También puede reemplazar otras fórmulas de creación, actualización y eliminación por un origen de datos de vista y llamadas a procedimientos almacenados.
Utilizar procedimientos almacenados
Al agregar una conexión SQL Server a la aplicación, puede agregar procedimientos almacenados y llamarlos directamente en Power Fx.
Nota
Esta característica también funciona con conexiones implícitas seguras.
Una vez que selecciona un procedimiento almacenado, aparece un nodo secundario y puede designar el procedimiento almacenado como Seguro de usar para galerías y tablas.
Un procedimiento almacenado es seguro si no realiza ninguna acción que pueda no ser deseada en determinados escenarios. Por ejemplo, si un procedimiento almacenado recopilara todas las cuentas de una ciudad determinada y luego les enviara un correo electrónico. Es posible que no siempre desee que se envíen correos electrónicos cada vez que se llama al procedimiento almacenado. Por lo tanto, el procedimiento almacenado no debe marcarse como seguro.
Marque que un procedimiento almacenado es seguro sólo si:
No hay efectos secundarios al llamar a este procedimiento a demanda.
Debería poder llamar al procedimiento varias veces o cada vez que Power Apps actualice el control. Cuando se usa con una propiedad Elementos de una galería o tabla, Power Apps llama al procedimiento almacenado cada vez que el sistema determina que es necesaria una actualización. No puede controlar cuándo se llama al procedimiento almacenado.
Devuelve una cantidad modesta de datos en el procedimiento almacenado.
Las llamadas a la acción, como los procedimientos almacenados, no tienen un límite en el número de filas recuperadas. No se paginan automáticamente en incrementos de 100 registros como las fuentes de datos tabulares, como tablas o vistas.
Si el procedimiento almacenado devuelve demasiados datos (muchos miles de registros), la aplicación podría ralentizarse o colapsar. Por razones de rendimiento, traiga menos de 2000 registros.
Si marca un procedimiento almacenado como seguro, puede asignarlo como una propiedad de Items en galerías para que las tablas lo usen en su aplicación.
Importante
El esquema de los valores devueltos del procedimiento almacenado debe ser estático, para que los valores no cambien de una llamada a otra. Por ejemplo, si un procedimiento almacenado devuelve dos tablas, siempre devolverá dos tablas. Puede trabajar con resultados con o sin tipo.
La estructura de los resultados también debe ser estática. Por ejemplo, si el esquema de los resultados es dinámico, entonces los resultados son sin tipo y debe proporcionar un tipo para poder utilizarlos en Power Apps. Para obtener más información, consulte Resultados sin tipo.
Espacio de nombres SQL antepuesto al nombre del procedimiento almacenado
El nombre del espacio de nombres de SQL Server, donde se almacena el procedimiento, se antepone al nombre del procedimiento almacenado. Por ejemplo, todos los procedimientos almacenados en el espacio de nombres "DBO" de SQL Server tienen 'dbo' al principio del nombre.
Por ejemplo, al agregar un procedimiento almacenado, es posible que vea más de un origen de datos en el proyecto.
Llamar a un procedimiento almacenado
Para utilizar un procedimiento almacenado en Power Apps, anteponga al nombre del procedimiento almacenado el nombre del conector asociado a él seguido del nombre del procedimiento almacenado, como Paruntimedb.dbonewlibrarybook
.
Nota
Cuando Power Apps se incorpora el procedimiento almacenado, se concatena el espacio de nombres y el nombre del procedimiento para que dbo.newlibrarybook
se convierta en dbonewlibrarybook
.
Los argumentos se pasan como registro de Power Apps con pares de valores con nombre:
<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >})
Propina
Recuerde convertir los valores si es necesario a medida que los pasa a su procedimiento almacenado, ya que está leyendo un valor de texto en Power Apps. Por ejemplo, si está actualizando un integer en SQL, debe convertir el texto en el campo usando Value()
.
Este es un ejemplo del aspecto que podrían tener los procedimientos almacenados al asignarlos a una propiedad OnSelect
.
Variables y todos los procedimientos almacenados
Puede tener acceso a un procedimiento almacenado para la propiedad Elementos de una galería después de declararla segura para la interfaz de usuario. Haga referencia al nombre del origen de datos y al nombre del procedimiento almacenado seguido de ResultSets
. Puede obtener acceso a varios resultados haciendo referencia al conjunto de tablas devueltas, como la Tabla 1, la Tabla 2, etc.
Por ejemplo, un procedimiento almacenado al que se accede desde la tabla Paruntimedb
con el nombre dbo.spo_show_all_library_books()
tiene el siguiente aspecto:
Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1
Esta consulta llena la galería con registros. Sin embargo, los procedimientos almacenados son comportamientos de acción en el modelo tabular. Refresh()
solo funciona con orígenes de datos tabulares y no se puede usar con procedimientos almacenados. Debe actualizar la galería cuando se crea, actualiza o elimina un registro.
Nota
Cuando se utiliza un Submit()
en un formulario para una fuente de datos tabular, efectivamente llama a Refresh()
de forma silenciosa y actualiza la galería.
Usar una variable para rellenar y actualizar la galería
Use una variable en la propiedad OnVisible
para la pantalla y establezca la variable al procedimiento almacenado.
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);
A continuación, puede establecer la propiedad Items
de la galería con el nombre de la variable.
SP_Books
Después de crear, actualizar o eliminar un registro con una llamada al procedimiento almacenado, vuelva a establecer la variable para actualizar la galería.
Paruntimedb.dbonewlibrarybook({
book_name: DataCardValue3_2.Text,
author: DataCardValue1_2.Text,
...
});
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);
Utilice Power Automate para llamar a procedimientos almacenados
Power Automate maneja mejor las acciones asincrónicas. Puede llamar a procedimientos almacenados como parte de una serie de llamadas en un proceso empresarial.
Para llamar Power Automate seguido de una llamada a procedimientos almacenados, cree variables de entrada como parte del flujo.
A continuación, pase las variables de entrada a la llamada del procedimiento almacenado.
Agregue este flujo de Power Automate a su aplicación y llámelo. Los argumentos opcionales se pasan como un registro "{ ... }”. En el ejemplo siguiente todos los argumentos son opcionales.