Freigeben über


Erforderliche Argumente und Überladungsgruppen

Dieses Thema gilt für Windows Workflow Foundation 4.

Aktivitäten können so konfiguriert werden, dass bestimmte Argumente gebunden werden müssen, wenn die Ausführung der Aktivität gültig sein soll. Das RequiredArgument-Attribut wird verwendet, um anzugeben, dass bestimmte Argumente für eine Aktivität erforderlich sind. Mit dem OverloadGroup-Attribut werden die Kategorien erforderlicher Argumente zusammen anzuordnen. Mit diesen Attributen können Aktivitätsautoren einfache oder komplexe Konfigurationen für die Aktivitätsvalidierung bereitstellen.

Verwenden von erforderlichen Argumenten

Damit das RequiredArgument-Attribut in einer Aktivität verwendet werden kann, geben Sie die gewünschten Argumente mit RequiredArgumentAttribute an. In diesem Beispiel wird eine Add-Aktivität definiert, die über zwei erforderliche Argumente verfügt.

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

In XAML werden erforderliche Argumente auch durch die Verwendung des RequiredArgumentAttribute-Objekts angegeben. In diesem Beispiel wird die Add-Aktivität mit drei Argumenten definiert. Sie verwendet eine Assign-Aktivität, um den Hinzufügevorgang auszuführen.

<Activity x:Class="ValidationDemo.Add" ...>
  <x:Members>
    <x:Property Name="Operand1" Type="InArgument(x:Int32)">
      <x:Property.Attributes>
        <RequiredArgumentAttribute />
      </x:Property.Attributes>
    </x:Property>
    <x:Property Name="Operand2" Type="InArgument(x:Int32)">
      <x:Property.Attributes>
        <RequiredArgumentAttribute />
      </x:Property.Attributes>
    </x:Property>
    <x:Property Name="Result" Type="OutArgument(x:Int32)" />
  </x:Members>
  <Assign>
    <Assign.To>
      <OutArgument x:TypeArguments="x:Int32">[Result]</OutArgument>
    </Assign.To>
    <Assign.Value>
      <InArgument x:TypeArguments="x:Int32">[Operand1 + Operand2]</InArgument>
    </Assign.Value>
  </Assign>
</Activity>

Wenn die Aktivität verwendet wird und eines der beiden erforderlichen Argumente nicht gebunden ist, wird der folgende Validierungsfehler zurückgegeben.

Für das erforderliche Aktivitätsargument 'Operand1' wurde kein Wert angegeben.
Ee358733.note(de-de,VS.100).gifHinweis:
Weitere Informationen über Überprüfen und Behandeln von Validierungsfehlern und -warnungen finden Sie unter Aufrufen der Aktivitätsvalidierung.

Verwenden von Überladungsgruppen

Überladungsgruppen bieten eine Methode zum Angeben der Argumentkombinationen, die in einer Aktivität gültig sind. Argumente werden mit OverloadGroupAttribute zusammen angeordnet. Jeder Gruppe erhält einen Namen, der vom OverloadGroupAttribute-Objekt angegeben wird. Die Aktivität ist gültig, wenn nur ein Satz von Argumenten in einer Überladungsgruppe gebunden wird. Im folgenden Beispiel wird eine CreateLocation-Klasse definiert.

class CreateLocation: Activity
{
    [RequiredArgument]
    public InArgument<string> Name { get; set; }
   
    public InArgument<string> Description { get; set; }

    [RequiredArgument]
    [OverloadGroup("G1")]
    public InArgument<int> Latitude { get; set; }
    
    [RequiredArgument]
    [OverloadGroup("G1")]
    public InArgument<int> Longitude { get; set; }

    [RequiredArgument]
    [OverloadGroup("G2")][OverloadGroup("G3")]
    public InArgument<string> Street { get; set; }

    [RequiredArgument]
    [OverloadGroup("G2")]
    public InArgument<string> City { get; set; }

    [RequiredArgument]
    [OverloadGroup("G2")]
    public InArgument<string> State { get; set; }
    
    [RequiredArgument]
    [OverloadGroup("G3")]
    public InArgument<int> Zip { get; set; }                
}

Ziel dieser Aktivität ist es, einen Standort in den USA anzugeben. Hierzu kann der Benutzer der Aktivität den Standort mithilfe von drei Argumentgruppen angeben. Es werden drei Überladungsgruppen definiert, um die gültigen Argumentkombinationen anzugeben. G1 enthält das Latitude-Argument und das Longitude-Argument. G2 enthält Street, City und State. G3 enthält Street und Zip. Name ist ebenfalls ein erforderliches Argument, es gehört jedoch nicht zu einer Überladungsgruppe. Damit diese Aktivität gültig ist, müsste Name zusammen mit allen Argumenten aus einer (und nur einer) der Überladungsgruppen gebunden werden.

Eine Überladungsgruppe darf keine Teilmenge bzw. kein äquivalenter Satz einer anderen Überladungsgruppe sein. Die einzige Ausnahme dieser Regel ist eine Teilmenge, die nur Argumente enthält, wobei RequiredArgument auf false festgelegt ist. Überladungsgruppen können sich überschneiden. Dabei tritt jedoch ein Fehler auf, wenn die Schnittmenge der Gruppen alle erforderlichen Argumente einer oder beider Überladungsgruppen enthält. Eine Überladungsgruppe wird als gebunden angesehen, wenn alle RequiredArgument-Argumente in der Gruppe gebunden sind. Wenn eine Gruppe über 0 RequiredArgument-Argumente verfügt und mindestens ein Argument gebunden ist, wird die Gruppe als gebunden betrachtet. Es tritt ein Fehler auf, wenn keine der Gruppen gebunden ist, es sei denn eine Überladungsgruppe enthält keine RequiredArgument-Argumente. Das Binden von RequiredArgument-Argumenten aus mehr als einer Überladungsgruppe ist nicht zulässig. Es tritt ein Fehler auf, wenn mehr als eine Überladungsgruppe gebunden ist, d. h., wenn alle erforderlichen Argumente in einer Überladungsgruppe gebunden sind und zusätzlich ein weiteres Argument in einer anderen Überladungsgruppe gebunden ist.