/// <summary> /// Captura todos os eventos da classe /// e adiciona escuta para os objetos do SAP /// e pega o formulário do SAP /// </summary> internal void GetEvents() { foreach (var method in this.GetType().GetMethods()) { foreach (var item in Attribute.GetCustomAttributes(method)) { if (item is FormSystemEventAttribute) { if (method.GetParameters().Length != 2 || method.GetParameters()[0].ParameterType != typeof(ItemEvent) || method.GetParameters()[1].ParameterType != typeof(Boolean) ) { throw new Exception("Os métodos que escutam eventos do SAP devem ser 2 parametros ( EventArItemEvent , bool )"); } var customAtributte = item as FormSystemEventAttribute; MethodEvents.Add(new MethodInfoEvent { Attribute = customAtributte, MethodInfo = method, }); } } } }
/// <summary> /// Faz um evento ser disparado /// </summary> /// <param name="pVal1">Argumentos do Eventos que está sendo disparado</param> /// <param name="BubbleEvent">Caso queira parar o evento set false, true o evento continua</param> internal void DoEvent(Nampula.UI.ItemEvent pVal1, out bool BubbleEvent) { BubbleEvent = true; var methodInfo = MethodEvents.FindAll( p => p.Attribute.EventType == pVal1.EventType & p.Attribute.ItemID == pVal1.ItemUID & p.Attribute.BeforeAction == pVal1.BeforeAction); var parameters = new Object[] { pVal1, BubbleEvent }; foreach (var methodInfoEvent in methodInfo) { methodInfoEvent.MethodInfo.Invoke(this, parameters); if (!Convert.ToBoolean(parameters[1])) { BubbleEvent = false; break; } } //throw new NotImplementedException( ); }