예제 #1
0
 //----------------------------------------------------------
 public static CResultAErreur GetValue(object objet, CDefinitionProprieteDynamique defProp, CCacheValeursProprietes cache)
 {
     if (defProp != null)
     {
         CDefinitionMultiSourceForExpression source = objet as CDefinitionMultiSourceForExpression;
         if (source != null && !(defProp is CDefinitionProprieteDynamiqueSourceSupplementaire))
         {
             return(GetValue(source.ObjetPrincipal, defProp));
         }
         string strNomProp = defProp.NomPropriete;
         if (strNomProp.Length > 0 && strNomProp[0] != CDefinitionProprieteDynamique.c_strCaractereStartCleType &&
             m_oldInterpreteur != null)
         {
             CResultAErreur result = CResultAErreur.True;
             result.Data = m_oldInterpreteur.GetValue(objet, defProp);
             return(result);
         }
         return(GetValue(objet, strNomProp, cache));
     }
     return(CResultAErreur.True);
 }
        /// /////////////////////////////////////////////////////////
        protected object GetValeurChamp(object source, CDefinitionProprieteDynamique propriete)
        {
            CDefinitionProprieteDynamiqueVariableFormule defFormule = propriete as CDefinitionProprieteDynamiqueVariableFormule;

            if (defFormule != null)
            {
                return(GetValeurVariable(defFormule));
            }
            if (source != null && m_bUseOptimiseurs)
            {
                Type   tp     = source.GetType();
                string strKey = tp.ToString() + "/" + propriete.NomPropriete;
                IOptimiseurGetValueDynamic optimiseur = null;
                bool bDejaCherche = false;
                if (m_dicOptimiseurs.TryGetValue(strKey, out optimiseur))
                {
                    bDejaCherche = true;
                }
                if (!bDejaCherche)
                {
                    optimiseur = CInterpreteurProprieteDynamique.GetOptimiseur(tp, propriete.NomPropriete);
                    m_dicOptimiseurs[strKey] = optimiseur;
                }
                if (optimiseur != null)
                {
                    return(optimiseur.GetValue(source));
                }
            }
            CResultAErreur result = CInterpreteurProprieteDynamique.GetValue(source, propriete, m_cache);

            if (result)
            {
                return(result.Data);
            }
            if (m_oldInterpreteur != null)
            {
                return(m_oldInterpreteur.GetValue(source, propriete));
            }
            return(null);
        }