共用方式為


必要的參數和多載群組

您可以設定活動,讓某些自變數必須系結,活動才能有效執行。 屬性 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 包含 LatitudeLongitude 自變數。 G2 包含 StreetCityStateG3 包含 StreetZipName 也是必要的自變數,但它不是多載群組的一部分。 若要讓此活動有效,Name 必須與恰好一個多載群組中的所有參數系結在一起。

在下列範例中,取自 資料庫存取活動 範例中,有兩個多載群組: ConnectionStringConfigFileSectionName。 若要讓此活動有效,ProviderNameConnectionString 引數必須被綁定,或者 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的自變數,則多載群組有效。

  • 多載群組可以重疊,但如果群組的交集包含一或兩個多載群組的所有必要自變數,就會發生錯誤。 在上一個範例中, G2G3 多載群組重疊,但因為交集未包含其中一個或兩個群組的所有自變數,這是有效的。

當多載群組中的系結自變數時:

  • 如果群組中的所有 RequiredArgument 自變數都系結,則會將多載群組視為系結。
  • 如果群組具有零 RequiredArgument 個自變數,且至少有一個自變數系結,則會將群組視為系結。
  • 如果沒有重載群組被綁定,這會是驗證錯誤,除非其中一個重載群組沒有 RequiredArgument 參數。
  • 有多個重載群組綁定的錯誤,那就是說,一個重載群組中的所有必要參數都被綁定,而另一個重載群組中的任何參數也被綁定。