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); } } } }
public XTriggerDefinitionAttribute(XTriggerActions action, XTriggerFireTimes when, XTriggerFireTypes fireType, string sObjectType) { m_action = action; m_when = when; m_fireType = fireType; m_sObjectType = sObjectType; }
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; }
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 + ": не задано наименование типа объекта"); } }
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; }
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); } } }
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); }