|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
Teamcenter二次开发实例教程-报表开发教程5 w! I& g S4 ^7 N, o
8 m+ Y) v( G' _. @- R! h: B 在大多数情况下,我们为客户做实施时,采用的是重新开发报表的功能。以满足客户多种多样的报表模板。然而Teamcenter8,9对报表开发有不错的支持。我们可以通过简单的配置开发出功能强大的报表。本文就Teamcenter OOTB报表技术展开讨论,希望能在众多报表开发方法中再增加一种可能性。
& O; t" u3 F w3 G& _ 下面我对两类报表开发方式优缺点做了个简单对比5 j& n% m( O# c* X3 B! G
6 G$ {' e4 ]) F传统报表开发手段
3 O+ `' [; Z0 ROOTB报表2 x1 i8 N4 c1 s; L; m
比分
# [0 o/ [( T. F; X6 G1" ~' R& ~6 ] _
自定义模板,灵活多变5 I! v M7 A# o- t7 ~
格式不能完全满足客户需求
1 ]. c. ] L8 E1 J) R或非常难满足客户需求
7 J* W& e+ i" ]& @( d1:0
0 C% Z3 m6 {" w25 q+ F' |' W& b4 A
大量开发和代码维护) S7 W7 w+ R6 r( Q2 m% f
或用POI,Excel报表
9 n2 o T3 \2 b9 p3 I( M1 p$ B开发量小,仅需简单配置. p6 y# i& F' n1 v6 a% J: J0 Q$ u; B' X
1:1" r6 Y; E0 d9 c, ]
3
' P- N8 C& g- [$ @遇到大数据量报表生成不了
' K; G7 h! U9 z; T" ^0 |速度很慢3 m: s3 ^% a n; f) F4 }4 u
处理大数据量有优势2 P* c& g) q' q; Y' z* Y
速度非常快
. `4 S4 h# O4 P8 O5 _7 \1:2
6 a+ M, y1 Q+ b% J( s; Q4" q. @( C% w& T
开发周期长,BUG多
2 X' N8 T, l+ I% O1 n+ P开发迅速容易+ C0 Z: h4 d8 T7 i& S
1:3$ f+ {/ C% E) H% N; n
9 u" R9 w+ p8 q% ? F一、报表生成
4 M- M0 [. T5 v+ ~首先来开OOTB的零部件BOM" _" D& A/ V O0 P. N5 R
9 \3 t* @2 T2 L右键点击顶层部件,生成报告。/ F! \# [% X; D w
2 |" L5 I& q' [8 V1 y3 }% {: u$ n出现报告生成向导界面,选择PS – BOM结构,下一步
7 e) P" X5 A1 D, \. N! n/ @
$ @/ U7 C- B# aOOTB为我们提供了两种方式的报表:( L1 Q; a/ S2 }+ [
HTML
3 D* G/ A b1 F5 y6 q XSL( O, W2 [. U8 B+ \' |6 P
每种报表都有对多国语言支持版本,所以下面对话框中有4个选项。我们选第一个。9 z- i& [ J9 t: ]. w( E
- {* V" u3 G8 h, f
生成报表如下:
8 F' ?. M2 f' p+ m0 l# N: S& C3 X- K7 i* |
; } N' B& t. t# z+ i7 c$ A二、报表配置
+ Y5 H' s9 L5 [: |' M2 z报表配置涉及两个Teamcenter应用程序:
# K+ C3 L( V7 \- |# R+ t1 } 报表构建器/ _6 S& J q: v3 Z, R# i: z, Z
PLMXML( a0 m% X$ @5 B* d5 i* }
报表构建器主要定义报表所应用的资源、模板文件和PLMXML导出规则
5 f1 @$ A! E% x3 y. o0 b
& T3 m: ~, x2 U. SPLMXML主要负责以PLMXML格式导出BOM数据
: ?, i5 n* x4 O7 X2 E
4 m5 G J5 y* W i
! Q' P0 L0 P/ j, G4 h三、应用举例
* V9 O5 \9 ?0 Y! l7 E# j3 m+ I4 l 下面对于一个具有广泛统计意义的功能用OOTB报表方式来实现。需求是:统计零件在整个BOM中的使用次数。
/ j: Y, `9 r0 y+ K 对于这个需求我们只需要增加一段带计算功能的代码就能实现。先通过系统的搜索功能找到html报表模板文件。' g0 z3 m/ b1 A$ _/ s' e; i' d& U
* {2 e$ v1 F# X7 v/ ~选中找到的数据,右击,命名引用。" o8 j' e" B; V9 z3 Z/ N
0 B# j# H9 z5 P9 u$ k2 K: C8 S& n点击导出,把模板保存到本地。
& L2 y. S% s, s
7 @* o4 |& B0 M1 C8 {下面对Javascript有一定要求。4 q/ j* Z- L/ W% L6 `; S
首先对表格增加一列来容纳计算的总数量:& q% K/ J& A; ~7 v
t8 ]5 Q3 t" b, R/ r0 Y在xsl中找到上面两处代码增加、修改红框部分。
# ~- z3 \* l* [% y3 `5 F定义如下函数,并且在onload事件中调用# w/ D8 U$ V+ X( C
function showPart(){
1 S3 k/ F3 U* a; J* E//获取html的表格对象
9 V& C w T0 w; v/ ^var tb = document.getElementById("table");" A7 X; H0 B$ a' ^8 t/ R& B
//获取表格行对象# `9 y0 d- n# x
var rows = tb.rows;+ I, w1 ?9 i7 L4 Q
//循环遍历table所有行5 w, A! z, K* Y) c! ^9 L9 N" o( P
for(var i = 3; rows.length>i; i++){/ y! K! A3 d% p1 h
//获取每一行的零件号% K7 Y g) w9 L
var itemName = rows[i].cells[1].childNodes[0].innerHTML;
A4 s( Z. c- k0 Y//初始化零件总个数, g: I' e$ T8 L
var quantity = 0;8 ]2 t+ |+ v: T
//循环进行比较
- E* P' v1 Z, s! d$ x Afor(var n = 3; rows.length>n; n++){
/ _0 ?0 ?2 v! z) z" a//获取每一行的零件号/ Q$ Y$ z9 M/ A! i u2 e
var itemStr = rows[n].cells[1].childNodes[0].innerHTML;$ O0 i3 t, @7 A9 p$ `3 S, g
//获取零件数量
& X) O. p' y2 m5 v, `3 fvar qt = rows[n].cells[4].childNodes[0].innerHTML;
) K- a' e9 r( B/ p//判断是否是相同的零件
# g' w. n/ a$ r( Rif(itemStr == itemName){
8 [7 d$ a" x0 E- C1 Z//若零件号相同,把数量进行累加! u6 t3 I. _- f+ M$ x
quantity = parseInt(quantity) + parseInt(qt);
; o* N5 F! Y) x( R. J& f}) K6 B/ t$ v0 J( y) k# z' i1 ~
}
8 I- v: K6 D' a- ?5 e//在统计列显示总数量$ {; x1 O; @3 I) q" J7 P* P/ ]( i
rows[i].cells[5].childNodes[0].innerHTML = quantity;
3 P+ b1 @# Y( u* h$ S}/ c# q) C& u" X9 V
}
& z8 e6 t3 R8 l" g修改好后,保存回源数据集。注意先删除原来的再导入新的。! w6 K- L$ f6 ]: r1 d
+ Z% x/ e: o$ C U/ t; y
6 N. V$ `! ?$ j7 w+ ?
重新生成报表测试下:7 e3 e$ M0 I7 X$ j+ }( E' i
|
|