Добавление Activity в WorkFlow во время выполнения

При разработке рабочих процессов в 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Акула — ваш выбор.