Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
SqlWorkflowInstanceStore permite a los usuarios promover propiedades personalizadas específicas de la aplicación que se pueden usar para consultar instancias de la base de datos de persistencia. El acto de promover una propiedad hace que el valor esté disponible en una vista especial de la base de datos. Estas propiedades promocionadas (propiedades que se pueden usar en consultas de usuario) pueden ser de tipos simples, como Int64, Guid, Stringy DateTime, o de un tipo binario serializado (byte[]).
La clase SqlWorkflowInstanceStore tiene el método Promote que puede usar para promover una propiedad que se puede usar en consultas. En el ejemplo siguiente se muestra un ejemplo de extensibilidad de almacén de un extremo a otro.
En este escenario de ejemplo, una aplicación de procesamiento de documentos (DP) tiene flujos de trabajo, cada uno de los cuales usa actividades personalizadas para el procesamiento de documentos. Estos flujos de trabajo tienen un conjunto de variables de estado que deben hacerse visibles para el usuario final. Para ello, la aplicación dp proporciona una extensión de instancia de tipo PersistenceParticipant, que se usa en las actividades para proporcionar las variables de estado.
class DocumentStatusExtension : PersistenceParticipant { public string DocumentId; public string ApprovalStatus; public string UserName; public DateTime LastUpdateTime; }A continuación, se agrega la nueva extensión al host.
static Activity workflow = CreateWorkflow(); WorkflowApplication application = new WorkflowApplication(workflow); DocumentStatusExtension documentStatusExtension = new DocumentStatusExtension (); application.Extensions.Add(documentStatusExtension);Para obtener más información sobre cómo agregar un participante de persistencia personalizado, vea el ejemplo Participantes de persistencia .
Las actividades personalizadas de la aplicación dp rellenan varios campos de estado en el método Execute .
public override void Execute(CodeActivityContext context) { // ... context.GetExtension<DocumentStatusExtension>().DocumentId = Guid.NewGuid(); context.GetExtension<DocumentStatusExtension>().UserName = "John Smith"; context.GetExtension<DocumentStatusExtension>().ApprovalStatus = "Approved"; context.GetExtension<DocumentStatusExtension>().LastUpdateTime = DateTime.Now(); // ... }Cuando una instancia de flujo de trabajo alcanza un punto de persistencia, el método CollectValues del participante de persistencia DocumentStatusExtension guarda estas propiedades en la colección de datos de persistencia.
class DocumentStatusExtension : PersistenceParticipant { const XNamespace xNS = XNamespace.Get("http://contoso.com/DocumentStatus"); protected override void CollectValues(out IDictionary<XName, object> readWriteValues, out IDictionary<XName, object> writeOnlyValues) { readWriteValues = new Dictionary<XName, object>(); readWriteValues.Add(xNS.GetName("UserName"), this.UserName); readWriteValues.Add(xNS.GetName("ApprovalStatus"), this.ApprovalStatus); readWriteValues.Add(xNS.GetName("DocumentId"), this.DocumentId); readWriteValues.Add(xNS.GetName("LastModifiedTime"), this.LastUpdateTime); writeOnlyValues = null; } // ... }Nota:
Todas estas propiedades se pasan a SqlWorkflowInstanceStore mediante el marco de persistencia a través de la colección SaveWorkflowCommand.InstanceData .
La aplicación dp inicializa el almacén de instancias de flujo de trabajo de SQL e invoca el método Promote para promover estos datos.
SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore(connectionString); List<XName> variantProperties = new List<XName>() { xNS.GetName("UserName"), xNS.GetName("ApprovalStatus"), xNS.GetName("DocumentId"), xNS.GetName("LastModifiedTime") }; store.Promote("DocumentStatus", variantProperties, null);En función de esta información de promoción, SqlWorkflowInstanceStore coloca las propiedades de datos en las columnas de la vista InstancePromotedProperties .
Para consultar un subconjunto de datos en la tabla de promoción, la aplicación DP agrega una vista personalizada encima de la vista de promoción.
create view [dbo].[DocumentStatus] with schemabinding as select P.[InstanceId] as [InstanceId], P.Value1 as [UserName], P.Value2 as [ApprovalStatus], P.Value3 as [DocumentId], P.Value4 as [LastUpdatedTime] from [System.Activities.DurableInstancing].[InstancePromotedProperties] as P where P.PromotionName = N'DocumentStatus' go
Vista [System.Activities.DurableInstancing.InstancePromotedProperties]
| Nombre de la columna | Tipo de columna | Descripción |
|---|---|---|
| Id de Instancia | Identificador Único Global (GUID) | Instancia de flujo de trabajo a la que pertenece esta promoción. |
| Nombre de Promoción | nvarchar(400) | El nombre de la propia promoción. |
| Value1, Value2, Value3,..,Value32 | sql_variant | Valor de la propia propiedad promocionada. La mayoría de los tipos de datos primitivos de SQL, excepto los blobs binarios y las cadenas de más de 8000 bytes de longitud, pueden caber en sql_variant. |
| Value33, Value34, Value35, ..., Value64 | varbinary(max) | Valor de las propiedades promocionadas declaradas explícitamente como varbinary(max). |