Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
SqlWorkflowInstanceStore permite que os usuários promovam propriedades personalizadas e específicas do aplicativo que podem ser usadas para consultar instâncias no banco de dados de persistência. O ato de promover uma propriedade faz com que o valor esteja disponível em uma exibição especial no banco de dados. Essas propriedades promovidas (propriedades que podem ser usadas em consultas de usuário) podem ser de tipos simples, como Int64, Guid, String, e DateTime, ou de tipo binário serializado (byte[]).
A SqlWorkflowInstanceStore classe tem o Promote método que você pode usar para promover uma propriedade como uma propriedade que pode ser usada em consultas. O exemplo a seguir é um exemplo de extensibilidade de armazenamento de ponta a ponta.
Neste cenário de exemplo, um aplicativo de DP (processamento de documentos) tem fluxos de trabalho, cada um deles usa atividades personalizadas para processamento de documentos. Esses fluxos de trabalho têm um conjunto de variáveis de estado que precisam ser visíveis para o usuário final. Para isso, o aplicativo DP fornece uma extensão de instância do tipo PersistenceParticipant, que é usada por atividades para fornecer as variáveis de estado.
class DocumentStatusExtension : PersistenceParticipant { public string DocumentId; public string ApprovalStatus; public string UserName; public DateTime LastUpdateTime; }Em seguida, a nova extensão é adicionada ao host.
static Activity workflow = CreateWorkflow(); WorkflowApplication application = new WorkflowApplication(workflow); DocumentStatusExtension documentStatusExtension = new DocumentStatusExtension (); application.Extensions.Add(documentStatusExtension);Para obter mais detalhes sobre como adicionar um participante de persistência personalizado, consulte o exemplo de Participantes de Persistência .
As atividades personalizadas no aplicativo DP preenchem vários campos de status no 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(); // ... }Quando uma instância de fluxo de trabalho atinge um ponto de persistência, o método CollectValues do participante de persistência DocumentStatusExtension salva essas propriedades na coleta de dados de persistência.
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; } // ... }Observação
Todas essas propriedades são passadas para SqlWorkflowInstanceStore pela estrutura de persistência por meio da coleção SaveWorkflowCommand.InstanceData .
O aplicativo DP inicializa o Repositório de Instâncias de Fluxo de Trabalho do SQL e invoca o método Promote para promover esses dados.
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);Com base nessas informações de promoção, SqlWorkflowInstanceStore coloca as propriedades de dados nas colunas da exibição InstancePromotedProperties .
Para ver um subconjunto dos dados da tabela da promoção, o aplicativo de DP adiciona um modo de exibição personalizado no modo da promoção.
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
Exibição [System.Activities.DurableInstancing.InstancePromotedProperties]
| Nome da Coluna | Tipo de coluna | Descrição |
|---|---|---|
| Id da Instância | Identificador Globalmente Único (GUID) | A instância de fluxo de trabalho à qual essa promoção pertence. |
| NomeDaPromoção | nvarchar(400) | O nome da promoção em si. |
| Value1, Value2, Value3,..,Value32 | sql_variant (variante SQL) | O valor da propriedade promovida próprio. A maioria dos tipos de dados primitivos do SQL, exceto blobs binários e cadeias de caracteres com mais de 8.000 bytes de comprimento, pode caber em sql_variant. |
| Value33, Value34, Value35, ..., Value64 | varbinary(max) | O valor das propriedades elevadas que são explicitamente declaradas como varbinary (máximo). |