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 : ActivasValue : 0 |
Label : En cursoValue : 1State : 0 |
Label : ActivasValue : 0 |
Label : RetenidoValue : 2State : 0 |
Label : ActivasValue : 0 |
Label : Esperando detallesValue : 3State : 0 |
Label : ActivasValue : 0 |
Etiqueta: InvestigaciónValue : 4State : 0 |
Label : ResueltoValue : 1 |
Label : Problema resueltoValue : 5State : 1 |
Label : ResueltoValue : 1 |
Etiqueta: Información proporcionadaValue : 1000State : 1 |
Etiqueta: CanceladoValue : 2 |
Label : CanceladoValue : 6State : 2 |
Etiqueta: CanceladoValue : 2 |
Label : CombinadoValue : 2000State : 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.
<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>
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 statuscode
OptionSetValue 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