Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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