Microsoft Dataverse et l’amélioration de l’expérience de la source de données

Résumé

En mai 2021, de nombreuses fonctionnalités auparavant facultatives sont maintenant le comportement par défaut pour toutes les nouvelles applications. Cet article fournit des conseils aux utilisateurs qui ont développé une application avant l’introduction de nouvelles fonctionnalités, sur la manière de mettre à niveau leur application pour tirer parti des fonctionnalités les plus récentes.

Dataverse natif

Si vous avez créé une application canevas avec Dataverse ou Dynamics 365 Connector avant novembre 2019, vous n’aurez peut-être pas les avantages d’utiliser l’expérience de connexion native actuelle pour Dataverse.

Si vous avez créé votre application avant novembre 2019 et que vous n’utilisez pas de connexion Dataverse native, dans les paramètres de l’onglet Fonctionnalités à venir, dans l’onglet « Retiré », vous trouverez l’option Améliorer l’expérience de la source de données et les vues Microsoft Dataverse ainsi que l’option Données relationnelles, choix et autres nouvelles fonctionnalités pour Microsoft Dataverse.

Comment effectuer une mise à niveau ?

Mettez à niveau votre application en inspectant les paramètres des fonctionnalités, puis en suivant les instructions ci-dessous :

L’option Données relationnelles, groupes d’options et autres nouvelles fonctionnalités pour Microsoft Dataverse est désactivée

Vérifier la section Mis hors service sous Fonctionnalités à venir. S’il est défini sur Désactivé, continuez avec les instructions suivantes comme première étape de la conversion.

Si vous ne voyez pas Données relationnelles, ensembles d’options et autres nouvelles fonctionnalités pour Microsoft Dataverse dans Paramètres généraux, ou si c’est déjà Activé, ignorez les étapes suivantes et passez à la section suivante.

  • Étape 1 : Définissez la fonctionnalité Utiliser des noms d’affichage sur Activé :

    1. Définissez la fonctionnalité Utiliser des noms d’affichage sur Activé.
    2. Attendez que le moniteur de santé termine l’analyse de votre application.
    3. Enregistrez l’application, fermez-la et rouvrez-la.
    4. Résolvez toutes les erreurs de formule.
    5. Enregistrez l’application, fermez-la et rouvrez-la.

    Erreurs et suggestions possibles :

    Il est possible que certains des nouveaux noms d’affichage affichés entrent en conflit avec les noms d’affichage d’autres tables, champs ou contrôles. Par exemple, vous pouvez avoir un contrôle et un champ du même nom. Vous pouvez modifier le nom du contrôle avec une valeur unique à corriger.

    Pour tout conflit de Nom d’affichage de champ et de table, vous pouvez voir une formule qui attend une table mais se résout en un nom de champ de portée locale.

    Utilisez le crochet avec un symbole @ pour indiquer une portée globale afin qu’elle se résolve dans la table ; par example [@tableName].

  • Étape 2 : Définissez les fonctionnalités Données relationnelles, jeux d’options et autres nouvelles fonctionnalités pour Microsoft Dataverse et Utiliser des types de données GUID au lieu de chaînes sur Activé :

    1. Définissez la fonctionnalité Données relationnelles, jeux d’options et autres nouvelles fonctionnalités pour Microsoft Dataverse sur Activé :
    2. Définissez la fonctionnalité Utiliser des types de données GUID au lieu de chaînes sur Activé.
    3. Attendez que le moniteur de santé termine l’analyse de votre application.
    4. Résolvez toutes les erreurs de formule.
    5. Enregistrez l’application, fermez-la et rouvrez-la.

    Erreurs et suggestions possibles :

    Il est possible d’avoir des erreurs à ce stade si vous utilisez un champ de choix ou des valeurs de texte GUID codées en dur.

    • Valeurs de choix : si vous utilisez un champ de choix avec un identificateur de texte pour la valeur de choix, utilisez plutôt la notation par points pour référencer la valeur de choix. Par exemple, remplacez Patch(Accounts, OptionSet1 = “12345”) par Patch(Accounts, OptionSet.Item1)Item1 correspond à la valeur 12345.
      Pour plus d’informations : Exemples détaillés.
    • GUID : Si vous utilisez une chaîne GUID statique telle que 015e45e1044e49f388115be07f2ee116, convertissez-la en une fonction qui renvoie un objet GUID ; par exemple GUID(“015e45e1044e49f388115be07f2ee116”).
    • Recherches : si vous utilisez des fonctions de recherche pour obtenir des valeurs de recherche de premier niveau telles que Lookup(Contacts, ‘contactID’ = ThisItem.ContactID”), pensez à utiliser ThisItem.PrimaryContacts (où PrimaryContacts est le nom de la table) à la place.

L’option Améliorer l’expérience de la source de données et les vues Microsoft Dataverse est désactivée

Utilisez l’instruction suivante pour définir la fonctionnalité Améliorer l’expérience source de données et les vues Microsoft Dataverse sur Activé :

  1. Supprimez vos connexions de source de données Dataverse existantes.
  2. Activez la fonctionnalité Améliorer l’expérience source de données et les vues Microsoft Dataverse.
  3. Ajouter la connexion Dataverse en utilisant la nouvelle expérience de sélection source de données.
  4. Enregistrez votre application.

Notes

Si votre application est extrêmement volumineuse, l’ajout de vos connexions source de données peut prendre un certain temps. Ne fermez pas l’application pendant ce processus.

Conversion d’applications canevas avec Dynamics 365 Connector

Pour convertir votre application qui utilise Dynamics 365 Connector, vous devez supprimer et ajouter les connexions à vos sources de données. Suivez les étapes ci-dessous pour convertir vos connexions en vos sources de données.

  1. Vérifiez que la fonctionnalité Améliorer l’expérience source de données et les vues Microsoft Dataverse est Active.

  2. Supprimez vos connexions de source de données Dynamics 365 existantes.

  3. Ajoutez les connexions à vos sources de données à Dataverse en utilisant la nouvelle expérience de sélection source de données.

    Notes

    • Si vous avez des connexions à d’autres environnements (autres que l’actuel), sélectionnez la Catégorie Table, puis l’option Plus pour de changer d’environnement. Vous pouvez ensuite sélectionner une table dans un environnement différent à ajouter à votre application. Les connexions entre locataires ne fonctionnent pas avec le connecteur natif amélioré. Vous devrez utiliser l’intégration de données pour accéder aux données entre locataires.
    • Vous devez remplir l’une des conditions suivantes pour pouvoir voir un environnement auquel vous souhaitez ajouter la connexion :
      • Vous êtes le Propriétaire de l’application, ou l’application est partagée avec vous en tant que Copropriétaire.
      • Vous êtes membre d’au moins l’un de ces rôles de sécurité : Administrateur d’environnement, Créateur d’environnement, ou Administrateur système. Pour plus d’informations sur les rôles de sécurité dans un environnement, accédez à Configurer la sécurité des utilisateurs sur les ressources dans un environnement.
  4. Enregistrez votre application.

Erreurs et suggestions possibles :

Il est possible d’avoir des erreurs lors de la conversion si : vous n’utilisez pas de noms d’affichage, si vous utilisez des chaînes GUID ou si vous utilisez un choix.

  • Si le nom du contrôle est en conflit, changez le nom du contrôle pour qu’il soit différent et unique.
  • Pour les conflits de nom d’affichage de champ et de table, vous pouvez voir une formule qui attend une table mais se résout en un nom de champ de portée plus locale. Utilisez le crochet avec un symbole @ pour indiquer une portée globale afin qu’elle se résolve dans la table ; par example [@tableName].
  • Valeurs de choix : si vous utilisez un champ de choix avec un identificateur de texte pour la valeur de choix, utilisez plutôt la notation par points pour référencer la valeur de choix. Par exemple, remplacez Patch(Accounts, OptionSet1 = “12345”) par Patch(Accounts, OptionSet.Item1)Item1 correspond à la valeur 12345.
    Pour plus d’informations : Exemples détaillés.
  • GUID : Si vous utilisez une chaîne GUID statique telle que 015e45e1044e49f388115be07f2ee116, convertissez-la en une fonction qui renvoie un objet GUID ; par exemple GUID(“015e45e1044e49f388115be07f2ee116”).
  • Recherches : si vous utilisez des fonctions de recherche pour obtenir des valeurs de recherche de premier niveau telles que Lookup(Contacts, ‘contactID’ = ThisItem.ContactID”), pensez à utiliser ThisItem.PrimaryContacts (où PrimaryContacts est le nom de la table) à la place.
  • Pour toute référence polymorphe, reportez-vous à la section Exemples détaillés ci-dessous.

Exemples détaillés

Conversion de votre application pour utiliser les nouveaux types de données Groupes d’options et Deux options avec des contrôles de prise en charge peuvent être difficiles lors de la mise à niveau d’une application pour utiliser la nouvelle fonctionnalité Améliorer l’expérience source de données et vues Microsoft Dataverse.

Options

Séparez les champs _myfield et _myfield_label ont été utilisés pour le choix plus tôt. Maintenant, il y a un seul myfield qui peut être utilisé à la fois pour des comparaisons indépendantes des paramètres régionaux et pour obtenir le libellé spécifique aux paramètres régionaux.

Suppression et ajout de cartes de données de choix

Nous vous recommandons de supprimer les cartes de données existantes et de les rajouter pour qu’elles fonctionnent avec votre choix. Par exemple, si vous travaillez avec la table Compte et le choix Catégorie, vous voyez que la propriété DataField de la carte de données a été définie sur _accountcategorycode_label. Dans la liste des champs, vous pouvez voir que la carte de données a un type de Chaîne :

OptionSet avec l’ancien nom du style.

Avec la nouvelle fonctionnalité Expérience source de données améliorée et vues Microsoft Dataverse, vous ne voyez plus _accountcategorycode_label. Il est remplacé par accountcategorycode. Votre carte est maintenant marquée comme personnalisée et vous verrez des erreurs. Retirez l’ancienne carte de données et rajoutez le Choix. La nouvelle carte de données est Choix au courant.

OptionSet avec un nouveau nom de style.

Modification des expressions du filtre de choix pour utiliser la nouvelle syntaxe

Auparavant, si vous vouliez utiliser une valeur de choix dans une expression de filtre, vous deviez utiliser le champ Valeur. Par exemple :

Filter(Account,'Category Value' = "1")

Vous avez besoin de modifier cette formule. L’identificateur de texte de choix n’est plus utilisé pour la valeur. Cette expression doit être mise à jour pour :

Filter(Account, Category= ‘Category (Accounts)’.’Preferred Customer’)

’Category(Accounts)’ est le nom de l’énumération utilisé dans le champ Catégorie de la table Comptes. C’est un choix local. Vous pouvez en savoir plus sur les choix locaux et mondiaux ici : Choix mondiaux.

Modification des instructions de correctif de choix pour utiliser la nouvelle syntaxe

Voici un exemple d’instruction Patch précédente pour le choix :

Patch( Accounts, First(Accounts), { ‘Category Value’: 1 } ) )

Vous devrez mettre à jour vos instructions pour suivre ce formulaire :

Patch( Accounts, First(Accounts), { Category: ‘Category (Accounts)’.’Preferred Customer’ } )

Désambiguïsation du choix

Si le Nom d’affichage d’un choix champ et le nom du choix sont les mêmes, vous devrez lever l’ambiguïté de la formule. Pour continuer à utiliser l’exemple de code de catégorie de comptes, le @ implique d’utiliser le choix, pas le champ.

Filter(Accounts, 'Category Code' = [@’Category Code’].'Preferred Customer')

Deux options

Suppression et ajout de cartes de données Oui/Non

Supprimer les cartes de données existantes et de les rajouter pour qu’elles fonctionnent avec votre Oui/Non. Les types de données étaient auparavant reconnus comme simples booléens, tels que true/on et false/off sans Étiquette :

Oui/Non – ancien style.

Avec la nouvelle fonctionnalité Expérience source de données améliorée et vues Microsoft Dataverse, votre carte sera désormais marquée comme personnalisée et vous verrez des erreurs. Retirez l’ancienne carte de données et rajoutez le choix. Vous verrez un contrôle Edit avec deux options par défaut après l’ajout.

Oui/Non – nouveau style.

Si vous préférez le bouton à bascule pour votre champ booléen, vous pouvez déverrouiller la carte de données et remplacer le contrôle dans la carte de données par un interrupteur à la place. Vous devrez également définir ces propriétés sur la bascule.

Toggle1.Default = ThisItem.’Do not allow Bulk Emails’
Toggle1.TrueText = ‘Do not allow Bulk Emails (Accounts)’.’Do Not Allow’
Toggle1.FalseText = ‘Do not allow Bulk Emails (Accounts)’.Allow
DataCard.Value = If( Toggle1.Value,
    ‘Do not allow Bulk Emails (Accounts)’.’Do Not Allow’,
    ‘Do not allow Bulk Emails (Accounts)’.Allow )

Bouton bascule Deux options.

Affinage des instructions de correctif Deux options

En utilisant la fonction Patch avec Deux options devrait fonctionner "tel quel". Il prend en charge l’utilisation directe de true et false, similaire à Booléenne. La seule différence est que si vous aviez mis la valeur dans un contrôle Étiquette plus tôt qui montrait true et false, il affichera désormais l’étiquette Deux options à la place.

Recherches polymorphes

Les directives suivantes vous aident à mettre à niveau votre application si elle fait référence à des champs polymorphes. Les recherches polymorphes, à partir du même champ, prennent en charge les références à un ensemble restreint de plusieurs tables. Semblable aux références dans d’autres langues, une référence d’enregistrement est un pointeur vers un enregistrement spécifique dans une table spécifique. Une référence d’enregistrement contient les informations de la table lui permettant de pointer vers un enregistrement dans plusieurs autres tables, ce qui diffère d’une recherche normale qui ne peut pointer que vers les enregistrements d’une table.

Accéder, définir et filtrer dans le champ Propriétaire d’un enregistrement

Par exemple, le champ Propriétaire dans une table peut faire référence à un enregistrement dans la table Utilisateurs ou la table Équipes. Le même champ de recherche dans différents enregistrements peut faire référence à des enregistrements dans différentes tables.

Champ Propriétaire polymorphe.

Polymorphe avec filtre et correctif

Les références d’enregistrement peuvent être utilisées comme un enregistrement complet :

Filter( Accounts, Owner = First( Teams ) )
Patch( Accounts, First( Accounts ), { Owner: First( Users ) })

Puisqu’une référence peut pointer vers différentes tables, vous devez être précis. Vous ne pouvez pas utiliser ThisItem.Owner.Name comme champ de nom dans la table Équipe est Nom de l’équipe, et le champ de nom dans la table Utilisateur est Nom complet. Power Apps ne sait pas à quel type de recherche vous faites référence avant d’avoir exécuté l’application.

Pour corriger ce problème :

  1. Ajoutez les sources de données pour les types d’entités qui pourraient être Propriétaire, dans le cas présent, Utilisateurs et Équipes.
  2. Utilisez plus de fonctions pour clarifier votre intention.

Vous pouvez utiliser deux nouvelles fonctions :

  • IsType – Vérifie si une référence d’enregistrement est d’un type de table particulier.
  • AIsType – Transmet une référence d’enregistrement à un type de table particulier.

Avec ces fonctions, vous pouvez écrire une formule qui affiche le nom du propriétaire tiré de deux champs nommés différemment, en fonction du type de table du propriétaire :

If( IsType( ThisItem.Owner,  [@Teams]), 
    AsType( ThisItem.Owner, [@Teams]).'Team Name', 
    AsType( ThisItem.Owner, [@Users]).'Full Name' )

Galerie avec Type de.

Opérateur mondial de désambiguïsation pour [@Teams] et [@Users] est utilisé pour garantir que vous référencez le type de table global. Bien que dans ce cas, ce ne soit pas nécessaire, il est recommandé de toujours être clair. Les relations un à plusieurs sont souvent en conflit dans la portée d’enregistrement de la galerie, et cette pratique évite cette confusion.

Accédez et définissez le champ Nom de l’entreprise (un type de données Client) de la table Contacts

Le champ de recherche Client est une autre recherche polymorphe qui est similaire à Propriétaire. Chaque table ne peut avoir qu’un seul champ Propriétaire. Mais une table peut inclure zéro, un ou plusieurs champs de recherche Client. La table système Contacts comprend le champ Nom de la compagnie, qui est un champ de recherche Client. Lisez Afficher les champs d’un client pour plus de détails.

Accédez et définissez le champ Concernant des tables d’activité telles que les télécopies, les appels téléphoniques, les messages électroniques

Les recherches polymorphes ne se limitent pas aux comptes et aux contacts. La liste des tables est extensible avec des tables personnalisées. Par exemple, la table Télécopies a un champ de recherche polymorphe Concernant, qui peut faire référence à Comptes, Contacts, et d’autres tableaux. Si vous avez une galerie avec source de données défini sur Télécopies, vous pouvez utiliser la formule suivante pour afficher le nom associé au champ de recherche Concernant.

If( IsBlank( ThisItem.Regarding ), "",
   IsType( ThisItem.Regarding, [@Accounts] ),
       "Account: " & AsType( ThisItem.Regarding, [@Accounts] ).'Account Name',
   IsType( ThisItem.Regarding, [@Contacts] ),
       "Contacts: " & AsType( ThisItem.Regarding, [@Contacts] ).'Full Name',
   "" )

Galerie avec Concernant.

Lisez Champs de recherche Concernant et Relations Concernant pour plus de détails.

Accédez à la liste de toutes les activités pour un enregistrement

Dans Dataverse, des tables tels que Télécopies, Tâches, Courriels, Remarques, Appels téléphoniques, Lettres, et Discussions sont désignés comme Activités. Vous pouvez également créer vos propres tables d’activité personnalisées.

Vous pouvez afficher les activités d’un type spécifique (telles que les télécopies ou les taxes) ou toutes les activités associées à une table telle que le compte. Ajoutez la table Activités et d’autres tables individuelles dont vous prévoyez d’afficher les données dans l’application canevas.

Chaque fois que vous ajoutez un enregistrement à (par exemple la table Tâches), un enregistrement dans la table Activité avec les champs communs à toutes les tables d’activité est créé. Lisez table d’activité pour plus de détails.

L’exemple suivant montre que lorsque vous sélectionnez un compte, toutes les activités associées à ce compte seront affichées :

Activités polymorphes.

Les enregistrements sont affichés à partir de la table d’activité. Mais vous pouvez toujours utiliser la fonction IsType pour identifier quel type d’activité ils sont. Encore une fois, avant d’utiliser IsType avec un type de table, vous devez ajouter le source de données nécessaire.

En utilisant cette formule, vous pouvez afficher le type d’enregistrement dans un contrôle Étiquette dans la galerie :

If( IsType( ThisItem, [@Faxes] ), "Fax",
   IsType( ThisItem, [@'Phone Calls'] ), "Phone Call",
   IsType( ThisItem, [@'Email Messages'] ), "Email Message",
   IsType( ThisItem, [@Chats] ), "Chat",
   "Unknown")

Nouveau Polymorphic-IsType.

Accédez à la liste des Notes pour un enregistrement

Lorsque vous créez une table, vous pouvez activer les pièces jointes. Si vous cochez la case pour activer les pièces jointes, vous créez une relation Concernant avec la table Notes, comme le montre ce graphique pour la table Comptes :

Champ Notes.

Filtering

Vous ne pouvez pas lire ou filtrer en fonction du champ Concernant. Cependant, la relation une-à-plusieurs Notes inverse est disponible. Pour lister toutes les Notes associées à une table Compte, vous pouvez utiliser la formule suivante :

First( Accounts ).Notes
Patch

Vous ne pouvez pas définir le champ Notes sur une table à l’aide de Patch. Pour ajouter un enregistrement à la table Notes d’une table, vous pouvez utiliser la fonction Associer. Créez d’abord la note, comme dans cet exemple :

Relate( ThisItem.Notes, Patch( Notes, Defaults( Notes ), { Title: "A new note", isdocument:'Is Document (Notes)'.No } ) )

Étapes suivantes

Voir aussi

Qu’est-ce que Dataverse ?

Notes

Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)

Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).