//------------------------------------------------------------------- public void RemoveComportementFromObjet(CObjetDonneeAIdNumerique objet) { CRelationElementComportement relation = GetRelationForObjet(objet); if (relation != null) { relation.Delete(); } }
//------------------------------------------------------------------- public void AddComportementToObjet(CObjetDonneeAIdNumerique objet) { CRelationElementComportement relation = GetRelationForObjet(objet); if (relation != null) { return; } relation = new CRelationElementComportement(objet.ContexteDonnee); relation.CreateNewInCurrentContexte(); relation.Comportement = this; relation.ElementAssocie = objet; }
//------------------------------------------------------------------- private CRelationElementComportement GetRelationForObjet(CObjetDonneeAIdNumerique objet) { if (objet == null) { return(null); } CRelationElementComportement relation = new CRelationElementComportement(objet.ContexteDonnee); if (relation.ReadIfExists( new CFiltreData( CRelationElementComportement.c_champTypeElement + "=@1 and " + CRelationElementComportement.c_champIdElement + "=@2 and " + c_champId + "=@3", objet.GetType().ToString(), objet.Id, Id))) { return(relation); } return(null); }
/// <summary> /// Retourne tous les déclencheurs associés à un élément /// Evenements et handler /// </summary> /// <param name="objet"></param> /// <returns></returns> public static IDeclencheurAction[] GetDeclencheursAssocies(CObjetDonneeAIdNumerique objet) { if (objet == null) { return(new IDeclencheurAction[0]); } ArrayList listeDeclencheurs = new ArrayList(); //Cherche les évenements CListeObjetsDonnees listeEvenements = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CEvenement)); listeEvenements.Filtre = new CFiltreData( CEvenement.c_champTypeCible + "=@1 ", objet.GetType().ToString()); CContexteEvaluationExpression contexteEval = new CContexteEvaluationExpression(objet); CResultAErreur result = CResultAErreur.True; foreach (CEvenement evenement in listeEvenements) { bool bShouldAdd = true; if (evenement.HasDefinisseur()) { if (evenement.TypeDefinisseur == typeof(CComportementGenerique)) { //Regarde s'il existe une association entre l'élément et le comportement CRelationElementComportement relation = new CRelationElementComportement(objet.ContexteDonnee); if (!relation.ReadIfExists(new CFiltreData( CRelationElementComportement.c_champTypeElement + "=@1 and " + CRelationElementComportement.c_champIdElement + "=@2 and " + CComportementGenerique.c_champId + "=@3", objet.GetType().ToString(), objet.Id, evenement.IdDefinisseur))) { //Pas de lien vers le comportement. Est-ce que l'élément a un définisseur qui est lié à ce comportement . if (objet is IElementAEvenementsDefinis) { bool bIsInComp = false; foreach (IDefinisseurEvenements defi in ((IElementAEvenementsDefinis)objet).Definisseurs) { foreach (CComportementGenerique comp in defi.ComportementsInduits) { if (comp.Id == evenement.IdDefinisseur) { bIsInComp = true; break; } } } bShouldAdd = bIsInComp; } else { bShouldAdd = false; } } } //si le définisseur n'est pas un comportement générique if (!(objet is IElementAEvenementsDefinis)) { bShouldAdd = false; } else if (!((IElementAEvenementsDefinis)objet).IsDefiniPar(evenement.Definisseur)) { bShouldAdd = false; } else { bShouldAdd = true; } } if (bShouldAdd) { listeDeclencheurs.Add(evenement); } } //cherche les handlers CListeObjetsDonnees listeHandlers = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CHandlerEvenement)); listeHandlers.Filtre = new CFiltreData( CHandlerEvenement.c_champTypeCible + "=@1 and " + CHandlerEvenement.c_champIdCible + "=@2 ", objet.GetType().ToString(), objet.Id); foreach (CHandlerEvenement handler in listeHandlers) { listeDeclencheurs.Add(handler); } listeDeclencheurs.Sort(new CDeclencheurComparer()); return((IDeclencheurAction[])listeDeclencheurs.ToArray(typeof(IDeclencheurAction))); }
/// <summary> /// Récupère toutes les actions manuelles associées à un élément /// </summary> /// <param name="objet"></param> /// <returns></returns> public static IDeclencheurAction[] GetActionsManuelles(CObjetDonneeAIdNumerique objet, bool bAvecHandlers) { if (objet == null) { return(new IDeclencheurAction[0]); } HashSet <CDbKey> tableGroupesUtilisateurs = null; ArrayList listeDeclencheurs = new ArrayList(); //Cherche les évenements CListeObjetsDonnees listeEvenements = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CEvenement)); listeEvenements.Filtre = new CFiltreData( CEvenement.c_champTypeCible + "=@1 and " + CEvenement.c_champTypeEvenement + "=@2", objet.GetType().ToString(), (int)TypeEvenement.Manuel); CContexteEvaluationExpression contexteEval = new CContexteEvaluationExpression(objet); CResultAErreur result = CResultAErreur.True; foreach (CEvenement evenement in listeEvenements) { bool bShouldAdd = true; if (evenement.HasDefinisseur()) { if (evenement.TypeDefinisseur == typeof(CComportementGenerique)) { //Regarde s'il existe une association entre l'élément et le comportement CRelationElementComportement relation = new CRelationElementComportement(objet.ContexteDonnee); if (!relation.ReadIfExists(new CFiltreData( CRelationElementComportement.c_champTypeElement + "=@1 and " + CRelationElementComportement.c_champIdElement + "=@2 and " + CComportementGenerique.c_champId + "=@3", objet.GetType().ToString(), objet.Id, evenement.IdDefinisseur))) { //Pas de lien vers le comportement. Est-ce que l'élément a un définisseur qui est lié à ce comportement . if (objet is IElementAEvenementsDefinis) { bool bIsInComp = false; foreach (IDefinisseurEvenements defi in ((IElementAEvenementsDefinis)objet).Definisseurs) { foreach (CComportementGenerique comp in defi.ComportementsInduits) { if (comp.Id == evenement.IdDefinisseur) { bIsInComp = true; break; } } } bShouldAdd = bIsInComp; } else { bShouldAdd = false; } } } else if (!(objet is IElementAEvenementsDefinis)) //si le définisseur n'est pas un comportement générique { bShouldAdd = false; } else if (!((IElementAEvenementsDefinis)objet).IsDefiniPar(evenement.Definisseur)) { bShouldAdd = false; } else { bShouldAdd = true; } } if (bShouldAdd) { //Vérifie que l'evenemnt n'a pas déjà été déclenché pour cet entité if (!evenement.DeclenchementUniqueParEntite || ! evenement.DejaDeclenchePourEntite(objet)) { if (CanUserDeclenche(objet.ContexteDonnee.IdSession, evenement.KeysGroupesPourExecutionManuelle, tableGroupesUtilisateurs)) { C2iExpression condition = evenement.FormuleCondition; if (condition == null) { listeDeclencheurs.Add(evenement); } else { result = evenement.FormuleCondition.Eval(contexteEval); if (result) { if (result.Data != null && result.Data.ToString() != "0" && result.Data.ToString().ToUpper() != false.ToString().ToUpper()) { listeDeclencheurs.Add(evenement); } } } } } } } if (bAvecHandlers) { //cherche les handlers CListeObjetsDonnees listeHandlers = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CHandlerEvenement)); listeHandlers.Filtre = new CFiltreData( CHandlerEvenement.c_champTypeCible + "=@1 and " + CHandlerEvenement.c_champIdCible + "=@2 and " + CHandlerEvenement.c_champTypeEvenement + "=@3", objet.GetType().ToString(), objet.Id, (int)TypeEvenement.Manuel); foreach (CHandlerEvenement handler in listeHandlers) { C2iExpression condition = handler.FormuleCondition; if (condition == null) { listeDeclencheurs.Add(handler); } else { if (CanUserDeclenche(objet.ContexteDonnee.IdSession, handler.KeysGroupesPourExecutionManuelle, tableGroupesUtilisateurs)) { result = handler.FormuleCondition.Eval(contexteEval); if (result) { if (result.Data != null && result.Data.ToString() != "0" && result.Data.ToString().ToUpper() != false.ToString().ToUpper()) { listeDeclencheurs.Add(handler); } } } } } } listeDeclencheurs.Sort(new CDeclencheurComparer()); return((IDeclencheurAction[])listeDeclencheurs.ToArray(typeof(IDeclencheurAction))); }