Crear o actualitzar registres de forma massiva a Power Apps

Actualitzar o crear registres de forma massiva us permet actuar en molts registres alhora. A continuació, trobareu alguns escenaris on us aniria bé actualitzar massivament els registres:

  • Teniu moltes fotos i les voleu carregar alhora.
  • Voleu enviar alhora un full de temps amb les dades d'una setmana.

També podeu voler crear registres nous de manera massiva. Per exemple, quan l'aplicació ha de seleccionar moltes imatges, pot ser que les vulgueu carregar alhora.

En aquest article s'explica com s'actualitzen o es creen registres massivament, segons el vostre escenari.

Fórmules per actualitzar massivament els registres

Les fórmules d'aquesta secció es poden utilitzar per actualitzar massivament els registres a les aplicacions de llenç.

  • Funció Patch()—Utilitzeu aquesta funció quan la col·lecció coincideixi amb la font de dades.

    Patch( DataSource, Collection )
    
  • Funció ForAll() + Pedaç inserit + operador de desambiguacióUtilitzeu aquesta funció quan les fonts de dades tenen diferents columnes que heu d'unir.

    ForAll( Collection,
        Patch( DataSource, 
            LookUp( DataSource, Id = Collection[@Id] ),
            { Column: Value }
        )
    )
    
  • Funció AddColumns()Aquesta funció es pot utilitzar per proporcionar una referència de cerca a la Col·lecció que contingui les actualitzacions de DataSource si no té camps que facin referència fàcilment a la taula.

Per veure una llista completa de fórmules per actualitzar registres massivament, baixeu els fitxers relacionats.

Exemple d'una llista de verificació

Aquest exemple utilitza una llista de verificació de tasques. Quan hàgiu acabat algunes tasques, podeu marcar-les com a completes. Podríeu ampliar aquest escenari a una llista de verificació de llançament de producte, a la llista de verificació d'inspecció principal o a altres llistes.

A la captura de pantalla següent es mostren els elements de la llista de verificació en un fitxer del Microsoft Excel. Podeu desactivar les tasques relacionades amb els vostres blocs o publicacions als mitjans socials en aquest exemple. La taula de l'Excel s'anomena ChecklistItems. Aquest és l'exemple a l'Excel.

L'exemple utilitza col·leccions per demostrar aquest comportament. Aquest mètode funciona per a qualsevol backend de tabular que trieu.

Text alternatiu

Les dades de l'Excel s'importen com a dades estàtiques a l'aplicació. A la propietat App.OnStart, apliqueu Collect() a les dades de la llista de verificació de l'Excel a la col·lecció ChecklistItemsSource. La col·lecció ChecklistItemsSource s'utilitzarà com les dades d'origen a l'aplicació.

Aquest exemple utilitza una aplicació de dues pantalles:

  • Pantalla 1—Es fa servir per revisar els elements de la llista de verificació i marcar-los com a completats.
  • Pantalla 2—Es fa servir per a crear un element nou a la llista de verificació. L'element nou s'afegirà a la col·lecció ChecklistItemsSource.

Pantalla1 Pantalla2

Cada vegada que es marca un element de la llista de verificació, s'afegirà a una col·lecció anomenada CheckedItems. Utilitza la fórmula següent a la propietat de la incidència OnCheck del control de la casella de selecció. Si l'element ja està marcat i forma part de la col·lecció, se suprimirà. Si no, s'afegirà l'element marcat.

Podeu commutar l'estat entre Fet i Pendent o podeu utilitzar les incidències Oncheck i OnUncheck:

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

Crear diversos registres alhora

Hi ha diverses maneres d'actualitzar massivament els registres en funció de l'escenari. Aquesta secció explica com es creen diversos registres a la vegada a les aplicacions de llenç.

Quan l'usuari selecciona Fet a l'exemple anterior, heu d'actualitzar ChecklistItemsSource amb els canvis de la col·lecció CheckedItems.

Per a columnes amb el mateix nom

Si l'origen i la destinació tenen els mateixos noms de columna, podeu utilitzar una sentència Pedaç. Per exemple, les col·leccions ChecklistItemsSource i CheckedItems tenen els mateixos noms de columna. Podeu utilitzar la fórmula següent per actualitzar l'origen alhora amb tots els canvis.

Patch( ChecklistItemsSource, CheckedItems )

Per a les columnes amb diferents noms

Si les columnes de les taules d'origen i de destinació varien, utilitzeu ForAll amb Pedaç.

Amb ForAll(), heu d'aplicar un bucle a cada registre mitjançant una condició. La condició és una comparació entre columnes semblants (per exemple, columna Id) de les diferents taules. Aquesta comparació es complica quan la taula d'origen i la taula de destinació tenen els mateixos noms de columna (per exemple, si ProjectId fos una columna que es troba en les taules Project i PurchaseOrder).

A continuació presentem les alternatives:

Utilitzar amb operador de desambiguació

Per actualitzar Status de CheckedItems a "Fet", quan els noms de columna de les taules d'origen i de destinació són els mateixos, utilitzeu aquesta fórmula:

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

Per a cada element de la col·lecció CheckedItems, l'id. (representat per l'operador de desmbiguació CheckedItems[@Id]) es compara amb la columna id. de la col·lecció ChecklistItemsSource. A continuació, cada registre coincident s'actualitzarà amb l'estat "Fet". L'operador de desambiguació s'utilitza quan dues columnes que pertanyen a diferents taules tenen el mateix nom. Si no utilitzeu aquest operador de desambiguació, veureu que només s'actualitza el primer registre.

Si no voleu utilitzar una col·lecció addicional per emmagatzemar els elements seleccionats, podeu provar els passos següents:

  1. Creeu una etiqueta addicional a la plantilla de la galeria.

    1. Enllaceu-la amb la columna id.
    2. Canvieu el nom de l'etiqueta a IdText.
  2. Suprimiu el codi d'OnCheck del control de la casella de selecció esmentada anteriorment.

  3. Escriviu la fórmula següent a la incidència OnSelect del botó Fet:

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

Aquí esteu aplicant directament el filtre als elements de la Galeria per trobar els elements seleccionats. Per a cada registre dels elements filtrats, trobareu una coincidència a la taula ChecklistItemsSource comparant l'id. amb el valor emmagatzemat a l'etiqueta IdText.

L'estat s'actualitza a "Fet".

L'operador de desambiguació no es pot utilitzar als elements de la Galeria. En lloc d'això, podeu emmagatzemar una etiqueta a la galeria i fer-hi referència per a la comparació.

Utilitzar una alternativa per crear una columna nova amb una etiqueta diferent

Aquest mètode és una alternativa a l'ús de l'operador de desambiguació o d'una etiqueta dins de la galeria.

Mentre creeu una còpia local de la font de dades, podeu utilitzar la fórmula AddColumns() per crear una columna nova amb una etiqueta diferent (NewId) per a la columna id. de la col·lecció d'origen. Quan utilitzeu ForAll amb Pedaç, compareu la columna NewId amb la columna Id de les dades d'origen.

Crear registres massivament

Si, per exemple, voleu carregar moltes imatges alhora, crear registres nous de forma massiva pot ser una bona opció.

Això és un exemple que utilitza Un exemple d'una llista de verificació.

A la pantalla Crea elements de la llista de verificació, cada vegada que seleccioneu Afegeix, la informació s'emmagatzema a la col·lecció NewChecklistItems. Quan seleccioneu Envia, s'utilitzen ForAll() amb Patch() per actualitzar la col·lecció d'origen.

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

Per a cada element de NewChecklistItems, es crea un registre nou (indicat per Defaults(ChecklistItemsSource)) a la col·lecció ChecklistItemsSource. Id està definit a Id de la col·lecció NewChecklistItems. De la mateixa manera, els valors Category, Description i Status es defineixen.

Consulteu també