Share via


Definir transiciones de modelo de estado personalizadas

Puede especificar transiciones de estado personalizadas para la entidad Incident (Caso) o entidades personalizadas. La propiedad EntityMetadata.IsStateModelAware es true para entidades que admiten transiciones de modelo de estado.

Las transiciones de estado personalizadas son un nivel opcional de filtración para definir qué transiciones de estado son válidas para un registro en un estado determinado. En particular, cuando dispone de un amplio número de combinaciones para estados válidos y valores de estado, definir una lista limitada de opciones puede facilitar a los usuarios la selección del estado correcto de un registro.

¿Cuál es el modelo de estado?

Las entidades que admiten el concepto de estado tienen un par de atributos que capturan estos datos, tal y como se muestra en esta tabla.

Nombre lógico Nombre para mostrar Descripción
statecode Estado Representa el estado del registro. Para las entidades personalizadas este es Activo o Inactivo. La entidad Incident (case) utiliza Activo, Resuelto y Cancelado. No puede agregar más opciones de estado, pero puede cambiar las etiquetas de opciones.
statuscode Razón para el estado Representa un estado que está vinculado a un estado específico. Cada estado debe tener al menos un estado posible. Puede agregar opciones adicionales de estado y cambiar las etiquetas de las opciones existentes.

Los metadatos de los atributos definen qué valores de estado son válidos para un estado determinado. Por ejemplo, para la entidad Incident (Caso), se muestran las opciones de estado y de estado predeterminado en la tabla siguiente.

Est. Estado
Label: Activas

Value: 0
Label: En curso

Value: 1

State: 0
Label: Activas

Value: 0
Label: Retenido

Value: 2

State: 0
Label: Activas

Value: 0
Label: Esperando detalles

Value: 3

State: 0
Label: Activas

Value: 0
Etiqueta: Investigación

Value: 4

State: 0
Label: Resuelto

Value: 1
Label: Problema resuelto

Value: 5

State: 1
Label: Resuelto

Value: 1
Etiqueta: Información proporcionada

Value: 1000

State: 1
Etiqueta: Cancelado

Value: 2
Label: Cancelado

Value: 6

State: 2
Etiqueta: Cancelado

Value: 2
Label: Combinado

Value: 2000

State: 2

Estos datos se almacenan en la clase StatusOptionMetadata, que representa las opciones de la clase StatusAttributeMetadata.

Para ver los metadatos de las entidades de su organización, instale la solución Explorador de metadatos que se describe en Exploración de los metadatos de su organización. También puede examinar la documentación de referencia para las entidades en la Referencia de entidad.

Detectar transiciones de estado válidas

Puede modificar el atributo statuscode para definir qué otras opciones de estado representan transiciones válidas a partir del estado actual. Para obtener instrucciones, consulte el tema del Manual de personalización: Definir las transiciones de razón para el estado

Cuando se apliquen transacciones de estado personalizadas a entidad, la propiedad EntityMetadata.EnforceStateTransitions será true. También, cada StatusOptionMetadata dentro de la colección StatusAttributeMetadata .Options tendrá una nueva propiedad TransitionData. Esta propiedad contendrá un valor de cadena que representa un documento XML. Este documento contiene la definición de las transiciones permitidas. Por ejemplo, la opción predeterminada del atributo Incident (Caso) StatusCode puede presentar el valor TransitionData siguiente.

<allowedtransitions xmlns="https://schemas.microsoft.com/crm/2009/WebServices">
<allowedtransition sourcestatusid="1" tostatusid="6" />
<allowedtransition sourcestatusid="1" tostatusid="1000" />
<allowedtransition sourcestatusid="1" tostatusid="2000" />
<allowedtransition sourcestatusid="1" tostatusid="5" />
</allowedtransitions>

Nota

Cuando se recuperan estos datos en código no administrado del servicio web, por ejemplo, cuando se utiliza JavaScript, se omitirá y aparecerá como el siguiente ejemplo.

&lt;allowedtransitions xmlns="https://schemas.microsoft.com/crm/2009/WebServices"&gt;
&lt;allowedtransition sourcestatusid="1" tostatusid="6" /&gt;
&lt;allowedtransition sourcestatusid="1" tostatusid="1000" /&gt;
&lt;allowedtransition sourcestatusid="1" tostatusid="2000" /&gt;
&lt;allowedtransition sourcestatusid="1" tostatusid="5" /&gt;
&lt;/allowedtransitions&gt;

Cuando estos datos están presentes y la propiedad EnforceStateTransitions de la entidad es true, las instancias de incidentes solamente pueden cambiarse a uno de los valores de statuscode permitidos. Puede utilizar IOrganizationService.Update para establecer statuscodeOptionSetValue en cualquiera de los valores permitidos que no representan un cambio de estado. Para cambiar el estado, use SetStateRequest ajustando los valores de las propiedades State y Status o la propiedad Status del ajuste CloseIncidentRequest en uno de los valores permitidos para el valor de statuscode actual. El intentar establecer un valor no válido genera un error.

Vea también

Ejemplo: recuperar transiciones de estado válidas
Estado y razón para el estado de los registros
Recuperar y detectar cambios en metadatos