青华模具培训学校

 找回密码
 注册

QQ登录

只需一步,快速开始

青华模具培训学院
查看: 115741|回复: 10

Teamcenter二次开发--流程中自动添加数据集到目标文件夹下

[复制链接]
发表于 2010-1-4 13:52 | 显示全部楼层 |阅读模式
在Teamcenter 2007中,系统本身提供了一个action handler为EMP-attach-item-revision-targets,这个handler的功能是将Item Revision下面所有相关的附件如DataSet,BOM View等放入到流程的目标文件夹下,以在流程中利用添加状态的action handler将Item Revision及其相关文件受控。但EMP-attach-item-revision-targets在执行时有以下问题:
9 u" o. c( I2 B# Q1 }. Z* y1 q8 Q- S# P  g) ]
1 对多个Item Revision引用到的同一个DataSet无法进行过滤,只会给出错误信息"CR_in_release_process:Object XXX is already in process of beiing released",导致流程无法提交;- ^3 F1 x9 r6 g- M/ _+ D
, }3 f; |$ h: ~0 i
2 对已经受控的DataSet也没有进行过滤,也放入到目标文件夹中,产生重复;8 R6 u) x8 d7 a) H0 w2 q

, b; l3 j7 J& Z1 P  [; D# z( J8 y# d现在自己做一个handler来取代系统定义的EMP-attach-item-revision-targets,要解决以上2个问题,主要需要用到emp.h里相应的EPM_add_attachments方法,思路如下:* Z9 ?* ^$ o! P

0 x. n: A, m) _* I) Y7 [1 遍历目标里所有的Item Revision,通过AOM_ask_value_tags获取到这个Item Revision下所有的数据集;
1 w: Z$ L* _+ p2 h3 _5 B& y/ K+ L% r) z( z! k
2 对数据集是否已经处于发布状态和流程状态进行判断;
6 |( y/ E8 c9 d. Q% `; S8 f5 |5 ^  k5 ^: `# J$ z
3 就是通过动态遍历所有已经准备添加至目标文件夹的数据集进行是否重复的判断,这是为了解决问题1;$ K) y! \! F; G& ?/ ?+ E+ Q6 Z

: x) j5 W: z, s/ p4 将满足所有条件的数据集对象添加至对象数组中;
" u4 h8 @0 t7 ]5 ?/ v: b. ], W0 W, V0 d% P
5 在遍历完目标文件夹中所有的Item Revision后,执行EPM_add_attachments方法,即可将所有符合条件的对象添加至目标文件夹中,以方便在后续流程中受控。
! r% R3 J! l$ G6 ]" Z$ B
8 x6 d/ _' r9 R因为在对象的属性里,目标文件夹中的对象可能有多个、Item Revision下的数据集可能有多个、是否处于工作状态和发布状态的属性也是List形式的,所以代码里不可避免地需要多层嵌套的循环,好在有了清晰的思路,循环多了也没什么。
* C9 H* @$ q" l: S' @# |1 e" D. U$ U$ ^/ p8 Y, {0 w
extern int custom_add_dataset_to_targetsfolder(EPM_action_message_t msg). {% p) P- a; v3 ~
{
$ x  s0 ^9 S. t) u. J/ Kint recode=ITK_ok;6 B" T  K! i, {2 n( ]$ {* }
char itemType[ITEM_type_size_c+1];
1 Z9 ^" r3 Z+ T5 l! P) l2 ]3 F7 O2 Qint i;
1 `' r( @0 S! k$ u  Sint j;
% @, v6 a7 {$ }! p: T" N: p9 v, Pint k;
$ H8 u+ J0 D1 u3 O0 @int m;; _7 H- ^9 _2 A
int n;
9 p& M% t* f+ {6 [5 n7 o1 |( x2 e! pint p;5 p5 Z9 d& d" [
int q;7 I; ^, P2 D1 i6 c
1 g( b4 ^& D+ P& m: W# b8 _
tag_t job = NULLTAG;, Y' T) P5 b9 z" J
tag_t root_task = NULLTAG;
3 p/ ~, \6 l; k2 \, X. qint attachObjectCount = 0;
2 l/ }1 b6 y" g" ytag_t * attachObjectTags = NULL;# b' M  C2 u% C& ?: h" l- d9 n& L
tag_t target_tag = NULLTAG;
7 W6 `. u# t4 bint length;3 x( |* n' v% H  ?: `
char *test;
0 }. c5 s2 U/ w5 G4 k! W" `char *message;4 ?0 H9 P) P- F1 h- L8 {2 \

7 _; P+ q" \, e; {int status=ITK_ok;& A8 E; x# p3 I: F
int propCount;' _8 I" N) ~6 t9 B* V) e& X6 |
char **propNames;; \6 @2 F9 y9 a, f% i( w! M
7 P( V2 g5 T( G' f( [
int count;6 `) ^  r% y8 l# f' |! I. C( L* \
tag_t *tags;, r! a5 d3 q: q6 I+ i+ @2 r
4 E; ?5 N9 K: d- V7 C) p% g! a
int statusNum;
8 K: ^5 n) ^* G5 [6 `; qchar *statusName;
( N- q/ _' s$ J1 s: v# A# ktag_t *statusList=NULL;
! h! D8 n: X+ c+ `! N* t8 X1 V) a5 x) M# `( j0 V( o$ [
int objectCount=0;
+ q5 f1 ?5 x6 y- rtag_t *addObjects=NULL;
4 K$ e% [6 \; o: Uint *objectTypes=NULL;" c8 n% X8 E" R8 |  N  u

- g. Q# w+ @4 h, |! L7 U; _char *uId1;) i# Z7 c9 r. e2 Z# w
char *uId2;  k3 c2 B3 Z9 g  L9 N8 P' f$ z
; j- M: h- d' \6 N5 Q
int processStateCount;; U' Z. S, N3 n# n$ Y3 n
tag_t *processStateList=NULL;
+ i# h! u: J$ f. a
6 Q0 |5 d) D# j5 x( c) |int rcode=0;: N, @6 }) a" [! l8 W5 B* l+ D
test=(char *) MEM_alloc( 9 * sizeof (char ) );
5 }3 k( r4 s  h+ {addObjects=(tag_t *) MEM_alloc( 100 * sizeof (tag_t ) );) }, e0 ^4 x8 z6 Z' S: @
objectTypes=(int *) MEM_alloc( 100 * sizeof (int ) );
0 w+ ^1 p$ Z1 v* U$ f9 S8 X6 y1 c/ Y) R( b+ q: t
EPM_ask_job( msg.task, &job);, N, w% }% }% Y: \* g0 ~# w+ b( T
EPM_ask_root_task( job, &root_task );
" q; i& B1 N  @4 Y6 k
, ^! d2 R9 q; ^6 T; L! ~0 k% v//获取所有目标的附件 $ q% @: d8 z4 P
EPM_ask_attachments( root_task,EPM_target_attachment,&attachObjectCount,&attachObjectTags);
3 R4 E3 D& B% I' fif(attachObjectCount>0)
3 D$ L4 L4 U+ c+ [0 P    {
9 _5 V" V9 ?8 k) f7 \. Q) |      for (i=0; i< attachObjectCount; i++)
! }& [, h4 N: ?2 R4 Y2 A          {
; i" d  y5 `& ?( V- B7 _! c             status=ITEM_ask_type(attachObjectTags[i],itemType);
5 T- S- o3 P5 l0 P            
) F7 X; V: G' Y/ D             if(status==ITK_ok)
2 K* v9 Q- W& B+ Q               {
& u8 b: s6 q+ J( V: I, V3 w: t                  printf("item type is %s\n",itemType);( }9 }" @8 j, B$ e4 T3 ?$ b
                 }
5 z4 M6 n3 H# j5 X            
* E$ U5 }+ T  i             status=AOM_ask_prop_names(attachObjectTags[i],&propCount,&propNames);2 m4 y! d: l9 K- ?1 m# X$ z  _! \% @
             if(status==ITK_ok)
, X5 [& ?" M2 Q7 X& {               {: B- h- C* l2 d6 Q! N* S' j! R5 t
               for(j=0;j<propCount;j++)4 m1 r: B1 c0 ?6 C" a
                    {
1 ], w) k& \4 B+ e; Q3 p                    if(strcmp(propNames[j],"item_id")==0)
5 N& g5 g3 T0 w5 k- V/ I  X7 \5 \                        {
$ \5 u4 j7 W7 y3 A$ t+ z9 F                           length=strlen(itemType);
1 _$ c- }/ G/ Q; @& h2 _                              if(length>8)0 f* h% {% f0 N9 Q5 w# |. u
                                 {' Z$ U4 S2 o5 S' U. W% K7 d: M
                                 strncpy(test,itemType+(length-8),length);; c* w- z$ u2 o  w+ J0 M
                                 if(strcmp(test,"Revision")==0)
& W' q4 u# A- G4 k. V                                     {
. d) S% Q. V1 w* h5 l                                     AOM_ask_value_tags(attachObjectTags[i],"IMAN_specification",&count,&tags);   //获取所有数据集3 e& C) ^; I) R' q4 H5 w
                                     printf("count 1 is[%d]\n",count);4 ]0 W. {+ s8 g! F! _
                                     if(count>0)1 H/ F3 D1 x+ X; {
                                         {+ |" i  S' Q9 B% o+ ]
                                         for(k=0;k<count;k++)6 j' w3 b8 b8 m* P
                                              {% d6 m  E0 m3 h. \6 r; Y; F
                                              AOM_ask_value_tags(tags[k],"release_status_list",&statusNum,&statusList);3 P/ M* S, b9 q
                                              if(statusNum==0)" |  d8 S$ T! \2 j) i. p9 o8 h
                                                  {
* n6 t% d+ ~8 ~7 _1 \                                                  AOM_ask_value_tags(tags[k],"process_stage_list",&processStateCount,&processStateList);
( z8 t. Q8 L( H6 R% T                                                  if(processStateCount==0)
& m& l- q8 X0 Y3 ]" b                                                      {7 \% Q+ L9 g" s
                                                      ITK__convert_tag_to_uid(tags[k],&uId1);) `3 B# G9 \) `# C/ j
                                                      q=0;
- S& z$ y/ k# c6 O9 [+ J' H& n& }6 r                                                      for(p=0;p<objectCount;p++): j  X$ i8 ~; W
                                                           {
- {2 c+ _  a! q9 m4 ?                                                           ITK__convert_tag_to_uid(addObjects[p],&uId2);* _* P9 Q; e$ D7 U' V
                                                           if(strcmp(uId1,uId2)==0)3 [* a% D/ R1 s9 t* ?
                                                               {" D* y2 s/ q1 }2 s
                                                               q+=1;
3 z4 D" t  a: w/ W4 J) n: Y                                                               }
5 L5 D0 `0 K: f/ d                                                           }: z) d6 K2 k' G5 t. c. U5 y
                                                      if(q==0)
) v. f0 z* `4 Z( n) S' \                                                           {+ R8 T; Y# G- n% z! P6 ]! t+ S
                                                              addObjects[objectCount]=tags[k];
0 A& r0 M) m/ Y  Q2 a2 M                                                              objectTypes[objectCount]=EPM_target_attachment;2 X. E: x2 q+ J3 ]4 ?7 T8 h
                                                              objectCount+=1;" r0 T; u" B% v, T, T- @" B: n# v4 O
                                                              }. y7 k  u7 @' u9 i. a0 [
                                                       }7 Q, u5 |' x7 h' A  D: e
                                                  }- }% R1 {' t/ j8 ~" f. \2 z
                                              else
: P! V) ~# n6 j) z                                                  {
( L" v5 d1 c+ c9 Z                                                  n=0;
9 s6 Q) n  Z: {; P/ t( [                                                  for(m=0;m<statusNum;m++)6 N, {! {. k* v6 \" c
                                                       {4 J8 \, Q) R. q+ l- K
                                                       AOM_ask_value_string(statusList[m],"name",&statusName);; M$ |' C; S7 I
                                                       if(strcmp(statusName,"Released")==0)
  Y  F3 m% d9 O5 B9 B* W* ?                                                           {
& y$ _) |# e8 Y9 G+ v                                                           n+=1;" D) h! e1 h: L# \0 W% m$ V2 ?
                                                           }: c$ ^7 f- R6 T3 b
                                                       }& \6 X  r1 J% ~0 R* _" j( d  F( J
                                                  if(n==0). @4 `" l! `* j- _5 C
                                                      {
5 N- I- c6 u, C, }; d2 _2 g                                                      AOM_ask_value_tags(tags[k],"process_stage_list",&processStateCount,&processStateList);
- z. p! b3 q8 i3 U5 [+ _+ B                                                        if(processStateCount==0)
: I# X" f0 I3 x1 n# s$ m7 r5 `                                                            {; L! Z4 Y1 ?9 V2 `% h/ {: y$ ]
                                                              ITK__convert_tag_to_uid(tags[k],&uId1);
- f5 S/ [8 |* g3 a                                                            q=0;
- j2 t0 i  b2 q8 I+ A                                                            for(p=0;p<objectCount;p++)
  X5 Y! ~* p* t3 f                                                                 {' t6 B9 u& a8 f2 X  D0 C
                                                                 ITK__convert_tag_to_uid(addObjects[p],&uId2);
6 l9 A: i8 h# K, }                                                                 if(strcmp(uId1,uId2)==0)9 O  y! @- Q  k6 l  u- E7 w2 E* b. \- e
                                                                     {
! m. O) X1 \9 p/ B; y                                                                     q+=1;+ }/ Q! B1 I: J8 \$ d2 l
                                                                     }
- h1 ^/ a. L8 T3 {5 E5 P                                                                 }
" |) X+ O" n4 Q! u8 G7 K% k                                                            if(q==0)
) a, |  R0 \! p; S: g8 E+ |                                                                 {
  G; F  g4 k2 T, _+ m6 ~                                                                    addObjects[objectCount]=tags[k];0 G+ |7 ~& a) _8 y
                                                                    objectTypes[objectCount]=EPM_target_attachment;
- _, e9 }" F0 y9 R6 I                                                                    objectCount+=1;
1 E& T& a3 Z/ a/ Y! A+ K                                                                    }! x4 |6 \0 x+ k, F% f8 T; _, n2 }; m
                                                             }
) N& D8 g2 Q6 J  y3 l* R                                                      }# C) V, M( I/ n; }, y- e/ P4 K
                                                  }
& B9 }$ U; ~  K8 f9 G4 ]  M! L                                              }
- i# W3 K+ R! u2 d" n- I; l                                         }. \0 d2 W- y. @& n9 o

* B$ N$ l0 ?; v/ x. v9 w                                      }
- R) y1 m) e4 ^) S1 K1 I8 k                                 }# K( b( H" g' y3 x5 s4 E
                            }1 O) O2 V) E% B5 \7 r& d
                      }; {1 z3 i1 m# X$ W" Z7 W1 j7 k
                 }                           
' B8 V; k' G% m! I& l7 G          } ! i' z, W) p% ?
         
4 q  H1 a4 }  m% w1 r2 |& b        printf("No status DataSet-[%d]\n",objectCount);
' G! d* ~; y0 Z0 h) W$ y        if(objectCount>0)
% b/ t7 R' d9 {5 W! m+ L2 b           { & Q  V/ W1 f6 n# q4 }
              status=EPM_add_attachments(root_task,objectCount,addObjects,objectTypes);
- O& v% m3 D% v8 B: _+ o              if(status==ITK_ok)5 m, D# |% w& H5 K, _: @
                 {; a* \$ u% \: M& b, L; V
                 printf("成功添加数据集[%d]个!\n",objectCount);7 c% x" T+ h$ _7 t$ k8 T
                 }6 k6 q! _( t9 L3 ?/ R6 ^& x& S
              else
9 e" ]' Q  K& y6 ^5 ~                 {
+ x# o  v! Q& \/ g& _% h                 EMH_ask_error_text(status, &message);& m9 [7 [! l; }/ F
                    printf("Add error is [%s]\n", message);$ B+ v/ I/ j8 f0 A" ]
                 }
9 i5 K  a% c4 Z5 F            }    1 K, x4 k7 o& e$ [( G
      }
# O% {/ o) E6 M' s. _
; C4 _! r! d4 M) Sif(propNames!=NULL)
& O  y; b& O) D# q1 d9 a4 T7 _   {   
7 I, a8 A1 R# K# j        MEM_free(propNames);. u5 U0 m, U* `9 M5 d& g2 ~
      }
* b) e4 r! i4 b6 jif(attachObjectTags!=NULL)
4 Y$ I4 X! S0 k9 u, c+ _6 K   {   
4 _. \5 E1 W8 o& d        MEM_free(attachObjectTags);! t0 f5 r3 T. }$ j: h
      }
4 @# y7 M! E" p# Kif(tags!=NULL)+ q/ H5 o, I; @. J* R
   {% T) ^# H. [; y/ \4 K
   MEM_free(tags);9 J: b: r: Y- ]6 `
   } ' t/ s+ j1 }$ u, Y  F3 V, p
if(addObjects!=NULL): E$ _6 `, ?3 H& g% w: _
   {& ?; }! Z$ k- Z- d
   MEM_free(addObjects);% M  J" W% H' q! v; ~3 o* M+ i
   }   V  \8 Y- }1 f6 }# `
if(objectTypes!=NULL)
" B6 z' Q8 @' Z+ q5 g4 Y   {
" o  [, x0 |4 e2 S$ H   MEM_free(objectTypes);/ `6 y; s2 p( L! f! O& S
   } % W: }9 W- A' J  g: X+ a, D
if(processStateList!=NULL)
) q( F* I; ~$ Y   {. z/ g. k* D! v. S) b
   MEM_free(processStateList);( M1 w% ^. P+ s5 y# E1 |/ S
   }
) m/ t) o" S% N$ o% w* _        4 M& o1 d2 a$ Z. I
return recode;
5 x: ~9 z/ R8 B9 B0 `}
发表于 2010-1-10 18:37 | 显示全部楼层
楼上的你懂吗 这是什么东西啊
回复 支持 反对

使用道具 举报

发表于 2010-1-12 14:11 | 显示全部楼层
谢谢,希望有用
回复 支持 反对

使用道具 举报

发表于 2010-3-4 15:56 | 显示全部楼层
c代码 跟ugopen一样的风格
回复 支持 反对

使用道具 举报

发表于 2010-3-7 10:01 | 显示全部楼层
哥   我都看傻了
回复 支持 反对

使用道具 举报

发表于 2010-3-13 07:07 | 显示全部楼层
看不懂啊,想学都不行啊
回复 支持 反对

使用道具 举报

发表于 2010-3-25 18:19 | 显示全部楼层
路过,学习中!
回复 支持 反对

使用道具 举报

发表于 2010-3-25 18:19 | 显示全部楼层
路过学习中。
回复 支持 反对

使用道具 举报

发表于 2010-3-25 18:20 | 显示全部楼层
路过,学习中!
回复 支持 反对

使用道具 举报

发表于 2010-8-23 09:40 | 显示全部楼层
路过,看不懂
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|关于我们|sitemap|小黑屋|Archiver|手机版|UG网-UG技术论坛-青华数控模具培训学校 ( 粤ICP备15108561号 )

GMT+8, 2025-6-12 17:19 , Processed in 0.598272 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表