/// //////////////////////////////////////////////////////// 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); }
//----------------------------------------------------- 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); }
//----------------------------------------------------------- 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); }