瑞雪年

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: 订阅 订阅 :: 管理 ::

     最近一个项目用到BO的东西,于是研究了一下,项目要求不多,只是作几张报表,所以研究不深入,那就写个入门教程吧。

1. Universe
要在BO中创建报表(Crystal Report不在此列),首先要创建Universe,通俗一点理解,在本人看来就是个数据源(Data Source),
因为大多数报表工具都把这种东西叫作数据源,只是BO很有创新精神地给它起了个“响亮的”名字。


Universe只是数据结构的描述,真正的数据当然还是要从数据库中取,所以在创建Universe时还是要先建立一个数据库连接,
Universe支持各种我知道的和不知道的类型的数据库,选择一个用的类型的就是了,不知道的就让它继续“未知”好了。
然后,就插入我们报表要用的表或视图,如果要作多张报表分别用到不同的表或视图,那就把它们都拽进来吧。


好了,Universe创完了,使用Export,导出到服务器上,就可以在报表中使用了。


Universe本身支持多种关联,条件,函数等,也许在BO专家的眼中,它是无所不能的,对于菜鸟也别慌,
把那复杂的逻辑就放在视图里作吧,让Universe"干净干净"不也挺好看的嘛。

2. Webi
BO有两种方式创建报表,Desktop Intelligence和Web intelligence, 一个桌面版,一个网页版,两个功能都差不多,
概况的说,那就是相当弱,甚至都赶不上vs.net自带的RDLC。好在它在网页上查看报表时支持html,所以还是可以通过javascript
来干一些很有意思的事的。在Desktop Intelligence中发现合并列不好用(路过的有知道的,还望指教!),所以本人选择了Web intelligence (简称Webi).

效果图:


在设计报表方面,和大多数报表工具没什么差别,下面说点“电视台不让说的”(引自郭德刚相声,用于指代非官方文档说明内容):
1. 单元格背景色:
将单元格内容属性由“文本”改为“HTML”,然后使用条件表达式,如:

= If ([Bs] > 4 ;
    "<div style='width:100%;height:100%;background-color:#B0B0F0;color:#000000;padding-top:8px'>"+[Dt]+"</div>" ;
    If ([Bs] > 3 ;
    "<div style='width:100%;height:100%;background-color:#B0B0B0;color:#000000;padding-top:8px'>"+[Dt]+"</div>" ;
    If ([Bs] > 2 ;
    "<div style='width:100%;height:100%;background-color:#FF0000;color:#000000;padding-top:8px'>"+[Dt]+"</div>" ;
    If ([Bs] > 1 ;
    "<div style='width:100%;height:100%;background-color:#FFFF00;color:#000000;padding-top:8px'>"+[Dt]+"</div>" ;
    "<div style='width:100%;height:100%;background-color:#00B050;color:#000000;padding-top:8px'>"+[Dt]+"</div>"))))


2. 超链接元素:
写完上面的代码后,这个就是“小儿科”了,如:

= "<a href='http://somewhere/?id=" + [Prvnc Id] +"'>" + [Prvnc Nm Ch] + "</a>"


3. javascript去表头:
在Webi中合并行后,表头上出了一个尴尬的问题,那就是要么多个表头,要么就是没表头,在请教专家无果后(路过的专家们,也请指点迷津),决定上javascript大法,
(javascript大法好啊!本人曾在sharepoint项目,屡试不爽!)
在报表的最下边,拖一个“空白单元格”上来,按惯例,还是改成HTML,然后上脚本,搞定:

<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script>
var count = 0;
$('.s11 > tbody > tr').each(function()
{
   var height = parseInt($(this).height());
   if(height == 58)
   { 
     count++;
     if(count > 1)
     {   
       $(this).remove();
     }
  }
});
</script>


4. 报表筛选条件:
在Webi编辑查询时,可以在下面条件区域直接拖入字段,生成查询条件,我们先搞个“提示”类型,给后边用。



5. 报表导航:
结合上面的“超链接元素”,就可以生成带导航功能的报表了,首先要找到目标报表的id, 这个很容易,用IE Developer或Firebug,你懂的。
然后就是连接地址,BO提供了一个直接打开报表的连接,换上自已报表的id(iDocID=0001),加上参数,就轻松搞定。

= "<a href='http://somewhere/businessobjects/enterprise115/desktoplaunch/opendoc/openDocument.jsp?sIDTyp=CUID&sType=wid&iDocID=0001&lsSparaPrvncid=" + [Prvnc Id] +"'>" + [Prvnc Nm Ch] + "</a>"

这里要注意,条件字段要是字符型,否则不好用,切记!


posted on 2011-10-14 13:14  瑞雪年  阅读(2623)  评论(1编辑  收藏  举报