Compartir a través de


Crear o actualizar registros masivos en Power Apps

Actualizar o crear registros de forma masiva le permite actuar sobre muchos registros a la vez. A continuación, se muestran algunos escenarios en los que le gustaría actualizar registros en masa:

  • Tienes muchas fotos y quieres subirlas todas a la vez.
  • Desea enviar una hoja de tiempo con los datos de una semana a la vez.

Es posible que también desee crear nuevos registros a granel. Por ejemplo, cuando su aplicación tiene que seleccionar muchas imágenes, es posible que desee cargarlas todas a la vez.

Este artículo explica cómo actualizar o crear registros masivos según su escenario.

Fórmulas para actualizar registros de forma masiva

Las fórmulas de esta sección se pueden utilizar para actualizar registros de forma masiva en aplicaciones de lienzo.

  • Función Patch(): Utilice esta función cuando la colección coincida con origen de datos.

    Patch( DataSource, Collection )
    
  • Función ForAll() + parche anidado + operador de desambiguación: Utilice esta función cuando las fuentes de datos tengan diferentes columnas a las que deba unirse.

    ForAll( Collection,
        Patch( DataSource, 
            LookUp( DataSource, Id = Collection[@Id] ),
            { Column: Value }
        )
    )
    
  • Función AddColumns(): Esta función se puede utilizar para proporcionar una referencia de búsqueda en la Colección que contiene las actualizaciones del DataSource si no tiene campos que hagan referencia fácilmente a la tabla.

Ejemplo de lista de comprobación

Este ejemplo usa una lista de verificación de tareas. Cuando haya terminado con algunas tareas, puede marcarlas como completadas. Puede ampliar este escenario a una lista de verificación de lanzamiento de producto, una lista de verificación de inspección de viviendas u otras listas.

La siguiente captura de pantalla muestra los elementos de la lista de verificación en un archivo Microsoft Excel. Puede marcar las tareas relacionadas con sus blogs o publicaciones en las redes sociales en este ejemplo. La tabla en Excel se llama ChecklistItems.

El ejemplo usa colecciones para demostrar este comportamiento. El enfoque funciona para cualquier backend tabular de su elección.

texto alternativo.

Los datos de Excel se importan como datos estáticos a la aplicación. En la propiedad App.OnStart, Collect() los datos de ChecklistItems de Excel en la colección ChecklistItemsSource. La colección ChecklistItemsSource se usará como datos de origen en toda la aplicación.

Este ejemplo usa una aplicación de dos pantallas:

  • Pantalla 1: Se utiliza para revisar los elementos de la lista de verificación y marcarlos como completos.
  • Pantalla 2: Se utiliza para crear un nuevo elemento de la lista de verificación. El nuevo elemento se agregará a la colección ChecklistItemsSource.

Screen1. Screen2

Cada vez que se marca un elemento de la lista de verificación, se agrega a una colección llamada CheckedItems. Utiliza la fórmula siguiente en la propiedad OnCheck de evento del control de casilla de verificación. Si el elemento ya está marcado y es parte de la colección, se elimina. Si no, se agrega el elemento marcado.

Puede alternar el estado entre Hecho y Pendiente, o puede usar los evenots Oncheck y OnUncheck:

If( !IsBlank( 
        LookUp( CheckedItems, Id = ThisItem.Id )
    ),
    Remove( CheckedItems, ThisItem ),
    Collect( CheckedItems, ThisItem )
)

Crear varios registros a la vez

Hay diferentes formas de actualizar los registros de forma masiva según el escenario. Esta sección explica cómo crear varios registros a la vez en aplicaciones de lienzo.

Cuando el usuario selecciona Hecho en el ejemplo anterior, necesita actualizar ChecklistItemsSource con cambios de la colección CheckedItems.

Para las columnas con el mismo nombre

Si su origen y destino tienen los mismos nombres de columna, puede usar una instrucción Patch. Por ejemplo, las colecciones ChecklistItemsSource y CheckedItems tienen los mismos nombres de columna. Puede usar la fórmula siguiente para actualizar la fuente a la vez con todos los cambios.

Patch( ChecklistItemsSource, CheckedItems )

Para columnas con diferentes nombres

Si las columnas en las tablas de origen y destino varían, use ForAll with Patch en su lugar.

Con ForAll(), debe recorrer cada registro utilizando una condición. La condición es una comparación entre columnas similares (por ejemplo, columna Id) de las diferentes tablas. Esta comparación se complica cuando la tabla de origen y la tabla de destino tienen los mismos nombres de columna (por ejemplo, si ProjectId fue una columna encontrada en las tablas Project y PurchaseOrder).

Estas son las alternativas:

Usar con operador de desambiguación

Para actualizar el Status de CheckedItems a "Listo", cuando los nombres de las columnas de la tabla de origen y destino sean los mismos, utilice esta fórmula:

ForAll( CheckedItems,
    Patch( ChecklistItemsSource, 
        LookUp( ChecklistItemsSource, Id = CheckedItems[@Id] ),
        { Status: "Done" }
    )
)

Para cada elemento de la colección CheckedItems, el Id (representado por el operador de desambiguación CheckedItems[@Id]) se compara con la columna Id de la colección ChecklistItemsSource. Luego, cada registro coincidente se actualiza con el estado de "Listo". El operador de desambiguación se utiliza cuando dos columnas que pertenecen a tablas diferentes tienen el mismo nombre. Si no usa este operador de desambiguación, verá que solo se actualiza el primer registro.

Si no desea utilizar una colección adicional para almacenar los elementos marcados, puede intentar los siguientes pasos:

  1. Cree una etiqueta adicional dentro de la plantilla de la galería.

    1. Enlazarlo a la columna Id.
    2. Cambie el nombre de la etiqueta a IdText.
  2. Quite el código en OnCheck del control de casilla de verificación mencionado anteriormente.

  3. Escriba la siguiente fórmula en el evento OnSelect del botón Listo:

    ForAll(
        Filter( ChecklistGallery.AllItems,
          StatusCheckbox.Value = true
        ),
        Patch( ChecklistItemsSource,
          LookUp( ChecklistItemsSource, Id = IdText.Text ),
          { Status: "Done" }
        )
    )
    

Aquí, está aplicando directamente el filtro en los elementos de la Galería para encontrar los elementos marcados. Para cada registro de los elementos filtrados, se encuentra una coincidencia en la tabla ChecklistItemsSource comparando el Id con el valor almacenado en la etiqueta IdText.

El estado del cheque se actualiza a "Hecho".

El operador de desambiguación no se puede utilizar en los elementos de la Galería. En su lugar, puede almacenar una etiqueta dentro de la galería y hacer referencia a ella para comparar.

Use una alternativa para crear una nueva columna con una etiqueta diferente

Este método es una alternativa al uso del operador de desambiguación o una etiqueta dentro de la galería.

Mientras crea una copia local de su origen de datos, puede usar la fórmula AddColumns() para crear una nueva columna con una etiqueta diferente (NewId) para la columna Id en su colección de fuentes. Cuando usa ForAll con Patch, compara la columna NewId con la columna Id en sus datos de origen.

Crear registros en masa

Es posible que desee crear nuevos registros de forma masiva si, por ejemplo, desea cargar muchas imágenes a la vez.

Aquí hay un ejemplo usando Ejemplo de una lista de verificación.

En la pantalla Crear elementos de lista de verificación, cada vez que seleccione Agregar, la información se almacena en la colección NewChecklistItems. Cuando selecciona Enviar, ForAll() y Patch() se utilizan para actualizar la colección fuente.

ForAll( NewChecklistItems,
    Patch( ChecklistItemsSource,
        Defaults( ChecklistItemsSource ),{
            Id: Id,
            Category: Category,
            Description: Description,
            Status:Status
        }
    )
)

Para cada elemento de NewChecklistItems, se crea un nuevo registro (indicado por Defaults(ChecklistItemsSource)) en la colección ChecklistItemsSource. Id está configurado en el Id de la colección NewChecklistItems. De forma similar, se establecen los valores de Category, Description y Status.

Consultar también