分岐マクロ

<< 目次を表示 >>

ページ位置:  Enterprise Architectの拡張(SDK) > コード生成テンプレートフレームワーク > コード生成テンプレートフレームワーク > コード生成テンプレートの文法 > マクロ > 制御マクロ >

分岐マクロ

CTFでは、次のマクロで分岐処理を実現する機能提供しています。

 

この if と elseif の基本的な構成は以下のような構成です。

 

%if <param> <operator> <param>%

 

<operator>は以下のうちのいずれかです。

 

また、 <param>は次のうちのどれかです。

 

<operator>で<,>,<=,>=のいずれかを利用する場合には、比較対象の<param>は数値として解釈可能な内容である必要があります。

 

分岐処理はネストする(if文の処理の中でif文を利用する)こともできます。また、以下のものを利用して複数の条件を指定することもできます。

 

注意:

複数の条件を指定した場合には、それぞれの条件の評価は単純に左から右の順番で行われます。

 

なお、条件文では、大文字小文字は区別されます。例えば、"a String"と"A STRING"は一致しません。大文字小文字を無視したい場合には、 $str= TO_LOWER(variable) あるいは TO_UPPER(variable) のようにマクロを実行した結果を変数に格納し、その変数の値を比較することが必要です。

 

条件文の中で機能マクロを利用することはできません。機能マクロを利用する場合には、機能マクロを実行した結果を変数に格納し、その結果を条件文の中で利用してください。

 

$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%

 

上記の処理では、 “Datetime”, “DATETIME” および “Date” の場合に、“Datetime”を戻します。

 

endifやendTemplateマクロは分岐処理を終了させるために利用されます。なお、endTemplateマクロは実行中のテンプレートの処理をすぐに完了し、endTemplate文以降の処理は行いません。

 

 

例 1:

%if elemType == "Interface"%

;

%else%

%OperationBody%

%endIf%

 

この例では、:

 

 

例 2:

$bases="ClassBase"

$interfaces=""%

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

: $bases, $interfaces

%elseIf $bases !=""%

: $bases

%elseIf $interfaces !=""%

: $interfaces

%endIf%

 

この例では、 :ClassBase のような文字列が戻ります。

 

 

真偽値での条件分岐:

プロパティダイアログやオプションダイアログで、チェックボックスのON/OFFで設定する内容の場合には、条件文は次のようになります。

 

%if attStatic == "T"%

 

例:

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

%endTemplate%

 

分岐のための表現として、?文字を利用した3項演算子を利用することもできます。なお、このマクロでは?以降に変数を利用することはできません。ご注意ください。 (条件) ? (条件が真のときの値) : (条件が偽のときの値:省略可能)