无需为所有OBIEE代理创建条件分析,如何更新其分发列表?
无需为每个OBIEE代理创建条件分析的邮箱校验方案
方法1:全局会话变量+通用动态收件人分析
- 先在OBIEE中创建一个会话变量,命名为
VALID_EMAIL_LIST,用SQL直接拉取查找表的合法邮箱并拼接成逗号分隔的字符串:SELECT LISTAGG(email_address, ',') WITHIN GROUP (ORDER BY email_address) FROM your_valid_email_table - 新建一个通用分析,数据源选择你用来获取代理收件人的表(比如用户表),添加筛选条件:
INSTR('@{biServer.variables.VALID_EMAIL_LIST}', "用户表"."邮箱字段") > 0 - 所有代理的分发列表都复用这个分析作为动态收件人的数据源,不用每个代理单独编写条件分析。代理每次执行时,只会拉取合法列表内的邮箱。
方法2:代理预执行脚本批量处理
- 编写Groovy脚本(OBIEE支持脚本扩展),实现以下逻辑:
- 读取当前代理的分发列表收件人
- 查询查找表获取所有合法邮箱集合
- 遍历代理收件人,移除不在合法集合内的邮箱
- 更新代理的分发配置
- 将这个脚本设置为全局预执行脚本,让所有代理绑定该脚本。这样每个代理执行前都会自动完成邮箱校验与清理,无需手动配置条件。
脚本示例片段:def validEmails = [] // 连接查找表查询合法邮箱,填充validEmails集合 def agentRecipients = agent.getDeliveryContent().getRecipients() def filteredRecipients = agentRecipients.findAll { validEmails.contains(it.getAddress()) } agent.getDeliveryContent().setRecipients(filteredRecipients)
方法3:RPD元数据层面统一过滤
- 在OBIEE的RPD中创建一个逻辑视图,关联收件人来源表和查找表,仅保留匹配的邮箱记录:
- 逻辑SQL示例:
SELECT t.email FROM recipient_table t JOIN valid_email_table v ON t.email = v.email
- 逻辑SQL示例:
- 所有代理的动态收件人都指向这个逻辑视图,无论代理原本要拉取哪些收件人,都会被RPD自动过滤为合法邮箱。后续查找表更新时,只需刷新RPD,所有代理就能自动同步最新规则。
内容的提问来源于stack exchange,提问作者slider
相关产品推荐
相关产品推荐

