最近一个项目用到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>"
这里要注意,条件字段要是字符型,否则不好用,切记!