Ramificar Macros [Guía de Usuario de Enterprise Architect]

Top Previous Next

Ramificar Macros

button_main button_prev button_next

Ramificar Macros proporcionan construcciones if-then-else. La CTF soporta una forma limitada de ramificación a través de los siguientes macros:

if

elseIf

else

endIf

endTemplate (el cual sale de la plantilla actual)

 

La estructura básica de los macros if y elseIf es:

%if <test> <operator> <test>%

 

donde <operator> puede ser uno de:

==

!=

 

y <test> puede ser uno de:

un literal string, encerrado entre comillas dobles

un macro de sustitución directo, sin los signos de porcentaje que lo encierren

una referencia de variable

 

Las Ramas pueden estar anidadas, y múltiples condiciones pueden ser especificadas utilizando uno de:

and o

or

 

Al especificar múltiples condiciones, and y or tienen el mismo orden de precedencia, y las condiciones son procesadas de izquierda a derecha.

Si las declaraciones condicionales en strings son sensibles a mayúsculas y minúsculas, "a String" no es equivalente a "A STRING". Por lo tanto en algunas situaciones es mejor establecer la variable $str= TO_LOWER(variable) o TO_UPPER(variable) y luego comparar a un caso específico.

Los Macros no están soportados en las declaraciones condicionales. Es mejor asignar los resultados de un macro (string) a una variable, y luego utilizar la variable en la comparación.

 

$fldType = %TO_LOWER($parameter1)%

$COMMENT = "Use the first 4 characters for Date and Time field types"

$fldType4 = %LEFT($fldType,4)%

%if $fldType4=="date"%

Datetime

%endif%

 

Esto toma un parámetro de valor “Datetime”, “DATETIME” o “Date”, y devuelve “Datetime”.

Los macros endif o endTemplate deben ser utilizados para significar el final de una rama. Aparte, el macro endTemplate causa que la plantilla se devuelva inmediatamente, si la rama correspondiente está siendo ejecutada.

Ejemplo 1:

%if elemType == "Interface"%

;

%else%

%OperationBody%

%endif%

 

En este caso:

Si el elemType es "Interface" se devuelve un punto y coma

Si el elemType no es "Interface", una plantilla llamada Cuerpo de Operación (Operation Body) es llamada

 

Ejemplo 2:

$bases="ClassBase"

$interfaces=""%

%if $bases !="" and $interfaces !=""%

: $bases, $interfaces

%elseIf $bases !=""%

: $bases

%elseIf $interfaces !=""%

: $interfaces=""%

%endif%

 

En este caso el texto devuelto es :ClassBase.

Condiciones utilizando Valor Boolean:

Al hacer ramificaciones utilizando condiciones que involucran una casilla de sistema (campos boolean), tal como Attribute.Static (attStatic) la declaración condicional estaría escrita como:

%if attStatic == "T"%

 

Por ejemplo:

%if attCollection=="T" or attOrderedMultiplicity == "T"%

%endTemplate%

 

Aprender más

Macros de Sustitución de Campo de Atributo