Magazine Internet

[WF4] Retrouver les variables accessibles

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

Dernièrement j’ai eu à travailler sur une problématique plutôt intéressante : lister dans le designer d’une activité l’ensemble des variables qu’elle aux quelle elle peut accéder.

Pour comprendre le code il faut bien assimiler le fait que le designer d’une activité n’accède pas directement à son activité, mais à un ModelItem qui la représente. Donc pour trouver les activité contenant l’activité courante, il faut remonter l’arbre de ces ModelItem et demander à chacun si il a des variables.

Dit comme cela tout est simple… mais voyer par vous même la méthode GetVariables(ModelItem) que voici :

C#

public static class VariablesHelper
{
    // Nom de la propriété "Varaibles" (Collection des varaibles d'une séquence
    public const String VariablesPropertyName = "Variables";

    #region "Retrouver les variables accessibles via un ModelItem"

    /// <summary>
    /// Retourne la liste des variables accessible via un ModelItem
    /// </summary>
    /// <param name="modelItem"></param>
    /// <returns></returns>
    public static List<Variable> GetVariables(ModelItem modelItem)
    {
        // Création
        List<Variable> variables = new List<Variable>();

        // Test si on a un item
        if (modelItem != null)
        {
            // Si oui mise à jour de la liste
            GetVariables(modelItem, variables);

            // Affectation de la liste des variables
            return variables
                .OrderBy(c => c.Name)
                .ToList();
        }
        else
        {
            // La liste ne peut pas être peuplée, 
            // elle restera donc vide
            // Affectation de la liste des variables
            return variables;
        }

    }

    /// <summary>
    /// Alimente la liste des variables accessible via un ModelItem
    /// </summary>
    /// <param name="modelItem"></param>
    private static void GetVariables(ModelItem modelItem, List<Variable> variables)
    {
        // Test si on a un scop de variables
        if (modelItem.Properties
            .Any(c =>
                c.Name == VariablesHelper.VariablesPropertyName
                & c.PropertyType == typeof(Collection<Variable>)))
        {
            // R2cupération de la collection de variable et parcour des varaibles
            (modelItem.Properties[VariablesHelper.VariablesPropertyName].Value.GetCurrentValue() as Collection<Variable>)
                .ToList()
                .ForEach(c => variables.Add(c));
        }

        // Test si on a un parent
        if (modelItem.Parent != null)
        {
            GetVariables(modelItem.Parent, variables);
        }
    }

    #endregion
}

Note : Pour l’utiliser il suffit de passer la propriété ModeItem de votre Designer d’activité.


Vous pourriez être intéressé par :

Retour à La Une de Logo Paperblog

Ces articles peuvent vous intéresser :

  • [WF4] Ajouter des activités?

    [WF4] Ajouter activités?

    Dans ma série WF4 ou l’engouasse du designer : “Comment ajouter des activités à un Workflow?”. Contrairement à WF3 qui ajoute les activités les unes à la suite... Lire la suite

    Par  Jeremy.jeanson
    INTERNET, PROGRAMMATION
  • [WF4] Ajouter un Workflow?

    [WF4] Ajouter Workflow?

    WF4 est un peut déroutant quand on lui demande ce que l’on a pu faire des centaines de fois avec WF3. Par exemple, quand on veut ajouter un nouveau Workflow à u... Lire la suite

    Par  Jeremy.jeanson
    INTERNET, PROGRAMMATION
  • [WF4] La gestion des variables

    [WF4] gestion variables

    Avec WF4 arrive une fonctionnalité très intéressante : les variables. Le principe est simple, on va pouvoir avoir des variables comprises dans un certain scope... Lire la suite

    Par  Jeremy.jeanson
    INTERNET, PROGRAMMATION
  • [WF4] Pas de warning dans un Worklow?!!!

    [WF4] warning dans Worklow?!!!

    Le titre peut sembler alarmiste,… c’est normal! Que l’on soit dans un Flowchart ou dans une Sequence, la compilation donnera toujours le message “Build... Lire la suite

    Par  Jeremy.jeanson
    INTERNET, PROGRAMMATION
  • [WF4] Attention au refactoring!

    Comme pour WF3 avec XOML, WF4 ne permet pas pour le moment d’utiliser le refactoring correctement dans les Workflow XAML. Exemple : Si vous utiliser une variabl... Lire la suite

    Par  Jeremy.jeanson
    INTERNET, PROGRAMMATION
  • [WF4] L’explorateur de type

    [WF4] L’explorateur type

    Petite note au sujet de l’explorateur de type. Celui-ci sert à utiliser des types autres que ceux proposer d’origine dans les vues variables et arguments des... Lire la suite

    Par  Jeremy.jeanson
    INTERNET, PROGRAMMATION
  • [WF4] Pas facile d’ajouter des contraintes à une activité

    De WF3 à WF4 pas mal de choses on été changées pour faciliter la vie des développeurs, mais certain points peuvent sembler obscures… comme les contraintes. Lire la suite

    Par  Jeremy.jeanson
    INTERNET, PROGRAMMATION

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