//------------------------------------------------- public virtual CDefinitionProprieteDynamique[] GetDefinitionsChamps(Type tp, int nNbNiveaux, CDefinitionProprieteDynamique defParente) { /*ITraducteurNomChamps traducteur = null; * if ( defParente is ITraducteurNomChamps ) * traducteur = (ITraducteurNomChamps)defParente;*/ CDefinitionProprieteDynamique[] defs = new CDefinitionProprieteDynamique[0]; CFournisseurPropDynStd four = new CFournisseurPropDynStd(true); if (!tp.IsSubclassOf(GetType()) && tp != GetType()) { defs = four.GetDefinitionsChamps(tp, nNbNiveaux, defParente); if (defParente != null) { return(defs); } } List <CDefinitionProprieteDynamique> lst = new List <CDefinitionProprieteDynamique>(); foreach (CDefinitionProprieteDynamique def in defs) { lst.Add(def); } lst.AddRange(GetProprietesInstance()); return(lst.ToArray( )); }
/// ///////////////////////////////////////////// /// Implémentation du IFournisseurProprietesDynamiques public CDefinitionProprieteDynamique[] GetDefinitionsChamps(Type tp, int nNbNiveaux, CDefinitionProprieteDynamique defParente) { /*ITraducteurNomChamps traducteur = null; * if ( defParente is ITraducteurNomChamps ) * traducteur = (ITraducteurNomChamps)defParente;*/ CFournisseurPropDynStd four = new CFournisseurPropDynStd(true); ArrayList lst = new ArrayList(); lst.AddRange(four.GetDefinitionsChamps(tp, nNbNiveaux, defParente)); lst.AddRange(GetProprietesInstance()); return((CDefinitionProprieteDynamique[])lst.ToArray(typeof(CDefinitionProprieteDynamique))); }
/// /////////////////////////////////////////////////////////// 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)); }