在 Invantive Composition for Word 中创建条件块

Creating conditional blocks in Invantive Composition for Word

我如何根据数据库的内容有条件地 include/exclude Word 文档中的文本部分,例如我想在 Microsoft Word 文档中做这样的事情(伪代码):

如果 大于 3 那么

技术

编程语言


操作系统


END

您可以通过将参数检查放在块中来实现最简单的方法。如果可能,在包含数据的块中执行此操作,或创建一个中间块来执行此操作。

例如,将此放入您的查询中:

select ...
from   yourtable
where  $P{Level} > 3

当您想要排除以 TECHNICAL 开头并以 END 结尾的整段文本时,您还可以在模型中添加一个额外的块,其中 returns 0或 1 行。

Return 不满足条件时 0 行,return 满足条件时 1 行:

select 'ignore' from dual where <BOOLEAN EXPRESSION> 

当然,您需要将dual替换为所用数据库平台对应的单数table。在 Oracle 和 Invantive SQL 平台上,总有一个 dual。在 SQL 服务器上,您可以跳过 from dual。在其他平台上,创建 table 或查询已知只有一行的内容,例如特定数据字典 table.

然后使用新块创建一个嵌套的foreach:

<invantive:foreach block="FILTERBLOCK">
TECHNICAL
Programming Languages
<invantive:foreach block="A.languages"><invantive:value-of expression="$F{technicalname}"/></invantive:foreach>
Operating Systems
<invantive:foreach block="B.systems"><invantive:value-of expression="$F{technicalname}"/></invantive:foreach>
</invantive:foreach>