Crear ou actualizar rexistros en masa en Power Apps

Actualizar ou crear rexistros en masa permítelle actuar en moitos rexistros á vez. Aquí ten algunhas situacións nas que lle gustaría actualizar rexistros en masa:

  • Ten moitas fotos e quere cargalas todas á vez.
  • Quere enviar unha folla de horas cos datos dunha semana á vez.

Tamén pode que queira crear novos rexistros en masa. Por exemplo, cando a aplicación ten que seleccionar moitas imaxes, é posible que queira cargalas á vez.

Este artigo explica como actualizar ou crear rexistros en masa segundo o seu escenario.

Fórmulas para actualizar rexistros en masa

As fórmulas desta sección pódense usar para actualizar en masa os rexistros en aplicacións de lenzo.

  • Función Patch(): use esta función cando a colección coincida coa orixe de datos.

    Patch( DataSource, Collection )
    
  • Función ForAll() + función Patch aniñada + operador de desambiguación: use esta función cando as orixes de datos teñan columnas diferentes que precisa unir.

    ForAll( Collection,
        Patch( DataSource, 
            LookUp( DataSource, Id = Collection[@Id] ),
            { Column: Value }
        )
    )
    
  • Función AddColumns(): esta función pódese usar para proporcionar unha referencia de busca na colección que contén as actualizacións da orixe de datos se non ten campos que fagan referencia facilmente á táboa.

Para obter unha lista completa de fórmulas para actualizar rexistros en masa, descargue os ficheiros relacionados.

Exemplo dunha lista de verificación

Este exemplo usa unha lista de verificación de tarefas. Cando remate con algunhas tarefas, pode marcalas como completas. Podería ampliar este escenario a unha lista de verificación de lanzamento do produto, unha lista de verificación da inspección doméstica ou outras listas.

A seguinte captura de pantalla mostra os elementos da lista de verificación no ficheiro de Microsoft Excel. Neste exemplo pode comprobar as tarefas relacionadas cos seus blogs ou publicacións en redes sociais. A táboa en Excel chámase ChecklistItems. Este é o exemplo en Excel.

O exemplo usa coleccións para demostrar este comportamento. O enfoque funciona para calquera back-end tabular que escolla.

texto de ALT.

Os datos de Excel impórtanse como datos estáticos na aplicación. Na propiedade App.OnStart, use a función Collect() para recompilar os datos de ChecklistItems de Excel na colección ChecklistItemsSource. A colección ChecklistItemsSource usarase como a orixe de datos na aplicación.

Este exemplo usa unha aplicación de dúas pantallas:

  • Pantalla 1: utilízase para revisar os elementos da lista de verificación e marcalos como completos.
  • Pantalla 2: utilízase para crear un novo elemento da lista de verificación. O novo elemento engadirase á colección ChecklistItemsSource.

Pantalla1. Pantalla2

Cada vez que se marca un elemento da lista de verificación, engádese a unha colección chamada CheckedItems. Usa a fórmula seguinte na propiedade do evento OnCheck do control da caixa de verificación. Se o elemento xa está marcado e forma parte da colección, eliminarase. Se non, engádese o elemento marcado.

Pode cambiar o estado entre Feito e Pendente ou pode usar os eventos Oncheck e OnUncheck:

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

Crea varios rexistros á vez

Existen diferentes formas de actualizar en masa rexistros segundo o escenario. Esta sección explica como crear varios rexistros á vez en aplicacións de lenzo.

Cando o usuario selecciona Feito no exemplo anterior, cómpre actualizar ChecklistItemsSource con cambios da colección CheckedItems.

Para columnas co mesmo nome

Se a orixe e destino teñen os mesmos nomes de columna, pode usar unha instrución Patch. Por exemplo, as coleccións ChecklistItemsSource e CheckedItems teñen os mesmos nomes de columna. Pode usar a fórmula seguinte para actualizar a orixe á vez con todos os cambios.

Patch( ChecklistItemsSource, CheckedItems )

Para columnas con nomes diferentes

Se as columnas das táboas de orixe e destino varían, use ForAll con Patch.

Con ForAll(), debe facer un ciclo por cada rexistro usando unha condición. A condición é unha comparación entre columnas similares (por exemplo, a columna Id) das distintas táboas. Esta comparación complícase cando a táboa de orixe e a de destino teñen os mesmos nomes de columna (por exemplo, se ProjectId foi unha columna atopada tanto na táboa Project como na PurchaseOrder).

Estas son as alternativas:.

Usar con operador de desambiguación

Para actualizar a propiedade Status de CheckedItems a "Feito", cando os nomes das columnas da táboa de orixe e destino sexan os mesmos, use esta fórmula:

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

Para cada elemento da colección CheckedItems, o ID (representado polo operador de desambiguación CheckedItems[@Id]) compárase coa columna ID da colección ChecklistItemsSource. A continuación, cada rexistro coincidente actualízase co estado "Feito". O operador de desambiguación úsase cando dúas columnas pertencentes a táboas diferentes teñen o mesmo nome. Se non usa este operador de desambiguación, verá que só se actualiza o primeiro rexistro.

Se non quere usar unha colección adicional para almacenar os elementos marcados, pode probar os seguintes pasos:

  1. Cree unha etiqueta adicional dentro do modelo da galería.

    1. Vincúleo á columna ID.
    2. Cambie o nome da etiqueta a IdText.
  2. Elimine o código de OnCheck do control de caixa de verificación mencionado anteriormente.

  3. Escriba a seguinte fórmula no evento OnSelect do botón Feito:

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

Aquí está aplicando directamente o filtro sobre os elementos da galería para atopar os elementos marcados. Para cada rexistro nos elementos filtrados, atópase unha coincidencia na táboa ChecklistItemsSource comparando o ID co valor almacenado na etiqueta IdText.

O estado actualízase a "Feito".

O operador de desambiguación non se pode empregar nos elementos da galería. Pola contra, pode gardar unha etiqueta dentro da galería e facer referencia a ela para comparala.

Usar unha alternativa para crear unha nova columna cunha etiqueta diferente

Este método é unha alternativa ao uso do operador de desambiguación ou dunha etiqueta dentro da galería.

Mentres crea unha copia local da orixe de datos, pode usar a fórmula AddColumns() para crear unha nova columna cunha etiqueta diferente (NewId) para a columna ID da súa colección de orixe. Ao usar ForAll con Patch, compara a columna NewId coa columna ID dos datos de orixe.

Crear rexistros en masa

Pode querer crear novos rexistros en masa se, por exemplo, quere cargar moitas imaxes á vez.

Este é un exemplo usando un exemplo dunha lista de verificación.

Na pantalla Crear elementos de lista de verificación, cada vez que selecciona Engadir, a información almacénase na colección NewChecklistItems. Cando selecciona Enviar, ForAll() con Patch() úsanse para actualizar a colección de orixe.

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

Para cada elemento da colección NewChecklistItems, créase un novo rexistro (indicado por Defaults(ChecklistItemsSource)) na colección ChecklistItemsSource. O Id defínese como o Id da colección NewChecklistItems. De xeito similar, defínense os valores Category, Description e Status.

Consulte tamén