Событие WF4 Rehosted Designer OnActivityAdded? - PullRequest
4 голосов
/ 11 июля 2011

Я смотрю на переназначение дизайнера рабочего процесса.Я хочу иметь возможность запускать некоторый код всякий раз, когда пользователь добавляет активность в опрос дизайнера.Есть ли событие, которое срабатывает, когда пользователь добавляет действие во время разработки?Или есть событие, которое я могу потреблять?Спасибо!

1 Ответ

3 голосов
/ 14 июля 2011

Для тех, кто может наткнуться на это, вот что я понял ...

Прежде всего, при создании дизайнера рабочих процессов необходимо подписаться на событие ModelChanged.

        _workflowDesigner = new WorkflowDesigner();
        _workflowDesigner.Load(new Sequence());

        ModelService ms = _workflowDesigner.Context.Services.GetService<ModelService>();
        if (ms != null)
            ms.ModelChanged += new EventHandler<ModelChangedEventArgs>(ms_ModelChanged);

Мой обработчик событий выглядит так ...

    void ms_ModelChanged(object sender, ModelChangedEventArgs e)
    {
        if (e.ItemsAdded != null && e.ItemsAdded.Count<ModelItem>() == 1)
        {
            ModelItem item = e.ItemsAdded.FirstOrDefault<ModelItem>();
            var test = item.GetCurrentValue() as MyActivityType;

            if (test != null && test.Id == null)
            {
                //do whatever initialization logic is needed here
            }
        }
    }

Мне нужно отдать должное этому источнику за то, что он указал мне правильное направление.

Одна вещь, о которой следует быть осторожным - при перемещении действия внутри модели возникают два события: удаление и добавление. На данный момент мне не нужно беспокоиться о том, добавляю ли я или перемещаю действие, так как могу сказать, было ли оно инициализировано, но если вам нужно узнать, действительно ли что-то было добавлено в модель, вам может понадобиться для отслеживания обоих событий.

...