/// /////////////////////////////////////////////////////////
        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);
        }
 public static new void Autoexec()
 {
     CInterpreteurProprieteDynamique.RegisterTypeDefinition(c_strCleType, typeof(CInterpreteurProprieteDynamiqueDataColumn));
 }
 //----------------------------------------------------------------
 public static void Autoexec()
 {
     CInterpreteurProprieteDynamique.RegisterTypeDefinition(CDefinitionProprieteDynamiqueSourceSupplementaire.c_strCleType,
                                                            typeof(CInterpreteurProprieteDynamiqueSourceSupplementaire));
 }
Exemple #4
0
 //-----------------------------------------------
 public static void Autoexec()
 {
     CInterpreteurProprieteDynamique.RegisterTypeDefinition(c_strCleType, typeof(CInterpreteurProprieteDynamiqueDotNet));
 }
        /// //////////////////////////////////////////
        protected override CResultAErreur ProtectedEval(CContexteEvaluationExpression ctx)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                C2iExpressionChamp champFinal = null;
                object             objSource  = ctx.ObjetSource;
                result = GetSourceEtChampFinal(Parametres2i[0], ctx, ref objSource, ref champFinal);
                if (!result)
                {
                    return(result);
                }
                if (champFinal == null)
                {
                    result.EmpileErreur(I.T("Impossible to affect a value to @1|133", Parametres2i[0].ToString()));
                    return(result);
                }

                result = Parametres2i[1].Eval(ctx);
                if (!result)
                {
                    return(result);
                }
                object valeur = result.Data;
                CDefinitionProprieteDynamiqueVariableFormule propFormule = champFinal.DefinitionPropriete as CDefinitionProprieteDynamiqueVariableFormule;
                if (propFormule != null)
                {
                    ctx.SetValeurVariable(propFormule, valeur);
                }
                else
                {
                    if (objSource == null)
                    {
                        return(result);
                    }
                    SynchronizationContext c = ctx.SynchronizationContext;

                    if (c != null)
                    {
                        c.Post(x => CInterpreteurProprieteDynamique.SetValue(objSource, champFinal.DefinitionPropriete.NomPropriete, valeur), null);
                    }
                    else
                    {
                        result = CInterpreteurProprieteDynamique.SetValue(objSource, champFinal.DefinitionPropriete.NomPropriete, valeur);
                    }
                }
                if (result)
                {
                    result.Data = valeur;
                    if (objSource != null)
                    {
                        ctx.Cache.ResetCache(objSource);
                    }
                }
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }
            return(result);
        }