Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В Windows Workflow Foundation (WF) переменные представляют хранилище данных и аргументов, представляющих поток данных в действие и из него. Действие содержит набор аргументов, и они составляют сигнатуру действия. Кроме того, действие может поддерживать список переменных, в которые разработчик может добавлять или удалять переменные во время разработки рабочего процесса. Аргумент привязан с помощью выражения, возвращающего значение.
Переменные
Переменные — это расположения хранилища для данных. Переменные объявляются как часть определения рабочего процесса. Переменные принимают значения во время выполнения, и эти значения хранятся в составе состояния экземпляра рабочего процесса. Определение переменной указывает тип переменной и при необходимости имя. В следующем коде показано, как объявить переменную, назначить ему значение с помощью Assign<T> действия, а затем отобразить его значение в консоли с помощью WriteLine действия.
// Define a variable named "str" of type string.
Variable<string> var = new Variable<string>
{
Name = "str"
};
// Declare the variable within a Sequence, assign
// a value to it, and then display it.
Activity wf = new Sequence()
{
Variables = { var },
Activities =
{
new Assign<string>
{
To = var,
Value = "Hello World."
},
new WriteLine
{
Text = var
}
}
};
WorkflowInvoker.Invoke(wf);
Выражение значения по умолчанию может быть указано как часть объявления переменной. Переменные также могут иметь модификаторы. Например, если переменная доступна только для чтения, можно применить модификатор только для VariableModifiers чтения. В следующем примере создается переменная только для чтения, которая имеет назначенное значение по умолчанию.
// Define a read-only variable with a default value.
Variable<string> var = new Variable<string>
{
Default = "Hello World.",
Modifiers = VariableModifiers.ReadOnly
};
Область переменных
Время существования переменной во время выполнения равно времени существования действия, объявляющего его. После завершения действия его переменные очищаются и к ним больше нельзя обращаться.
Аргументы
Авторы действий используют аргументы для определения способа входа и выхода данных в действие. Каждый аргумент имеет указанное направление: In, Outили InOut.
Среда выполнения рабочего процесса обеспечивает следующие гарантии по таймингу перемещения данных внутрь действий и наружу из них.
При запуске действия вычисляются значения всех входных и выходных аргументов. Например, независимо от того, когда Get вызывается, возвращаемое значение — это значение, вычисляемое средой выполнения до вызова
Execute.При Set вызове среда выполнения немедленно задает значение.
Аргументы могут быть опционально указаны EvaluationOrder. EvaluationOrder — это отсчитываемое от нуля значение, указывающее порядок вычисления аргумента. По умолчанию порядок оценки аргумента не указан и равен значению UnspecifiedEvaluationOrder . Задайте EvaluationOrder значение больше или равно нулю, чтобы указать порядок оценки для этого аргумента. Windows Workflow Foundation оценивает аргументы с указанным порядком оценки в порядке возрастания. Обратите внимание, что аргументы с неопределенным порядком оценки оцениваются перед аргументами с указанным порядком оценки.
Автор действия может использовать строго типизированный механизм для предоставления своих аргументов. Это достигается путем объявления свойств типа InArgument<T>, OutArgument<T>и InOutArgument<T>. Это позволяет создателю активности установить четкий контракт на данные, которые поступают в активность и выводятся из неё.
Определение аргументов для активности
Аргументы можно определить для действия, указав свойства типа InArgument<T>, OutArgument<T>и InOutArgument<T>. В следующем коде показано, как определить аргументы для действия, которое принимает строку для Prompt отображения пользователю и возвращает строку, содержащую ответ пользователя.
public class Prompt : Activity
{
public InArgument<string> Text { get; set; }
public OutArgument<string> Response { get; set; }
// Rest of activity definition omitted.
}
Замечание
Действия, возвращающие одно значение, могут быть производными от Activity<TResult>, NativeActivity<TResult>или CodeActivity<TResult>. Эти действия имеют четко определенный элемент OutArgument<T> с именем Result, который содержит возвращаемое значение действия.
Использование переменных и аргументов в рабочих процессах
В следующем примере показано, как в рабочем процессе используются переменные и аргументы. Рабочий процесс представляет собой последовательность, которая объявляет три переменных: var1, var2и var3. Первое действие в рабочем процессе — это Assign действие, которое назначает значение переменной var1 переменной var2. За этим следует WriteLine действие, которое выводит значение переменной var2 . Далее — это еще одно Assign действие, которое назначает значение переменной var2 переменной var3. Наконец, существует другое WriteLine действие, которое выводит значение переменной var3 . Первое Assign действие использует InArgument<string> и OutArgument<string> объекты, которые явно представляют привязки для аргументов действия.
InArgument<string> используется для Value, так как значение переходит в действие Assign<T> через его аргумент Value, а OutArgument<string> используется для To, так как значение выходит из аргумента To в переменную. Второе Assign действие выполняет то же самое с более компактным, но эквивалентным синтаксисом, который использует неявные преобразования. Действия WriteLine также используют компактный синтаксис.
// Declare three variables; the first one is given an initial value.
Variable<string> var1 = new Variable<string>()
{
Default = "one"
};
Variable<string> var2 = new Variable<string>();
Variable<string> var3 = new Variable<string>();
// Define the workflow
Activity wf = new Sequence
{
Variables = { var1, var2, var3 },
Activities =
{
new Assign<string>()
{
Value = new InArgument<string>(var1),
To = new OutArgument<string>(var2)
},
new WriteLine() { Text = var2 },
new Assign<string>()
{
Value = var2,
To = var3
},
new WriteLine() { Text = var3 }
}
};
WorkflowInvoker.Invoke(wf);
Использование переменных и аргументов в действиях Code-Based
В предыдущих примерах показано, как использовать аргументы и переменные в рабочих процессах и декларативных действиях. Аргументы и переменные также используются в действиях на основе кода. Использование по сути очень похоже. Переменные репрезентируют хранилище данных в действии, а аргументы — передачу данных в действие или из него. Автор рабочего процесса привязывает аргументы к другим переменным или аргументам так, чтобы они отражали, куда и откуда протекают данные в рабочем процессе. Чтобы получить или задать значение переменной или аргумента в действии, необходимо использовать контекст действия, представляющий текущую среду выполнения действия. Это передаётся в метод Execute действия средой выполнения рабочего процесса. В этом примере настраиваемое Add действие определяется с двумя In аргументами. Для доступа к значению аргументов Get используется метод и используется контекст, переданный средой выполнения рабочего процесса.
public sealed class Add : CodeActivity<int>
{
[RequiredArgument]
public InArgument<int> Operand1 { get; set; }
[RequiredArgument]
public InArgument<int> Operand2 { get; set; }
protected override int Execute(CodeActivityContext context)
{
return Operand1.Get(context) + Operand2.Get(context);
}
}
Дополнительные сведения о работе с аргументами, переменными и выражениями в коде см. в статье "Создание рабочих процессов, действий и выражений с использованием императивного кода и обязательных аргументов и групп перегрузки".