2013-03-11 134 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