Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
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
.
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.
Utiliser une étiquette supplémentaire dans la galerie
Si vous ne souhaitez pas utiliser une collection supplémentaire pour stocker les éléments cochés, vous pouvez essayer les étapes suivantes :
Créer une étiquette supplémentaire dans le modèle de galerie.
- Liez-le à la colonne Id.
- Renommez l’étiquette en IdText.
Supprimer le code sur le OnCheck de la case à cocher mentionnée ci-dessus.
É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.