Creación y actualización de opciones (conjuntos de opciones) mediante la API web

En este artículo se explica cómo crear y actualizar opciones de Microsoft Dataverse (conjuntos de opciones) mediante la API web, por lo que puede mantener valores de opción coherentes entre columnas de tabla. Use opciones globales cuando varias columnas necesiten las mismas opciones y use opciones locales para una columna específica.

Nota

Solo puede cambiar un conjunto de opciones administradas existente si es el publicador. Para cambiar el nombre o eliminar una opción en estos conjuntos de opciones, debe actualizar la solución que agregó el conjunto de opciones. Para obtener más información, consulte Mejorar o actualizar una solución.

Al definir un conjunto de opciones globales mediante una POST solicitud a [URI de la organización],/api/data/v9.2/GlobalOptionSetDefinitions se recomienda permitir que el sistema asigne un valor. Deje que el sistema asigne el valor pasando un valor null cuando cree la nueva instancia OptionMetadata. Al definir una opción, contiene un determinada prefijo de valor de opción específico del contexto del editor establecido para la solución en la que se crea el conjunto de opciones. Este prefijo ayuda a reducir la posibilidad de crear conjuntos de opciones duplicados para una solución administrada y, en cualquier conjunto de opciones que defina en entornos en los que está instalada la solución administrada. Para obtener más información, consulte Combinar opciones del conjunto de opciones.

Operaciones de API web para opciones

La siguiente tabla enumera los mensajes que se pueden usar con los conjuntos de opciones globales.

Publicación Operación de API web
CreateOptionSet Use la solicitud POST para URI de organización/api/data/v9.2/GlobalOptionSetDefinitions.
DeleteOptionSet Use la solicitud DELETE para URI de organización/api/data/v9.2/GlobalOptionSetDefinitions(Name='<name>').
RetrieveAllOptionSets Use la solicitud GET para URI de organización/api/data/v9.2/GlobalOptionSetDefinitions.
RetrieveOptionSet Use la solicitud GET para URI de organización/api/data/v9.2/GlobalOptionSetDefinitions(Name='<name>').

En la tabla siguiente se enumeran los mensajes que puede usar con conjuntos de opciones locales y globales.

Publicación Operación de API web
DeleteOptionValue
Elimina uno de los valores de un conjunto de opciones globales.
Acción DeleteOptionValue
Ejemplo: Opción de eliminación
InsertOptionValue
Inserta una opción en un conjunto de opciones globales.
Acción InsertOptionValue
Ejemplo: Opciones de inserción
InsertStatusValue
Inserta una nueva opción en el conjunto de opciones global usado en la columna Status.
Acción InsertStatusValue
Ejemplo: Insertar un nuevo valor de estado
OrderOption
Cambia el orden relativo de las opciones de un conjunto de opciones.
Acción OrderOption
Ejemplo: Opciones de pedido
UpdateOptionSet Use la solicitud PUT con OptionSetMetadataBase EntityType para [Organization URI]/api/data/v9.2/GlobalOptionSetDefinitions(metadataid)
Solo aquellas propiedades definidas por OptionSetMetadataBase se pueden actualizar. Estas propiedades no incluyen las opciones. Utilice otras acciones para realizar cambios en las opciones.
UpdateOptionValue
Actualiza una opción de un conjunto de opciones.
Acción UpdateOptionValue
Ejemplo: Opciones de actualización
UpdateStateValue
Inserta una nueva opción en el conjunto de opciones usado en la columna Status.
Acción UpdateStateValue

Ejemplos de API web para opciones

Creación de un conjunto de opciones global

El siguiente ejemplo usará estas propiedades para crear una opción global.

Propiedades de OptionSetMetadata Valores
Name sample_colors
DisplayName Colores
Description Opción de color
OptionSetType Picklist
Options valor:727000000, etiqueta:Rojo
valor:727000001, etiqueta:Amarillo
valor:727000002, etiqueta:Verde

El siguiente ejemplo crea una opción global usando las propiedades.

El URI para la opción global se devuelve en la respuesta. También puede hacer referencia a esta opción global mediante el nombre : GlobalOptionSetDefinitions(Name='sample_colors').

Solicitud:

POST [Organization Uri]/api/data/v9.2/GlobalOptionSetDefinitions
MSCRM.SolutionUniqueName: examplesolution
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 2769

{
  "@odata.type": "Microsoft.Dynamics.CRM.OptionSetMetadata",
  "Options": [
    {
      "Value": 727000000,
      "Label": {
        "@odata.type": "Microsoft.Dynamics.CRM.Label",
        "LocalizedLabels": [
          {
            "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
            "Label": "Red",
            "LanguageCode": 1033,
            "IsManaged": false
          }
        ],
        "UserLocalizedLabel": {
          "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
          "Label": "Red",
          "LanguageCode": 1033,
          "IsManaged": false
        }
      }
    },
    {
      "Value": 727000001,
      "Label": {
        "@odata.type": "Microsoft.Dynamics.CRM.Label",
        "LocalizedLabels": [
          {
            "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
            "Label": "Yellow",
            "LanguageCode": 1033,
            "IsManaged": false
          }
        ],
        "UserLocalizedLabel": {
          "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
          "Label": "Yellow",
          "LanguageCode": 1033,
          "IsManaged": false
        }
      }
    },
    {
      "Value": 727000002,
      "Label": {
        "@odata.type": "Microsoft.Dynamics.CRM.Label",
        "LocalizedLabels": [
          {
            "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
            "Label": "Green",
            "LanguageCode": 1033,
            "IsManaged": false
          }
        ],
        "UserLocalizedLabel": {
          "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
          "Label": "Green",
          "LanguageCode": 1033,
          "IsManaged": false
        }
      }
    }
  ],
  "Description": {
    "@odata.type": "Microsoft.Dynamics.CRM.Label",
    "LocalizedLabels": [
      {
        "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
        "Label": "Color Choice",
        "LanguageCode": 1033,
        "IsManaged": false
      }
    ],
    "UserLocalizedLabel": {
      "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
      "Label": "Color Choice",
      "LanguageCode": 1033,
      "IsManaged": false
    }
  },
  "DisplayName": {
    "@odata.type": "Microsoft.Dynamics.CRM.Label",
    "LocalizedLabels": [
      {
        "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
        "Label": "Colors",
        "LanguageCode": 1033,
        "IsManaged": false
      }
    ],
    "UserLocalizedLabel": {
      "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
      "Label": "Colors",
      "LanguageCode": 1033,
      "IsManaged": false
    }
  },
  "Name": "sample_colors",
  "OptionSetType": "Picklist"
}

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/GlobalOptionSetDefinitions(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

Creación de una columna de elección mediante un conjunto de opciones global

En el ejemplo siguiente se usan estas propiedades para crear una columna de elección mediante una opción global.

Propiedades de atributo de lista de selección Valores
SchemaName sample_Colors
DisplayName Colores de muestra
Description Atributo de lista de selección global de colores
RequiredLevel None
GlobalOptionSet Establezca esta propiedad de navegación con un solo valor mediante la @odata.bind sintaxis con una referencia a la opción global. Este ejemplo usa MetadataId como clave, pero también podría usar clave alternativa con Name: GlobalOptionSetDefinitions(Name='sample_colors')

En el ejemplo siguiente se crea una columna local mediante las propiedades y se agrega a la sample_bankaccount tabla.

La respuesta devuelve el URI del atributo .

Solicitud:

POST [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes
MSCRM.SolutionUniqueName: examplesolution
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 1465

{
  "@odata.type": "Microsoft.Dynamics.CRM.PicklistAttributeMetadata",
  "AttributeType": "Picklist",
  "AttributeTypeName": {
    "Value": "PicklistType"
  },
  "SourceTypeMask": 0,
  "GlobalOptionSet@odata.bind": "/GlobalOptionSetDefinitions(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)",
  "Description": {
    "@odata.type": "Microsoft.Dynamics.CRM.Label",
    "LocalizedLabels": [
      {
        "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
        "Label": "Colors Global Picklist Attribute",
        "LanguageCode": 1033,
        "IsManaged": false
      }
    ],
    "UserLocalizedLabel": {
      "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
      "Label": "Colors Global Picklist Attribute",
      "LanguageCode": 1033,
      "IsManaged": false
    }
  },
  "DisplayName": {
    "@odata.type": "Microsoft.Dynamics.CRM.Label",
    "LocalizedLabels": [
      {
        "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
        "Label": "Sample Colors",
        "LanguageCode": 1033,
        "IsManaged": false
      }
    ],
    "UserLocalizedLabel": {
      "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
      "Label": "Sample Colors",
      "LanguageCode": 1033,
      "IsManaged": false
    }
  },
  "RequiredLevel": {
    "Value": "None",
    "CanBeChanged": false,
    "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings"
  },
  "SchemaName": "sample_Colors"
}

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(11bb11bb-cc22-dd33-ee44-55ff55ff55ff)

Insertar opciones

El siguiente ejemplo usa la acción InsertOptionValue para agregar una nueva opción con el valor 727000005 y la etiqueta Echo a la columna de elección local creada por Cree una columna de elección.

Solicitud:

POST [Organization Uri]/api/data/v9.2/InsertOptionValue
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 612

{
  "AttributeLogicalName": "sample_choice",
  "EntityLogicalName": "sample_bankaccount",
  "Value": 727000005,
  "Label": {
    "@odata.type": "Microsoft.Dynamics.CRM.Label",
    "LocalizedLabels": [
      {
        "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
        "Label": "Echo",
        "LanguageCode": 1033,
        "IsManaged": false
      }
    ],
    "UserLocalizedLabel": {
      "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
      "Label": "Echo",
      "LanguageCode": 1033,
      "IsManaged": false
    }
  },
  "SolutionUniqueName": "examplesolution"
}

Respuesta:

HTTP/1.1 200 OK
OData-Version: 4.0

{
  "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.InsertOptionValueResponse",
  "NewOptionValue": 727000005
}

Opciones de actualización

Para actualizar las opciones individuales, use la acción UpdateOptionValue. En el ejemplo siguiente se actualiza desde TrueOption el ejemplo de columna booleana en Creación de una columna booleana y se cambia la etiqueta a Up en lugar de True. Dado que este conjunto de opciones es local, en el ejemplo se usa AttributeLogicalName y EntityLogicalName. Para un conjunto de opciones globales, use el parámetro OptionSetName en su lugar.

Solicitud:

POST [Organization Uri]/api/data/v9.2/UpdateOptionValue HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "AttributeLogicalName": "new_boolean",
  "EntityLogicalName": "new_bankaccount",
  "Value": 1,
  "Label": {
    "@odata.type": "Microsoft.Dynamics.CRM.Label",
    "LocalizedLabels": [
      {
        "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
        "Label": "Up",
        "LanguageCode": 1033,
        "IsManaged": false
      }
    ],
    "UserLocalizedLabel": {
      "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
      "Label": "Up",
      "LanguageCode": 1033,
      "IsManaged": false
    }
  },
  "MergeLabels": true
}

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Ordenar opciones

En el ejemplo siguiente se muestra cómo reordenar las opciones en un conjunto de opciones locales mediante la acción OrderOption. La propiedad Value contiene los valores de la opción en el orden deseado.

Para usar esta acción con un conjunto de opciones global, especifique el OptionSetName parámetro en lugar de EntityLogicalName y AttributeLogicalName.

Use el SolutionUniqueName parámetro para aplicar los cambios como parte de la solución especificada.

Solicitud:

POST [Organization Uri]/api/data/v9.2/OrderOption
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 253

{
  "EntityLogicalName": "sample_bankaccount",
  "AttributeLogicalName": "sample_choice",
  "Values": [
    727000002,
    727000000,
    727000003,
    727000001,
    727000005,
    727000004
  ],
  "SolutionUniqueName": "examplesolution"
}

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Eliminar opción

En el ejemplo siguiente se muestra cómo eliminar una opción en una columna de opción local mediante la acción DeleteOptionValue.

Para usar esta acción con un conjunto de opciones global, especifique el OptionSetName parámetro en lugar de EntityLogicalName y AttributeLogicalName.

Use el SolutionUniqueName parámetro para aplicar los cambios como parte de la solución especificada.

Solicitud:

POST [Organization Uri]/api/data/v9.2/DeleteOptionValue
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 116

{
  "AttributeLogicalName": "sample_choice",
  "EntityLogicalName": "sample_bankaccount",
  "Value": 727000004
}

Respuesta:

HTTP/1.1 204 NoContent
OData-Version: 4.0

Insertar valor de estado

En el ejemplo siguiente se muestra cómo agregar una opción a una columna de estado mediante la acción InsertarStatusValue.

Utilice el parámetro StateCode para especificar a qué opción de código de estado se aplica el valor de estado. El parámetro SolutionUniqueName aplica los cambios como parte de la solución especificada.

La propiedad NewOptionValue devuelta por InsertStatusValueResponse ComplexType contiene el valor asignado a la opción.

Solicitud:

POST [Organization Uri]/api/data/v9.2/InsertStatusValue
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 609

{
  "AttributeLogicalName": "statuscode",
  "EntityLogicalName": "sample_bankaccount",
  "Label": {
    "@odata.type": "Microsoft.Dynamics.CRM.Label",
    "LocalizedLabels": [
      {
        "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
        "Label": "Frozen",
        "LanguageCode": 1033,
        "IsManaged": false
      }
    ],
    "UserLocalizedLabel": {
      "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
      "Label": "Frozen",
      "LanguageCode": 1033,
      "IsManaged": false
    }
  },
  "StateCode": 1,
  "SolutionUniqueName": "examplesolution"
}

Respuesta:

HTTP/1.1 200 OK
OData-Version: 4.0

{
  "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.InsertStatusValueResponse",
  "NewOptionValue": 727000000
}

Consulte también

Personalizar opciones
Información general para crear y editar opciones globales
Crear una opción