Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As atividades podem ser configuradas para que determinados argumentos sejam obrigados a serem associados para que a atividade seja válida para execução. O RequiredArgument atributo é usado para indicar que determinados argumentos em uma atividade são necessários e o OverloadGroup atributo é usado para agrupar categorias de argumentos necessários juntos. Usando os atributos, os autores de atividade podem fornecer configurações de validação de atividade simples ou complexas.
Use argumentos necessários
Para usar o RequiredArgument atributo em uma atividade, indique os argumentos desejados usando RequiredArgumentAttribute. Neste exemplo, uma Add atividade é definida que tem dois argumentos necessários.
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);
}
}
No XAML, os argumentos necessários também são indicados usando RequiredArgumentAttribute. Neste exemplo, a Add atividade é definida usando três argumentos e usa uma Assign<T> atividade para executar a operação de adição.
<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>
Se a atividade for usada e qualquer um dos argumentos necessários não estiver vinculado, o erro de validação a seguir será retornado.
O valor de um argumento de atividade necessário 'Operand1' não foi fornecido.
Observação
Para obter mais informações sobre como verificar e lidar com erros e avisos de validação, consulte Invocando validação de atividade.
Usar grupos de sobrecarga
Os grupos de sobrecarga fornecem um método para indicar quais combinações de argumentos são válidas em uma atividade. Os argumentos são agrupados usando OverloadGroupAttribute. Cada grupo recebe um nome especificado pelo OverloadGroupAttribute. A atividade é válida quando só um conjunto de argumentos em um grupo de sobrecarga está vinculado. No exemplo a seguir, uma CreateLocation classe é definida.
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; }
}
O objetivo dessa atividade é especificar um local nos EUA. Para fazer isso, o usuário da atividade pode especificar o local usando um dos três grupos de argumentos. Para especificar as combinações válidas de argumentos, três grupos de sobrecarga são definidos. G1 contém os Latitude argumentos e Longitude . G2 contém Street, Citye State. G3 contém Street e Zip. Name também é um argumento necessário, mas não faz parte de um grupo de sobrecarga. Para que esta atividade é válida, Name terá que ser associado junto com todos os argumentos de um e somente um grupo de sobrecarga.
No exemplo a seguir, extraído do exemplo de Atividades de Acesso ao Banco de Dados , há dois grupos de sobrecarga: ConnectionString e ConfigFileSectionName. Para que essa atividade seja válida, os argumentos ProviderName e ConnectionString devem ser associados, ou o argumento ConfigName, mas não 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; }
}
Ao definir um grupo de sobrecarga:
Um grupo de sobrecarga não pode ser um subconjunto ou um conjunto equivalente de outro grupo de sobrecarga.
Observação
Há uma exceção a essa regra. Se um grupo de sobrecarga for um subconjunto de outro grupo de sobrecarga e o subconjunto contiver apenas argumentos em que
RequiredArgumentestiverfalse, o grupo de sobrecarga será válido.Grupos de sobrecarga podem sobrepor mas é um erro se a interseção de grupos contém todos os argumentos necessários de um ou ambos os grupos de sobrecarga. No exemplo anterior, os grupos de sobrecarga
G2eG3se sobrepunham, mas como a interseção não continha todos os argumentos de um ou ambos os grupos, isso era válido.
Ao associar argumentos em um grupo de sobrecarga:
- Um grupo de sobrecarga será considerado ligado se todos os
RequiredArgumentargumentos no grupo estiverem ligados. - Se um grupo tem os argumentos de
RequiredArgumentzero e pelo menos um argumento associado, então o grupo está sendo associado. - É um erro de validação se nenhum grupo de sobrecarga é associado a menos que um grupo de sobrecarga não tem nenhum argumento de
RequiredArgumentnele. - É um erro ter mais de um grupo de sobrecarga associado, ou seja, todos os argumentos necessários em um grupo de sobrecarga são associados e qualquer argumento em outro grupo de sobrecarga também está associado.