Tables Catalogue et CatalogAssignment

Utilisez les tables Catalog et CatalogAssignment pour créer une structure pour exposer les actions utilisées dans votre solution en tant qu’événements commerciaux. Les événements commerciaux Microsoft Dataverse permettent à de nombreux scénarios de créer des intégrations avec d′autres applications via Dataverse. Plus d’information : Événements d’entreprise Microsoft Dataverse

Votre catalogue décrit les événements pertinents pour votre solution afin que les gens puissent les utiliser. Si vous ne cataloguez pas les événements pertinents pour votre solution, ils peuvent ne pas être disponibles pour les utilisateurs de votre solution.

Utilisez la table Catalog pour créer une hiérarchie à deux niveaux. Cela crée un groupe Catalogue et Catégorie où le catalogue de deuxième niveau représente la catégorie.

Le catalogue de premier niveau doit représenter votre solution. Utilisez plusieurs catalogues de deuxième niveau liés à votre catalogue de premier niveau pour regrouper différentes catégories de fonctionnalités au sein de votre solution.

Pour chaque catalogue de second niveau qui représente les catégories au sein de la solution, utilisez la table CatalogAssignment pour spécifier les actions Tables, API personnalisée ou Processus personnalisé que vous souhaitez rendre disponibles en tant qu’événements.

Important

Les utilisateurs avec le rôle de sécurité Créateur d’environnement peut afficher les données du catalogue dans le connecteur Power Automate Dataverse du déclencheur Lorsqu’une action est exécutée. Les autres rôles de sécurité doivent avoir un privilège de niveau d’accès approprié Lire à ces ces tables : API personnalisée, Traiter, Message SDK.

Pour plus d’informations :

Exemple : Gestion des clients Contoso

Pour introduire l’idée d’un catalogue, commençons par un exemple.

La solution de gestion des clients Contoso contient de nombreux composants. Les seuls composants d’intérêt ici sont :

  • Tables
  • API personnalisée
  • Action du processus personnalisée (workflow)

Tables

La gestion des clients Contoso est une solution qui comprend les tableaux suivants :

SchemaName Nom d’affichage Description
Account Compte Une table système Dataverse
Contact Contact Une table système Dataverse
contoso_Membership Affiliation Une table personnalisée appartenant à l′organisation

API personnalisée

Ils ont également créé un nombre d’actions API personnalisées appelées par leur système de point de vente, leur site web et les systèmes ERP afin d’avertir Dataverse des événements qui ne proviennent pas de Dataverse:

UniqueName Nom complet
contoso_CustomerEnteredStore Magasin visité
contoso_CustomerVisitWebSite Aller sur le site web
contoso_CustomerPurchasedProduct Produit acheté
contoso_CustomerReturnedProduct Produit retourné

Structure de catalogue

Le catalogue de solutions de gestion des clients Contoso ressemble à ceci :

Catalogue Description
Gestion des clients Contoso Catalogue racine
    Tables Catégorie de catalogue de 2e niveau
            Compte CatalogAssignment : Entité
            Contact CatalogAssignment : Entité
            Affiliation CatalogAssignment : Entité
    Événements client Catégorie de catalogue de 2e niveau
            Magasin visité CatalogAssignment : CustomAPI
            Aller sur le site web CatalogAssignment : CustomAPI
            Produit acheté CatalogAssignment : CustomAPI
            Retour produit CatalogAssignment : CustomAPI

Événements disponibles

Si vous créez CatalogAssignment sur une table, certains opérations liées au système pour cette table sont disponibles sous forme d’événements.

Avec ce catalogue, les événements suivants seront disponibles :

Tableau Événement Pourquoi disponible
Compte Créer
Mise à jour
Suppr
Opération données standard
Compte GrantAccess
ModifyAccess
RevokeAccess
L′entité appartenant à l′utilisateur peut être partagée.
Contact Créer
Mise à jour
Suppr
Opération données standard
Contact GrantAccess
ModifyAccess
RevokeAccess
L′entité appartenant à l′utilisateur peut être partagée.
Affiliation Créer
Mise à jour
Suppr
Opération données standard
N/A contoso_CustomerEnteredStore Attribution du catalogue explicite
N/A contoso_CustomerVisitWebSite Attribution du catalogue explicite
N/A contoso_CustomerPurchasedProduct Attribution du catalogue explicite
N/A contoso_CustomerReturnedProduct Attribution du catalogue explicite

La plupart des tables prennent en charge les événements Créer, Mettre à jour et Effacer. Voici quelques exceptions. Les tables appartenant à l′utilisateur exposent des événements pour les modifications apportées au partage : GrantAccess, ModifyAccess et RevokeAccess

Notes

Toutes les API personnalisées ou actions du processus personnalisées liées à la table sont également incluses.

Les actions du processus personnalisées désactivées s’affichent mais l’événement ne se produit jamais tant qu’elles ne sont pas activées et utilisées.

Créer un catalogue dans Power Apps

Vous pouvez créer les enregistrements Catalogue et Attribution du catalogue dans Power Apps (https://make.powerapps.com).

Vous devez toujours créer un catalogue dans le cadre d’une solution. Utilisez les instructions suivantes pour créer des enregistrements de catalogue :

  1. Connectez-vous à Power Apps,

  2. Dans le volet de navigation de gauche, sélectionnez Solutions.

  3. Créez ou sélectionnez une solution que vous souhaitez utiliser, puis cliquez sur Nouveau.

  4. Sélectionnez Catalogue dans le menu et une nouvelle fenêtre s’ouvre.

  5. Entrez les champs suivants :

    Champ Description
    Catalogue parent Ne définissez pas de catalogue parent pour le catalogue racine de la solution. Sinon, définissez le catalogue racine de la solution.
    Nom unique Le nom unique doit avoir un préfixe de personnalisation et ne comporter aucun espace. Ce préfixe doit être identique au préfixe de personnalisation pour l’éditeur de solutions.
    **Nom ** Entrez un nom pour le catalogue. En général, identique à la valeur Nom unique, mais sans le préfixe de personnalisation et avec des espaces.
    Nom d’affichage En général, identique à la valeur Nom.
    Description Entrez une description significative du catalogue.
  6. Enregistrer et fermer le formulaire.

Créer une attribution du catalogue dans Power Apps

En utilisant la même solution qui contient le catalogue dans Power Apps

  1. Cliquez sur Nouveau.

  2. Sélectionnez Attribution du catalogue dans le menu et une nouvelle fenêtre s’ouvre.

  3. Entrez le Nom. Cette valeur doit commencer par un préfixe de personnalisation et ne comporter aucun espace. Vous devez utiliser le même préfixe de personnalisation que celui défini pour l’éditeur de solutions.

  4. Définissez l′Objet d’attribution du catalogue. Cette recherche permet de définir 3 types d′enregistrements différents :

    • API personnalisées
    • Entités
    • Processus

    Vous devriez pouvoir découvrir le type que vous recherchez en tapant le nom.

  5. Sélectionner un catalogue

    Notes

    Le catalogue sélectionné doit être un catalogue de second niveau représentant une catégorie.

  6. Enregistrer et fermer le formulaire

Bloquer la personnalisation des éléments du catalogue dans votre solution gérée

Sauf si vous souhaitez autoriser les personnes qui installent votre solution gérée à personnaliser le catalogue et les attributions du catalogue, vous devez définir la propriété IsCustomizable sur false car la valeur par défaut permet de les personnaliser.

Pour définir cette propriété dans l′interface utilisateur Power Apps :

  1. Sélectionnez chaque catalogue ou attribution du catalogue dans votre solution

  2. Dans le menu, cliquez sur les points de suspension (...) et sélectionnez Propriétés gérées.

    Cliquez sur les points de suspension pour afficher le bouton des propriétés gérées.

  3. Dans la fenêtre qui s′ouvre, désélectionnez Autoriser les personnalisations.

    Désélectionner Autoriser les personnalisations.

  4. Cliquez sur Terminé

Diagramme des tables

Le diagramme suivant montre les relations entre les tables Catalog et CatalogAssignment

Diagramme des tables Catalogue et CatalogAssignment

La relation auto-référentielle utilisant ParentCatalogId est ce qui permet de créer la hiérarchie à deux niveaux entre un seul catalogue de solutions et plusieurs catalogues qui représentent des catégories utilisant les enregistrements de catalogue.

Colonnes de table Catalog

Toutes les colonnes disponibles et relations sont disponibles dans Référence table/entité Catalog.

La table suivante inclut les colonnes/attributs sélectionnés d’une table/Entité Catalog que vous pouvez définir.

Nom d’affichage
SchemaName
LogicalName
Type Description
Catalogue
CatalogId
catalogid
Uniqueidentifier Identificateur unique des instances de catalogue.
Description
Description
description
String Description localisée pour les instances de catalogue.
Requis
Nom d’affichage
DisplayName
displayname
String Nom d’affichage localisé pour les instances de catalogue.
Requis
Est personnalisable
IsCustomizable
iscustomizable
ManagedProperty Contrôle si la table Catalog peut être personnalisée ou supprimée.
La valeur par défaut est true. Plus d′informations : Bloquer la personnalisation des éléments du catalogue dans votre solution gérée
Requis
Nom
Name
name
String Nom principal du catalogue.
Requis
Catalogue parent
ParentCatalogId
parentcatalogid
Rechercher Identificateur unique du catalogue parent.
Modification impossible après l’enregistrement
Nom unique
UniqueName
uniquename
String Nom unique du catalogue.
Requis
Doit commencer par un préfixe de personnalisation.

Notes

Lorsque vous associez une table Catalog Assignment à une table Catalog, vous n’êtes pas en mesure de supprimer le catalogue tant que vous ne supprimez pas l’affectation de catalogue.

Colonnes de la table CatalogAssignment

Toutes les colonnes disponibles et relations sont disponibles dans Référence table/entité CatalogAssignment.

La table suivante inclut les colonnes/attributs sélectionnés d’une table/Entité CatalogAssignment que vous pouvez définir.

Nom d’affichage
SchemaName
LogicalName
Type Description
Attribution du catalogue
CatalogAssignmentId
catalogassignmentid
Uniqueidentifier Identificateur unique des instances d’attribution du catalogue.
catalogue
CatalogId
catalogid
Rechercher Identificateur unique du catalogue associé à l’attribution du catalogue.
Requis
Est personnalisable
IsCustomizable
iscustomizable
ManagedProperty Contrôle si la table CatalogAssignment peut être personnalisée ou supprimée.
La valeur par défaut est true. Plus d′informations : Bloquer la personnalisation des éléments du catalogue dans votre solution gérée
Requis
Nom
Name
name
String Nom principal de l’attribution du catalogue.
Objet d’attribution du catalogue
Object
object
Rechercher Identificateur unique de l’objet associé à l’attribution du catalogue.
Requis
Modification impossible après l’enregistrement
Cette recherche polymorphique peut être liée aux tables suivantes :
  customapi
  Entité
  workflow

Lorsque vous utilisez l’API web pour associer cette relation polymorphique, vous devez utiliser les noms de propriété de navigation à valeur unique pour chaque relation.

Ces noms sont :
  CustomAPIId
  EntityId
  WorkflowId

Lors de l’association à une table, une API personnalisée ou une action du processus personnalisée, vous devrez obtenir la valeur respectiveid. Voir Obtenir l’ID des éléments CatalogAssignment pour plus d’informations.

Obtenir l’ID des éléments CatalogAssignment

Vous devrez obtenir l’ID des entités, des API personnalisées et des actions du processus personnalisées lorsque vous les associez à un CatalogAssignment.

Obtenir l’ID d’une table

La table Entity contient une ligne par table. Vous pouvez obtenir l’ID d’une table spécifique, telle que la table Account, à l’aide de l’une de ces requêtes à l’aide de l’API web :

GET [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='account')?$select=MetadataId
GET [Organization URI]/api/data/v9.2/entities?$select=entityid&$filter=name eq 'Account'

Obtenir l’ID d’une API personnalisée

Cela se fait le plus facilement à l’aide de l’API web. L’exemple suivant renvoie le customapiid d’une API personnalisée avec le uniquename de your_CustomAPIName.

GET [Organization URI]/api/data/v9.2/customapis?$select=customapiid&$filter=uniquename eq 'your_CustomAPIName'

Obtenir l’ID d’une action du processus personnalisée

Cela se fait le plus facilement à l’aide de l’API web. L’exemple suivant renvoie le workflowid d’une action du processus personnalisée avec le uniquename de ExampleCustomProcessAction.

GET [Organization URI]/api/data/v9.2/workflows?$select=workflowid,uniquename&$filter=category eq 3 and type eq 1 and endswith(uniquename,'ExampleCustomProcessAction')

Notes

Le uniquename du workflow n’inclut pas le préfixe de personnalisation qui est ajouté au nom de l’action du processus personnalisée dans l’API web. Si l’action personnalisée que vous appelez depuis l’API web est nommée new_ExampleCustomProcessAction, le nom unique du workflow est ExampleCustomProcessAction.

Assurez-vous d’accéder à la ligne où Taper est 1. Il s’agit de la définition de workflow.

Les workflows d’action du processus personnalisée ont la valeur Catégorie définie sur 3.

Récupérer les attributions du catalogue existantes

Utilisez la requête OData suivante pour récupérer des informations sur les attributions du catalogue, le type d′attribution, le catalogue associé et le catalogue parent.

GET [Organization URI]/api/data/v9.2/catalogassignments?$select=name
    &$expand=CatalogId($select=uniquename;$expand=ParentCatalogId($select=uniquename)),
    EntityId($select=entityid),
    CustomAPIId($select=uniquename),
    WorkflowId($select=uniquename)
    &$filter=name ne null

Créer des tables Catalog et CatalogAssignment avec du code

Vous pouvez créer des enregistrements de table Catalog et Catalog Assignment avec l’API web ou le SDK pour .NET.

Utilisation de l’API Web

Notes

Actuellement, il est impossible de créer des enregistrements de table Catalog et Catalog Assignment avec « deep-insert ».

Vous pouvez créer une hiérarchie des enregistrements de catalogue avec « deep-insert », mais vous devez créer les attributions du catalogue individuellement.

La série suivante d’opérations d’API web crée une hiérarchie de catalogue et une table CatalogAssignment dans une solution avec le nom unique :ContosoCustomerManagement. Notez l’utilisation de l’en-tête de la demande MSCRM.SolutionUniqueName pour définir l’association à la solution lors de la création de l’enregistrement.

Voir les sections Créer un enregistrement avec l’API web : Création de base et Associer des lignes de table à la création pour en savoir plus.

Créer le catalogue racine

Demande :

POST [Organization URI]/api/data/v9.2/catalogs HTTP/1.1
MSCRM.SolutionUniqueName: ContosoCustomerManagement
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
    "name": "Contoso Customer Management",
    "uniquename": "contoso_CustomerManagement",
    "displayname": "Contoso Customer Management",
    "description": "The root catalog for the Contoso Customer Management solution",
    "iscustomizable": {
        "Value": false
    }
}

Réponse :

HTTP/1.1 204 No Content
OData-EntityId: [Organization URI]/api/data/v9.2/catalogs(00000000-0000-0000-0000-000000000001)

Créer le sous-catalogue des événements de table

Demande :

POST [Organization URI]/api/data/v9.2/catalogs HTTP/1.1
MSCRM.SolutionUniqueName: ContosoCustomerManagement
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
    "name": "Contoso Customer Management Table Events",
    "uniquename": "contoso_TableEvents",
    "displayname": "Tables",
    "description": "Groups Table events for the Contoso Customer Management Solution",
    "iscustomizable": {
        "Value": false
    },
    "ParentCatalogId@odata.bind": "catalogs(00000000-0000-0000-0000-000000000001)"
}

Réponse :

HTTP/1.1 204 No Content
OData-EntityId: [Organization URI]/api/data/v9.2/catalogassignments(00000000-0000-0000-0000-000000000002)

Créer l’attribution de catalogue de comptes sur les tables catalog

Voir Obtenir l’ID d’une table pour plus d’informations sur l’ID d’une table.

Demande :

POST [Organization URI]/api/data/v9.2/catalogassignments HTTP/1.1
MSCRM.SolutionUniqueName: ContosoCustomerManagement
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
    "name": "Account",
    "EntityId@odata.bind": "entities(70816501-edb9-4740-a16c-6a5efbc05d84)",
    "iscustomizable": {
        "Value": false
    },
    "CatalogId@odata.bind": "catalogs(00000000-0000-0000-0000-000000000002)"
}

Réponse :

HTTP/1.1 204 No Content
OData-EntityId: [Organization URI]/api/data/v9.2/catalogassignments(00000000-0000-0000-0000-000000000003)

Utilisation du Kit de développement logiciel (SDK) pour .NET

Le code suivant montre la création d’une hiérarchie de catalogue et une attribution de catalogue dans une solution avec le nom unique :ContosoCustomerManagement.

Notes

Utilisez le paramètre facultatif SolutionUniqueName avec la classe CreateRequest pour créer les enregistrements dans le contexte de cette solution. Plus d’informations : Transmettre des paramètres facultatifs avec une requête

string conn = $@"
Url = {url};
AuthType = OAuth;
UserName = {userName};
Password = {password};
AppId = 51f81489-12ee-4a9e-aaae-a2591f45987d;
RedirectUri = app://58145B91-0C36-4500-8554-080854F2AC97;
LoginPrompt=Auto;
RequireNewInstance = True";

var service = new CrmServiceClient(conn);
// var service = new ServiceClient(conn);

var solutionUniqueName = " ContosoCustomerManagement ";

//Create the root catalog
Catalog rootCatalog = new Catalog
{
    Name = "Contoso Customer Management",
    UniqueName = "contoso_CustomerManagement",
    DisplayName = "Contoso Customer Management",
    Description = "The root catalog for the Contoso Customer Management solution",
    IsCustomizable = new BooleanManagedProperty(false)
};

CreateRequest rootCatalogReq = new CreateRequest {
    Target = rootCatalog
};
rootCatalogReq["SolutionUniqueName"] = solutionUniqueName;

Guid rootCatalogId = ((CreateResponse)service.Execute(rootCatalogReq)).id;

//Create the Table Events Sub-catalog
Catalog tableEvents = new Catalog
{
    Name = "Contoso Customer Management Table Events",
    UniqueName = "contoso_TableEvents",
    DisplayName = "Tables",
    Description = "Groups Table events for the Contoso Customer Management Solution",
    IsCustomizable = new BooleanManagedProperty(false),
    ParentCatalogId = new EntityReference("catalog", rootCatalogId)
};

CreateRequest tableEventsReq = new CreateRequest
{
    Target = tableEvents
};
tableEventsReq["SolutionUniqueName"] = solutionUniqueName;

Guid tableEventsId = ((CreateResponse)service.Execute(tableEventsReq)).id;

//Create the Account Catalog Assignment on the Tables catalog
CatalogAssignment accountAssignment = new CatalogAssignment
{
    Name = "Account",
    IsCustomizable = new BooleanManagedProperty(false),
    Object = new EntityReference("entity",new Guid("70816501-edb9-4740-a16c-6a5efbc05d84")),
    CatalogId = new EntityReference("catalog", tableEventsId)

};

CreateRequest accountAssignmentReq = new CreateRequest
{
    Target = accountAssignment
};
accountAssignmentReq["SolutionUniqueName"] = solutionUniqueName;

Guid accountAssignmentId = ((CreateResponse)service.Execute(accountAssignmentReq)).id;

Créer des tables Catalog et Catalog Assignment en modifiant les fichiers de solution

Dans un fichier de solution, vous pouvez modifier les fichiers pour créer des tables Catalog et Catalog Assignment.

Utilisez l’outil SolutionPackager pour extraire une solution dans des fichiers pouvant être gérés dans le contrôle de la source. Vous pouvez ensuite modifier les fichiers. Vous pouvez ensuite utiliser SolutionPackager pour regrouper les fichiers extraits dans une solution. En savoir plus : Contrôle de code source avec les fichiers de solution

Conseil

Créez des catalogues et des attributions du catalogue dans une solution, puis exportez et extrayez la solution pour voir quelques exemples.

Veillez à bien utiliser la dernière version du pack Microsoft.CrmSdk.CoreToolsNuGet

Créer une table Catalog avec des fichiers de solution

Au sein d’une solution, tous les catalogues se trouvent dans un dossier catalogs. Vous pouvez créer, modifier ou supprimer des catalogues en modifiant les dossiers et les fichiers de ce dossier et en important la solution une fois qu′elle a été compressée à l′aide du packager de solution.

Chaque catalogue est inclus dans un dossier correspondant à la valeur uniquename du catalogue, par exemple, contoso_CustomerManagement.

Un fichier catalog.xml, contenant la définition du catalogue, se trouve dans le dossier.

Par exemple :

<catalog uniquename="contoso_CustomerManagement">
    <description default="The root catalog for the Contoso Customer Management solution">
        <label description="The root catalog for the Contoso Customer Management solution" languagecode="1033" />
    </description>
    <displayname default="Contoso Customer Management">
        <label description="Contoso Customer Management" languagecode="1033" />
    </displayname>
    <iscustomizable>0</iscustomizable>
    <name>Contoso Customer Management</name>
</catalog>

L′attribut uniquename de l′élément catalog doit correspondre au nom du dossier contenant le fichier.

L′élément catalog inclut ces éléments :

Élément Description
description A un attribut default avec la valeur de la description par défaut.
Contient un ou plusieurs éléments label avec des attributs pour description et languagecode si plusieurs langues sont définies.
displayname A un attribut default avec la valeur du nom d′affichage par défaut.
Contient un ou plusieurs éléments label avec des attributs pour description et languagecode si plusieurs langues sont définies.
iscustomizable Si le catalogue est personnalisable. 0 = false, 1 = true.
name Nom du catalogue.

Si le catalogue représente une catégorie, la relation avec le catalogue parent est incluse à l′aide d′un élément parentcatalogid qui contient un élément uniquename contenant le nom unique du catalogue parent.

Par exemple :

<catalog uniquename="contoso_TableEvents">
    <description default="Groups Table events for the Contoso Customer Management Solution">
        <label description="Groups Table events for the Contoso Customer Management Solution" languagecode="1033" />
    </description>
    <displayname default="Tables">
        <label description="Tables" languagecode="1033" />
    </displayname>
    <iscustomizable>0</iscustomizable>
    <name>Contoso Customer Management Table Events</name>
    <parentcatalogid>
        <uniquename>contoso_CustomerManagement</uniquename>
    </parentcatalogid>
</catalog>

Créer une table CatalogAssignment avec des fichiers de solution

Dans une solution, dans le dossier Assets se trouve un fichier catalogassignments.xml. Toutes les attributions de catalogue sont incluses dans le fichier. Vous pouvez créer ou modifier des attributions du catalogue en modifiant ce fichier et en important la solution une fois qu′elle a été compressée à l′aide du packager de solution.

Par exemple :

<catalogassignments>
    <catalogassignment object.logicalname="account" catalogid.uniquename="contoso_TableEvents" objectidtype="entity">
        <iscustomizable>0</iscustomizable>
        <name>Account</name>
    </catalogassignment>
    <catalogassignment catalogid.uniquename="contoso_CustomerEvents" object.uniquename="contoso_CustomerEnteredStore" objectidtype="customapi">
        <iscustomizable>0</iscustomizable>
        <name>Customer Entered Store</name>
  </catalogassignment>
</catalogassignments>

Chaque élément catalogassignment a ces attributs :

Attribut Description
catalogid.uniquename Nom unique du sous-catalogue associé à l’attribution du catalogue.
objecttypeid Type d’objet. Les valeurs valides sont :
entity
customapi
workflow

En fonction de la valeur objectypeid, chaque élément catalogassignment doit avoir l′un de ces attributs correspondants :

Attribut Description
object.uniquename Nom unique de l′API personnalisée.
object.logicalname Nom logique de l’entité.
object.workflowid Valeur d′ID unique de l′action de processus personnalisé.

L′élément catalogassignment inclut ces éléments :

Élément Description
iscustomizable Si l′attribution du catalogue est personnalisable. 0 = false, 1 = true.
name Nom de l’attribution du catalogue

Voir aussi

Événements métiers Microsoft Dataverse
Créer un enregistrement d’entité à l’aide de l’API Web
Récupérer un enregistrement d’entité à l’aide de l’API Web
Créer des entités à l’aide du SDK pour .NET
Récupérer un enregistrement d’entité à l’aide du SDK pour .NET

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é).