怎样让新建的Answer必须对某个字段进行过滤?

浏览: 2493

考虑如下的需求,当用户在使用Answer做即席查询的时候,怎么让他必须对某一个字段加过滤条件呢?

比如时间,如果不加则不让该请求执行,并同时给出一个提示信息。

下面我就以10G官方的SH demo为例,阐述实现步骤:

11G实现方法类似,具体请参见文末链接。

BIEE本身是提供了该功能的,我们需要做的就是使用javascript去实现一个validateAnalysisCriteria方法,并把我们的验证逻辑

添加进去即可!

默认情况下,该方法始终返回true,即通过验证(执行请求)。如果该方法返回false或者一条消息,则不执行该请求,同时在弹出的窗口中显示返回的消息!

1、新建一个QueryBlock.xml文件,将其放到 {OracleBI}\web\msgdb\custommessages目录(如果没有该目录请手工创建)下

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <WebMessageTables xmlns:sawm=”com.siebel.analytics.web.messageSystem”>
  3. <WebMessageTable system=”QueryBlocking” table=”Messages”>
  4. <WebMessage name=”kuiCriteriaBlockingScript” translate=”no”>
  5. <HTML>
  6. <script language=”javascript” src=”fmap:myblocking.js”/>
  7. </HTML>
  8. </WebMessage>
  9. </WebMessageTable>
  10. </WebMessageTables>


注意:放在customMessages下意味着该文件是与语言无关的,如果想和具体语言相关,请将该文件放到{OracleBI}\web\msgdb\目录对应的语言文件夹下,如中文:l_zh

2、创建myblocking.js 代码如下:

  1. function validateAnalysisCriteria(analysisXml)
  2. {
  3. // Create the helper object
  4. var tValidator = new CriteriaValidator(analysisXml);
  5. // Validation Logic
  6. if (tValidator.getSubjectArea() != "SH") // 只对SH主题域进行验证
  7. return true;
  8. if(!tValidator.tableExists("Calendar"))//只有当引用了Calendar表中的任意字段才进行验证
  9. return true;
  10. //如果引用了Calendar表的任意字段,则必须对Calendar Month Desc字段做过滤
  11. if (!tValidator.filterExists("Calendar","Calendar Month Desc"))
  12. return "Please filter the Calendar Month Desc.";
  13. //获取过滤值的个数
  14. var n = tValidator.filterCount("Calendar","Calendar Month Desc");
  15. //只能指定一个值
  16. if (n!=1)
  17. return "Please select 1 and only one Month";
  18. return true;
  19. }

将该脚本拷贝至{OracleBI}/web/app/res/b_mozilla 和{OracleBI}/oc4j_bi/j2ee/home/applications/analytics/analytics/res/b_mozilla

两个目录下(注,官方文档中关于此目录描述有误)

重启OBPIS和OC4J。

下面来测试一下吧!

Case 1 ,不选任何时间维上的字段,比如只选Prod Category,同时不设置过滤器

结果:正常执行

Case 2,选时间维上的任意字段,同时不设置过滤器

结果:提示“Please filter the Calendar Month Desc” 

如下图所示:

12.png 

Case 3:在Case 2的基础上,添加Calendar Month Desc过滤器,同时指定两个值

结果:提示“Please select 1 and only one Month ”

如下图所示:

34.png 

Case4:在Case 3的基础上,将过滤值只指定为一个。

结果:执行成功

附相关函数:18.5.4 Validation Helper Functions

Clipboard Image.png

Clipboard Image.png

参考资料:

10G: Presentation Services Administration Guide  之Blocking Requests in Answers on page 56
11G:
System Administrator's Guide 之 18.5.2 Blocking Analyses Based on Criteria

推荐 1
本文由 风在身后 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册