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:

NivelDescripciónCuándo usar
MessageInformación generalProgreso, confirmaciones, datos informativos
WarningAdvertenciaAlgo inusual pero no crítico, precauciones
ErrorErrorAlgo 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:

  1. Crear el objeto BaseException con el texto y nivel
  2. 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:

  1. BaseException: Logging detallado con toda la información
  2. 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