Manipulation des données

Effectué

Vous pouvez centraliser la logique qui modifie ou augmente les données à l’aide de plug-ins. Les plug-ins instantanés sont utiles, car vous pouvez réaliser l’action à la demande. Par exemple, vous pouvez disposer d’un plug-in instantané ScheduleService qui pourrait rechercher le prochain créneau de service disponible auprès de votre service de réservation à l’aide d’un connecteur. Ensuite, le connecteur peut créer une ligne de données liée au demandeur pour suivre la réservation.

Les plug-ins automatisés sont utiles pour modifier les données ou ajouter des lignes de données associées après que vous avez ajouté la ligne de données principale à Dataverse. Un avantage important des plug-ins automatisés est que toutes les modifications de données apportées par les plug-ins font partie de la transaction d’origine et que le système termine ou annule toutes les modifications. Par exemple, imaginez un scénario dans lequel vous créez une ligne de données Projet, puis un plug-in exécuté lorsque vous avez créé la ligne crée des tâches initiales liées au projet. Si l’une de ces tâches est non valide et ne parvient pas à être créée, le système restaure le projet et toutes les tâches créées.

Modifier les données avant leur enregistrement

L’option Modifier les données avant leur enregistrement s’applique uniquement aux plug-ins automatisés qui s’exécutent sur des événements créés ou mis à jour. Dans les deux cas, vous pouvez configurer votre plug-in afin qu’il s’exécute en pré-opération, ce qui vous permet de modifier les données de la ligne que vous créez ou mettez à jour avant d’enregistrer les données. Cette option est utile dans les scénarios dans lesquels vous souhaitez définir des valeurs par défaut. De plus, vous pouvez utiliser une logique conditionnelle Power Fx afin que les valeurs par défaut dépendent d’autres données sur la ligne que vous modifiez.

Vous devez exécuter votre plug-in en pré-opération et modifier les colonnes de données à l’aide de la fonction Set. Cette approche garantit que vos modifications sont incluses lorsque vous enregistrez la ligne de données au lieu d’être effectuées dans le cadre d’une mise à jour distincte, ce qui pourrait provoquer une boucle infinie ou éventuellement déclencher l’exécution d’automatisations indésirables en raison de la mise à jour distincte.

L’exemple suivant illustre la modification de la colonne budgétaire sur la ligne de projet que vous créez à l’aide de la fonction Set.

Set(contoso_budget,1000)

Cette approche vous permet uniquement de modifier les données de la ligne qui déclenche votre plug-in. Vous ne pouvez pas créer de données associées lors de la phase de pré-opération, car aucune ligne principale n’est disponible pour lier les données associées.

Un autre scénario courant est celui dans lequel vous souhaitez créer des données associées à une ligne de données principale. Vous pouvez accomplir cette tâche à l’aide de plug-ins instantanés et automatisés. Pour ce faire, la fonction Collect vous permet d’ajouter les données. Par exemple, la fonction suivante ajoute automatiquement le créateur du projet comme membre initial de l’équipe.

Collect([@'Team Members'],{Name: "David So",'Team Project': ThisRecord })

Dans l’exemple précédent, ThisRecord est la ligne de projet transmise sur un plug-in instantané configuré avec une étendue d’entité pour la table de projet, ou elle est transmise sur un plug-in automatisé lors de la création de la table de projet.

Dans certains scénarios, vous devez utiliser la fonction Patch au lieu de la fonction Collect. Par exemple, lorsque vous utilisez la colonne Regarding dans la table Tasks, vous permettriez au système de définir correctement la colonne Regarding à l’aide de la fonction Patch. En effet, la colonne Regarding est polymorphe et peut pointer vers de nombreux types de lignes de table différents. L’exemple suivant illustre un plug-in conçu pour s’exécuter lors de la création d’un projet afin d’ajouter certaines tâches initiales de chaque projet.

Patch([@Tasks], Collect([@Tasks], { Subject : "Review Project"} ),{ Regarding: ThisRecord });
Patch([@Tasks], Collect([@Tasks], { Subject : "Schedule Project Launch"} ),{ Regarding: ThisRecord });
Patch([@Tasks], Collect([@Tasks], { Subject : "Assign Project Lead"} ),{ Regarding: ThisRecord });

Dans l’exemple précédent, la fonction Patch est combinée avec la fonction Collect pour mettre à jour la colonne Regarding.

Un autre scénario courant consiste à supprimer conditionnellement des données associées. Par exemple, vous pouvez créer un plug-in instantané appelé Annuler le projet. Ce plug-in aurait un paramètre d’entrée de type EntityReference pour le projet que vous annulez. Ensuite, le plug-in peut mettre à jour la ligne de projet pour indiquer qu’il est annulé, puis rechercher et supprimer les éléments de travail en cours afin que personne ne puisse travailler sur le projet annulé. La logique suivante illustre l’expression permettant de rechercher tous les éléments de travail liés au projet et montre comment ForAll vous permet de parcourir et d’appeler Remove pour chaque élément de travail.

ForAll(Filter([@'Work Items'], 'Team Project'.'Team Project' = Project.'Team Project'),  Remove([@'Work Items'], ThisRecord))