2012-02-27 2 views
2

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

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

Я ищу способ проверить рабочий процесс до выполнения и попытаться разрешить аргументы. Я просмотрел класс 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, но в основном ничего не получается.

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

ответ

2

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

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

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

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

+0

Спасибо, Jota. Глупо, я на самом деле уже посмотрел на DynamicActivity в отношении вызова CacheMetadata, но полностью упустил коллекцию Properties. И да, я имел в виду разметку XAML, хранящуюся как текст в блобе. Еще раз спасибо. –

Смежные вопросы