Capítulo 21: BaseException - Mensajes del sistema
Capítulo 21: BaseException - Mensajes del sistema
Sección titulada «Capítulo 21: BaseException - Mensajes del sistema»Parte III: PathMap y mensajes - Sección 8: Manejo de errores y mensajes - Nivel: Principiante
Objetivos de aprendizaje
Sección titulada «Objetivos de aprendizaje»Al finalizar este capítulo serás capaz de:
- Entender qué es BaseException y para qué sirve
- Comprender la diferencia entre MessageBox y BaseException
- Conocer los niveles de mensajes (Message, Warning, Error)
- Usar FixMessage() correctamente
- Decidir cuándo usar cada tipo de mensaje
- Ver los mensajes en la ventana “Mensajes de sistema” de EPLAN
Requisitos previos
Sección titulada «Requisitos previos»- Conocer MessageBox.Show()
- Entender el concepto de logging
- Saber usar el atributo [Start]
Introducción: Dos formas de comunicar
Sección titulada «Introducción: Dos formas de comunicar»Hasta ahora has usado MessageBox para mostrar información al usuario:
MessageBox.Show("Proyecto guardado correctamente");Esto funciona, pero tiene limitaciones:
- Bloquea EPLAN hasta que el usuario cierre el mensaje
- Se pierde después de cerrar (no queda registro)
- Interrumpe el flujo de trabajo del usuario
Para mensajes informativos, warnings y errores que no requieren intervención inmediata, EPLAN ofrece BaseException.
1. ¿Qué es BaseException?
Sección titulada «1. ¿Qué es BaseException?»1.1 Definición
Sección titulada «1.1 Definición»BaseException es una clase que permite enviar mensajes a la ventana “Mensajes de sistema” de EPLAN.
Características principales:
- No bloquea la interfaz de usuario
- Queda registrado en el historial de mensajes
- Se puede revisar después en cualquier momento
- Categorizado por nivel (Message, Warning, Error, etc.)
1.2 ¿Dónde se define?
Sección titulada «1.2 ¿Dónde se define?»using Eplan.EplApi.Base;BaseException está en el namespace Eplan.EplApi.Base.
1.3 Analogía: MessageBox vs BaseException
Sección titulada «1.3 Analogía: MessageBox vs BaseException»MessageBox es como una alarma sonora:
- Inmediata y obvia
- Interrumpe todo
- Requiere atención inmediata
- No queda registro después de apagarla
BaseException es como un log en un archivo:
- Discreta
- No interrumpe
- Se puede revisar cuando sea conveniente
- Queda registro permanente
2. ¿Cuándo usar cada uno?
Sección titulada «2. ¿Cuándo usar cada uno?»2.1 Usar MessageBox cuando:
Sección titulada «2.1 Usar MessageBox cuando:»- Requieres confirmación del usuario (¿Continuar? Sí/No)
- Es crítico que el usuario vea el mensaje ahora mismo
- Necesitas respuesta del usuario para continuar
- Es información muy importante que no puede pasarse por alto
Ejemplo:
if (MessageBox.Show("¿Desea sobrescribir el archivo?", "Confirmación", MessageBoxButtons.YesNo) == DialogResult.Yes){ // Sobrescribir}2.2 Usar BaseException cuando:
Sección titulada «2.2 Usar BaseException cuando:»- Es información de progreso (“Procesando página 5 de 10…”)
- Es un warning que no requiere acción inmediata
- Quieres logging para debugging o auditoría
- No quieres interrumpir el flujo de trabajo
- El script procesa muchos elementos (sería molesto mostrar 100 MessageBox)
Ejemplo:
new BaseException("Procesando página 5 de 10...", MessageLevel.Message).FixMessage();// El usuario puede seguir trabajando mientras se procesa3. Niveles de mensajes
Sección titulada «3. Niveles de mensajes»3.1 Los tres niveles principales
Sección titulada «3.1 Los tres niveles principales»BaseException tiene diferentes niveles de severidad:
| Nivel | Descripción | Cuándo usar |
|---|---|---|
| Message | Información general | Progreso, confirmaciones, datos informativos |
| Warning | Advertencia | Algo inusual pero no crítico, precauciones |
| Error | Error | Algo salió mal, operación fallida |
3.2 Niveles adicionales (menos comunes)
Sección titulada «3.2 Niveles adicionales (menos comunes)»El script oficial también muestra:
- Assert - Validaciones internas
- Trace - Debugging detallado
- FatalError - Error crítico que requiere cerrar EPLAN
En la práctica, usa principalmente: Message, Warning y Error.
4. Cómo usar BaseException
Sección titulada «4. Cómo usar BaseException»4.1 Sintaxis básica
Sección titulada «4.1 Sintaxis básica»BaseException mensaje = new BaseException("Texto del mensaje", MessageLevel.Nivel);mensaje.FixMessage();Dos pasos:
- Crear el objeto BaseException con el texto y nivel
- Enviar el mensaje con FixMessage()
4.2 Ejemplo básico del script oficial
Sección titulada «4.2 Ejemplo básico del script oficial»Basado en EPLAN-Scripting-4.0/03_Classes/08_BaseException.cs:
using Eplan.EplApi.Base;using Eplan.EplApi.Scripting;
public class MensajesSistema{ [Start] public void Function() { // Mensaje informativo BaseException mensaje = new BaseException("Operación completada", MessageLevel.Message); mensaje.FixMessage();
// Advertencia BaseException advertencia = new BaseException("Archivo no encontrado", MessageLevel.Warning); advertencia.FixMessage();
// Error BaseException error = new BaseException("Falló la exportación", MessageLevel.Error); error.FixMessage(); }}4.3 ¿Dónde aparecen los mensajes?
Sección titulada «4.3 ¿Dónde aparecen los mensajes?»Los mensajes aparecen en: Ver > Mensajes de sistema (o presionar F8).
Importante: Si no ves la ventana “Mensajes de sistema”, ábrela desde el menú Ver en EPLAN.
5. El método FixMessage()
Sección titulada «5. El método FixMessage()»5.1 ¿Qué hace FixMessage()?
Sección titulada «5.1 ¿Qué hace FixMessage()?»FixMessage() envía el mensaje a la ventana “Mensajes de sistema” de EPLAN.
Sin llamar a FixMessage(), el mensaje existe pero no se muestra.
// Solo crea el objeto, NO lo envíaBaseException mensaje = new BaseException("Hola", MessageLevel.Message);
// AHORA sí lo envía a la ventana de mensajesmensaje.FixMessage();5.2 Forma abreviada (en una línea)
Sección titulada «5.2 Forma abreviada (en una línea)»En lugar de dos líneas, puedes hacerlo en una:
new BaseException("Mensaje", MessageLevel.Message).FixMessage();Esto es común en código de producción.
6. Ejemplos pedagógicos por nivel
Sección titulada «6. Ejemplos pedagógicos por nivel»6.1 MessageLevel.Message (Información)
Sección titulada «6.1 MessageLevel.Message (Información)»Uso: Informar progreso, confirmaciones, datos generales.
using Eplan.EplApi.Base;using Eplan.EplApi.Scripting;
public class MensajeInformativo{ [Start] public void Function() { // Informar inicio de proceso new BaseException("Iniciando exportación de proyecto...", MessageLevel.Message).FixMessage();
// Simular procesamiento System.Threading.Thread.Sleep(1000);
// Informar finalización new BaseException("Exportación completada correctamente", MessageLevel.Message).FixMessage(); }}Cuándo usar: Proceso normal, todo va bien.
6.2 MessageLevel.Warning (Advertencia)
Sección titulada «6.2 MessageLevel.Warning (Advertencia)»Uso: Algo inusual pero no crítico, el proceso puede continuar.
using Eplan.EplApi.Base;using Eplan.EplApi.Scripting;
public class MensajeAdvertencia{ [Start] public void Function() { new BaseException( "Advertencia: Algunos artículos no tienen precio definido", MessageLevel.Warning ).FixMessage(); }}Cuándo usar: El script continúa pero el usuario debe revisar algo después.
6.3 MessageLevel.Error (Error)
Sección titulada «6.3 MessageLevel.Error (Error)»Uso: Algo salió mal, operación fallida.
using Eplan.EplApi.Base;using Eplan.EplApi.Scripting;
public class MensajeError{ [Start] public void Function() { new BaseException( "Error: No se pudo conectar a la base de datos", MessageLevel.Error ).FixMessage(); }}Cuándo usar: Falló algo importante, el usuario debe saber que hubo un problema.
7. Combinando MessageBox y BaseException
Sección titulada «7. Combinando MessageBox y BaseException»7.1 Patrón común: Error crítico
Sección titulada «7.1 Patrón común: Error crítico»Para errores críticos que requieren atención inmediata:
using System;using System.Windows.Forms;using Eplan.EplApi.Base;using Eplan.EplApi.Scripting;
public class ErrorCritico{ [Start] public void Function() { try { // Intentar operación // ...operación que puede fallar...
// Si falla, registrar en mensajes de sistema new BaseException("Error al procesar archivo", MessageLevel.Error).FixMessage();
// Y TAMBIÉN mostrar al usuario inmediatamente MessageBox.Show( "Error al procesar archivo.\nRevisa 'Mensajes de sistema' para más detalles.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error ); } catch (Exception ex) { // Logging detallado new BaseException("Error: " + ex.Message, MessageLevel.Error).FixMessage();
// Notificación al usuario MessageBox.Show("Ocurrió un error. Ver 'Mensajes de sistema'.", "Error"); } }}Patrón:
- BaseException: Logging detallado con toda la información
- MessageBox: Notificación breve para que el usuario sepa que debe revisar
7.2 Patrón común: Progreso de lote
Sección titulada «7.2 Patrón común: Progreso de lote»Para procesar múltiples elementos:
using Eplan.EplApi.Base;using Eplan.EplApi.Scripting;using System.Windows.Forms;
public class ProcesarLote{ [Start] public void Function() { string[] archivos = { "archivo1.xml", "archivo2.xml", "archivo3.xml" };
// Mensaje inicial (MessageBox) MessageBox.Show("Procesando " + archivos.Length + " archivos...");
// Procesar cada archivo (BaseException para progreso) for (int i = 0; i < archivos.Length; i++) { new BaseException( "Procesando archivo " + (i + 1) + " de " + archivos.Length + ": " + archivos[i], MessageLevel.Message ).FixMessage();
// Simular procesamiento System.Threading.Thread.Sleep(500); }
// Mensaje final (MessageBox) MessageBox.Show("Todos los archivos procesados. Revisa 'Mensajes de sistema' para detalles."); }}Ventaja: El usuario no tiene que cerrar 3 MessageBox, puede seguir trabajando mientras se procesan los archivos.
8. Ver los mensajes en EPLAN
Sección titulada «8. Ver los mensajes en EPLAN»8.1 Abrir la ventana “Mensajes de sistema”
Sección titulada «8.1 Abrir la ventana “Mensajes de sistema”»Opción 1: Menú → Ver → Mensajes de sistema Opción 2: Presionar F8 Opción 3: Ejecutar comando en script:
CommandLineInterpreter cli = new CommandLineInterpreter();cli.Execute("SystemErrDialog");8.2 Interpretar los mensajes
Sección titulada «8.2 Interpretar los mensajes»En la ventana verás columnas:
- Nivel (icono): Message (i), Warning (⚠), Error (✗)
- Hora: Cuándo se generó el mensaje
- Texto: El contenido del mensaje
Los mensajes se acumulan durante la sesión de EPLAN.
9. Buenas prácticas
Sección titulada «9. Buenas prácticas»9.1 Usar el nivel apropiado
Sección titulada «9.1 Usar el nivel apropiado»// Bien - Nivel apropiado para cada situaciónnew BaseException("Iniciando proceso", MessageLevel.Message).FixMessage();new BaseException("Campo vacío, usando valor por defecto", MessageLevel.Warning).FixMessage();new BaseException("Archivo no encontrado", MessageLevel.Error).FixMessage();
// Mal - Todo como Errornew BaseException("Iniciando proceso", MessageLevel.Error).FixMessage(); // ❌9.2 Mensajes descriptivos
Sección titulada «9.2 Mensajes descriptivos»// Bien - Específico y útilnew BaseException("Error al exportar: Ruta 'C:\\temp' no existe", MessageLevel.Error).FixMessage();
// Mal - Vago e inútilnew BaseException("Error", MessageLevel.Error).FixMessage();9.3 No abusar de BaseException
Sección titulada «9.3 No abusar de BaseException»// Mal - Demasiado detallado para información trivialfor (int i = 0; i < 1000; i++){ new BaseException("Procesando elemento " + i, MessageLevel.Message).FixMessage();}
// Bien - Solo mensajes importantesnew BaseException("Procesando 1000 elementos...", MessageLevel.Message).FixMessage();// ... procesamiento ...new BaseException("Procesamiento completado", MessageLevel.Message).FixMessage();Resumen
Sección titulada «Resumen»BaseException es tu herramienta de logging en EPLAN:
Conceptos clave:
- BaseException envía mensajes a “Mensajes de sistema” sin bloquear EPLAN
- Tiene tres niveles principales: Message (info), Warning (advertencia), Error (error)
- Requiere llamar a FixMessage() para enviar el mensaje
- Los mensajes quedan registrados y se pueden revisar después
Cuándo usar cada herramienta:
- MessageBox: Requiere atención/respuesta inmediata del usuario
- BaseException: Logging, progreso, información que puede revisarse después
Patrón común:
- BaseException para logging detallado
- MessageBox para notificaciones críticas
- Combinar ambos cuando sea necesario
Preguntas frecuentes
Sección titulada «Preguntas frecuentes»P: ¿BaseException lanza una excepción real de C#?
R: No, a pesar del nombre. Solo envía un mensaje. No interrumpe la ejecución del script.
P: ¿Puedo usar BaseException sin FixMessage()?
R: No tiene sentido. Sin FixMessage() el mensaje no se envía a ninguna parte.
P: ¿Los mensajes persisten después de cerrar EPLAN?
R: No. Se pierden al cerrar EPLAN. Para persistencia, escribe a un archivo de log.
P: ¿Puedo personalizar el formato de los mensajes?
R: No directamente. EPLAN controla el formato en “Mensajes de sistema”.
Conexiones
Sección titulada «Conexiones»Capítulo anterior
Sección titulada «Capítulo anterior»Capítulo 20: PathMap - Variables del sistema
Próximo capítulo
Sección titulada «Próximo capítulo»Capítulo 22: Decider - Tomar decisiones
En el próximo capítulo aprenderás a crear métodos que devuelven valores y cómo organizar mejor tu código.
Última actualización: Enero 2025
Tiempo de lectura estimado: 20 minutos
Código de ejemplo: code/cap-21/
Script de referencia: EPLAN-Scripting-4.0/03_Classes/08_BaseException.cs