При разработке рабочих процессов в Visual Studio используют элементы из Тулбокса, просто перетаскивая. Но в таком случае WorkFlow статичен. Возникла необходимость добавления в рабочий процесс новых элементов на стадии выполнения. Наткнулся на подводные камни.
У рабочего процесса есть интересный флаг CanModifyActivities. Если он в false, то нельзя добавлять новые Activity в него во время выполнения. В коде десижнера будет что-то вроде:
private void InitializeComponent() { this.CanModifyActivities = true; ... // добавление activities, установка свойств и т.д... ... this.CanModifyActivities = false; }Этот код автогенерируем, так что, поменять ничего не получится. Решение всё-таки есть.
System.Workflow.Activities.SequenceActivity в рабочий процесс добавляем, допустим с именем sActivity1. А в коде пишем:
WorkflowChanges wc = new WorkflowChanges(this); ((SequenceActivity)wc.TransientWorkflow. GetActivityByName("sActivity1")).Activities.Add(activity); this.ApplyWorkflowChanges(wc);activity — это ваш Activity, созданный динамически.
Можно добавлять напрямую в рабочий процесс:
WorkflowChanges wc = new WorkflowChanges(this); wc.TransientWorkflow.Activities.Insert(1,activity); this.ApplyWorkflowChanges(wc);activity — это ваш Activity, созданный динамически. 1 — позиция в дереве Activity для вставки.
Хотите продвинуть свой бизнес или просто создать личный сайт? разработка сайтов от WebАкула — ваш выбор.