2013-03-11 132 views
1

我有一个WTPart对象,它有一些Describe链接(与WTDocument)相关联。现在我需要通过代码修改描述链接。如何修改WTPartDescribeLink?

以下是我已经试过到目前为止

Vector localVector=new Vector(); 
    QueryResult localQueryResult=WTPartHelper.service.getDescribedByWTDocuments(part,false); 
    System.out.println("size is "+localQueryResult.size()); 
    if((localQueryResult!=null)&&(localQueryResult.hasMoreElements())) 
    { 
     while(localQueryResult.hasMoreElements()) 
     { 
       WTObject localObject=(WTObject) localQueryResult.nextElement(); 
      localVector.addElement(localObject); 
     } 
    } 
    if((localVector!=null)&&(localVector.size()>0)) 
    { 
     for(int i=0;i<localVector.size();i++) 
     { 
      WTPartDescribeLink localPartlink=(WTPartDescribeLink) localVector.elementAt(i); 
      WTDocument localWTDocument=localPartlink.getDescribedBy(); 
      System.out.println("values are "+localWTDocument.getNumber()); 
      RevisionControlled localRevisionControlled=null; 
      localRevisionControlled=(RevisionControlled) VersionControlHelper.service.newVersion(localWTDocument); 
      localRevisionControlled=(RevisionControlled) PersistenceHelper.manager.save(localRevisionControlled); 

     } 
    } 

此代码修改仅被链接为Describelink但不能修改Describelink的WTDocument对象的代码。 如果我直接通过描述链接对象这样

localRevisionControlled=(RevisionControlled) VersionControlHelper.service.newVersion((Versioned)localPartlink); 

意味着我得到错误消息像下面

Exception in thread "main" java.lang.ClassCastException: wt.part.WTPartDescribeLink cannot be cast to wt.vc.Versioned 
    at ext.gt.test.CheckLink.getPartlink(CheckLink.java:100) 
    at ext.gt.test.CheckLink.searchPart(CheckLink.java:52) 
    at ext.gt.test.CheckLink.main(CheckLink.java:32) 

我不知道如何解决这个问题,但我需要修改部分描述通过代码进行链接。建议我为此或某些示例代码段所需的API对我很有用。

+1

由于在ClassCastException中引发,WTPartDescribeLink无法进行版本控制。 版本化的对象是WTPart,WTDocument,EPMDocument,但是是任何链接对象。 如果你想更新WTPartDescribeLink,你必须创建一个新版本的WTPart(即链接持有者)。 – 2013-03-12 07:37:46

回答

0

根据@Julien Boulay上面给出的答案,我创建了一个方法,查询文档对象,然后在创建与我的零件的新链接后修改该文档。

private WTPartDescribeLink getPartlink(WTPart target) throws WTException, WTPropertyVetoException { 
     WTDocument localWTDocument=null; 
     if(target==null) 
      return null; 
     QueryResult localQueryResult=WTPartHelper.service.getDescribedByWTDocuments(target, false); 
     ilogger.info("size of query result is "+localQueryResult.size()); 
     if((localQueryResult!=null)&&(localQueryResult.hasMoreElements())) 
     { 
      while(localQueryResult.hasMoreElements()) 
      { 

       WTObject localObject=(WTObject) localQueryResult.nextElement(); 
       WTPartDescribeLink localPartlink=(WTPartDescribeLink) localObject; 
       localWTDocument=localPartlink.getDescribedBy(); 
      } 
     } 

     WTDocument docm=(WTDocument) VersionControlHelper.service.allVersionsOf(localWTDocument).nextElement(); 
     ilogger.info("values are "+docm.getNumber()); 
     String version=docm.getVersionIdentifier().getValue(); 
     String iteration=docm.getIterationIdentifier().getValue(); 
     ilogger.info("Object passing with version and iteration of"+version+"."+iteration); 
     RevisionControlled localRevisionControlled=null; 
     localRevisionControlled=(RevisionControlled) VersionControlHelper.service.newVersion(docm); 
     localRevisionControlled=(RevisionControlled) PersistenceHelper.manager.save(localRevisionControlled); 
     createLink(target,docm); 
     return null; 
    } 

    private void createLink(WTPart spart, WTDocument localWTDocument) throws WTException { 

       WTPartDescribeLink link=WTPartDescribeLink.newWTPartDescribeLink(spart, localWTDocument); 
       PersistenceServerHelper.manager.insert(link); 
       ilogger.info("Link saved "); 

     } 

上述代码现在工作正常。

1

如果您需要更新WTPartDescribeLink上的某些属性,那么您应该创建一个新版本的WTPart(而不是WTDocument)。
它可以用下面的代码来完成:

part = VersionControlHelper.service.newVersion(part); 
QueryResult qr =WTPartHelper.service.getDescribedByWTDocuments(part,false); 

if(qr!=null) 
{ 
    while(qr.hasMoreElements()) 
    { 
     WTPartDescribeLink link =(WTPartDescribeLink) localQueryResult.nextElement(); 
     /** ... 
     Update some attributes on the link 
     ... **/ 
     link= PersistenceServerHelper.manager.save(link); 
    } 
} 

这也可能是更好的做退房/登记入住,以创建WTPart中的一个新的迭代,并围绕与Windchill操作交易

+0

:上面的代码给我的查询结果为0,因为修订版本没有保存在那里。我们还需要检出要迭代的部分。 – 2013-03-12 09:36:09

+0

我有一个windchill服务,它将捕获WTPart的修订版本,我的要求是我需要与该部分关联的partDescribeLink也会被修改。我不应该使用代码 – 2013-03-12 09:45:25

+1

检出该部分正如我在之前的评论中所述,partDescribeLink不能修改。修改WTPart后,partDescribeLink将在新的WTPart版本上自动重新导入。 修改partDescribeLink并不是必需的,因为链接无法获得版本!你想要做什么? – 2013-03-14 14:49:12