Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
SqlWorkflowInstanceStore permet aux utilisateurs de promouvoir des propriétés personnalisées spécifiques à l’application qui peuvent être utilisées pour rechercher des instances dans la base de données de persistance. L’acte de promotion d’une propriété entraîne la disponibilité de la valeur dans une vue spéciale de la base de données. Ces propriétés promues (propriétés qui peuvent être utilisées dans les requêtes utilisateur) peuvent être de types simples, tels que Int64, , GuidString, et , ou DateTimed’un type binaire sérialisé (byte[]).
La SqlWorkflowInstanceStore classe a la Promote méthode que vous pouvez utiliser pour promouvoir une propriété en tant que propriété qui peut être utilisée dans les requêtes. L’exemple suivant est un exemple d’extensibilité de magasin de bout en bout.
Dans cet exemple de scénario, une application de traitement de documents (DP) a des flux de travail, chacun utilisant des activités personnalisées pour le traitement des documents. Ces flux de travail ont un ensemble de variables d’état qui doivent être rendues visibles par l’utilisateur final. Pour ce faire, l’application DP fournit une extension d’instance de type PersistenceParticipant, utilisée par les activités pour fournir les variables d’état.
class DocumentStatusExtension : PersistenceParticipant { public string DocumentId; public string ApprovalStatus; public string UserName; public DateTime LastUpdateTime; }La nouvelle extension est ensuite ajoutée à l’hôte.
static Activity workflow = CreateWorkflow(); WorkflowApplication application = new WorkflowApplication(workflow); DocumentStatusExtension documentStatusExtension = new DocumentStatusExtension (); application.Extensions.Add(documentStatusExtension);Pour plus d’informations sur l’ajout d’un participant de persistance personnalisé, consultez l’exemple Participants de persistance .
Les activités personnalisées de l’application DP remplissent différents champs d’état dans la méthode 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(); // ... }Lorsqu’une instance de flux de travail atteint un point de persistance, la méthode CollectValues du participant de persistance DocumentStatusExtension enregistre ces propriétés dans la collection de données de persistance.
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; } // ... }Remarque
Toutes ces propriétés sont transmises à SqlWorkflowInstanceStore par le biais de l’infrastructure de persistance via la collection SaveWorkflowCommand.InstanceData .
L’application DP initialise le magasin d’instances de workflow SQL et appelle la méthode Promote pour promouvoir ces données.
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 fonction de ces informations de promotion, SqlWorkflowInstanceStore place les propriétés de données dans les colonnes de la vue InstancePromotedProperties .
Pour interroger un sous-ensemble des données de la table de promotion, l’application DP ajoute une vue personnalisée en haut de la vue de promotion.
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
Vue [System.Activities.DurableInstancing.InstancePromotedProperties]
| Nom de la colonne | Type de colonne | Descriptif |
|---|---|---|
| Identifiant d'instance | Identifiant Unique Global (GUID) | Instance de flux de travail à laquelle cette promotion appartient. |
| PromotionName | nvarchar(400) | Nom de la promotion elle-même. |
| Value1, Value2, Value3,..,Value32 | sql_variant | Valeur de la propriété promue elle-même. La plupart des types de données primitifs SQL, à l’exception des objets blob binaires et des chaînes de plus de 8 000 octets de longueur peuvent s’adapter à sql_variant. |
| Value33, Value34, Value35, ..., Value64 | varbinary(max) | Valeur de propriétés promues déclarées explicitement en tant que varbinary(max). |