Utiliser des colonnes de choix pour stocker plusieurs options

Les personnalisateurs peuvent définir une colonne de choix qui permet la sélection de plusieurs options. Cet article explique comment définir, interroger et créer des colonnes de choix à l’aide de l’API Web et du Kit de développement logiciel (SDK) pour .NET. 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.

Avec l’API web, vous définissez cette colonne à l’aide du type d’entité MultiSelectPicklistAttributeMetadata.

Tout comme les colonnes de choix, il n’existe techniquement aucune limite supérieure quant au nombre d’options que vous pouvez définir. Appliquez les considérations d’utilisation comme facteur limitant. Toutefois, vous ne pouvez sélectionner que 150 options pour une seule colonne. En outre, vous ne pouvez pas définir de valeur par défaut.

Définir des valeurs de colonne de choix

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

À l’aide de l’API web, définissez les valeurs en transmettant une chaîne contenant des valeurs numériques séparées par des virgules :

Requête :

POST [organization uri]/api/data/v9.2/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.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

Interroger des données à partir de colonnes 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

Consultez Créer des colonnes de choix avec du code pour obtenir un exemple de code pour créer cette colonne.

Valeurs de la table de contacts

fullname sample_outdooractivities
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 comment utiliser la ContainValues fonction de requête pour renvoyer tous les contacts qui aiment la randonnée. La réponse inclut le texte des options sous forme d’annotations en raison de la odata.include-annotations="OData.Community.Display.V1.FormattedValue" préférence appliquée.

Requête :

GET [organization uri]/api/data/v9.2/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.2/$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 FetchXml requête suivante à 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.2/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.2/$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 colonnes de 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 avez besoin d’automatiser la création de ce type de colonne, utilisez les exemples suivants avec l’API web ou le Kit de développement logiciel (SDK) pour .NET. Ces deux exemples créent une colonne de choix pour les activités extérieures dans le tableau contact. En savoir plus sur la création de colonnes.

Envoie une POST requête avec la charge utile de type d’entité MultiSelectPicklistAttributeMetadata à la /Attributes collection de la contact table pour créer une colonne dans le cadre d’une solution portant le nom unique mySampleSolutionUniqueName. Apprendre à associer un composant de solution à une solution

Requête :

POST [organization uri]/api/data/v9.2/EntityDefinitions(LogicalName='contact')/Attributes HTTP/1.1
Accept: application/json
MSCRM.SolutionUniqueName: mySampleSolutionUniqueName
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
    "@odata.type": "Microsoft.Dynamics.CRM.MultiSelectPicklistAttributeMetadata",
    "SchemaName": "sample_OutdoorActivities",
    "DisplayName": {
        "LocalizedLabels": [
            {
                "Label": "Outdoor activities",
                "LanguageCode": 1033
            }
        ]
    },
    "RequiredLevel": {
        "Value": "None"
    },
    "Description": {
        "LocalizedLabels": [
            {
                "Label": "Outdoor activities that the contact likes.",
                "LanguageCode": 1033
            }
        ]
    },
    "OptionSet": {
        "IsGlobal": false,
        "OptionSetType": "Picklist",
        "Options": [
            {
                "Value": 1,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Swimming", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 2,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Hiking", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 3,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Mountain Climbing", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 4,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Fishing", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 5,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Hunting", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 6,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Running", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 7,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Boating", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 8,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Skiing", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 9,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Camping", "LanguageCode": 1033 }
                    ]
                }
            }
        ]
    }
}

Réponse:

HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [organization uri]/api/data/v9.2/EntityDefinitions(LogicalName='contact')/Attributes(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

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