Capítulo 21: BaseException y mensajes en EPLAN
6 min de lectura
Parte III: PathMap y mensajes - Sección 8: Manejo de errores y mensajes - Nivel: Principiante
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
- Conocer MessageBox.Show()
- Entender el concepto de logging
- Saber usar el atributo Start
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?
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?
using Eplan.EplApi.Base;
BaseException está en el namespace Eplan.EplApi.Base.
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?
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:
- 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 procesa
3. Niveles de mensajes
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)
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
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
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?
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()
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ía
BaseException mensaje = new BaseException("Hola", MessageLevel.Message);
// AHORA sí lo envía a la ventana de mensajes
mensaje.FixMessage();
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
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)
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)
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
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
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
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
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
9.1 Usar el nivel apropiado
// Bien - Nivel apropiado para cada situación
new 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 Error
new BaseException("Iniciando proceso", MessageLevel.Error).FixMessage(); // ❌
9.2 Mensajes descriptivos
// Bien - Específico y útil
new BaseException("Error al exportar: Ruta 'C:\\temp' no existe", MessageLevel.Error).FixMessage();
// Mal - Vago e inútil
new BaseException("Error", MessageLevel.Error).FixMessage();
9.3 No abusar de BaseException
// Mal - Demasiado detallado para información trivial
for (int i = 0; i < 1000; i++)
{
new BaseException("Procesando elemento " + i, MessageLevel.Message).FixMessage();
}
// Bien - Solo mensajes importantes
new BaseException("Procesando 1000 elementos...", MessageLevel.Message).FixMessage();
// ... procesamiento ...
new BaseException("Procesamiento completado", MessageLevel.Message).FixMessage();
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
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
Capítulo anterior
Capítulo 20: PathMap - Variables del sistema
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