Sdílet prostřednictvím


Proměnné a argumenty

Ve Windows Workflow Foundation (WF) proměnné představují úložiště dat a argumenty představují tok dat do a mimo aktivitu. Aktivita má sadu argumentů a tvoří podpis aktivity. Kromě toho může aktivita udržovat seznam proměnných, do kterých může vývojář přidávat nebo odebírat proměnné během návrhu pracovního postupu. Argument je vázán pomocí výrazu, který vrací hodnotu.

Proměnné

Proměnné jsou umístění úložiště pro data. Proměnné jsou deklarovány jako součást definice pracovního postupu. Proměnné zabírají hodnoty za běhu a tyto hodnoty se ukládají jako součást stavu instance pracovního postupu. Definice proměnné určuje typ proměnné a volitelně název. Následující kód ukazuje, jak deklarovat proměnnou, přiřadit jí hodnotu pomocí Assign<T> aktivity a pak zobrazit její hodnotu konzole pomocí WriteLine aktivity.

// 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);  

Jako součást deklarace proměnné lze volitelně zadat výchozí výraz hodnoty. Proměnné mohou mít také modifikátory. Pokud je například proměnná jen pro čtení, lze použít modifikátor jen VariableModifiers pro čtení. V následujícím příkladu se vytvoří proměnná jen pro čtení, která má přiřazenou výchozí hodnotu.

// Define a read-only variable with a default value.  
Variable<string> var = new Variable<string>  
{  
    Default = "Hello World.",  
    Modifiers = VariableModifiers.ReadOnly  
};  

Rozsah proměnných

Životnost proměnné za běhu se rovná životnosti aktivity, která ji deklaruje. Po dokončení aktivity se jeho proměnné vyčistí a už se na je nedají odkazovat.

Argumenty

Autoři aktivit používají argumenty k definování způsobu, jakým data proudí do a z aktivity. Každý argument má zadaný směr: In, Outnebo InOut.

Modul runtime pracovního postupu zaručuje následující záruky týkající se načasování přesunu dat do aktivit a mimo aktivity:

  1. Při spuštění aktivity se vypočítají hodnoty všech vstupních a výstupních argumentů. Například bez ohledu na to, kdy Get je volána, je vrácená hodnota vypočítaná modulem runtime před jeho vyvoláním Execute.

  2. Při Set zavolání modul runtime nastaví hodnotu okamžitě.

  3. Argumenty můžou mít EvaluationOrder volitelně zadané. EvaluationOrder je hodnota založená na nule, která určuje pořadí, ve kterém je argument vyhodnocen. Ve výchozím nastavení je pořadí vyhodnocení argumentu nezadané a rovná se hodnotě UnspecifiedEvaluationOrder . Pokud chcete pro tento argument zadat pořadí vyhodnocení, nastavte EvaluationOrder hodnotu větší nebo rovno nule. Windows Workflow Foundation vyhodnocuje argumenty se zadaným pořadím vyhodnocení ve vzestupném pořadí. Všimněte si, že argumenty s nespecifikovaným pořadím vyhodnocení se vyhodnocují před argumenty se zadaným pořadím vyhodnocení.

Autor aktivity může použít mechanismus silného typu pro zveřejnění argumentů. Toho lze dosáhnout deklarací vlastností typu InArgument<T>, OutArgument<T>a InOutArgument<T>. To umožňuje autorovi aktivity vytvořit konkrétní kontrakt o datech probíhajících a mimo aktivitu.

Definování argumentů pro aktivitu

Argumenty lze definovat u aktivity zadáním vlastností typu InArgument<T>, OutArgument<T>a InOutArgument<T>. Následující kód ukazuje, jak definovat argumenty pro Prompt aktivitu, která přebírá řetězec k zobrazení uživateli a vrací řetězec, který obsahuje odpověď uživatele.

public class Prompt : Activity  
{  
    public InArgument<string> Text { get; set; }  
    public OutArgument<string> Response { get; set; }  
    // Rest of activity definition omitted.  
}  

Poznámka:

Aktivity, které vracejí jednu hodnotu, mohou být odvozeny z Activity<TResult>, NativeActivity<TResult>nebo CodeActivity<TResult>. Tyto aktivity mají dobře definovaný OutArgument<T> název Result , který obsahuje návratovou hodnotu aktivity.

Použití proměnných a argumentů v pracovních postupech

Následující příklad ukazuje, jak se proměnné a argumenty používají v pracovním postupu. Pracovní postup je posloupnost, která deklaruje tři proměnné: var1, var2a var3. První aktivita v pracovním postupu je Assign aktivita, která přiřadí hodnotu proměnné var1 proměnné proměnné var2. WriteLine Následuje aktivita, která vytiskne hodnotu var2 proměnné. Další je další Assign aktivita, která přiřadí hodnotu proměnné var2 proměnné proměnné var3proměnné . Nakonec existuje další WriteLine aktivita, která vytiskne hodnotu var3 proměnné. První Assign aktivita používá InArgument<string> a OutArgument<string> objekty, které explicitně představují vazby pro argumenty aktivity. InArgument<string> se používá, Value protože hodnota proudí do Assign<T> aktivity prostřednictvím argumentu Value a OutArgument<string> používá se pro To to, protože hodnota proudí z argumentu To do proměnné. Druhá Assign aktivita provádí stejnou věc s kompaktnější, ale ekvivalentní syntaxí, která používá implicitní přetypování. Aktivity WriteLine také používají kompaktní syntaxi.

// 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);  

Použití proměnných a argumentů v aktivitách založených na kódu

Předchozí příklady ukazují, jak používat argumenty a proměnné v pracovních postupech a deklarativních aktivitách. Argumenty a proměnné se také používají v aktivitách založených na kódu. Použití je koncepčně velmi podobné. Proměnné představují úložiště dat v rámci aktivity a argumenty představují tok dat do nebo mimo aktivitu a jsou vázány autorem pracovního postupu k jiným proměnným nebo argumentům v pracovním postupu, které představují toky dat do nebo z tohoto pracovního postupu. Chcete-li získat nebo nastavit hodnotu proměnné nebo argumentu v aktivitě, musí být použit kontext aktivity, který představuje aktuální spouštěcí prostředí aktivity. To se předává do Execute metody aktivity modulem runtime pracovního postupu. V tomto příkladu je definována vlastní Add aktivita, která má dva In argumenty. Pro přístup k hodnotě argumentů Get se použije metoda a použije se kontext předaný modulem runtime pracovního postupu.

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);  
    }  
}  

Další informace o práci s argumenty, proměnnými a výrazy v kódu naleznete v tématu Vytváření pracovních postupů, aktivit a výrazů pomocí imperativního kódu a požadovaných argumentů a skupin přetížení.