如何在BI报表爆发分发中嵌入HTML及解决BI Publisher发送HTML邮件问题
问题1:如何在用于爆发分发(bursting)的BI报表中嵌入HTML内容?
要在支持bursting的BI报表里嵌入并正确渲染HTML内容,你可以按照下面的步骤来操作:
- 模板层面配置:
- 如果用RTF模板:插入数据源字段后,右键点击字段选择「Properties」,切换到「Advanced」标签页,勾选「Treat as HTML」选项。这样BI Publisher会把字段中的HTML标签当成渲染指令,而不是纯文本显示。
- 如果用XSL-FO模板:用
<fo:instream-foreign-object>标签包裹你的HTML内容,同时确保设置合适的命名空间,示例如下:<fo:instream-foreign-object content-type="text/html"> <xsl:value-of select="your_html_field" disable-output-escaping="yes"/> </fo:instream-foreign-object>
- Bursting配置:
- 在定义bursting规则时,选择输出格式为「HTML」(不要选PDF、Excel等其他格式),确保分发的目标(邮件、FTP等)支持接收HTML内容。
- 如果是分发到邮件,要在邮件设置里明确指定邮件格式为HTML,避免被当成纯文本发送。
- 数据源注意事项:
- 确保你的数据源返回的HTML内容是完整且格式正确的,不要包含未闭合的标签,否则可能导致渲染异常。如果需要动态生成HTML,可以在SQL查询中直接拼接HTML片段(比如结合动态字段生成带样式的内容)。
问题2:BI Publisher发送HTML邮件时,SQL查询的HTML被解析而非作为字面量使用,如何结合动态值使用HTML?
这个问题大多是因为BI Publisher默认会转义HTML标签,或者SQL返回的内容没被正确标记为可渲染的HTML。给你几个实用的解决方法:
- SQL查询层面处理:
- 直接在SQL中拼接HTML字面量和动态值,确保返回的是完整的HTML片段。比如Oracle SQL示例:
SELECT '<div style="color:blue;">员工姓名: <b>' || employee_name || '</b></div>' AS html_content, email_address FROM employees - 如果动态值中包含特殊字符(如
&、<、>),要手动转义,避免破坏HTML结构。比如用REPLACE函数处理:SELECT '<a href="https://internal-system.com/profile?id=' || REPLACE(employee_id, '&', '&') || '">' || employee_name || '</a>' AS html_link FROM employees
- 直接在SQL中拼接HTML字面量和动态值,确保返回的是完整的HTML片段。比如Oracle SQL示例:
- 模板层面配置:
- 和问题1一样,在RTF模板中把对应的字段设置为「Treat as HTML」;如果用XSL模板,使用
disable-output-escaping="yes"来禁止BI Publisher转义HTML标签:<xsl:value-of select="html_content" disable-output-escaping="yes"/>
- 和问题1一样,在RTF模板中把对应的字段设置为「Treat as HTML」;如果用XSL模板,使用
- 邮件Bursting设置:
- 在bursting的邮件配置里,确认「邮件格式」选择的是「HTML」,而不是「纯文本」。这样BI Publisher会把渲染后的HTML作为邮件正文发送,而不是原始的HTML代码。
内容的提问来源于stack exchange,提问作者Chaitanya K
相关产品推荐
相关产品推荐

