Megosztás a következőn keresztül:


Kifejezések (WF)

A Windows Workflow Foundation (WF) kifejezés minden olyan tevékenység, amely eredményt ad vissza. Minden kifejezési tevékenység közvetett módon származik a tevékenység visszatérési értékeként elnevezett Result tulajdonságból.Activity<TResult>OutArgument A WF számos kifejezési tevékenységgel rendelkezik az olyan egyszerűektől, mint az VariableValue<T> VariableReference<T>és – operátori tevékenységeken keresztül – az önálló munkafolyamat-változókhoz való hozzáférést biztosító, összetett tevékenységekhez, mint például VisualBasicReference<TResult> VisualBasicValue<TResult> a Visual Basic nyelv teljes szélességéhez való hozzáférés az eredmény eléréséhez. További kifejezési tevékenységek hozhatók létre a forrásból CodeActivity<TResult> vagy NativeActivity<TResult>a .

Kifejezések használata

A munkafolyamat-tervező a Visual Basic-projektekben és VisualBasicReference<TResult> a C# munkafolyamat-projektekben lévő kifejezésekhez használja és CSharpReference<TResult> CSharpValue<TResult> használja VisualBasicValue<TResult> az összes kifejezést.

Feljegyzés

A munkafolyamat-projektek C#-kifejezéseinek támogatása a .NET-keretrendszer 4.5-ben jelent meg. További információ: C#-kifejezések.

A tervező által létrehozott munkafolyamatok XAML-ben vannak mentve, ahol a kifejezések szögletes zárójelben jelennek meg, ahogyan az alábbi példában is látható.

<Sequence xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Sequence.Variables>
    <Variable x:TypeArguments="x:Int32" Default="1" Name="a" />
    <Variable x:TypeArguments="x:Int32" Default="2" Name="b" />
    <Variable x:TypeArguments="x:Int32" Default="3" Name="c" />
    <Variable x:TypeArguments="x:Int32" Default="0" Name="r" />
  </Sequence.Variables>
  <Assign>
    <Assign.To>
      <OutArgument x:TypeArguments="x:Int32">[r]</OutArgument>
    </Assign.To>
    <Assign.Value>
      <InArgument x:TypeArguments="x:Int32">[a + b + c]</InArgument>
    </Assign.Value>
  </Assign>
</Sequence>

A munkafolyamat kódban való definiálásakor bármely kifejezési tevékenység használható. Az alábbi példa az operátori tevékenységek összetételének használatát mutatja be három szám hozzáadásához:

Variable<int> a = new Variable<int>("a", 1);
Variable<int> b = new Variable<int>("b", 2);
Variable<int> c = new Variable<int>("c", 3);
Variable<int> r = new Variable<int>("r", 0);

Sequence w = new Sequence
{
    Variables = { a, b, c, r },
    Activities =
    {
        new Assign {
            To = new OutArgument<int>(r),
            Value = new InArgument<int> {
                Expression = new Add<int, int, int> {
                    Left = new Add<int, int, int> {
                        Left = new InArgument<int>(a),
                        Right = new InArgument<int>(b)
                    },
                    Right = new InArgument<int>(c)
                }
            }
        }
    }
};

Ugyanez a munkafolyamat tömörebben fejezhető ki C# lambda kifejezésekkel, ahogy az alábbi példában is látható:

Variable<int> a = new Variable<int>("a", 1);
Variable<int> b = new Variable<int>("b", 2);
Variable<int> c = new Variable<int>("c", 3);
Variable<int> r = new Variable<int>("r", 0);

Sequence w = new Sequence
{
    Variables = { a, b, c, r },
    Activities =
    {
        new Assign {
            To = new OutArgument<int>(r),
            Value = new InArgument<int>((ctx) => a.Get(ctx) + b.Get(ctx) + c.Get(ctx))
        }
    }
};

Elérhető kifejezések kiterjesztése egyéni kifejezési tevékenységekkel

A .NET-keretrendszer 4.6.1-ben lévő kifejezések bővíthetőek, így további kifejezési tevékenységek hozhatók létre. Az alábbi példa egy olyan tevékenységet mutat be, amely három egész számból álló értéket ad vissza.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Activities;

namespace ExpressionsDemo
{
    public sealed class AddThreeValues : CodeActivity<int>
    {
        public InArgument<int> Value1 { get; set; }
        public InArgument<int> Value2 { get; set; }
        public InArgument<int> Value3 { get; set; }

        protected override int Execute(CodeActivityContext context)
        {
            return Value1.Get(context) +
                   Value2.Get(context) +
                   Value3.Get(context);
        }
    }
}

Ezzel az új tevékenységgel átírhatja az előző munkafolyamatot, amely három értéket adott hozzá az alábbi példában látható módon:

Variable<int> a = new Variable<int>("a", 1);
Variable<int> b = new Variable<int>("b", 2);
Variable<int> c = new Variable<int>("c", 3);
Variable<int> r = new Variable<int>("r", 0);

Sequence w = new Sequence
{
    Variables = { a, b, c, r },
    Activities =
    {
        new Assign {
            To = new OutArgument<int>(r),
            Value = new InArgument<int> {
                Expression = new AddThreeValues() {
                    Value1 = new InArgument<int>(a),
                    Value2 = new InArgument<int>(b),
                    Value3 = new InArgument<int>(c)
                }
            }
        }
    }
};

További információ a kifejezések kódban való használatáról: Munkafolyamatok, tevékenységek és kifejezések készítése imperatív kóddal.