Ir al contenido

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


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

  • Conocer MessageBox.Show()
  • Entender el concepto de logging
  • Saber usar el atributo [Start]

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.


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.)
using Eplan.EplApi.Base;

BaseException está en el namespace Eplan.EplApi.Base.

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

  • 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
}
  • 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

BaseException tiene diferentes niveles de severidad:

NivelDescripciónCuándo usar
MessageInformación generalProgreso, confirmaciones, datos informativos
WarningAdvertenciaAlgo inusual pero no crítico, precauciones
ErrorErrorAlgo salió mal, operación fallida

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.


BaseException mensaje = new BaseException("Texto del mensaje", MessageLevel.Nivel);
mensaje.FixMessage();

Dos pasos:

  1. Crear el objeto BaseException con el texto y nivel
  2. Enviar el mensaje con FixMessage()

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();
}
}

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.


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();

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.


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.

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.

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.


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:

  1. BaseException: Logging detallado con toda la información
  2. MessageBox: Notificación breve para que el usuario sepa que debe revisar

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.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");

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.


// 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(); // ❌
// 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();
// 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();

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

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”.


Capítulo 20: PathMap - Variables del sistema

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