共用方式為


必要引數與多載群組

本主題僅適用於 Windows Workflow Foundation 4。

您可以設定活動,讓繫結活動所需的某些引數有效,以便用於執行。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 活動來執行加入作業。

<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' 的值。
Ee358733.note(zh-tw,VS.100).gif注意:
如需詳細資訊關於檢查與處理驗證錯誤及警告的詳細資訊,請參閱叫用活動驗證

使用多載群組

多載群組提供方法,指出活動中哪些引數組合是有效的。引數會使用 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 必須繫結來自同一個多載群組的所有引數。

多載群組不得為其他多載群組的子集或對等的多載群組。這個規則唯一的例外是只包含引數的子集,其中 RequiredArgumentfalse。多載群組可以重疊,但是如果群組交集範圍內包含一個或兩個多載群組所需的全部引數,則會是錯誤。如果群組中所有的 RequiredArgument 引數已繫結,則將多載群組視為已繫結。如果群組沒有任何 RequiredArgument 引數,而且至少有一個引數已繫結,則將群組視為已繫結。如果沒有群組已繫結,則表示這是錯誤,除非有一個多載群組之中未包含任何 RequiredArgument 引數。不允許從多個多載群組繫結 RequiredArgument 引數。繫結多個多載群組 (也就是說,一個多載群組中所需的所有引數皆已繫結,而且其他多載群組中所有引數也已繫結) 是錯誤的。