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 }