public CResultAErreur Execute(int nIdSession, Hashtable valeursParametres) { CResultAErreur result = CResultAErreur.True; using (CContexteDonnee contexte = new CContexteDonnee(nIdSession, true, false)) { try { CHandlerEvenementServeur.SuspendGestionnaire(true); // Supprimer les interventions SANS DEPLACEMENT CListeObjetsDonnees listeIntersASupprimer = new CListeObjetsDonnees(contexte, typeof(CIntervention)); listeIntersASupprimer.Filtre = new CFiltreDataAvance( CIntervention.c_nomTable, //CIntervention.c_champId + " > @1 AND " + // DEBUG CFractionIntervention.c_nomTable + "." + COperation.c_nomTable + "." + CTypeOperation.c_champId + " = @1", //8900, // DEBUG 30); // 30 = Id du type d'opération SANS DEPLACEMENT //int nbASupprimer = listeIntersASupprimer.CountNoLoad; CObjetDonneeAIdNumerique.DeleteAvecCascadeSansControleDoncIlFautEtreSurDeSoi(listeIntersASupprimer); result = contexte.SaveAll(true); if (!result) { result.EmpileErreur("Erreur de sauvegarde des données"); return(result); } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } finally { CHandlerEvenementServeur.SuspendGestionnaire(false); } } return(result); }
/// //////////////////////////////////////////////////////// protected override CResultAErreur MyExecute(CContexteExecutionAction contexte) { CResultAErreur result = CResultAErreur.True; //Calcule l'élément à supprimer CContexteEvaluationExpression contexteEval = new CContexteEvaluationExpression(Process); contexteEval.AttacheObjet(typeof(CContexteDonnee), contexte.ContexteDonnee); result = ExpressionEntiteASupprimer.Eval(contexteEval); if (!result) { result.EmpileErreur(I.T("Error during @1 formula evaluation|216", ExpressionEntiteASupprimer.ToString())); return(result); } if (result.Data is IEnumerable && (!(result.Data is CListeObjetsDonnees) || m_bPurgeAdmin)) { StringBuilder bl = new StringBuilder(); Type tp = null; string strChampId = ""; List <int> lstIds = new List <int>(); foreach (object obj in ((IEnumerable)result.Data)) { CObjetDonneeAIdNumerique objId = obj as CObjetDonneeAIdNumerique; if (objId == null) { result.EmpileErreur(I.T("Can not delete element of this type|20030")); return(result); } if (tp == null) { tp = objId.GetType(); strChampId = objId.GetChampId(); } if (objId.GetType() != tp) { result.EmpileErreur(I.T("Can not delete a list of different object types|20031")); return(result); } bl.Append(objId.Id); lstIds.Add(objId.Id); bl.Append(","); } if (m_bPurgeAdmin) { result = PurgeEntites(contexte.IdSession, tp, lstIds.ToArray()); } else { if (bl.Length == 0) { return(result); } bl.Remove(bl.Length - 1, 1); CListeObjetsDonnees lst = new CListeObjetsDonnees(contexte.ContexteDonnee, tp); lst.Filtre = new CFiltreData(strChampId + " in (" + bl.ToString() + ")"); if (DeleteFillesEnCascade) { result = CObjetDonneeAIdNumerique.DeleteAvecCascadeSansControleDoncIlFautEtreSurDeSoi(lst, true); } else { result = CObjetDonneeAIdNumerique.Delete(lst, true); } } return(result); } if (result.Data is CListeObjetsDonnees) { result = CObjetDonneeAIdNumerique.Delete(result.Data as CListeObjetsDonnees, true); return(result); } CObjetDonneeAIdNumerique objetASupprimer = (CObjetDonneeAIdNumerique)result.Data; ArrayList lstVariablesAVider = new ArrayList(); //CHerche les variables qui contiennent l'objet à supprimer foreach (CVariableDynamique variable in contexte.Branche.Process.ListeVariables) { object val = contexte.Branche.Process.GetValeurChamp(variable); if (val != null && val.Equals(objetASupprimer)) { lstVariablesAVider.Add(variable); } } if (m_bPurgeAdmin) { result = PurgeEntites(contexte.IdSession, objetASupprimer.GetType(), new int[] { objetASupprimer.Id }); } else { // Traite la suppression de tous les éléments filles en cascade. if (DeleteFillesEnCascade) { result = objetASupprimer.DeleteAvecCascadeSansControleDoncIlFautEtreSurDeSoi(true); } else { result = objetASupprimer.Delete(true); } } if (result) { foreach (CVariableDynamique variable in lstVariablesAVider) { Process.SetValeurChamp(variable, null); } } return(result); }