Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Действия можно настроить таким образом, чтобы определенные аргументы должны быть привязаны для действия, допустимого для выполнения. Атрибут RequiredArgument
используется для указания того, что некоторые аргументы действия обязательны, а OverloadGroup
атрибут используется для группирования категорий обязательных аргументов вместе. С помощью атрибутов авторы действий могут предоставлять простые или сложные конфигурации проверки действий.
Использование обязательных аргументов
Чтобы использовать RequiredArgument
атрибут в действии, укажите нужные аргументы.RequiredArgumentAttribute В этом примере определяется Add
операция с двумя обязательными аргументами.
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);
}
}
В XAML обязательные аргументы также указываются с помощью RequiredArgumentAttribute. В этом примере Add
действие определяется с помощью трех аргументов и использует Assign<T> действие для выполнения операции добавления.
<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>
Если действие используется и любой из обязательных аргументов не привязан, возвращается следующая ошибка проверки.
Значение для требуемого аргумента действия "Operand1" не было предоставлено.
Замечание
Дополнительные сведения о проверке и обработке ошибок проверки и предупреждений см. в разделе "Вызов проверки действия".
Использование групп перегрузки
Группы перегрузки предоставляют метод для указания того, какие сочетания аргументов допустимы в действии. Аргументы группируются вместе с помощью OverloadGroupAttribute. Каждой группе присваивается имя, указанное параметром OverloadGroupAttribute. Действие допустимо, если привязан только один набор аргументов в группе перегрузки. В следующем примере определяется класс 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; }
}
Цель этого действия — указать расположение в США. Для этого пользователь действия может указать расположение с помощью одной из трех групп аргументов. Чтобы указать допустимые сочетания аргументов, определяются три группы перегрузки.
G1
содержит аргументы Latitude
и Longitude
.
G2
содержит Street
, City
и State
.
G3
содержит Street
и Zip
.
Name
также является обязательным аргументом, но он не является частью группы перегрузки. Чтобы это действие было допустимым, Name
должно быть связано со всеми аргументами из одной и только одной группы перегрузки.
В следующем примере, взятом из примера действий доступа к базе данных , существует две группы перегрузки: ConnectionString
и ConfigFileSectionName
. Чтобы это действие было допустимым, должны быть привязаны либо аргументы ProviderName
и ConnectionString
, либо аргумент ConfigName
, но не оба варианта одновременно.
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; }
}
При определении группы перегрузки:
Группа перегрузки не может быть подмножеством или эквивалентным набором другой группы перегрузки.
Замечание
Существует одно исключение из этого правила. Если группа перегрузки является подмножеством другой группы перегрузки, и подмножество содержит только аргументы, где
RequiredArgument
являетсяfalse
, то эта группа перегрузки допустима.Группы перегрузки могут перекрываться, но если пересечение групп содержит все необходимые аргументы хотя бы одной или обеих групп перегрузки, это считается ошибкой. В предыдущем примере группы перегрузки
G2
иG3
перекрывались, но поскольку пересечение не содержало всех аргументов одной из групп или обеих, это было допустимо.
При привязке аргументов в группе перегрузки:
- Группа перегрузки считается привязанной, если все
RequiredArgument
аргументы в группе привязаны. - Если группа имеет ноль
RequiredArgument
аргументов и по крайней мере один связанный аргумент, то группа считается привязанной. - Это ошибка проверки, если группы перегрузки не привязаны, за исключением случая, когда одна из групп перегрузки не имеет аргументов
RequiredArgument
. - Это ошибка, связанная с несколькими группами перегрузки, то есть все необходимые аргументы в одной группе перегрузки привязаны, а любой аргумент в другой группе перегрузки также привязан.