Compartir a través de


Argumentos necesarios y grupos de sobrecarga

Este tema es aplicable a Windows Workflow Foundation 4.

Se pueden configurar las actividades de manera que sea necesario enlazar algunos argumentos para que la actividad pueda ejecutarse. El atributo RequiredArgument se usa para indicar que se necesitan algunos argumentos en una actividad mientras que el atributo OverloadGroup se usa para agrupar categorías de argumentos necesarios. Al usar los atributos, los autores de actividades pueden proporcionar configuraciones simples o complejas de validación de actividades.

Usar argumentos necesarios

Para usar el atributo RequiredArgument en una actividad, indique los argumentos que desee mediante RequiredArgumentAttribute. En este ejemplo, una actividad Add se define con dos argumentos necesarios.

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

En XAML, los argumentos necesarios también se indican mediante RequiredArgumentAttribute. En este ejemplo, la actividad Add se define con tres argumentos y usa una actividad Assign para realizar la operación de suma.

<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>

Si se usa la actividad y no se enlaza ninguno de los argumentos necesarios, se devuelve el siguiente error de validación.

No se proporcionó el valor para un argumento de actividad necesario 'Operand1'.
Ee358733.note(es-es,VS.100).gifNota:
Para obtener más información sobre la comprobación y administración de advertencias y errores de validación, vea Invocar validación de actividad.

Usar grupos de sobrecargas

Los grupos de sobrecargas proporcionan un método para indicar qué combinaciones de argumentos son válidas en una actividad. Los argumentos se agrupan mediante OverloadGroupAttribute. A cada grupo se le proporciona un nombre especificado por OverloadGroupAttribute. La actividad es válida cuando se enlaza sólo un conjunto de argumentos en un grupo de sobrecargas. En el ejemplo siguiente, se define una clase CreateLocation.

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

El objetivo de esta actividad es especificar una ubicación en los EE. UU. Para ello, el usuario de la actividad puede especificar la ubicación con uno de los tres grupos de argumentos. Para especificar las combinaciones válidas de argumentos, se definen tres grupos de sobrecargas. G1 contiene los argumentos Longitude y Latitude. G2 contiene Street, Cityy State. G3 contiene Street y Zip. Name también es un argumento necesario, aunque no forma parte de un grupo de sobrecargas. Para que esta actividad sea válida, Name tendría que estar enlazado con todos los argumentos de uno y sólo un grupo de sobrecargas.

Un grupo de sobrecargas no puede ser un subconjunto o un conjunto equivalente de otro grupo de sobrecargas. La única excepción a esta regla es un subconjunto que sólo contiene argumentos donde RequiredArgument es false. Los grupos de sobrecargas se pueden superponer pero es un error si la intersección de los grupos contiene todos los argumentos necesarios de uno o ambos grupos de sobrecargas. Se considera que un grupo de sobrecargas está enlazado si se enlazan todos los argumentos RequiredArgument en el grupo. Si un grupo no tiene ningún argumento RequiredArgument pero tiene enlazado al menos uno, se considera que el grupo está enlazado. Es un error si no se enlaza ninguno de los grupos a menos que un grupo de sobrecargas no tenga ningún argumento RequiredArgument en él. No se permite enlazar los argumentos RequiredArgument de más de un grupo de sobrecargas. Es un error tener enlazado más de un grupo de sobrecargas; es decir, se enlazan todos los argumentos necesarios en un grupo de sobrecargas y también se enlaza cualquier argumento en otro grupo de sobrecargas.