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