Compartir a través de


Columnas de opciones

Los personalizadores pueden definir una columna que permita la selección de varias opciones. 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.

Nota:

Solo el editor de una solución administrada puede importar cambios que eliminen una opción de un conjunto de opciones globales. Este comportamiento incluye soluciones publicadas por Microsoft, como los conjuntos de opciones globales predefinidos. Para realizar un cambio en los conjuntos de opciones, se debe realizar una actualización a la solución que agregó el conjunto de opciones. Obtenga información sobre cómo actualizar o actualizar una solución. Los usuarios pueden eliminar manualmente una opción en su entorno si no pueden modificar la solución o ponerse en contacto con el publicador de la solución, pero esto debe realizarse manualmente en cada entorno.

Con la API web, esta columna se define mediante MultiSelectPicklistAttributeMetadata EntityType.

Al igual que las columnas de opciones, técnicamente no hay ningún límite superior en el número de opciones que se pueden definir. El factor de limitación que se debe aplicar son las consideraciones de facilidad de uso. Sin embargo, solo se pueden seleccionar 150 opciones para una sola columna. Además, no se puede establecer un valor predeterminado.

Establecer valores de opciones

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

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

Solicitud:

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

Respuesta:

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

Consulta datos desde opciones seleccionadas

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

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 el uso de la ContainValues función de consulta para devolver todos los contactos a quienes les gusta el senderismo. Tenga en cuenta que el texto de las opciones se devuelve como anotaciones debido a la preferencia odata.include-annotations="OData.Community.Display.V1.FormattedValue" aplicada.

Solicitud:

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"

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

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

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

Creación 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, puede usar el siguiente código de C# con el SDK para .NET que crea opciones para permitir opciones de actividades al aire libre en la contact tabla. Más información sobre la creación de columnas

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);

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
Programación en tiempo de ejecución y en tiempo de compilación con SDK para .NET