|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Teamcenter二次开发实例教程-报表开发教程
0 [: n% G: r/ f) f" V2 @
' s- f4 `+ K* @ 在大多数情况下,我们为客户做实施时,采用的是重新开发报表的功能。以满足客户多种多样的报表模板。然而Teamcenter8,9对报表开发有不错的支持。我们可以通过简单的配置开发出功能强大的报表。本文就Teamcenter OOTB报表技术展开讨论,希望能在众多报表开发方法中再增加一种可能性。# e1 b( V% A% M) q9 b
下面我对两类报表开发方式优缺点做了个简单对比& `2 g, q, s; _# G; }
" v& w3 I# x; v7 s0 t& [
传统报表开发手段& Z# s; f, o, n, K' y3 A( {# B4 [5 a
OOTB报表
" V, ~8 y% C& p0 U比分
4 F9 R% y6 A4 B/ N) ]- p; Y4 t1
- r1 X/ H0 N+ n* j" R& D. V自定义模板,灵活多变/ J$ n' W& ?! _3 X
格式不能完全满足客户需求! O0 q0 \3 N2 z( }4 B& O% V" i
或非常难满足客户需求
5 |: M7 _5 S% z8 `5 [1:0
u3 v# H! F R9 W24 i, \) x: x" s) L5 P- {
大量开发和代码维护
4 _" h, d/ i, E; G* D3 p或用POI,Excel报表: E4 W9 Z' U4 g& M2 q& T
开发量小,仅需简单配置/ n5 ]0 a1 z" n t4 j! Y2 D) p$ ]- _+ T3 v
1:1) }8 q5 k6 s& \& @
30 c" E# G# ?3 h5 R, H
遇到大数据量报表生成不了3 }- D- j) b' J2 @
速度很慢
! l: U, r; I* w% t. _' [处理大数据量有优势9 i- }. |4 v9 L9 c
速度非常快
, S z) C, _# d* g9 m5 j1:2
" h! @# w8 v3 }0 U* k. D4( f) }! x" p- g
开发周期长,BUG多+ g) q# f* n$ v: s
开发迅速容易
+ v7 s i4 @9 f, K1:3
# D8 o0 x. B& ]! f; ` ( y# e) ?5 @6 ^8 O; H
一、报表生成
5 O$ H8 [$ ~! s |首先来开OOTB的零部件BOM- J; O, m5 E s1 h
0 C) Z9 F/ \9 Y+ q
右键点击顶层部件,生成报告。+ R2 C' B7 Q( i4 x- d
( z) f; Y5 i( F: \2 |
出现报告生成向导界面,选择PS – BOM结构,下一步; L# k3 \/ F# L- P. Z! U2 b
, A) V a1 P3 w' D' z$ v- \
OOTB为我们提供了两种方式的报表:! N+ P2 A, o+ N; ~# [3 x
HTML
1 h$ r" p7 V5 h2 {$ E% i XSL
8 ^/ e$ C- p* R$ _每种报表都有对多国语言支持版本,所以下面对话框中有4个选项。我们选第一个。
' C4 J# d$ X2 f: }* a( v% S
- A/ \" A) C/ k* w生成报表如下:
+ Q. B7 \7 D8 X4 W1 N( \# E* S! H1 m v) @
7 r; l1 H! j6 \2 V, e
二、报表配置0 B, q3 b+ G/ y& X
报表配置涉及两个Teamcenter应用程序:
: R6 G- r& v' G4 g& t w 报表构建器
) i' i# Z! I8 I7 ^6 X/ N PLMXML
" v9 N5 X- @+ b2 y& T2 T* ^- N报表构建器主要定义报表所应用的资源、模板文件和PLMXML导出规则- j1 T3 n3 |- W8 k, F/ } t; q& q0 D
$ `, H( V' u5 V1 @PLMXML主要负责以PLMXML格式导出BOM数据/ ~+ j0 e* ]3 }7 F9 o
8 T( `5 K. Z8 L
% w2 T" C, A. y
三、应用举例
0 E. o9 {1 v t# X9 x) _! y% H 下面对于一个具有广泛统计意义的功能用OOTB报表方式来实现。需求是:统计零件在整个BOM中的使用次数。
1 m4 I& `- J0 }; _* }3 | 对于这个需求我们只需要增加一段带计算功能的代码就能实现。先通过系统的搜索功能找到html报表模板文件。2 j) P- l& j& J& S8 C" Q
% `5 W7 |+ B) n5 S选中找到的数据,右击,命名引用。+ [5 e/ G- _/ Z
& n9 I+ j# l) w7 z6 b9 }' Y0 c点击导出,把模板保存到本地。4 T+ j+ n' g( ?; @$ o
) g7 A. N5 I `) y5 d& I下面对Javascript有一定要求。3 }, J+ F+ i0 L
首先对表格增加一列来容纳计算的总数量:
2 S( g/ ^7 `+ g0 x$ Z- i, ? C& d, G! l) q& h: _* H, n
在xsl中找到上面两处代码增加、修改红框部分。
" ?9 k, P) r+ P! v定义如下函数,并且在onload事件中调用
( g- F$ J* W$ c2 I1 o7 X) }function showPart(){
& ~4 }- ~% R% p4 K//获取html的表格对象
. x5 S4 r$ F3 b: R+ B" W, H3 f% r3 Tvar tb = document.getElementById("table"); V: Q1 I; K7 R4 U
//获取表格行对象
4 a3 s3 S) N+ [8 C% Q7 N5 _var rows = tb.rows;, b' _2 r; ~5 c: r, x& B6 ?. ~/ N
//循环遍历table所有行
& C- e$ u$ G$ U/ rfor(var i = 3; rows.length>i; i++){
! X4 S3 z( F* c2 I: n//获取每一行的零件号
* Q. i G2 j8 [- H0 {) d$ v2 Evar itemName = rows[i].cells[1].childNodes[0].innerHTML;
9 m" A/ i9 { x2 m//初始化零件总个数
3 ]7 X7 [2 k' v) ^ [3 ?( Zvar quantity = 0;( a! Z- l5 X/ @" d* v3 r
//循环进行比较& W! L$ { X, @% v% S2 T% M; [
for(var n = 3; rows.length>n; n++){
6 g! i& k; h; m$ a6 o//获取每一行的零件号6 B! _3 Q0 {& k5 |
var itemStr = rows[n].cells[1].childNodes[0].innerHTML;
: u* t; U& t; R) j//获取零件数量1 _# n6 Q. y5 w$ T3 ^/ D6 ~
var qt = rows[n].cells[4].childNodes[0].innerHTML;1 Z/ n: q; K) ?$ w, k. b2 o! x
//判断是否是相同的零件7 `* r# R' l4 F+ B
if(itemStr == itemName){& y9 t% Y8 ?8 |* S$ c" l
//若零件号相同,把数量进行累加
; I3 p' h% W' g8 |9 ~3 f5 b7 nquantity = parseInt(quantity) + parseInt(qt);5 u/ N- C f: I: ^
}
$ n8 u7 }2 T3 U9 L8 b2 D}9 y! Z5 t; \5 t# q L9 N4 e% B# c
//在统计列显示总数量- q% o# @( w8 n: Q* x* A
rows[i].cells[5].childNodes[0].innerHTML = quantity;1 b, B" k' T& A6 [8 H! G
}: Z" e3 `' x( k) C' A& R" p) i' h
}
/ |7 u7 V8 D& F8 U* L1 U6 S/ Q" y$ ]+ m修改好后,保存回源数据集。注意先删除原来的再导入新的。! d7 X4 W+ @5 w1 a- i; r* v
; L' m$ ]* ~& g3 K+ ^* \: W( @8 S9 u: x2 X. a- G! L& j. B: y$ M
重新生成报表测试下:2 q$ F0 u) g) S7 m3 c9 X7 d
|
|