/// <summary> /// Implementa el Método de la Interfaz. /// Inicia el sistema de acuerdo al tipo de llamada entrante, en donde /// en principio puede ejecutarse el sistema en modo 'BATCH': sin UI y /// finalizando al terminar la ejecucion de los procesos batch; ó, en /// cualquier otro modo, con UI y dejando 'fluir' la aplicación. /// </summary> public virtual void iniciarSistema( ENivelMensaje nivelEjecucion, IVistaCuadroInicio wininicio, IVistaVentanaPpal winppal, IControladorLogging log, IControladorSeguridad security) { if (nivelEjecucion == ENivelMensaje.BATCH) try { iniciarSistemaSinUI(nivelEjecucion, log, security); ejecutarProcesosBatch(); } catch (Exception e) { logear("APP-NOINIT-ERROR", ENivelMensaje.FATAL, e.ToString()); } finally { cerrarSistema(); } else try { iniciarSistemaConUI(nivelEjecucion, null, null, null, null); } catch (Exception e) { mostrar("APP-NOINIT-ERROR", ENivelMensaje.FATAL, e.ToString(), true); cerrarSistema(); } }
/// <summary> /// Implementa el Método de la Interfaz. /// </summary> protected virtual void iniciarSistemaConUI( ENivelMensaje nivelEjecucion, IVistaCuadroInicio wininicio, IVistaVentanaPpal winppal, IControladorLogging log, IControladorSeguridad security) { try { // Inicializa los componentes internos necesarios _nivelEjecucion = nivelEjecucion; AppPath = Application.StartupPath; // Inicializa los parametros del mismo. iniciarParametros(); // Establece componentes usados en la ejecución del sistema _log = log ?? new LogSistema(nivelEjecucion); _seguridad = security ?? new SecureService(); // Inicia las interfaces gráficas _wininicio = wininicio ?? new WinInicio(this); _vista = winppal ?? new WinPrincipal(this); // Arranca la ventana de inicio que se encarga de // realizar el inicio efectivo de este sistema. _wininicio.abrir(); _wininicio.iniciarSistema(); // Inicia la vista (ventana) principal del sistema. iniciarUi(); } catch (Exception e) { MessageBox.Show(string.Format("ERROR FATAL DEL SISTEMA!\r\n{0}\r\n{1}", Mensaje.TextoMensaje("APP-NOINIT-ERROR"), e), Mensaje.TextoMensaje("TITULO-SHOW"), MessageBoxButtons.OK, MessageBoxIcon.Stop); cerrarSistema(); } }
/// <summary> /// Implementa el Método de la Interfaz. /// </summary> public virtual void generarMenu(IVistaVentanaPpal vistaVentana, MenuStrip menu, ToolStrip toolbar) { ToolStripMenuItem item, subitem, tritem; ToolStripButton subuton, tributon; bool agregarSeparador = false; // Primero borra todos los que tiene actualmente el menu menu.Items.Clear(); toolbar.Items.Clear(); Usuario usuario = (_seguridad.haySesionActiva()) ? _seguridad.getUsuario() : null; logear("MENU-BASE", ENivelMensaje.INFORMACION, Mensaje.TextoMensaje("USUARIO-PRE") + usuario); // Arranca recorriendo las listas de primer nivel (según atributo 'orden' de PARAMETRO) try { IList<Parametro> listaMenus = Parametros.GetByTipoClaveLike(ETipoParametro.MENU, "MENU."); if (listaMenus.Count > 0) foreach (Parametro p in listaMenus) { // Primero controla su debe colocar el menu (solo si usuario no es nulo // ó si el parametro, asociado al menu, tiene el campo valorbool = true) if (usuario == null && !p.Valorbool) continue; // Crea la opción de menu de primer nivel item = new ToolStripMenuItem(p.Nombre); bool agregarMenu = false; // Para cada una obtiene las opciones de 2do nivel (SUBMENU, según 'orden') IList<Parametro> listaSubMenus = Parametros.GetByTipoClaveLike(ETipoParametro.SUBMENU, p.Clave); if (listaSubMenus.Count > 0) foreach (Parametro ps in listaSubMenus) // Verifica si se trata de un separador o un menu real // (si es separador lo guarda y solo lo agrega si hay // alguna otra opcion de menú real que venga despues) if (ps.Clave.EndsWith("$LINEA$")) agregarSeparador = true; else if (ps.Clave.Equals("MENU.SISTEMA.INICIARSESION") && usuario != null) continue; else if (ps.Clave.Equals("MENU.SISTEMA.CERRARSESION") && usuario == null) continue; else { // Crea la opción de menu de segundo nivel (aqui se // agrega en la propiedad TAG el nombre del caso de // uso a dispararse en caso de seleccionar el mismo) subitem = new ToolStripMenuItem(ps.Nombre) {Tag = ps.Valorstring}; // Para el submenu obtiene opciones de 3er orden (TRIMENU, según 'orden') IList<Parametro> listaTriMenus = Parametros.GetByTipoClaveLike(ETipoParametro.TRIMENU, ps.Clave); if (listaTriMenus.Count > 0) foreach (Parametro pt in listaTriMenus) { // Verifica si debe validar el permiso y solo agrega // la opción de trimenu si se pasan las validaciones if (!pt.Valorbool && (usuario == null || !usuario.poseePermiso(pt, ETipoPermiso.EJECUTAR))) continue; // Crea el trimenu y asigna un delegado para el click tritem = new ToolStripMenuItem(pt.Nombre) {Tag = pt.Valorstring}; tritem.Click += vistaVentana.subMenuClick; subitem.DropDownItems.Add(tritem); // verifica si debe agregar un boton en la barra if (pt.Valorchar == 'B') { tributon = new ToolStripButton( pt.Nombre .Replace("...", string.Empty) .Replace("&", string.Empty) .Replace("Gestión de", string.Empty) .Replace("Administración de", string.Empty) .Replace("Registros de", string.Empty).ToUpper()) {Tag = pt.Valorstring}; tributon.Click += vistaVentana.subMenuClick; toolbar.Items.Add(tributon); } } // Primero verifica si el usuario actual posee el permiso necesario if (!ps.Valorbool && (usuario == null || !usuario.poseePermiso(ps, ETipoPermiso.EJECUTAR))) continue; // Si tiene permiso asigna el submenu y el delegado para el click string icomenu = ps.Valorstring.Replace('.', '_'); Image img = ((Image)(Resources.ResourceManager.GetObject(icomenu))); subitem.Image = img; subitem.Click += vistaVentana.subMenuClick; if (agregarSeparador) { item.DropDownItems.Add(new ToolStripSeparator()); agregarSeparador = false; } item.DropDownItems.Add(subitem); agregarMenu = true; // verifica si debe agregar un boton en la barra if (ps.Valorchar == 'B') { subuton = new ToolStripButton( ps.Nombre .Replace("...", string.Empty) .Replace("&", string.Empty) .Replace("Gestión de", string.Empty) .Replace("Administración de", string.Empty) .Replace("Registros de", string.Empty).ToUpper()) {Tag = ps.Valorstring}; subuton.Click += vistaVentana.subMenuClick; subuton.Image = img; subuton.ImageAlign = ContentAlignment.TopCenter; subuton.TextAlign = ContentAlignment.BottomCenter; subuton.TextImageRelation = TextImageRelation.ImageAboveText; subuton.ToolTipText = ps.Nombre.Replace("&", string.Empty); toolbar.Items.Add(subuton); } } // Si el menu tiene algo se agrega, pero verifica // primero si hay separador, para agregar al menu if (agregarMenu) menu.Items.Add(item); } } catch (Exception e) { throw new AppErrorException("MENU-NOK", e.ToString()); } }