如何在Enterprise Architect代码生成模板

时间:2018-04-24 07:11:54

标签: code-generation enterprise-architect escapestring

我想给枚举值一个进一步的描述。因此,如果要提供说明,我会在名为描述的枚举属性中添加自定义标记值。目标是在代码生成期间向标记的枚举属性添加自定义C#属性,但前提是存在此类标记值。因此,我需要编辑属性声明的代码生成模板。目前它使用:

$hasDescription = %attTag:"Description" ? "true" : "false"%
%if $hasDescription == "true"%
[Description(%qt%%attTag:"Description"%%qt%)]
%endIf%

给了我想要的输出。但是如果值中有引号,则会破坏输出代码文件。它不会编译。因此,我需要替换/转义标记值的值字段中的所有引号。我尝试了以下(各种组合):

%REPLACE(attTag:"Description", "\"", "\\\"")%
%REPLACE(attTag:"Description", """", "\\""")%
%REPLACE(attTag:"Description", "%qt%", "%sl%%qt%")%
%REPLACE(attTag:"Description", %qt%, %sl%%qt%)%

注意: %qt%用于插入"%sl%用于插入\reference

它们都不起作用。将字符串原样插入到生成的代码文件中,或者标记值的值中的引号没有任何反应。

那么有没有办法逃脱这些字符,以便能够在代码模板中的字符串中替换它们?

使用Enterprise Architect 13.5.1351

问题首先在SE Software Engineering

上提出

1 个答案:

答案 0 :(得分:1)

我查看了提供的其他模板,最后在更多的小提琴之后找到了解决方案。宏将引号中的某些文本或变量作为参数。由于直接在REPLACE宏中使用转义序列不起作用,我尝试事先将它们分配给变量:

$qt = %qt%
$escape = %sl% + %qt%
$description = %REPLACE(attTag:"Description", $qt, $escape)%

就是这样。最后工作。在第二行的+%sl%之间添加%qt%非常重要,即使documentation on Code Template Syntax > Literal Text另有说明也是如此。 $escape = %sl%%qt%不起作用,因为它只产生\而没有"

变量$description不是必需的,但为了便于阅读而添加。