Определение аргументов рабочего процесса во время выполнения до выполнения - PullRequest
2 голосов
/ 27 февраля 2012

Есть ли способ определить аргументы рабочего процесса до его выполнения?

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

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

В идеале я хотел бы построить рабочий процесс из метаданных, хранящихся в базе данных, используя что-то вроде:

var workflow = ActivityXamlServices.Load(new XamlReader(new StringReader(xamlText)));
var metadata = SomeUnknownMagicClass.Inspect(workflow);

var inputs = new Dictionary<string, object>()
forreach(var argument in metadata.Arguments)
{
    inputs.Add(argument.Name, MagicArgumentResolver.Resolve(argument.Name));
}

WorflowInvoker.Invoke(workflow, inputs);

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

Спасибо за любую помощь.

1 Ответ

2 голосов
/ 28 февраля 2012

Полагаю, что когда вы говорите о метаданных, хранящихся в базе данных , вы ссылаетесь на XAML от дизайнера.

Вы можете загрузить этот XAML как DynamicActivity примерно так:

using (var reader = new StringReader(xamlString))
{
    var dynActivity = 
        ActivityXamlServices.Load(reader) as DynamicActivity;
}

Затем вы получите доступ ко всем его аргументам через DynamicActivity.Properties .

...