Argumentos necesarios y grupos de sobrecarga
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<T> 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'.
Nota
Para más información sobre cómo comprobar y controlar advertencias y errores de validación, consulte 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 asigna un nombre que OverloadGroupAttribute especifica. La actividad es válida cuando solo se enlaza un conjunto de argumentos en un grupo de sobrecarga. 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 Latitude
y Longitude
. G2
contiene Street
, City
y State
. G3
contiene Street
y Zip
. Name
también es un argumento necesario, pero 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 solo un grupo de sobrecargas.
En el ejemplo siguiente, tomando del ejemplo Actividades de acceso a bases de datos, hay dos grupos de sobrecarga: ConnectionString
y ConfigFileSectionName
. Para que esta actividad sea válida, los argumentos ProviderName
y ConnectionString
deben estar enlazados, o el argumento ConfigName
, pero no ambos.
public class DbUpdate: AsyncCodeActivity
{
[RequiredArgument]
[OverloadGroup("ConnectionString")]
[DefaultValue(null)]
public InArgument<string> ProviderName { get; set; }
[RequiredArgument]
[OverloadGroup("ConnectionString")]
[DependsOn("ProviderName")]
[DefaultValue(null)]
public InArgument<string> ConnectionString { get; set; }
[RequiredArgument]
[OverloadGroup("ConfigFileSectionName")]
[DefaultValue(null)]
public InArgument<string> ConfigName { get; set; }
[DefaultValue(null)]
public CommandType CommandType { get; set; }
[RequiredArgument]
public InArgument<string> Sql { get; set; }
[DependsOn("Sql")]
[DefaultValue(null)]
public IDictionary<string, Argument> Parameters { get; }
[DependsOn("Parameters")]
public OutArgument<int> AffectedRecords { get; set; }
}
Al definir un grupo de sobrecargas:
Un grupo de sobrecargas no puede ser un subconjunto o un conjunto equivalente de otro grupo de sobrecargas.
Nota:
Hay una excepción para esta regla. Si un grupo de sobrecargas es un subconjunto de otro grupo de sobrecargas y el subconjunto solo contiene argumentos donde
RequiredArgument
esfalse
, el grupo de sobrecargas es válido.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. En el ejemplo anterior los grupos de sobrecargas
G2
yG3
se superponían, pero como la intersección no contenía todos los argumentos de uno o ambos grupos, era válido.
Al enlazar argumentos en un grupo 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 de validación si no se enlaza ningún grupo de sobrecargas a menos que un grupo de sobrecargas no tenga ningún argumento
RequiredArgument
.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.