Colonnes de choix

Les personnalisateurs peuvent définir une colonne qui offre la sélection de plusieurs options. La classe MultiSelectPicklistAttributeMetadata définit un type de colonne qui hérite de la classe EnumAttributeMetadata. Comme la classe PicklistAttributeMetadata, cette colonne comprend une propriété OptionSetMetadata.Options qui contient les options valides pour la colonne. La différence est que les valeurs que vous obtenez ou définissez sont d’un type OptionSetValueCollection contenant un éventail d’entiers représentant les options sélectionnées. Les valeurs mises en forme pour cette colonne sont une chaîne séparée par des points-virgules contenant les Étiquettes des options sélectionnées.

Notes

Seul l’éditeur d’un solution gérée peut importer des modifications qui suppriment une option d’un groupe d’options global. Cela inclut les solutions publiées par Microsoft telles que les groupes d’options globales prêtes à l’emploi. Afin d’apporter des modifications aux groupes d’options, il est nécessaire de mettre à niveau la solution qui a ajouté le groupe d’options. Pour plus d’informations : Mettre à niveau ou mettre à jour une solution. Les utilisateurs peuvent supprimer manuellement une option dans leur environnement s’ils ne parviennent pas à modifier la solution ou à contacter l’éditeur de la solution, mais cette opération doit être effectuée manuellement sur chaque environnement.

Avec l’API web, cette colonne est définie à l’aide de MultiSelectPicklistAttributeMetadata EntityType.

Comme les colonnes de choix, il n’existe techniquement pas de limite supérieure pour le nombre d’options qui peuvent être définies. Les considérations d’ordre pratique doivent être déterminer le facteur de limitation. Néanmoins, seules 150 options peuvent être sélectionnées pour une colonne unique. En outre, la valeur par défaut ne peut pas être définie.

Définition des valeurs des choix

Les exemples suivants montrent comment définir des valeurs de choix pour une colonne nommée sample_outdooractivities ajoutée à la table contact.

Avec l’API web, vous définissez les valeurs en passant une chaîne contenant des numéros séparés par des virgules :

Demande :

POST [organization uri]/api/data/v9.0/contacts HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
    "@odata.type": "Microsoft.Dynamics.CRM.contact",
    "firstname": "Wayne",
    "lastname": "Yarborough",
    "sample_outdooractivities": "1, 9"
}

Réponse :

HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [organization uri]/api/data/v9.0/contacts(0c67748a-b78d-e711-811c-000d3a75bdf1)

Interroger des données à partir de choix

Deux nouveaux opérateurs de condition ont été ajoutés pour prendre en charge l’interrogation des valeurs dans les choix :

API web FetchXml ConditionOperator
ContainValues contain-values ContainValues
DoesNotContainValues not-contain-values DoesNotContainValues

Notes

Ces opérateurs dépendent de l’indexation de texte intégral à appliquer sur les tables de base de données qui stockent les valeurs multiples. Il y a une certaine latence une fois que les enregistrements sont créés et que l’index de texte intégral est appliqué. Vous devrez peut-être attendre quelques secondes après la création des enregistrements avant que les filtres utilisant ces opérateurs puissent évaluer les valeurs.

Les autres opérateurs de condition existant qui peuvent être utilisés avec ce type de colonne comprennent ce qui suit :

API web FetchXml ConditionOperator
eq eq Equal
ne neq NotEqual
not null not-null NotNull
eq null null Null
In in In
NotIn not-in NotIn

Les exemples suivants illustrent l’utilisation des opérateurs ContainValues et DoesNotContainValues contre le jeu de données suivant sur la colonne de choix nommée sample_outdooractivities sur la table contact.

Valeurs de choix sample_outdooractivities

valeur Étiquette
1 Natation
2 Randonnée
3 Alpinisme
4 Pêche
5 Chasse
6 Exécution en cours
7 Canotage
8 Ski
9 Camping

Valeurs de table de contact

fullname « sampleoutdooractivities »
Wayne Yarborough 1,9
Monte Orton 2
Randal Maple 4
Hiram Mundy 2,3,8,9
Barbara weber 1,4,7
Georgette Sullivan 4,5,9
Verna Kennedy 2,4,9
Marvin Bracken 1,2,8,9

Cet exemple explique l’utilisation de la fonction de requête ContainValues pour obtenir tous les contacts qui aiment la randonnée. Remarquez comment le texte des options est retourné sous la forme d’annotations suite à la préférence appliquée odata.include-annotations="OData.Community.Display.V1.FormattedValue".

Demande :

GET [organization uri]/api/data/v9.0/contacts?$select=fullname,sample_outdooractivities&$filter=Microsoft.Dynamics.CRM.ContainValues(PropertyName='sample_outdooractivities',PropertyValues=%5B'2'%5D) HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"

Réponse :

HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
Preference-Applied: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Content-Length: 1092

{
    "@odata.context": "[organization uri]/api/data/v9.0/$metadata#contacts(fullname,sample_outdooractivities)",
    "value": [{
        "@odata.etag": "W/\"529811\"",
        "fullname": "Monte Orton",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Hiking",
        "sample_outdooractivities": "2",
        "contactid": "cdbcc48e-0b8d-e711-811c-000d3a75bdf1"
    }, {
        "@odata.etag": "W/\"529823\"",
        "fullname": "Hiram Mundy",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Hiking; Mountain Climbing; Skiing; Camping",
        "sample_outdooractivities": "2,3,8,9",
        "contactid": "d7bcc48e-0b8d-e711-811c-000d3a75bdf1"
    }, {
        "@odata.etag": "W/\"529838\"",
        "fullname": "Verna Kennedy",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Hiking; Fishing; Camping",
        "sample_outdooractivities": "2,4,9",
        "contactid": "e6bcc48e-0b8d-e711-811c-000d3a75bdf1"
    }, {
        "@odata.etag": "W/\"529843\"",
        "fullname": "Marvin Bracken",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Swimming; Hiking; Skiing; Camping",
        "sample_outdooractivities": "1,2,8,9",
        "contactid": "ebbcc48e-0b8d-e711-811c-000d3a75bdf1"
    }]
}

Exemple de code utilisant FetchXML

Le code suivant montre l’utilisation de FetchXml avec l’API web et le Kit de développement logiciel (SDK) pour .NET.

Cet exemple explique l’utilisation de l’opérateur not-contain-values dans la requête FetchXml suivante à l’aide de l’API web.

<fetch distinct='false' no-lock='false' mapping='logical'>
    <entity name='contact'>
        <attribute name='fullname' />
        <attribute name='sample_outdooractivities' />
            <filter type='and'>
                <condition attribute='sample_outdooractivities' operator='not-contain-values'>
                    <value>2</value>
                </condition>
            </filter>
    </entity>
</fetch>

Demande :

GET [organization uri]/api/data/v9.0/contacts?fetchXml=%253Cfetch%2520distinct%253D'false'%2520no-lock%253D'false'%2520mapping%253D'logical'%253E%253Centity%2520name%253D'contact'%253E%253Cattribute%2520name%253D'fullname'%2520%252F%253E%253Cattribute%2520name%253D'sample_outdooractivities'%2520%252F%253E%253Cfilter%2520type%253D'and'%253E%253Ccondition%2520attribute%253D'sample_outdooractivities'%2520operator%253D'not-contain-values'%253E%253Cvalue%253E2%253C%252Fvalue%253E%253C%252Fcondition%253E%253C%252Ffilter%253E%253C%252Fentity%253E%253C%252Ffetch%253E HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"

Réponse :

HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
Preference-Applied: odata.include-annotations="OData.Community.Display.V1.FormattedValue"

{
    "@odata.context": "[organization uri]/api/data/v9.0/$metadata#contacts(fullname,sample_outdooractivities,contactid)",
    "value": [{
        "@odata.etag": "W/\"529806\"",
        "fullname": "Wayne Yarborough",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Swimming; Camping",
        "sample_outdooractivities": "1,9",
        "contactid": "c8bcc48e-0b8d-e711-811c-000d3a75bdf1"
    }, {
        "@odata.etag": "W/\"529816\"",
        "fullname": "Randal Maple",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Fishing",
        "sample_outdooractivities": "4",
        "contactid": "d2bcc48e-0b8d-e711-811c-000d3a75bdf1"
    }, {
        "@odata.etag": "W/\"529828\"",
        "fullname": "Barbara Weber",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Swimming; Fishing; Boating",
        "sample_outdooractivities": "1,4,7",
        "contactid": "dcbcc48e-0b8d-e711-811c-000d3a75bdf1"
    }, {
        "@odata.etag": "W/\"529833\"",
        "fullname": "Georgette Sullivan",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Fishing; Hunting; Camping",
        "sample_outdooractivities": "4,5,9",
        "contactid": "e1bcc48e-0b8d-e711-811c-000d3a75bdf1"
    }]
}

Créer des choix avec du code

La manière la plus simple de créer des choix consiste à utiliser l’éditeur de colonne dans les outils de personnalisation. Pour plus d’informations : Créer et modifier des colonnes

Cependant, si vous devez automatiser la création de ce type de colonne, vous pouvez utiliser un code C# tel que celui qui suit le Kit de développement logiciel (SDK) pour .NET qui crée une des choix pour choisir les activités de plein air pour la table contact. Pour plus d’informations, consultez Créer des colonnes

private const int _languageCode = 1033; //English

MultiSelectPicklistAttributeMetadata outDoorActivitiesAttribute = new MultiSelectPicklistAttributeMetadata()
{
SchemaName = "sample_OutdoorActivities",
LogicalName = "sample_outdooractivities",
DisplayName = new Label("Outdoor activities", _languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Outdoor activities that the contact likes.", _languageCode),
OptionSet = new OptionSetMetadata()
    {
        IsGlobal = false,
        OptionSetType = OptionSetType.Picklist,
        Options = {
            new OptionMetadata(new Label("Swimming",_languageCode),1),
            new OptionMetadata(new Label("Hiking",_languageCode),2),
            new OptionMetadata(new Label("Mountain Climbing",_languageCode),3),
            new OptionMetadata(new Label("Fishing",_languageCode),4),
            new OptionMetadata(new Label("Hunting",_languageCode),5),
            new OptionMetadata(new Label("Running",_languageCode),6),
            new OptionMetadata(new Label("Boating",_languageCode),7),
            new OptionMetadata(new Label("Skiing",_languageCode),8),
            new OptionMetadata(new Label("Camping",_languageCode),9)}
    }
};

CreateAttributeRequest createAttributeRequest = new CreateAttributeRequest
{
    EntityName = "contact",
    Attribute = outDoorActivitiesAttribute
};

var response = (CreateAttributeResponse)service.Execute(createAttributeRequest);

Voir aussi

Définitions de colonne
Créer une ligne de table à l’aide de l’API web
Interroger les données à l’aide de l’API web
Utiliser des définitions de colonne
Exemple : Utiliser des définitions de colonne
Programmation avec liaison tardive et anticipée à 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é).