Situación: duplicar una fila
Uno de los requisitos comunes es permitir que un usuario copie o duplique una fila de tabla o un conjunto de filas de tabla seleccionadas. Por ejemplo, en una aplicación de Administración de proyectos, es posible que un usuario desee copiar un proyecto anterior para iniciar uno nuevo. La idea es conservar la fila del proyecto existente y ahorrar tiempo al crear la nueva fila del proyecto.
Para lograrlo, agregue un nuevo botón de la barra de comandos a la cuadrícula principal o a la barra de comandos del formulario principal. Puede controlar la visibilidad del botón con una lógica simple, como mostrar solo el botón si se selecciona una fila en la cuadrícula. También podría mostrar el botón solo si la fila de datos es adecuada con la lógica de Power Fx. Por ejemplo, solo puede permitir que el botón se muestre si el proyecto creado en el valor de la columna tiene menos de un año. En la lógica de acción, crearía la nueva fila si selecciona solo las columnas de la fila de origen que desea copiar. Podría usar funciones de Power Fx para mejorar la nueva fila. Por ejemplo, calcule una nueva fecha de finalización del proyecto en función de la fecha actual.
En el siguiente vídeo, veremos cómo implementar un botón de la barra de comandos para duplicar una fila.
Nota
Puede aumentar la resolución del vídeo si selecciona los tres puntos, Calidad y una velocidad de bits más alta.
Si implementa el botón de la barra de comandos desde la cuadrícula principal o una de las otras vistas donde un usuario puede seleccionar varias filas, habrá algunos cambios. En primer lugar, no necesitaría marcar Self.Selected.State en la fórmula de visibilidad porque solo las filas existentes estarían disponibles. Puede comprobar y mostrar el botón solo si se selecciona al menos una fila con la siguiente fórmula de visibilidad:
If(CountRows(Self.Selected.AllItems)>0,true,false)
Observe el uso de Self.Selected.AllItems en lugar de Self.Selected.Item, que usaría solo cuando una sola fila podría estar activa. Self.Selected.AllItems es una tabla de los registros que están seleccionados actualmente.
La lógica de Power Fx para copiar las filas también es diferente porque necesita usar la función ForAll para copiar todas las filas de la tabla.
ForAll(Self.Selected.AllItems,
Patch(Projects,Defaults(Projects),
{
Name:Concatenate("Cloned ", ThisRecord.Name),
Description:ThisRecord.Description,
Budget:ThisRecord.Budget*1.10,
'Start Date':DateAdd(Today(),1,Days),
'End Date':DateAdd(Today(),30,Days)
}
)
)
Después de que se ejecute la lógica del botón, la cuadrícula se actualizará y mostrará los elementos recién creados si son aptos para los criterios de visualización. A diferencia de la copia de registro único, navegar a la fila recién creada no es práctico. Puede usar la función de notificación para mostrar cuántas filas se copiaron al agregar lo siguiente después de la función ForAll:
Notify("Copied " & CountRows(Self.Selected.AllItems) & " rows")
Asegúrese de que no se agregue dentro de ForAll para evitar recibir un mensaje por cada fila copiada.
Además de las dos opciones que analizamos, una opción más avanzada es usar una Página personalizada de Power Apps como cuadro de diálogo. Cuando usa este enfoque, el botón de la barra de comandos mostraría una página personalizada y pasaría la fila para copiar como un parámetro a la página. Después, la página podría interactuar con el usuario para permitir una experiencia más personalizada para la especificación de qué valores se copiaron. La página personalizada contendría la lógica para completar la copia. La siguiente imagen muestra un ejemplo de una página personalizada que permite al usuario proporcionar el nuevo nombre del proyecto e indicar si desea copiar las actividades del proyecto anterior:
El uso de una barra de comandos para permitir que los usuarios copien filas facilita que los usuarios realicen la copia de manera eficiente. Con la lógica de Power Fx, puede implementar lógica para determinar cuándo se les permite hacer una copia y qué datos copiar.