调用ScheduleService::scheduleReport()能否覆盖BIP拆分定义的template_name
问题结论
调用ScheduleService::scheduleReport()接口调度带拆分查询的报表时,不支持直接覆写拆分查询中预先写死的TEMPLATE参数值。
OBIEE 12c的BIP调度逻辑中,拆分查询的返回结果优先级高于调度接口传入的全局配置:作业触发后会优先执行配置好的Burst Query,每一行返回结果对应一个独立的拆分投递任务,行内的TEMPLATE、LOCALE、输出格式、投递渠道字段会直接作为该拆分任务的最终配置,接口没有提供单独拦截、修改拆分查询返回字段的入口。
可行实现方案
如果需要动态切换拆分生成报表用的模板,可以用以下两种方式实现,不需要改动现有调度逻辑的整体框架:
- 方案1:将拆分查询中的TEMPLATE值改为绑定变量
把原来写死的固定模板值替换为可传入的绑定参数,在调用接口时通过报表参数列表传入实际需要的模板名即可,拆分查询执行时会自动替换为传入的值。
修改后的拆分查询示例:
调用select "invoice_table"."invid" as "KEY", :P_REPORT_TEMPLATE as "TEMPLATE", 'en-US' as "LOCALE", 'PDF' as "OUTPUT_FORMAT", 'EMAIL' as "DEL_CHANNEL", 'America/Los_Angeles' as "TIMEZONE" ...scheduleReport()时,在参数集合中增加P_REPORT_TEMPLATE参数,赋值为你需要使用的模板名称即可。 - 方案2:在拆分查询内写模板匹配逻辑
如果需要不同拆分条目使用不同模板,不需要额外传参的话,可以直接在TEMPLATE字段中写条件判断逻辑,根据业务字段、全局参数动态返回对应的模板名,示例:select "invoice_table"."invid" as "KEY", case when :P_BIZ_TYPE = 'DOMESTIC' then 'invoice_template_cn' when :P_BIZ_TYPE = 'OVERSEAS' then 'invoice_template_en' else 'invoice_template_default' end as "TEMPLATE", 'en-US' as "LOCALE", ...
注意事项
- 所有动态传入/逻辑判断返回的模板名,必须是已经上传到该报表关联模板列表中的有效模板,否则拆分任务会直接报错,提示模板不存在。
- 绑定变量的参数名需要和报表端定义的参数名完全一致,大小写敏感,否则会出现参数传值不生效的问题。
内容的提问来源于stack exchange,提问作者Chandu
相关产品推荐
相关产品推荐

