Esempio n. 1
0
        /// ///////////////////////////////////////////////////////////
        public object GetValue(object objetInterroge, string strPropriete)
        {
            CFournisseurPropDynStd fournisseur = new CFournisseurPropDynStd(false);

            if (objetInterroge == null)
            {
                return(null);
            }
            //Est-ce une propriété simple ?(majorité des cas )
            object     objetAInterroger = null;
            MemberInfo membre           = null;

            if (CInterpreteurTextePropriete.GetObjetFinalEtMemberInfo(objetInterroge, strPropriete, ref objetAInterroger, ref membre) && membre != null)
            {
                return(CInterpreteurTextePropriete.GetValue(objetAInterroger, membre));
            }

            //Bon pas de bol, c'est autre chose, il faut donc chercher ce que c'est
            Type   tp           = objetInterroge.GetType();
            string strPropDebut = strPropriete.Split('.')[0];
            object objetPremier = CInterpreteurTextePropriete.GetValue(objetInterroge, strPropDebut);

            if (objetPremier == null)
            {
                string strIdChamp = CDefinitionProprieteDynamiqueChampCustom.GetIdPropriete(strPropDebut);
                foreach (CDefinitionProprieteDynamique def in fournisseur.GetDefinitionsChamps(tp, 0))
                {
                    if (def.NomPropriete == strPropDebut ||
                        (strIdChamp != "" && def is CDefinitionProprieteDynamiqueChampCustom) &&
                        ((CDefinitionProprieteDynamiqueChampCustom)def).DbKeyChamp == CDbKey.CreateFromStringValue(strIdChamp))
                    {
                        objetPremier = GetValue(objetInterroge, def);
                        //Si la suite est une relation de la valeur champ vers l'objet, il ne faut pas
                        //traier la suite
                        if (strPropDebut != strPropriete)
                        {
                            string strSuiteTmp = strPropriete.Substring(strPropDebut.Length + 1);
                            if (CInfoRelationComposantFiltreChampToEntite.IsRelationFromChampToEntite(strSuiteTmp))
                            {
                                //On a déjà traité ce lien par GetValeurPropriété (qui retourne la valeur
                                //et nom pas le lien vers la valeur)
                                strPropDebut += "." + strPropriete.Split('.')[1];
                            }
                        }

                        break;
                    }
                }
            }
            if (objetPremier == null)
            {
                return(null);
            }
            if (strPropDebut == strPropriete)
            {
                return(objetPremier);
            }
            string strSuite = strPropriete.Substring(strPropDebut.Length + 1);

            return(GetValue(objetPremier, strSuite));
        }