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

У меня есть рабочий процесс .net 4.0, который я размещаю сам (только с WorkflowInstance.Run), и когда я повторно гидратирую рабочий процесс, я хотел бы инициализировать некоторые из его внутренних аргументов, чтобы последующие действия могли использовать эти значения ... Как я могу делать это?


person Adam    schedule 06.09.2009    source источник


Ответы (2)


используйте аргументы (In / OutArgument) для определения ввода или вывода для рабочего процесса (действия тоже).

вот пример синтаксиса ..

Dictionary <string, object> input = new Dictionary <string, object> (); 
input.Add( "UserName" , userName); 
input.Add ( "UserName", userName); 
WorkflowInstance myInstance = new WorkflowInstance(
new WorkflowConsoleApplication2.Sequence1(),input); 

WorkflowInstance myInstance = new WorkflowInstance (
new WorkflowConsoleApplication2.Sequence1 (), input); 

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

person Jeeva Subburaj    schedule 07.09.2009
comment
Но это нельзя использовать, когда я загружаю существующий рабочий процесс, не так ли? Я бы использовал: WorkflowInstance.Load (WorkflowElement, PersistenceProvider) .. нет никакого переопределения, которое принимает словарь аргументов. Мое требование состоит в том, чтобы у меня не было всех аргументов до тех пор, пока рабочий процесс не достигнет какой-то точки ... затем я могу ввести их для следующих действий, чтобы использовать ... - person Adam; 08.09.2009

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

Например, у вас может быть InArgument input1, InArgument input2, OutArugment output, и когда вы создаете рабочий процесс, вы передаете все входы, а также переменную для рабочего процесса, в которой хранятся все выходы.

Когда рабочий процесс уже запущен, у него есть аргументы, и он не ожидает, что они изменятся из-за какого-то внешнего фактора. (И в случае, если это вызывает путаницу: обычно он не возобновляет выполнение в начале вашего рабочего процесса - он возобновится с какой-то произвольной закладки посередине.) Так как еще вы могли бы передавать данные в свой рабочий процесс. в середине исполнения?

Здесь я предлагаю взглянуть на действия по обмену сообщениями. Данные поступают в рабочий процесс по значению OutArgument для ReceiveMessage. Как он туда попал? Это было установлено действием получения. Но как действие получения заставило его установить его? Итак, сначала хост службы сообщает о возобновлении действия приема, потому что у него есть сообщение. Затем действие получения говорит: "Какое сообщение я получил?" Никто не помещал в него данные волшебным образом, вместо этого после активации действия он знает, как извлечь данные из очереди.

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

person Tim Lovell-Smith    schedule 11.10.2009