Partager via


Créer ou mettre à jour des enregistrements en bloc dans Power Apps

La mise à jour ou la création d’enregistrements en masse vous permet d’agir sur plusieurs enregistrements à la fois. Voici quelques scénarios dans lesquels vous voudriez mettre à jour les enregistrements en bloc :

  • Vous avez de nombreuses photos et souhaitez les charger toutes en même temps.
  • Vous souhaitez soumettre une feuille de temps avec les données d’une semaine à la fois.

Vous voudrez peut-être aussi créer des enregistrements en masse. Par exemple, lorsque votre application doit sélectionner plusieurs images, vous souhaiterez peut-être les charger toutes en même temps.

Cet article explique comment mettre à jour ou créer des enregistrements en bloc en fonction de votre scénario.

Formules pour mettre à jour en masse les enregistrements

Les formules de cette section peuvent être utilisées pour mettre à jour en masse des enregistrements dans des applications canevas.

  • Fonction Patch() : utilisez cette fonction lorsque la collection correspond au source de données.

    Patch( DataSource, Collection )
    
  • Fonction ForAll() + patch imbriqué + opérateur de désambiguïsation : utilisez cette fonction lorsque les sources de données ont différentes colonnes que vous devez joindre.

    ForAll( Collection,
        Patch( DataSource, 
            LookUp( DataSource, Id = Collection[@Id] ),
            { Column: Value }
        )
    )
    
  • Fonction AddColumns() : cette fonction peut être utilisée pour fournir une référence de recherche dans la collection qui contient les mises à jour de la source de données si elle n’a pas de champs qui référencent facilement la table.

Exemple d’une liste de contrôle

Cet exemple utilise une liste de contrôle de tâches. Lorsque vous avez terminé quelques tâches, vous pouvez les marquer comme terminées. Vous pouvez étendre ce scénario à une liste de contrôle de lancement de produit, une liste de contrôle d’inspection de maison ou d’autres listes.

La capture d’écran suivante montre les éléments de la liste de contrôle dans le fichier Microsoft Excel. Vous pouvez cocher les tâches liées à votre blog ou à votre publication sur les réseaux sociaux dans cet exemple. La table dans Excel s’appelle ChecklistItems.

L’exemple utilise des collections pour démontrer ce comportement. L’approche fonctionne pour n’importe quel backend tabulaire de votre choix.

texte de remplacement.

Les données Excel sont importées en tant que données statiques dans l’application. Sur la propriété App.OnStart, les données Excel ChecklistItems Collect() dans la collection ChecklistItemsSource. La collection ChecklistItemsSource sera utilisée comme données sources dans l’application.

Cet exemple utilise une application à deux écrans :

  • Écran 1 : utilisé pour examiner les éléments de la liste de contrôle et les marquer comme terminés.
  • Écran 2 : utilisé pour créer un élément de liste de contrôle. Le nouvel élément sera ajoutée à la collection ChecklistItemsSource.

Screen1. Screen2

Chaque fois qu’un élément de la liste de contrôle est vérifié, il est ajouté à une collection appelée CheckedItems. Il utilise la formule ci-dessous sur la propriété d’événement OnCheck du contrôle de case à cocher. Si l’élément est déjà coché et fait partie de la collection, il est supprimé. Sinon, l’élément activé est ajouté.

Vous pouvez basculer le statut entre Terminé et En attente, ou vous pouvez utiliser les événements Oncheck et OnUncheck :

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

créer plusieurs enregistrements à la fois ;

Il existe différentes manières de mettre à jour les enregistrements en bloc selon le scénario. Cette section explique comment créer plusieurs enregistrements à la fois dans les applications canevas.

Lorsque l’utilisateur sélectionne Terminé dans l’exemple ci-dessus, vous devez mettre à jour ChecklistItemsSource avec les modifications de la collection CheckedItems.

Pour les colonnes portant le même nom

Si votre source et votre destination ont les mêmes noms de colonne, vous pouvez utiliser une instruction Patch. Par example, les collections ChecklistItemsSource et CheckedItems ont les mêmes noms de colonnes. Vous pouvez utiliser la formule ci-dessous pour mettre à jour la source en même temps avec toutes les modifications.

Patch( ChecklistItemsSource, CheckedItems )

Pour les colonnes avec des noms différents

Si les colonnes des tables source et destination varient, utilisez plutôt ForAll avec Patch.

Avec ForAll(), vous devez parcourir chaque enregistrement à l’aide d’une condition. La condition est une comparaison entre des colonnes similaires (par exemple, colonne Id) des différents tableaux. Cette comparaison se complique lorsque la table source et la table destination ont les mêmes noms de colonnes (par exemple, si ProjectId était une colonne trouvée dans les deux tables Project et PurchaseOrder).

Voici la autres options :

Utiliser avec l’opérateur de désambiguïsation

Pour mettre à jour le Status de CheckedItems à "Terminé", lorsque les noms des colonnes de la table source et destination sont les mêmes, utilisez cette formule :

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

Pour chaque élément de la collection CheckedItems, l’Id (représenté par l’opérateur de désambiguïsation CheckedItems[@Id]) est comparé à la colonne Id de la collection ChecklistItemsSource. Ensuite, chaque enregistrement apparié est mis à jour avec le statut "Terminé". L’opérateur de désambiguïsation est utilisé lorsque deux colonnes appartenant à des tables différentes ont le même nom. Si vous n’utilisez pas cet opérateur de désambiguïsation, vous verrez que seul le premier enregistrement est mis à jour.

Si vous ne souhaitez pas utiliser une collection supplémentaire pour stocker les éléments cochés, vous pouvez essayer les étapes suivantes :

  1. Créer une étiquette supplémentaire dans le modèle de galerie.

    1. Liez-le à la colonne Id.
    2. Renommez l’étiquette en IdText.
  2. Supprimer le code sur le OnCheck de la case à cocher mentionnée ci-dessus.

  3. Écrivez la formule suivante sur l’événement OnSelect du bouton Terminé :

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

Ici, vous appliquez directement le filtre sur les éléments de la Galerie pour trouver les éléments cochés. Pour chaque enregistrement dans les éléments filtrés, une correspondance est trouvée sur la table ChecklistItemsSource en comparant l’ID avec la valeur stockée dans l’étiquette IdText.

Le statut est mis à jour sur "Terminé".

L’opérateur de désambiguïsation ne peut pas être utilisé sur les éléments de la Galerie. Au lieu de cela, vous pouvez stocker une étiquette dans la galerie et la référencer à des fins de comparaison.

Utiliser une alternative pour créer une colonne avec une étiquette différente

Cette méthode est une alternative à l’utilisation de l’opérateur de désambiguïsation ou d’une étiquette à l’intérieur de la galerie.

Lors de la création d’une copie locale de votre source de données, vous pouvez utiliser la formule AddColumns() pour créer une colonne avec une étiquette différente (NewId) pour la colonne Id dans votre collection source. Lorsque vous utilisez ForAll avec Patch, vous comparez la colonne NewId à la colonne Id dans vos données source.

Créer des enregistrements en bloc

Vous souhaiterez peut-être créer des enregistrements en masse si, par exemple, vous souhaitez charger plusieurs images à la fois.

Voici un exemple utilisant Exemple de liste de contrôle.

Sur l’écran Créer des éléments de la liste de contrôle, chaque fois que vous sélectionnez Ajouter, les informations sont stockées dans la collection NewChecklistItems. Lorsque vous sélectionnez Soumettre, ForAll() avec Patch() sont utilisés pour mettre à jour la collection source.

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

Pour chaque élément de la NewChecklistItems, un enregistrement est créé (indiqué par Defaults(ChecklistItemsSource)) dans la collection ChecklistItemsSource. L’Id est réglé sur l’Id de la collection NewChecklistItems. De même, les valeurs Category, Description, et Status sont définies.

Voir aussi