您可以設定活動,讓某些自變數必須系結,活動才能有效執行。 屬性 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; }
}
定義多載群組時:
多載群組不能是另一個多載群組的子集或對等集合。
備註
此規則有一個例外狀況。 如果多載群組是另一個多載群組的子集,而子集只包含 為
RequiredArgumentfalse的自變數,則多載群組有效。多載群組可以重疊,但如果群組的交集包含一或兩個多載群組的所有必要自變數,就會發生錯誤。 在上一個範例中,
G2和G3多載群組重疊,但因為交集未包含其中一個或兩個群組的所有自變數,這是有效的。
當多載群組中的系結自變數時:
- 如果群組中的所有
RequiredArgument自變數都系結,則會將多載群組視為系結。 - 如果群組具有零
RequiredArgument個自變數,且至少有一個自變數系結,則會將群組視為系結。 - 如果沒有重載群組被綁定,這會是驗證錯誤,除非其中一個重載群組沒有
RequiredArgument參數。 - 有多個重載群組綁定的錯誤,那就是說,一個重載群組中的所有必要參數都被綁定,而另一個重載群組中的任何參數也被綁定。