Можно ли запланировать динамически создаваемое дочернее действие

Кто-нибудь знает, возможно ли в собственном действии WF4 запланировать динамически создаваемое дочернее действие? Действие принимает аргументы, которые определяют дочернее действие, которое нужно создать и запустить. Я столкнулся с проблемами CacheMetadata.


person Jimit    schedule 05.10.2011    source источник


Ответы (2)


Это невозможно, но вы можете использовать поддержку InvokeWorkflow / LoadActivity, которую я встроил в Microsoft.Activities. См. Как вызвать дочерний рабочий процесс как XAML

person Ron Jacobs    schedule 06.10.2011
comment
Спасибо, Рон. Это похоже на решение, которое я использую сейчас. Однако в идеале я бы хотел, чтобы дочернее действие каким-то образом было внедрено в существующий рабочий процесс, чтобы использовать существующие расширения рабочего процесса и т. Д. - person Jimit; 14.12.2011
comment
Во время выполнения невозможно изменить дерево действий. Вы можете передать расширения в WorkflowInvoker, который вызывает дочерний рабочий процесс. - person Ron Jacobs; 16.12.2011

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

protected override void Execute(NativeActivityContext context)
{
    context.ScheduleActivity(new MyActivity());
}

К сожалению, то же самое касается обработчика ActivityAction. или ActivityFunc. Они также должны быть установлены и представлены среде выполнения во время вызова CacheMetadata.

Единственное возможное решение - реализовать IActivityTemplateFactory и обеспечьте некоторую реализацию дочернего действия во время разработки, когда оно помещается на поверхность конструктора, и, возможно, обновите своего дочернего элемента во время вызовов CacheMetadata, изучив текущий рабочий процесс и ответив соответствующим образом, прежде чем регистрировать дочерний элемент в среде выполнения.

person Community    schedule 05.10.2011
comment
Поправьте меня, если я ошибаюсь, но я не думаю, что это сработает для действий, которые загружаются из сборок, обнаруженных во время выполнения (или из незакрепленного XAML). Было бы здорово, если бы это можно было сделать таким образом, однако, поскольку я пытаюсь избежать маршрута WorkflowInvoker - я хочу, чтобы дочерние действия были загружены в существующий рабочий процесс, чтобы извлечь выгоду из уже загруженных расширений и т. Д. Однако изучение текущего рабочего процесса во время выполнения и соответствующих действий во время CacheMetadata звучит многообещающе. Тип активности для загрузки устанавливается во время разработки, но в настоящее время не загружается, пока не потребуется во время выполнения. - person Jimit; 14.12.2011