Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
SqlWorkflowInstanceStore позволяет пользователям продвигать пользовательские свойства, относящиеся к приложению, которые можно использовать для запроса экземпляров в базе данных сохраняемости. Действие, связанное с продвижением свойства, делает значение доступным в специальном представлении в базе данных. Эти повышенные свойства (свойства, которые могут использоваться в пользовательских запросах) могут иметь простые типы, такие как Int64, Guid, String и DateTime, или быть сериализованного двоичного типа (byte[]).
Класс SqlWorkflowInstanceStore имеет Promote метод, который можно использовать для повышения свойства в качестве свойства, которое можно использовать в запросах. В следующем примере приведен полный пример расширяемости хранилища.
В этом примере приложение обработки документов (DP) содержит рабочие процессы, каждый из которых использует пользовательские действия для обработки документов. Эти рабочие процессы имеют набор переменных состояния, которые должны быть видимы для конечного пользователя. Для этого приложение DP предоставляет расширение экземпляра типа PersistenceParticipant, которая используется в действиях для предоставления переменных состояния.
class DocumentStatusExtension : PersistenceParticipant { public string DocumentId; public string ApprovalStatus; public string UserName; public DateTime LastUpdateTime; }Затем новое расширение добавляется в хост.
static Activity workflow = CreateWorkflow(); WorkflowApplication application = new WorkflowApplication(workflow); DocumentStatusExtension documentStatusExtension = new DocumentStatusExtension (); application.Extensions.Add(documentStatusExtension);Дополнительные сведения о добавлении настраиваемого участника сохраняемости см. в примере Участники Сохраняемости.
В приложении DP пользовательские действия заполняют различные поля статуса в методе 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(); // ... }Когда экземпляр рабочего процесса достигает точки сохраняемости, метод CollectValues участника сохраняемости DocumentStatusExtension сохраняет эти свойства в коллекции данных сохраняемости.
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; } // ... }Замечание
Все эти свойства передаются в SqlWorkflowInstanceStore платформой сохраняемости через коллекцию SaveWorkflowCommand.InstanceData .
Приложение DP инициализирует хранилище экземпляров рабочих процессов SQL и вызывает метод Promote для продвижения этих данных.
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);На основе этих сведений о продвижении SqlWorkflowInstanceStore помещает свойства данных в столбцы представления InstancePromotedProperties .
Чтобы получить подмножество данных из таблицы акции, приложение DP добавляет настраиваемое представление поверх представления акции.
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
Вид [System.Activities.DurableInstancing.InstancePromotedProperties]
| Имя столбца | Тип столбца | Описание |
|---|---|---|
| InstanceId | ГУИД | Экземпляр рабочего процесса, к которому относится данное продвижение. |
| НазваниеАкции | nvarchar(400) | Имя самого промоушена. |
| Value1, Value2, Value3,..,Value32 | SQL-вариант | Значение самого продвигаемого свойства. Большинство примитивных типов данных SQL, кроме двоичных BLOB-объектов и строк длиной более 8000 байт, можно поместить в sql_variant. |
| Value33, Value34, Value35, ..., Value64 | varbinary(max) (максимальная длина двоичных данных) | Значение продвинутых свойств, явно объявленных как varbinary(max). |