Actividades de colección en WF
Las actividades de colección se usan para trabajar con objetos de colección en un flujo de trabajo. .NET Framework 4.6.1 tiene actividades proporcionadas por el sistema para agregar y quitar elementos de una colección, comprobar la existencia de un elemento en una colección y borrar una colección. ExistsInCollection
y RemoveFromCollection
tienen un OutArgument<T> de tipo Boolean, que indica el resultado.
Importante
Si se ejecuta una actividad de colección antes de establecer el objeto de colección subyacente, se inicia una excepción InvalidOperationException y se produce un error en la actividad.
Actividades de colección
Tipo de actividad | Descripción |
---|---|
AddToCollection<T> | Agrega un elemento a una colección especificada. |
ClearCollection<T> | Borra todos los elementos de una colección especificada. |
ExistsInCollection<T> | Devuelve true si un elemento ya existe en una colección. |
RemoveFromCollection<T> | Quita un elemento de una colección especificada y devuelve true si el elemento se quitó correctamente. |
Usar actividades de colección
El siguiente ejemplo de código muestra cómo interactuar con un colección declarada como una variable de flujo de trabajo. La colección usada es una List<T> de objetos String denominada 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>
Los ejemplos de código anteriores también se pueden crear mediante CSharpValue<TResult> en lugar de 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>