Magazine Internet

[WF4] Ajouter des variables lors du design

Publié le 02 février 2010 par Jeremy.jeanson

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
}

Vous pourriez être intéressé par :

Retour à La Une de Logo Paperblog

Ces articles peuvent vous intéresser :

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte