Argomenti obbligatori e gruppi di overload
Le informazioni contenute in questo argomento sono valide per Windows Workflow Foundation 4.
Le attività possono essere configurate in modo che venga richiesta l'associazione di determinati argomenti affinché l'attività risulti valida per l'esecuzione. L'attributo RequiredArgument viene utilizzato per indicare che determinati argomenti di un'attività sono obbligatori mentre l'attributo OverloadGroup viene utilizzato per raggruppare insieme categorie di argomenti obbligatori. Tramite gli attributi, gli autori dell'attività possono fornire configurazioni di convalida di attività semplici o complesse.
Utilizzo di argomenti obbligatori
Per utilizzare l'attributo RequiredArgument in un'attività, indicare gli argomenti desiderati utilizzando l'oggetto RequiredArgumentAttribute. In questo esempio viene definita un'attività Add
che dispone di due argomenti obbligatori.
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);
}
}
In XAML gli argomenti obbligatori vengono indicati anche tramite l'oggetto RequiredArgumentAttribute. In questo esempio l'attività Add
viene definita con tre argomenti e viene utilizzata un'attività Assign per eseguire l'operazione di aggiunta.
<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 viene utilizzata l'attività e nessuno degli argomenti obbligatori viene associato, viene restituito il seguente errore di convalida.
Valore non specificato per un argomento di attività 'Operand1' obbligatorio.
Nota: |
---|
Per ulteriori informazioni su ricerca e gestione di errori e avvisi di convalida, vedere Richiamo della convalida di attività. |
Utilizzo di gruppi di overload
I gruppi di overload offrono un metodo per indicare le combinazioni di argomenti valide in un'attività. Gli argomenti vengono raggruppati insieme tramite l'oggetto OverloadGroupAttribute. A ogni gruppo viene assegnato un nome specificato dall'oggetto OverloadGroupAttribute. L'attività è valida quando viene associato un unico set di argomenti in un gruppo di overload. Nell'esempio seguente viene definita una classe 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; }
}
L'obiettivo di questa attività è specificare un percorso negli Stati Uniti. A questo scopo, l'utente dell'attività può specificare il percorso utilizzando uno di tre gruppi di argomenti. Per specificare le combinazioni valide di argomenti, vengono definiti tre gruppi di overload. G1
contiene gli argomenti Latitude
e Longitude
. G2
contiene Street
, City
e State
. G3
contiene Street
e Zip
. Name
è anche un argomento obbligatorio, ma non fa parte di un gruppo di overload. Affinché questa attività sia valida, Name
dovrebbe essere associato insieme a tutti gli argomenti di un unico gruppo di overload soltanto.
Un gruppo di overload non può essere un subset o un set equivalente di un altro gruppo di overload. L'unica eccezione a questa regola è un subset che contiene solo argomenti in cui RequiredArgument è false. I gruppi di overload possono sovrapporsi ma è un errore se l'intersezione dei gruppi contiene tutti gli argomenti obbligatori di uno o entrambi i gruppi di overload. Un gruppo di overload è considerato associato se vengono associati tutti gli argomenti RequiredArgument nel gruppo. Se un gruppo dispone di zero argomenti RequiredArgument e almeno un argomento associato, tale gruppo è considerato associato. È un errore se nessuno dei gruppi viene associato, a meno che un gruppo di overload non presenti all'interno alcun argomento RequiredArgument. L'associazione di argomenti RequiredArgument da più gruppi di overload non è consentita. È un errore disporre di più gruppi di overload associati, ovvero, vengono associati tutti gli argomenti obbligatori in un gruppo di overload e viene associato anche qualsiasi argomento in un altro gruppo di overload.