|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Teamcenter二次开发实例教程-报表开发教程7 ~4 y* y( q0 D$ I) \" P; x
9 P/ F+ b: F% e) V+ H- s5 n" w 在大多数情况下,我们为客户做实施时,采用的是重新开发报表的功能。以满足客户多种多样的报表模板。然而Teamcenter8,9对报表开发有不错的支持。我们可以通过简单的配置开发出功能强大的报表。本文就Teamcenter OOTB报表技术展开讨论,希望能在众多报表开发方法中再增加一种可能性。# j/ p# B) O& K4 {5 d
下面我对两类报表开发方式优缺点做了个简单对比
2 }) |) F9 r& B, N( A8 s' k) \
A: I7 k; D h# \4 {" v传统报表开发手段; y9 I$ w; V- M S& f7 G5 I
OOTB报表: H: t% B! q. v+ W$ R
比分! Y- i' e: K! C: [* X+ b1 a ?6 `! V
1. {& x1 m9 a8 p% G. _: N( X `
自定义模板,灵活多变+ k4 c3 p" h6 S
格式不能完全满足客户需求
- G" y3 F( M* W: S8 _% h或非常难满足客户需求1 g. {7 l- V: l/ E
1:0) h# J/ Z2 v2 L* Y) D
2
8 s. r% W' }" `6 L9 U: @( o$ ?大量开发和代码维护7 _1 ?3 G) M! P& [) u) U
或用POI,Excel报表( C1 X/ A! s; C7 p% ~: ?3 O: g/ F8 Z
开发量小,仅需简单配置; L1 ~: W2 ]# C7 X1 v
1:1+ t6 N3 w: Q) U2 F1 c1 J
3
' c8 c: Y' e9 ^3 E+ R8 h5 l+ u遇到大数据量报表生成不了* r; L, G& W8 E) g. v% l
速度很慢
+ r" I- p0 L" A( y# b4 T/ r处理大数据量有优势8 U1 r0 \0 Y. m- j% {) C
速度非常快" d* U) v7 ]8 p) D' p: ~0 ^
1:2
' ]+ _) w; W& E( i3 }! t# d4/ x& L% T* ~/ |8 |
开发周期长,BUG多2 H" q' U5 s2 W& ?! u
开发迅速容易) z$ r9 v& s* ]$ w' G3 Y
1:3) g' M! C m/ H1 a. A e: Z
& l A4 k* ~& d一、报表生成# u2 K$ R- R# ~( R; g, `
首先来开OOTB的零部件BOM
* H* b; @! _2 u9 ~7 U' I# S( {. e- C' R( F) _' Y
右键点击顶层部件,生成报告。) `. G1 G; B& W1 D. E; \
x4 a" g* J! c9 K& J出现报告生成向导界面,选择PS – BOM结构,下一步
: s6 b2 ]2 g; G' X# r+ w; L! C/ O, T$ F
OOTB为我们提供了两种方式的报表:. G1 d A. M4 k/ o: D- g3 s4 G
HTML
2 |) [- o; S* | XSL+ o/ R, x6 x! `# I; l
每种报表都有对多国语言支持版本,所以下面对话框中有4个选项。我们选第一个。
$ ^9 `( J! x$ |* t. b9 q; u5 `+ t
]3 o. I3 ?* _' J生成报表如下:
5 V4 `( L* A: Q
/ O0 M) N- r- s( H. ^3 G5 S3 a / n" w7 B; Z4 R v+ J4 ?
二、报表配置( @; p. Z7 ^+ ~; m8 y. C" P$ T
报表配置涉及两个Teamcenter应用程序:
3 y7 p T& O9 I1 A* q1 d: q 报表构建器0 e' n/ {1 {" l3 r$ ~2 q
PLMXML
1 J+ ~8 U. A1 f5 `7 K# e报表构建器主要定义报表所应用的资源、模板文件和PLMXML导出规则) \% n& E! X; M
. i* s4 I$ ]2 ?- I9 k
PLMXML主要负责以PLMXML格式导出BOM数据
" F% m- D! x+ p
, M7 |2 f, H( y
, j4 r4 N0 ~& v D3 b& M4 o三、应用举例" P8 T/ Z% m" w3 y3 K* V2 n+ `6 M
下面对于一个具有广泛统计意义的功能用OOTB报表方式来实现。需求是:统计零件在整个BOM中的使用次数。8 ^8 y4 `4 |) ]6 ]
对于这个需求我们只需要增加一段带计算功能的代码就能实现。先通过系统的搜索功能找到html报表模板文件。, z7 c; Z* K6 t4 A
2 Z4 T/ e+ k- T5 D2 D } d6 t选中找到的数据,右击,命名引用。; J1 l1 I9 N# Q9 C8 F% R1 D
; l9 @1 r7 S& H; a5 D) b! e; x点击导出,把模板保存到本地。0 x- C. T8 U; D- v% e
& J/ Q. l' ~$ X% F* ?$ g
下面对Javascript有一定要求。) z% r8 n% j7 @8 j4 o
首先对表格增加一列来容纳计算的总数量:; V# Y4 ~: V7 v V: n( N7 [
$ f' G' ~; m# o6 I" ?在xsl中找到上面两处代码增加、修改红框部分。
& s5 K) n* {# `) ?5 X; }+ j定义如下函数,并且在onload事件中调用2 {) P% k7 p1 V3 d; V
function showPart(){% t# K* V; L$ B6 X4 O- b' g
//获取html的表格对象
% P. d& p/ k4 H0 Hvar tb = document.getElementById("table");
# @8 h8 D" @; f4 D) S! n: V//获取表格行对象4 f! z. V L! E( @8 y
var rows = tb.rows;
5 |$ m- ^6 x" n//循环遍历table所有行
' `# x+ }4 W1 V% |for(var i = 3; rows.length>i; i++){, U' [3 N7 {* k% ^# n/ _
//获取每一行的零件号0 H# P( M9 D/ f9 D3 p* @
var itemName = rows[i].cells[1].childNodes[0].innerHTML; N8 ~% K! t7 ^4 P
//初始化零件总个数! _4 h4 G4 K* [; T
var quantity = 0;
1 \0 p7 W+ Z- s; x/ P0 c" S//循环进行比较
$ C! m7 F j' L3 T! c; }; W( Ofor(var n = 3; rows.length>n; n++){
+ d9 z2 } h0 B9 `, U- u//获取每一行的零件号( \# ?9 T& X& }! o) q( R/ k7 n6 O
var itemStr = rows[n].cells[1].childNodes[0].innerHTML;: F* z. `# a; z; C# f& D
//获取零件数量
& W X4 n+ ]' V0 ]( qvar qt = rows[n].cells[4].childNodes[0].innerHTML;
4 H* a2 w" a# W7 c0 T" h# V' D//判断是否是相同的零件& v3 S h8 ~- D* s; H7 y4 C" b) K# S& y
if(itemStr == itemName){3 j2 [: T! a7 m6 S% }
//若零件号相同,把数量进行累加
3 }0 L+ S% ?8 c* |& g- {' ]6 Yquantity = parseInt(quantity) + parseInt(qt);+ s, m( I9 d* n' {( h
}: y/ T) u1 ?- f
}
3 ]& a2 T# I0 n! W% W//在统计列显示总数量
0 S y' o! d- A ^7 q$ }$ hrows[i].cells[5].childNodes[0].innerHTML = quantity;' Y6 {& |, v& {# k' m. F. B
}
" ]$ E/ T4 s; e( m}
' D7 w* a' A7 \' c" h4 N修改好后,保存回源数据集。注意先删除原来的再导入新的。
! Z8 b6 t5 W% b$ r0 F8 h* s! X2 j! `& |2 F( H
% k0 T% C- g& R
重新生成报表测试下:
- i2 W/ Q6 e) \ |
|