Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Collection activities are used to work with collection objects in a workflow. .NET Framework 4.6.1 has system-provided activities for adding and removing items from a collection, testing for the existence of an item in a collection, and clearing a collection. ExistsInCollection
and RemoveFromCollection
have an OutArgument<T> of type Boolean, which indicates the result.
Important
If a collection activity is executed before setting the underlying collection object, an InvalidOperationException is thrown and the activity faults.
Collection activities
Activity type | Description |
---|---|
AddToCollection<T> | Adds an item to a specified collection. |
ClearCollection<T> | Clears all items from a specified collection. |
ExistsInCollection<T> | Returns true if an item exists in a collection. |
RemoveFromCollection<T> | Removes an item from a specified collection and returns true if the item was successfully removed. |
Using collection activities
The following code example demonstrates how to interact with a collection declared as a workflow variable. The collection used is a List<T> of String objects named fruitList
.
Variable<ICollection<string>> fruitList = new Variable<ICollection<string>>
{
Default = new VisualBasicValue<ICollection<string>>("New List(Of String) From {\"Apple\", \"Orange\"}"),
Name = "FruitList"
};
Variable<bool> result = new Variable<bool>
{
Name = "Result"
};
Activity wf = new Sequence
{
Variables = { fruitList, result },
Activities =
{
new If
{
Condition = new ExistsInCollection<string>
{
Collection = fruitList,
Item = "Pear"
},
Then = new AddToCollection<string>
{
Collection = fruitList,
Item = "Pear"
},
Else = new RemoveFromCollection<string>
{
Collection = fruitList,
Item = "Apple"
}
},
new RemoveFromCollection<string>
{
Collection = fruitList,
Item = "Apple",
Result = result
},
new If
{
Condition = result,
Then = new ClearCollection<string>
{
Collection = fruitList,
}
}
}
};
<Sequence
xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Sequence.Variables>
<x:Reference>__ReferenceID0</x:Reference>
<x:Reference>__ReferenceID1</x:Reference>
</Sequence.Variables>
<If>
<If.Condition>
<InArgument
x:TypeArguments="x:Boolean">
<ExistsInCollection
x:TypeArguments="x:String"
Item="Pear">
<ExistsInCollection.Result>
<OutArgument
x:TypeArguments="x:Boolean" />
</ExistsInCollection.Result>
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
<VariableValue.Variable>
<Variable
x:TypeArguments="scg:ICollection(x:String)"
x:Name="__ReferenceID0"
Default="[New List(Of String) From {"Apple", "Orange"}]"
Name="FruitList" />
</VariableValue.Variable>
</VariableValue>
</InArgument>
</ExistsInCollection>
</InArgument>
</If.Condition>
<If.Then>
<AddToCollection
x:TypeArguments="x:String"
Item="Pear">
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</AddToCollection>
</If.Then>
<If.Else>
<RemoveFromCollection
x:TypeArguments="x:String"
Item="Apple"
Result="{x:Null}">
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</RemoveFromCollection>
</If.Else>
</If>
<RemoveFromCollection
x:TypeArguments="x:String"
Item="Apple">
<RemoveFromCollection.Result>
<OutArgument
x:TypeArguments="x:Boolean">
<VariableReference
x:TypeArguments="x:Boolean">
<VariableReference.Result>
<OutArgument
x:TypeArguments="Location(x:Boolean)" />
</VariableReference.Result>
<VariableReference.Variable>
<Variable
x:TypeArguments="x:Boolean"
x:Name="__ReferenceID1"
Name="Result" />
</VariableReference.Variable>
</VariableReference>
</OutArgument>
</RemoveFromCollection.Result>
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</RemoveFromCollection>
<If>
<If.Condition>
<InArgument
x:TypeArguments="x:Boolean">
<VariableValue
x:TypeArguments="x:Boolean"
Variable="{x:Reference __ReferenceID1}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="x:Boolean" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</If.Condition>
<If.Then>
<ClearCollection
x:TypeArguments="x:String">
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</ClearCollection>
</If.Then>
</If>
</Sequence>
The above code samples can also be created using CSharpValue<TResult> instead of VisualBasicValue<TResult>
Variable<ICollection<string>> fruitList = new Variable<ICollection<string>>
{
Default = new CSharpValue<ICollection<string>>("new List<String> From {\"Apple\", \"Orange\"};"),
Name = "FruitList"
};
Variable<bool> result = new Variable<bool>
{
Name = "Result"
};
Activity wf = new Sequence
{
Variables = { fruitList, result },
Activities =
{
new If
{
Condition = new ExistsInCollection<string>
{
Collection = fruitList,
Item = "Pear"
},
Then = new AddToCollection<string>
{
Collection = fruitList,
Item = "Pear"
},
Else = new RemoveFromCollection<string>
{
Collection = fruitList,
Item = "Apple"
}
},
new RemoveFromCollection<string>
{
Collection = fruitList,
Item = "Apple",
Result = result
},
new If
{
Condition = result,
Then = new ClearCollection<string>
{
Collection = fruitList,
}
}
}
};
<Sequence
xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Sequence.Variables>
<x:Reference>__ReferenceID0</x:Reference>
<x:Reference>__ReferenceID1</x:Reference>
</Sequence.Variables>
<If>
<If.Condition>
<InArgument
x:TypeArguments="x:Boolean">
<ExistsInCollection
x:TypeArguments="x:String"
Item="Pear">
<ExistsInCollection.Result>
<OutArgument
x:TypeArguments="x:Boolean" />
</ExistsInCollection.Result>
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
<VariableValue.Variable>
<Variable
x:TypeArguments="scg:ICollection(x:String)"
x:Name="__ReferenceID0"
Default="[new List<String> From {"Apple", "Orange"};]"
Name="FruitList" />
</VariableValue.Variable>
</VariableValue>
</InArgument>
</ExistsInCollection>
</InArgument>
</If.Condition>
<If.Then>
<AddToCollection
x:TypeArguments="x:String"
Item="Pear">
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</AddToCollection>
</If.Then>
<If.Else>
<RemoveFromCollection
x:TypeArguments="x:String"
Item="Apple"
Result="{x:Null}">
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</RemoveFromCollection>
</If.Else>
</If>
<RemoveFromCollection
x:TypeArguments="x:String"
Item="Apple">
<RemoveFromCollection.Result>
<OutArgument
x:TypeArguments="x:Boolean">
<VariableReference
x:TypeArguments="x:Boolean">
<VariableReference.Result>
<OutArgument
x:TypeArguments="Location(x:Boolean)" />
</VariableReference.Result>
<VariableReference.Variable>
<Variable
x:TypeArguments="x:Boolean"
x:Name="__ReferenceID1"
Name="Result" />
</VariableReference.Variable>
</VariableReference>
</OutArgument>
</RemoveFromCollection.Result>
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</RemoveFromCollection>
<If>
<If.Condition>
<InArgument
x:TypeArguments="x:Boolean">
<VariableValue
x:TypeArguments="x:Boolean"
Variable="{x:Reference __ReferenceID1}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="x:Boolean" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</If.Condition>
<If.Then>
<ClearCollection
x:TypeArguments="x:String">
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</ClearCollection>
</If.Then>
</If>
</Sequence>