Voici une petite extension de ma classe VariableHelper qui permet d’ajouter une variable à une activité durant le Design du Workflow.
Comme dans mon précédent post on passe par le ModeItem du designer d’activité pour trouver le conteneur de variables de l’activité et y ajouter notre variable (j’utilise aussi ma méthode de recherche de variable accessible GetVariables() ).
L’argument variableName de la méthode AddVariable() est en fait le nom initialement souhaiter. Si l’activité à déjà accès à une variable de même nom, il cherchera un autre nom disponible (ex :variableName + “1”).
C#
internal static class VariablesHelper
{
// Nom de la propriété "Varaibles" (Collection des varaibles d'une séquence
public const String VariablesPropertyName = "Variables";
#region "Manipulation de variables"
/// <summary>
/// Ajout d'une variable à un ModelItem
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="modelItem"></param>
/// <param name="variableName"></param>
/// <returns></returns>
public static Variable<T> AddVariable<T>(ModelItem modelItem, String variableName)
{
return AddVariable<T>(modelItem, variableName, default(T));
}
/// <summary>
/// Ajout d'une variable à un ModelItem en spécifiant une valeur par défaut
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="variableName"></param>
/// <param name="defaultValue"></param>
/// <returns></returns>
public static Variable<T> AddVariable<T>(ModelItem modelItem, String variableName, T defaultValue)
{
Int32 i = 1;
String variableToAddName;
// Retrouver le liste des variables accessible via le ModelItem
List<Variable> variables = GetVariables(modelItem);
try
{
// Recherche d'un nom de variable disponible
do
{
variableToAddName = String.Concat(variableName, i.ToString());
i++;
}
while (variables.Any(c => c.Name == variableToAddName));
// Test du conteneur de variables de la séquence courante
if (modelItem.Properties
.Any(c =>
c.Name == VariablesHelper.VariablesPropertyName
& c.PropertyType == typeof(Collection<Variable>)))
{
// Création d'une nouvelel variable
Variable<T> variable = new Variable<T>(variableToAddName, defaultValue);
// Ajout de la nouvelle variable
modelItem.Properties[VariablesHelper.VariablesPropertyName].Collection.Add(variable);
// Retourner la varariable créé
return variable;
}
else
{
return null;
}
}
catch (Exception ex)
{
Trace.TraceError(ex.Message);
return null;
}
finally
{
// Libération des ressoruces
variables = null;
variableToAddName = null;
}
}
#endregion
}
