Example #1
0
 private void fireTriggersForObject(DomainObjectData xobj, XTriggerFireTimes fireTime, IXExecutionContext context)
 {
     if (m_triggersForObjects.Length > 0)
     {
         foreach (XTriggerDescription trigger in m_triggersForObjects)
         {
             if (isTriggerMatchForObject(trigger, xobj, fireTime))
             {
                 trigger.ExecuteTrigger(xobj.Context, xobj, context);
             }
         }
     }
     if (m_triggersForGroups.Length > 0)
     {
         ArrayList aObjectTypes = new ArrayList();
         foreach (XTriggerDescription trigger in m_triggersForGroups)
         {
             if (trigger.ObjectType == xobj.ObjectType && aObjectTypes.IndexOf(xobj.ObjectType) == -1)
             {
                 aObjectTypes.Add(xobj.ObjectType);
                 trigger.ExecuteTrigger(xobj.Context, xobj, context);
             }
         }
     }
 }
Example #2
0
 public XTriggerDefinitionAttribute(XTriggerActions action, XTriggerFireTimes when, XTriggerFireTypes fireType, string sObjectType)
 {
     m_action      = action;
     m_when        = when;
     m_fireType    = fireType;
     m_sObjectType = sObjectType;
 }
Example #3
0
 public XTriggerArgs(XTriggerActions action, XTriggerFireTimes fireTimes, XTriggerFireTypes eventType, DomainObjectDataSet dataSet, DomainObjectData xobj)
 {
     m_action   = action;
     m_fireTime = fireTimes;
     m_fireType = eventType;
     m_dataSet  = dataSet;
     m_xobj     = xobj;
 }
Example #4
0
        public XTriggerDescription(XTriggerActions action, XTriggerFireTimes fireTimes, XTriggerFireTypes eventType, string sObjectType, XDotNetClassDescription factory)
        {
            m_action      = action;
            m_fireTime    = fireTimes;
            m_fireType    = eventType;
            m_sObjectType = sObjectType;
            m_factory     = factory;
            if (!m_factory.Metaclass.IsSubclassOf(typeof(XTrigger)))
            {
                throw new ArgumentException(
                          String.Format(
                              "Класс {0} не является наследником XTrigger и не может быть использован в качестве триггера",
                              factory.Metaclass.Name
                              )
                          );
            }

            Type type = factory.Metaclass;

            object[] attrs = type.GetCustomAttributes(typeof(XTriggerDefinitionAttribute), false);
            if (attrs.Length > 0)
            {
                XTriggerDefinitionAttribute attr = (XTriggerDefinitionAttribute)attrs[0];
                if (m_action == XTriggerActions.Unspecified)
                {
                    m_action = attr.Action;
                }
                if (m_fireTime == XTriggerFireTimes.Unspecified)
                {
                    m_fireTime = attr.When;
                }
                if (m_fireType == XTriggerFireTypes.Unspecified)
                {
                    m_fireType = attr.FireType;
                }
                if (m_sObjectType == null || m_sObjectType.Length == 0)
                {
                    m_sObjectType = attr.ObjectType;
                }
            }

            if (m_action == XTriggerActions.Unspecified)
            {
                throw new ApplicationException("Не полностью специфицированное описание триггера " + type.Name + ": не задано действие (XTriggerActions)");
            }
            if (m_fireTime == XTriggerFireTimes.Unspecified)
            {
                throw new ApplicationException("Не полностью специфицированное описание триггера " + type.Name + ": не задано время срабатывания (XTriggerFireTimes)");
            }
            if (m_fireType == XTriggerFireTypes.Unspecified)
            {
                throw new ApplicationException("Не полностью специфицированное описание триггера " + type.Name + ": не задан тип срабатывания (XTriggerFireTypes)");
            }
            if ((m_sObjectType == null || m_sObjectType.Length == 0) && m_fireType != XTriggerFireTypes.ForWholeDataSet)
            {
                throw new ApplicationException("Не полностью специфицированное описание триггера " + type.Name + ": не задано наименование типа объекта");
            }
        }
Example #5
0
 public XTriggerConfiguration(string sAction, string sWhen, string sFireType, string sObjectType, string sClassName)
 {
     try
     {
         if (sAction == null || sAction.Length == 0)
         {
             Action = XTriggerActions.Unspecified;
         }
         else
         {
             Action = (XTriggerActions)Enum.Parse(typeof(XTriggerActions), sAction);
         }
     }
     catch
     {
         throw new ArgumentException("Некорректное значение перечисления XTriggerActions: " + sAction);
     }
     try
     {
         if (sWhen == null || sWhen.Length == 0)
         {
             FireTime = XTriggerFireTimes.Unspecified;
         }
         else
         {
             FireTime = (XTriggerFireTimes)Enum.Parse(typeof(XTriggerFireTimes), sWhen);
         }
     }
     catch
     {
         throw new ArgumentException("Некорректное значение перечисления XTriggerFireTimes: " + sWhen);
     }
     try
     {
         if (sFireType == null || sFireType.Length == 0)
         {
             FireType = XTriggerFireTypes.Unspecified;
         }
         else
         {
             FireType = (XTriggerFireTypes)Enum.Parse(typeof(XTriggerFireTypes), sFireType);
         }
     }
     catch
     {
         throw new ArgumentException("Некорректное значение перечисления XTriggerFireTypes:" + sFireType);
     }
     if (sClassName == null || sClassName.Length == 0)
     {
         throw new ArgumentException("не задано наименование класса триггера");
     }
     ClassName  = sClassName;
     ObjectType = sObjectType;
 }
Example #6
0
 public void FireTriggers(DomainObjectDataSet dataSet, XTriggerFireTimes fireTime, IXExecutionContext context)
 {
     if (m_triggersForObjects.Length == 0 && m_triggersForGroups.Length == 0 && m_triggersForWholeDataSet.Length == 0)
     {
         return;
     }
     if (m_triggersForObjects.Length + m_triggersForGroups.Length > 0)
     {
         IEnumerator enumerator = dataSet.GetModifiedObjectsEnumerator(false);
         while (enumerator.MoveNext())
         {
             DomainObjectData xobj = (DomainObjectData)enumerator.Current;
             fireTriggersForObject(xobj, fireTime, context);
         }
     }
     if (m_triggersForWholeDataSet.Length > 0)
     {
         foreach (XTriggerDescription trigger in m_triggersForWholeDataSet)
         {
             trigger.ExecuteTrigger(dataSet, null, context);
         }
     }
 }
Example #7
0
 private bool isTriggerMatchForObject(XTriggerDescription trigger, DomainObjectData xobj, XTriggerFireTimes fireTime)
 {
     if ((trigger.ObjectType == "*" || trigger.ObjectType == xobj.ObjectType) && trigger.FireTime == fireTime)
     {
         if (xobj.IsNew && (trigger.Action & XTriggerActions.Insert) > 0)
         {
             return(true);
         }
         else if (xobj.ToDelete && (trigger.Action & XTriggerActions.Delete) > 0)
         {
             return(true);
         }
         else if (!xobj.ToDelete && !xobj.IsNew && (trigger.Action & XTriggerActions.Update) > 0)
         {
             return(true);
         }
     }
     return(false);
 }