Переопределить активность в рабочем процессе? - PullRequest
0 голосов
/ 26 мая 2011

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

95% моих действий определены в бинарной библиотеке действий. Основную деятельность я собрал в визуальной студии.

Для определенных типов клиентов я хочу, чтобы действие на (скажем) шаге 25a велось не так, как я определил, когда создавал его. Мы могли бы загрузить активность из xaml, размещенного в базе данных.

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

Можно ли переопределить все, что среда выполнения использует для определения местоположения и упорядочения действий, чтобы, если мой клиент был левшой, вместо одного действия в рабочем процессе вместо того, что я определил в IDE?

Я думаю о том, как можно переопределить ViewEngine в mvc для динамической загрузки представлений ipad или чего-либо еще. Есть ли что-то похожее для загрузки?

Ответы [ 2 ]

1 голос
/ 26 мая 2011

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

  • Используйте динамически загружаемое действие, используя ActivityXamlServices.Load (), и поскольку XAML - это просто XML, измените XAML перед его загрузкой.
  • Используйте действие-оболочку в вашем рабочем процессе, которое загружает фактическое действие только во время выполнения и использует WorkflowInvoker для его выполнения.
  • Отделите намерение от реализации, используя действие и расширение. Действие захватывает только все входы и расширение и вызывает функцию для него. Во время выполнения вы можете варьировать фактическую реализацию расширения рабочего процесса в зависимости от ваших потребностей.
0 голосов
/ 27 мая 2011

Хорошие новости ... Я построил именно то, что вам нужно для этого в Microsoft.Деятельность. Подробнее см. WF4 Как вызвать дочерний рабочий процесс как XAML , и только вчера я добавил поддержку для отслеживания дочерних рабочих процессов, см. Отслеживание дочернего рабочего процесса с InvokeWorkflow

...