|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Teamcenter二次开发实例教程-报表开发教程
( B5 v$ u" r$ R5 c7 E3 a% ]
3 }# b( ]) \* j+ g( N9 F/ ~ 在大多数情况下,我们为客户做实施时,采用的是重新开发报表的功能。以满足客户多种多样的报表模板。然而Teamcenter8,9对报表开发有不错的支持。我们可以通过简单的配置开发出功能强大的报表。本文就Teamcenter OOTB报表技术展开讨论,希望能在众多报表开发方法中再增加一种可能性。
2 x) x! z" `: ^. E2 i: j 下面我对两类报表开发方式优缺点做了个简单对比
1 d. y8 b, i) F$ s# ^ ` 6 H" b' a' b9 Y# ]
传统报表开发手段( l c" ]3 T( f: k! r! }
OOTB报表 k9 a' Z. K2 R3 T( g9 g
比分4 p5 B) g9 J+ }9 v
17 Y. r- o" D- U4 @7 v" G# w: b
自定义模板,灵活多变
: M! _% G$ c4 l2 S) E+ }格式不能完全满足客户需求. J& O! }; V0 U1 K" s2 ]! E0 o) E- x
或非常难满足客户需求
6 q0 t. U2 ~- I- S( ^! R1:0
7 P. R" z+ |; p3 y2& P) a; q9 h8 S' F( C! s
大量开发和代码维护4 j% R! f3 o6 c
或用POI,Excel报表
+ m3 g6 F; s2 W( z开发量小,仅需简单配置" j! e5 n; o S1 m; E& R
1:1
0 B8 K0 M4 Z5 {0 {3 @% T3
# }/ x# S! J1 Y遇到大数据量报表生成不了
0 J* a# u6 ?$ Z8 U# K& ?3 a! U6 S速度很慢
# i) q$ O9 b4 ?1 |' n处理大数据量有优势
1 T) P/ C, |; j& k! w7 ?速度非常快, E( `6 V* W5 ^ M2 ]% l6 I
1:2
( A" j3 D1 s! S+ }: ~1 } v, @5 L46 u+ \2 o+ @" s8 _0 C
开发周期长,BUG多
( y2 o' c) e8 `% {) Z开发迅速容易, c# p6 J7 x" c# C& w9 F1 a% G
1:3- p& p9 C9 v% D8 x! g
( m7 c7 J+ X$ }
一、报表生成
6 a. ?( v& s) V* ]; _7 ~2 ^; D首先来开OOTB的零部件BOM* G; \0 g+ V* E2 w% a2 `
: y7 Z/ e1 |7 I' b
右键点击顶层部件,生成报告。
( B4 F- s3 E, |6 Q8 l
]' ~/ J9 j" N# h& W7 D出现报告生成向导界面,选择PS – BOM结构,下一步& O* `! k. A% m1 _
* N; D/ }& w3 d9 ROOTB为我们提供了两种方式的报表:
7 u2 {+ Q- ?; j4 t+ U HTML9 f# h. A( o' L+ G
XSL6 _9 N% q3 s" A1 K7 P$ A( I
每种报表都有对多国语言支持版本,所以下面对话框中有4个选项。我们选第一个。
) R6 i, B& A& W, _ q3 G ^0 W- G9 i9 N b6 z. w8 L% z
生成报表如下:. g: M3 `* m- n% r
2 L- n5 G% e5 ]5 w: V
6 s* c6 a. h4 k7 ?$ p/ i二、报表配置
& T! B/ H- S# d' [" ^' ]2 g& v: j8 O) s报表配置涉及两个Teamcenter应用程序:
# L% b P, p& t8 J( |) N4 C1 o8 Y 报表构建器
$ `$ X9 k7 N+ E2 t4 Q1 E/ b PLMXML
7 O0 Q; G5 `& j+ q( L* `报表构建器主要定义报表所应用的资源、模板文件和PLMXML导出规则
7 n! k, Y- ?7 H$ f* L: t" j' A! ^: l6 ^5 ?4 Z! c
PLMXML主要负责以PLMXML格式导出BOM数据
& O7 ?* a0 [$ c" [2 i9 I1 H, K* K! k) G2 [- R8 ~: p, v$ {) m
M( e2 i# l" S* h) m5 ^1 b
三、应用举例1 ^9 c$ ^# d! I7 D+ q' U$ M3 n
下面对于一个具有广泛统计意义的功能用OOTB报表方式来实现。需求是:统计零件在整个BOM中的使用次数。
2 T4 a+ D1 D, G 对于这个需求我们只需要增加一段带计算功能的代码就能实现。先通过系统的搜索功能找到html报表模板文件。. s$ s% |9 [6 U8 ~2 v4 w8 k ]
/ {; T1 R$ G3 x& \# I选中找到的数据,右击,命名引用。
, |) K8 [# _' s; i1 F7 G4 N/ n; w/ Z* E E/ U; M+ l
点击导出,把模板保存到本地。3 X( n0 g6 T& Z5 p; {2 ^
0 Z7 q% t, b1 j, t2 C/ z: B: ]下面对Javascript有一定要求。
( r1 P) l- Z- }2 K* S0 _5 ~+ O首先对表格增加一列来容纳计算的总数量:
. n* p- V4 P+ H, v( e7 o+ Q; J4 D0 a& N0 g% w
在xsl中找到上面两处代码增加、修改红框部分。4 K% I/ M2 G. w3 @. G) U
定义如下函数,并且在onload事件中调用
8 y: M1 s, H- v4 J2 }function showPart(){/ T9 \$ L; V: _4 V
//获取html的表格对象
# J/ u3 ^0 E5 o7 ^1 ^* xvar tb = document.getElementById("table");
& _ K1 l3 S$ x; x: F//获取表格行对象' |* a" l5 E2 [* }" C# E
var rows = tb.rows;
$ w' K4 T9 e% ?: ^* g//循环遍历table所有行
( }; F& `; b( C- ]) s$ bfor(var i = 3; rows.length>i; i++){
: q/ O* u0 T6 S3 e q6 y$ d1 `" q//获取每一行的零件号$ K! h% p, A# ~9 u1 ^# p
var itemName = rows[i].cells[1].childNodes[0].innerHTML;
- ^. D8 ]. `/ q/ e//初始化零件总个数" P# O7 K$ x: e! p) }% j
var quantity = 0;
. D/ y- {& P6 B$ Y" P. ~//循环进行比较
+ s+ w$ I4 ^/ f u( F& f7 Wfor(var n = 3; rows.length>n; n++){( Q, M$ ?9 D8 c0 ]+ P X. e
//获取每一行的零件号
~- j4 K3 b u& ^var itemStr = rows[n].cells[1].childNodes[0].innerHTML;
) d: q. p7 R M5 X//获取零件数量$ V4 r3 ~: y: |7 T" i' {
var qt = rows[n].cells[4].childNodes[0].innerHTML;
, X( E" M& C0 c8 \. ]: }! C3 U//判断是否是相同的零件
{# _6 r5 M4 G$ Q; z6 E, H- fif(itemStr == itemName){/ d. X; E, F. O/ G% Z, B# y
//若零件号相同,把数量进行累加
' z) Q, H- _( `$ W4 Zquantity = parseInt(quantity) + parseInt(qt);
' H2 J1 C; n' Z! [9 [; r$ y7 r}! ?7 y, J* z. X+ _. n p& J
}: h/ X% s+ I) n: C% d, G
//在统计列显示总数量2 z5 Y4 Z$ {' C4 x1 r2 c5 m
rows[i].cells[5].childNodes[0].innerHTML = quantity;+ Z' K* n# ]: t$ P% e' A: W s
}
. _" q; X5 \8 ]1 p}
4 }. Z) p" z" t, T0 a2 H4 i. P5 B修改好后,保存回源数据集。注意先删除原来的再导入新的。/ j- E: N8 q4 Z0 J8 n7 E
; C( O+ V3 q8 q) l9 B
) b( M2 V0 X, h' O9 @重新生成报表测试下:
4 s# z& a( g3 Z: _+ y6 y7 L |
|