Usar columnas de choices para almacenar varias opciones

Los personalizadores pueden definir una columna Choices que permita la selección de varias opciones. En este artículo se explica cómo establecer, consultar y crear columnas de opciones mediante la API web y el SDK para .NET. La MultiSelectPicklistAttributeMetadata clase define un tipo de columna que hereda de la EnumAttributeMetadata clase . Al igual que la PicklistAttributeMetadata clase , esta columna incluye una propiedad OptionSetMetadata.Options que contiene las opciones válidas para la columna. La diferencia es que los valores que se obtienen o se establecen son de un tipo OptionSetValueCollection que contiene una matriz de enteros que representan las opciones seleccionadas. Los valores con formato para esta columna son una cadena separada por punto y coma que contiene las etiquetas de las opciones seleccionadas.

Con la API web, esta columna se define mediante el tipo de entidad MultiSelectPicklistAttributeMetadata.

Al igual que las columnas de opciones, técnicamente no hay ningún límite superior en el número de opciones que puede definir. Aplique consideraciones de usabilidad como factor limitante. Sin embargo, solo puede seleccionar 150 opciones para una sola columna. Además, no se puede establecer un valor predeterminado.

Establecer los valores de la columna Opciones

En los ejemplos siguientes se muestra cómo establecer valores de opciones para una columna denominada sample_outdooractivities que se agrega a la contact tabla.

Mediante la API web, establezca los valores pasando una cadena que contiene valores numéricos separados por comas:

Solicitud:

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"
}

Respuesta:

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

Consulta de datos de columnas de opciones

Dos operadores de condición admiten la consulta de valores en las opciones:

API de la Web FetchXml ConditionOperator
ContainValues contain-values ContainValues
DoesNotContainValues not-contain-values DoesNotContainValues

Nota:

Estos operadores dependen de la indexación de texto completo que se aplicará en las tablas de base de datos que almacenan los varios valores. Hay cierta latencia después de crear nuevos registros y el índice de texto completo surte efecto. Es posible que tenga que esperar varios segundos después de crear nuevos registros antes de que los filtros que usen estos operadores puedan evaluar los valores.

Otros operadores de condición existentes que se pueden usar con este tipo de columna incluyen lo siguiente:

API de la 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

En los siguientes ejemplos se muestra el uso de los operadores ContainValues y DoesNotContainValues en el siguiente conjunto de datos en la columna de opciones denominada sample_outdooractivities en la tabla contact.

Valores de opciones sample_outdooractivities

Importancia Etiqueta
1 Natación
2 Senderismo
3 Montañismo
4 Pesca
5 Hunting
6 Correr
7 Remo
8 Esquí
9 Acampada

Consulte Crear columnas de opciones con código para ver un ejemplo de código para crear esta columna.

Valores de la tabla de contactos

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

En este ejemplo se muestra cómo usar la función de consulta ContainValues para devolver todos los contactos a los que les gusta hacer senderismo. La respuesta incluye el texto de las opciones como anotaciones debido a la odata.include-annotations="OData.Community.Display.V1.FormattedValue" preferencia aplicada.

Solicitud:

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"

Respuesta:

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"
    }]
}

Código de ejemplo mediante FetchXml

En el código siguiente se muestra el uso de FetchXml con la API web y el SDK para .NET.

En este ejemplo se muestra el uso del not-contain-values operador en la consulta siguiente FetchXml mediante la 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>

Solicitud:

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"

Respuesta:

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"
    }]
}

Crear columnas de opciones con código

La manera más fácil de crear opciones es usar el editor de columnas en las herramientas de personalización. Aprenda a crear y editar columnas.

Si necesita automatizar la creación de este tipo de columna, use los ejemplos siguientes con la API web o el SDK para .NET. Ambos ejemplos crean una columna de opciones para actividades al aire libre en la contact tabla. Más información sobre cómo crear columnas.

Envía una solicitud POST con carga de tipo de entidad MultiSelectPicklistAttributeMetadata a la /Attributes colección de la contact tabla para crear una columna como parte de una solución con el nombre único mySampleSolutionUniqueName. Aprenda a asociar un componente de solución a una solución

Solicitud:

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 }
                    ]
                }
            }
        ]
    }
}

Respuesta:

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)

Consulte también

Definiciones de columna
Crear una fila de tabla usando la API web
Consultar datos utilizando la API web
Trabajar con definiciones de columna
Ejemplo: Trabajar con definiciones de columnas