Partager via


Les colonnes de choix

Les personnalisateurs peuvent définir une colonne qui autorise la sélection de plusieurs options. La MultiSelectPicklistAttributeMetadata classe définit un type de colonne qui hérite de la EnumAttributeMetadata classe. Tout comme la PicklistAttributeMetadata classe, cette colonne inclut 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.

Note

Seul l’éditeur d’une solution managée peut importer des modifications qui suppriment une option d’un jeu d’options global. Ce comportement inclut les solutions publiées par Microsoft, telles que les ensembles d’options globaux préconfigurés. Pour apporter une modification aux jeux d’options, une mise à niveau doit être effectuée vers la solution qui a ajouté le jeu d’options. Découvrez la mise à niveau ou la mise à jour d’une solution. Les utilisateurs peuvent supprimer manuellement une option dans leur environnement s’ils ne peuvent pas modifier la solution ou contacter l’éditeur de solution, mais cela doit être effectué manuellement sur chaque environnement.

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

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

Définition des valeurs de choix

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

Avec l’API web, vous définissez les valeurs en transmettant une chaîne contenant des valeurs de nombre séparés par des virgules :

Requête :

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(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

Interroger des données à partir de choix

Deux opérateurs de condition permettent l’interrogation des valeurs dans les options disponibles :

API Web FetchXML ConditionOperator
ContainValues contain-values ContainValues
DoesNotContainValues not-contain-values DoesNotContainValues

Note

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 existe une certaine latence après la création de nouveaux enregistrements avant que l'index de recherche en texte intégral ne prenne effet. Vous devrez peut-être attendre plusieurs secondes après la création de nouveaux enregistrements avant que les filtres utilisant ces opérateurs puissent évaluer les valeurs.

D’autres opérateurs de condition existants qui peuvent être utilisés avec ce type de colonne incluent les éléments suivants :

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 montrent l’utilisation des opérateurs ContainValues et DoesNotContainValues par rapport au jeu de données suivant sur la colonne choix nommée sample_outdooractivities sur la table contact.

Choix de valeurs sample_outdooractivities

Valeur Étiquette
1 Natation
2 Randonnée
3 Alpinisme
4 Pêche
5 Hunting
6 Course à pied
7 Canotage
8 Ski
9 Camping

Valeurs de la table de contacts

fullname 'échantillon_activités_de_plein_air'
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 montre l’utilisation de la ContainValues fonction de requête pour renvoyer 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".

Requête :

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 montre l’utilisation de l’opérateur not-contain-values dans la requête suivante FetchXml à l’aide de l’API web.

<fetch>
    <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>

Requête :

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

Le moyen le plus simple de créer des choix consiste à utiliser l’éditeur de colonnes dans les outils de personnalisation. Découvrez comment créer et modifier des colonnes

Si vous devez automatiser la création de ce type de colonne, vous pouvez utiliser le code C# suivant avec le Kit de développement logiciel (SDK) pour .NET qui crée des choix pour autoriser les choix d’activités extérieures à la contact table. En savoir plus sur la création de 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 colonnes
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 colonnes
Exemple : Utiliser des définitions de colonnes
Programmation avec liaison tardive et anticipée à l’aide du SDK pour .NET