|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Teamcenter二次开发实例教程-报表开发教程
$ O6 w% T6 y! ]6 Y- O0 N2 j
( v7 h8 W; O/ S( S7 M9 ^ 在大多数情况下,我们为客户做实施时,采用的是重新开发报表的功能。以满足客户多种多样的报表模板。然而Teamcenter8,9对报表开发有不错的支持。我们可以通过简单的配置开发出功能强大的报表。本文就Teamcenter OOTB报表技术展开讨论,希望能在众多报表开发方法中再增加一种可能性。
* S8 I* g3 }! m9 a2 @- D- {# u 下面我对两类报表开发方式优缺点做了个简单对比
" n5 g7 k4 x2 L+ J1 R$ N- s
/ E! S( v2 w' W. W9 c. N' y; ?+ k传统报表开发手段) `7 r$ b4 ^7 K
OOTB报表
1 ~- W* h' f' n8 J3 |& T比分
* L8 `$ }2 U" K6 O14 d* g8 C! t7 _% C" K3 e; c
自定义模板,灵活多变; q! @5 q$ h0 O% e4 K9 W" B
格式不能完全满足客户需求3 _( f* n: J' {! O
或非常难满足客户需求
' G+ ?0 P% X5 r a7 g1:0
8 X2 Q1 k3 U: {9 C* P2
1 r1 S; V, L$ g. F) @ j" y5 i2 n4 m大量开发和代码维护
( S* t( m9 f1 q7 F0 M, @- D! w7 a1 W或用POI,Excel报表
9 t9 U' O4 [5 |! F" l& ^( V开发量小,仅需简单配置4 f6 u" K# `: ~+ d9 x
1:19 N8 h$ ^( ^ D4 X
3
" @/ G W1 j* |/ `; }遇到大数据量报表生成不了. t: N* @0 \6 v; h% [* `
速度很慢
2 g- x! _; V) _) s$ X) j' o9 j处理大数据量有优势
! o0 n0 _' \' z) `2 j( N$ b速度非常快
2 G9 |5 i$ F; k+ W8 }+ R1:2 M4 v: s. S3 g% J0 k) @
46 M, D% N7 b- W ?* y' V
开发周期长,BUG多
' ^+ b. W6 W. l- j8 h7 I d/ k0 q开发迅速容易
: e) N( ?6 d. y- M l+ |3 p$ a1:3
: ]+ _- C5 \! C
0 F8 ]3 @/ F4 I) j% W8 f6 C1 C0 \/ L一、报表生成/ N! Y7 y2 c/ ~" |+ d; G
首先来开OOTB的零部件BOM+ f1 C0 A" @$ L+ N
2 ^1 E" l6 \# J3 |- ~
右键点击顶层部件,生成报告。
( n0 E0 ^' Y& ~/ N1 I' ]) E1 o) y5 D" \. r6 v! Q9 }( u6 _
出现报告生成向导界面,选择PS – BOM结构,下一步
) R: c! T' [" C( \- l) x
2 y. X' C [7 H$ T/ rOOTB为我们提供了两种方式的报表: ]) D( y2 c3 o3 L( q K; G
HTML
/ ^( e$ N. W' l" l/ `# P2 p+ z XSL
( Z5 _. c5 j) g/ Z9 `& g7 G! b每种报表都有对多国语言支持版本,所以下面对话框中有4个选项。我们选第一个。
! ]- }* p7 d+ G- T
3 A3 {$ g6 m7 J9 B/ d生成报表如下:
7 q$ L% R( d& z% f2 h+ F6 I" A7 z1 Z0 }0 o0 i2 D
, Z: @$ Q3 u o4 K1 O, b7 o
二、报表配置
! L! r7 f- S2 ^9 }报表配置涉及两个Teamcenter应用程序:
# |% I/ x7 k' d7 q3 ~; M J: S 报表构建器
# v5 B& m8 z' t b9 L( R PLMXML
+ I+ \* w7 S8 Z4 Z' Z, l, P报表构建器主要定义报表所应用的资源、模板文件和PLMXML导出规则$ h8 A/ `3 q: p- @& {
5 _& x8 I9 n+ u5 q! b( k( j9 d! zPLMXML主要负责以PLMXML格式导出BOM数据9 h9 Z/ j0 f6 v
; x6 c S% \# l- ~* I
t: W) i1 D1 W% ]* v: @
三、应用举例: E( p- }% _5 `6 Z4 O N$ h
下面对于一个具有广泛统计意义的功能用OOTB报表方式来实现。需求是:统计零件在整个BOM中的使用次数。' J' j+ C+ Q/ L
对于这个需求我们只需要增加一段带计算功能的代码就能实现。先通过系统的搜索功能找到html报表模板文件。3 _' _, i5 `9 z: v$ h
+ y; G# o# d2 d. M& S2 O" J5 x选中找到的数据,右击,命名引用。
' D0 S5 t/ }( M) _# @' M4 ^# s: j+ y: S- F3 ^- i9 W) Y7 v. F
点击导出,把模板保存到本地。2 M7 j N1 t5 F2 A0 g
9 k' L# g; q/ o
下面对Javascript有一定要求。$ k/ W+ _" [) r p& X
首先对表格增加一列来容纳计算的总数量:) z, P" j( d& p8 n+ y" A
7 S3 E& J; D9 N% }在xsl中找到上面两处代码增加、修改红框部分。5 W3 @" f# ]" Q0 F& [# n$ R
定义如下函数,并且在onload事件中调用8 E" n4 i8 \; M- P' l( r3 A6 I
function showPart(){+ d5 E- O0 [ w' K
//获取html的表格对象
' H. F, E/ n e/ \( Y5 q: Y+ ~ gvar tb = document.getElementById("table");
; J2 D/ B' h# Z) V& V//获取表格行对象9 y. a/ u. `3 \. ]! E5 N
var rows = tb.rows;" }1 p/ f/ [' f/ V
//循环遍历table所有行" U R2 n5 e1 N3 t6 H" K" n7 J6 s
for(var i = 3; rows.length>i; i++){
- r9 @# f6 o7 j; s0 Y//获取每一行的零件号
/ Q+ N5 i' l6 V- N5 p( d; v# zvar itemName = rows[i].cells[1].childNodes[0].innerHTML;
! x! ^ u" Z) R( O//初始化零件总个数
+ F: Z% m% `; b( ]* T" {- t+ xvar quantity = 0;" c" {; p2 b# f
//循环进行比较
$ L5 N6 F+ `% F' H( m( T; o4 @: }4 Sfor(var n = 3; rows.length>n; n++){
% x& o( e0 J1 x- D- z' g//获取每一行的零件号
7 N: h2 ~$ n" Xvar itemStr = rows[n].cells[1].childNodes[0].innerHTML;
8 X$ c. u7 E X8 v- K//获取零件数量
/ z* \0 T ~; G" ^, _var qt = rows[n].cells[4].childNodes[0].innerHTML;; ~) }; c0 B: w& {7 t% H
//判断是否是相同的零件- o( _( }: O2 D& y5 X6 Q! i
if(itemStr == itemName){
% b$ d- ~" E$ z4 M//若零件号相同,把数量进行累加
$ `3 F/ S' u7 Hquantity = parseInt(quantity) + parseInt(qt);
6 r7 f4 L$ I @% D3 F4 S, W}
) t( `) v& L" |4 t}
/ c# o! f: \0 Z3 }//在统计列显示总数量4 m% `: Q9 d* @6 L+ N! H
rows[i].cells[5].childNodes[0].innerHTML = quantity;
* V J% [3 g5 I- v W: c}
V3 Y6 C' p/ S* @}
) ]; Y$ F9 r9 B+ X' p7 e修改好后,保存回源数据集。注意先删除原来的再导入新的。+ C) k% h" p! b$ G7 t
7 p- x' ]! r" G$ m2 b% z" m
. s* w8 ]' ?) f1 M
重新生成报表测试下:* L K3 `8 j0 Y# \5 ^3 j
|
|