Ir al contenido

Capítulo 19: Parámetros múltiples en ActionCallingContext

Capítulo 19: Parámetros múltiples en ActionCallingContext

Sección titulada «Capítulo 19: Parámetros múltiples en ActionCallingContext»

Parte II: Primeros pasos con EPLAN API - Sección 6: CommandLineInterpreter básico - Nivel: Intermedio


Al finalizar este capítulo serás capaz de:

  • Recibir parámetros en tu script con ActionCallingContext
  • Usar GetParameter() para leer valores pasados al script
  • Pasar múltiples parámetros complejos a comandos
  • Crear scripts parametrizables y reutilizables
  • Combinar AddParameter() y GetParameter()

Antes de comenzar este capítulo debes:

  • Haber completado el Capítulo 18 (comandos con parámetros)
  • Entender ActionCallingContext y AddParameter()
  • Saber ejecutar comandos con parámetros

En el capítulo anterior aprendiste a pasar parámetros a comandos usando AddParameter(). Pero, ¿qué pasa si quieres que tu propio script reciba parámetros?

Imagina que quieres crear un script reutilizable que configure un proyecto, pero que los valores (nombre de cliente, ubicación, etc.) cambien cada vez que lo ejecutas.

Para esto necesitas recibir parámetros en tu script usando GetParameter().


Uso: Enviar parámetros a un comando de EPLAN

ActionCallingContext acc = new ActionCallingContext();
acc.AddParameter("PROJECTNAME", "MiProyecto");
cli.Execute("comando", acc);

Uso: Recibir parámetros en tu script desde fuera

[Start]
public void Execute(ActionCallingContext oActionCallingContext)
{
string valorRecibido = "";
oActionCallingContext.GetParameter("NOMBRE_PARAMETRO", ref valorRecibido);
}

Nota: Puedes hacer ambas cosas en el mismo script.


oActionCallingContext.GetParameter(string nombre, ref string variable);

Parámetros:

  • nombre - Nombre del parámetro a obtener
  • variable - Variable donde se almacenará el valor (debe usar ref)

Importante: La variable debe declararse antes de usarla y debe ser ref.

using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Scripting;
using System.Windows.Forms;
public class ScriptConParametros
{
[Start]
public void Execute(ActionCallingContext oActionCallingContext)
{
// Declarar variable para recibir el parámetro
string nombreProyecto = "";
// Obtener parámetro
oActionCallingContext.GetParameter("ProjectName", ref nombreProyecto);
// Usar el parámetro
MessageBox.Show("Nombre del proyecto: " + nombreProyecto);
}
}

Línea 9: Método con ActionCallingContext

public void Execute(ActionCallingContext oActionCallingContext)

Tu método recibe el contexto como parámetro.

Línea 12: Declarar variable

string nombreProyecto = "";

Inicializas la variable que recibirá el valor.

Línea 15: Obtener parámetro

oActionCallingContext.GetParameter("ProjectName", ref nombreProyecto);

Obtienes el valor del parámetro “ProjectName” y lo almacenas en nombreProyecto.

Nota: ref es obligatorio para que GetParameter() pueda modificar la variable.


Basado en EPLAN-Scripting-4.0/02_RunActions/EGCExecutor.cs:

using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Scripting;
using System.Windows.Forms;
public class ConfigurarProyecto
{
[Start]
public void Execute(ActionCallingContext oActionCallingContext)
{
// Declarar variables para recibir parámetros
string nombreProyecto = "";
string cliente = "";
string ubicacion = "";
string desarrollador = "";
// Obtener múltiples parámetros
oActionCallingContext.GetParameter("ProjectName", ref nombreProyecto);
oActionCallingContext.GetParameter("Customer", ref cliente);
oActionCallingContext.GetParameter("Location", ref ubicacion);
oActionCallingContext.GetParameter("Developed", ref desarrollador);
// Usar los parámetros
string mensaje = "Configurando proyecto:\n\n" +
"Proyecto: " + nombreProyecto + "\n" +
"Cliente: " + cliente + "\n" +
"Ubicación: " + ubicacion + "\n" +
"Desarrollado por: " + desarrollador;
MessageBox.Show(mensaje, "Configuración de Proyecto");
}
}
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Scripting;
using System.Windows.Forms;
public class ScriptConValidacion
{
[Start]
public void Execute(ActionCallingContext oActionCallingContext)
{
// Parámetros obligatorios
string nombreProyecto = "";
oActionCallingContext.GetParameter("ProjectName", ref nombreProyecto);
if (string.IsNullOrEmpty(nombreProyecto))
{
MessageBox.Show("Error: ProjectName es obligatorio");
return;
}
// Parámetros opcionales con valor por defecto
string cliente = "";
oActionCallingContext.GetParameter("Customer", ref cliente);
if (string.IsNullOrEmpty(cliente))
{
cliente = "Cliente no especificado";
}
MessageBox.Show(
"Proyecto: " + nombreProyecto + "\n" +
"Cliente: " + cliente
);
}
}

Un patrón común es recibir parámetros en tu script y luego usarlos para ejecutar comandos:

using System;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Scripting;
using System.Windows.Forms;
public class ConfigurarYEjecutar
{
[Start]
public void Execute(ActionCallingContext oActionCallingContext)
{
try
{
// 1. Recibir parámetros
string nombreProyecto = "";
string rutaExportacion = "";
oActionCallingContext.GetParameter("ProjectName", ref nombreProyecto);
oActionCallingContext.GetParameter("ExportPath", ref rutaExportacion);
// Validar parámetros
if (string.IsNullOrEmpty(nombreProyecto))
{
MessageBox.Show("Error: ProjectName es obligatorio");
return;
}
// 2. Usar parámetros para ejecutar comandos
CommandLineInterpreter cli = new CommandLineInterpreter();
// Generar reportes
ActionCallingContext acc = new ActionCallingContext();
acc.AddParameter("TYPE", "PROJECT");
acc.AddParameter("PROJECTNAME", nombreProyecto);
cli.Execute("reports", acc);
MessageBox.Show("Configuración completada para: " + nombreProyecto);
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
}

Aunque GetParameter() siempre trabaja con strings, puedes convertir los valores:

// Recibir como string
string alturaStr = "";
string sobrescribirStr = "";
oActionCallingContext.GetParameter("height", ref alturaStr);
oActionCallingContext.GetParameter("overwrite", ref sobrescribirStr);
// Convertir a otros tipos
int altura = int.Parse(alturaStr);
bool sobrescribir = sobrescribirStr == "1" || sobrescribirStr.ToLower() == "true";
// Usar los valores convertidos
if (sobrescribir && altura > 20)
{
// Hacer algo...
}
string alturaStr = "";
oActionCallingContext.GetParameter("height", ref alturaStr);
int altura;
if (int.TryParse(alturaStr, out altura))
{
MessageBox.Show("Altura: " + altura);
}
else
{
MessageBox.Show("Error: altura debe ser un número");
}

6.1 Script para configurar propiedades de proyecto

Sección titulada «6.1 Script para configurar propiedades de proyecto»

Basado en patrones de EGCExecutor.cs:

using System;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Scripting;
using Eplan.EplApi.Base;
using System.Windows.Forms;
public class ConfigurarPropiedadesProyecto
{
[Start]
public void Execute(ActionCallingContext oActionCallingContext)
{
try
{
// Recibir parámetros
string cliente = "";
string descripcion = "";
string ubicacion = "";
oActionCallingContext.GetParameter("Customer", ref cliente);
oActionCallingContext.GetParameter("Description", ref descripcion);
oActionCallingContext.GetParameter("Location", ref ubicacion);
// Validar que al menos un parámetro esté presente
if (string.IsNullOrEmpty(cliente) &&
string.IsNullOrEmpty(descripcion) &&
string.IsNullOrEmpty(ubicacion))
{
MessageBox.Show("Error: Debe proporcionar al menos un parámetro");
return;
}
// Configurar propiedades del proyecto
if (!string.IsNullOrEmpty(cliente))
{
SetProjectProperty("10102", cliente);
}
if (!string.IsNullOrEmpty(descripcion))
{
SetProjectProperty("10011", descripcion);
}
if (!string.IsNullOrEmpty(ubicacion))
{
SetProjectProperty("10032", ubicacion);
}
MessageBox.Show(
"Propiedades configuradas correctamente:\n\n" +
"Cliente: " + cliente + "\n" +
"Descripción: " + descripcion + "\n" +
"Ubicación: " + ubicacion,
"Éxito"
);
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message, "Error");
}
}
private void SetProjectProperty(string propertyId, string value)
{
CommandLineInterpreter cli = new CommandLineInterpreter();
ActionCallingContext acc = new ActionCallingContext();
acc.AddParameter("PropertyIdentName", propertyId);
acc.AddParameter("PropertyIndex", "0");
acc.AddParameter("PropertyValue", value);
cli.Execute("XEsSetProjectPropertyAction", acc);
}
}

7.1 Inicializar variables antes de GetParameter()

Sección titulada «7.1 Inicializar variables antes de GetParameter()»
// Bien
string parametro = "";
oActionCallingContext.GetParameter("PARAM", ref parametro);
// Mal - variable no inicializada
string parametro;
oActionCallingContext.GetParameter("PARAM", ref parametro); // Error
string ruta = "";
oActionCallingContext.GetParameter("PATH", ref ruta);
if (string.IsNullOrEmpty(ruta))
{
MessageBox.Show("Error: PATH no puede estar vacío");
return;
}
string idioma = "";
oActionCallingContext.GetParameter("Language", ref idioma);
if (string.IsNullOrEmpty(idioma))
{
idioma = "es_ES"; // Valor por defecto
}
/// <summary>
/// Configura propiedades del proyecto.
/// Parámetros esperados:
/// - Customer: Nombre del cliente (opcional)
/// - Description: Descripción del proyecto (opcional)
/// - Location: Ubicación del proyecto (opcional)
/// </summary>
[Start]
public void Execute(ActionCallingContext oActionCallingContext)
{
// ...
}

Puedes ejecutar tu script desde la línea de comandos de EPLAN pasando parámetros:

ExecuteScript /ScriptPath:"C:\Scripts\MiScript.cs" /Customer:"Acme Corp" /Location:"Madrid"
CommandLineInterpreter cli = new CommandLineInterpreter();
ActionCallingContext acc = new ActionCallingContext();
acc.AddParameter("Customer", "Acme Corp");
acc.AddParameter("Location", "Madrid");
cli.Execute("MiAccionPersonalizada", acc);

Si llamas a EPLAN desde una aplicación externa, puedes pasar parámetros vía línea de comandos.


En este capítulo aprendiste:

  • GetParameter() permite recibir parámetros en tu script
  • Usar ref es obligatorio con GetParameter()
  • Puedes recibir múltiples parámetros
  • Combinar GetParameter() (recibir) y AddParameter() (enviar)
  • Validar y convertir parámetros recibidos
  • Proporcionar valores por defecto para parámetros opcionales
  • Documentar los parámetros que tu script espera

P: ¿Por qué necesito ref en GetParameter()?

R: Porque GetParameter() modifica la variable que le pasas. En C#, ref permite que un método modifique el valor de una variable.

P: ¿Qué pasa si pido un parámetro que no fue proporcionado?

R: La variable permanece con su valor inicial (vacía si la inicializaste como ""). Por eso es importante validar.

P: ¿Puedo tener parámetros obligatorios y opcionales?

R: Sí, usa validación para los obligatorios y valores por defecto para los opcionales.

P: ¿GetParameter() y AddParameter() son lo mismo?

R: No. GetParameter() recibe parámetros en tu script. AddParameter() envía parámetros a comandos.


Capítulo 18: Comandos con parámetros

Capítulo 20: PathMap - Variables del sistema

En el próximo capítulo aprenderás a usar PathMap.SubstitutePath() para obtener información del proyecto actual.


Última actualización: Enero 2025 Tiempo de lectura estimado: 25-30 minutos Código de ejemplo: code/cap-19/ Script de referencia: EPLAN-Scripting-4.0/02_RunActions/EGCExecutor.cs (simplificado)