示例#1
0
        /// ////////////////////////////////////////////////////////
        protected override CResultAErreur MyExecute(CContexteExecutionAction contexte)
        {
            CResultAErreur result = CResultAErreur.True;

            CObjetDonneeAIdNumeriqueAuto objet = (CObjetDonneeAIdNumeriqueAuto)Activator.CreateInstance(m_typeEntiteACreer, new object[] { contexte.ContexteDonnee });

            objet.CreateNewInCurrentContexte();

            CContexteEvaluationExpression contexteEval = new CContexteEvaluationExpression(Process);

            contexteEval.AttacheObjet(typeof(CContexteDonnee), contexte.ContexteDonnee);

            foreach (DictionaryEntry entry in m_tableValeursProprietes)
            {
                string        strProp    = (string)entry.Key;
                C2iExpression expression = (C2iExpression)entry.Value;

                //Cherche la propriété
                PropertyInfo info            = m_typeEntiteACreer.GetProperty(strProp);
                string       strNomConvivial = strProp;
                object[]     attr            = info.GetCustomAttributes(typeof(DynamicFieldAttribute), true);
                if (attr.Length > 0)
                {
                    strNomConvivial = ((DynamicFieldAttribute)attr[0]).NomConvivial;
                }
                MethodInfo methode = info.GetSetMethod();
                if (methode != null)
                {
                    //Evalue la valeur
                    result = expression.Eval(contexteEval);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Error during the @1 value evaluation|140", strNomConvivial));
                        return(result);
                    }
                    try
                    {
                        methode.Invoke(objet, new object[] { result.Data });
                    }
                    catch (Exception e)
                    {
                        result.EmpileErreur(I.T("Error during the assignment of @1 property|141", strNomConvivial));
                        result.EmpileErreur(e.Message);
                        return(result);
                    }
                }
            }
            if (VariableResultat != null)
            {
                Process.SetValeurChamp(VariableResultat, objet);
            }
            CLienAction[] liens = GetLiensSortantHorsErreur();
            if (liens.Length > 0)
            {
                result.Data = liens[0];
            }
            return(result);
        }
示例#2
0
        //-----------------------------------------------------
        internal CResultAErreur Execute(CContexteExecutionMacro contexteExecution)
        {
            CContexteEvaluationExpression ctx   = new CContexteEvaluationExpression(Macro);
            CObjetDonneeAIdNumerique      cible = null;
            CResultAErreur result = CResultAErreur.True;

            if (FormuleCondition != null)
            {
                result = FormuleCondition.Eval(ctx);
                if (!result)
                {
                    return(result);
                }
                if (!(result.Data is bool))
                {
                    return(result);
                }
                if (!(bool)result.Data)
                {
                    return(result);
                }
            }
            switch (TypeOperation.Code)
            {
            case CTypeOperationSurObjet.TypeOperation.Ajout:
                CObjetDonneeAIdNumeriqueAuto objAuto = Activator.CreateInstance(m_typeObjet, new object[] { contexteExecution.ContexteDonnee }) as CObjetDonneeAIdNumeriqueAuto;
                if (objAuto != null)
                {
                    objAuto.CreateNewInCurrentContexte();
                }
                cible = objAuto;

                break;

            case CTypeOperationSurObjet.TypeOperation.Aucune:
                break;

            case CTypeOperationSurObjet.TypeOperation.Modification:
            case CTypeOperationSurObjet.TypeOperation.Suppression:
                result = FormuleSelectionObjet.Eval(ctx);
                if (!result)
                {
                    return(result);
                }
                if (result)
                {
                    cible = result.Data as CObjetDonneeAIdNumerique;
                }
                break;

            default:
                break;
            }
            if (cible != null)
            {
                Macro.SetValeurChamp(IdVariableAssociee, cible);
            }
            Macro.SetValeurChamp(Macro.VariableCurrentElement, cible);
            foreach (CMacroObjetValeur valeur in Valeurs)
            {
                valeur.Execute(cible);
            }

            return(result);
        }
示例#3
0
        //-----------------------------------------------------------
        private CResultAErreurType <CObjetDonneeAIdNumeriqueAuto> CloneObjet(
            CContexteDonnee contexte,
            CObjetDonneeAIdNumeriqueAuto source,
            Dictionary <CObjetDonneeAIdNumeriqueAuto, CObjetDonneeAIdNumeriqueAuto> dicClones)
        {
            CResultAErreurType <CObjetDonneeAIdNumeriqueAuto> result = new CResultAErreurType <CObjetDonneeAIdNumeriqueAuto>();

            if (dicClones.ContainsKey(source))
            {
                result.DataType = dicClones[source];
                return(result);
            }
            if (dicClones.ContainsValue(source))
            {
                //C'est un objet qu'on a cloné, on ne va as le recloner encore
                result.DataType = source;
                return(result);
            }
            CObjetDonneeAIdNumeriqueAuto clone = Activator.CreateInstance(source.GetType(), new object[] { contexte }) as CObjetDonneeAIdNumeriqueAuto;

            clone.CreateNewInCurrentContexte();
            dicClones[source] = clone;
            //Copie la ligne
            DataTable table = source.Row.Table;

            if (table == null)
            {
                return(result);
            }
            List <string> keys = new List <string>();

            foreach (DataColumn col in table.PrimaryKey)
            {
                keys.Add(col.ColumnName);
            }
            clone.ContexteDonnee.CopyRow(source.Row, clone.Row, keys.ToArray());

            //Copie toutes les valeurs de champ custom
            IElementAChamps eltChampsDest   = clone as IElementAChamps;
            IElementAChamps eltChampsSource = source as IElementAChamps;

            if (eltChampsDest != null && eltChampsSource != null)
            {
                foreach (CRelationElementAChamp_ChampCustom relation in eltChampsSource.RelationsChampsCustom)
                {
                    eltChampsDest.SetValeurChamp(relation.ChampCustom, relation.Valeur);
                }
            }

            //Copie les relations filles sélectionnées
            List <CDefinitionProprieteDynamique> lst = null;

            if (TryGetValue(source.GetType(), out lst))
            {
                foreach (CDefinitionProprieteDynamique def in lst)
                {
                    CDefinitionProprieteDynamique defInverse = def.GetDefinitionInverse(source.GetType());
                    if (defInverse != null)//On sait affecter le parent
                    {
                        CResultAErreur resTmp = CInterpreteurProprieteDynamique.GetValue(source, def);
                        if (resTmp && result.Data is IEnumerable)
                        {
                            IEnumerable en = result.Data as IEnumerable;
                            foreach (object obj in en)
                            {
                                CObjetDonneeAIdNumeriqueAuto objDonnee = obj as CObjetDonneeAIdNumeriqueAuto;
                                if (objDonnee != null)
                                {
                                    result = CloneObjet(contexte, objDonnee, dicClones);
                                    if (result)
                                    {
                                        resTmp = CInterpreteurProprieteDynamique.SetValue(result.DataType, defInverse, clone);
                                        if (!resTmp)
                                        {
                                            result.EmpileErreur(resTmp.Erreur);
                                            return(result);
                                        }
                                    }

/*????                                    else
 *                                      return result;*/
                                }
                            }
                        }
                    }
                }
            }

            result.DataType = clone;
            return(result);
        }