Java 如何修改WTPartDescripteLink?
我有一个WTPart对象,它有一些描述链接(如WTDocument)与之关联。现在我需要通过代码修改描述链接 以下是我迄今为止尝试过的代码Java 如何修改WTPartDescripteLink?,java,ptc-windchill,Java,Ptc Windchill,我有一个WTPart对象,它有一些描述链接(如WTDocument)与之关联。现在我需要通过代码修改描述链接 以下是我迄今为止尝试过的代码 Vector localVector=new Vector(); QueryResult localQueryResult=WTPartHelper.service.getDescribedByWTDocuments(part,false); System.out.println("size is "+localQueryResult.size
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);
}
}
表示我收到如下错误消息
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或一些示例代码片段对我很有用。如果需要更新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 transaction围绕操作进行操作。如果需要更新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);
}
}
根据@Julien Boulay给出的上述答案,为了创建WTPart的新迭代,并用windchill事务围绕操作,最好进行签出/签入操作,我创建了一个方法,可以查询文档对象的链接,然后在创建了与我的零件的新链接后修改该文档
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 ");
}
以上代码现在可以正常工作。根据@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 ");
}
上面的代码现在可以正常工作。因为它是在ClassCastException中提出的,所以无法对WTPartDescribeLink进行版本控制。版本化对象包括WTPart、WTDocument、EPMDocument,但不包括任何链接对象。如果要更新WTPartDescribeLink,必须创建新版本的WTPart(即链接持有者)。由于它是在ClassCastException中提出的,因此无法对WTPartDescribeLink进行版本控制。版本化对象包括WTPart、WTDocument、EPMDocument,但不包括任何链接对象。如果要更新WTPartDescribeLink,必须创建新版本的WTPart(即链接保持器):上面的代码给我的查询结果是0,因为修订版没有保存在那里。我们还需要签出该部分进行迭代。我有一个windchill服务,它将捕获WTPart的修订版,我的要求是我需要与该部分关联的PartDescripteLink也得到修订。我不应该签出代码为I的部分在我之前的评论中说,partDescribeLink不能修改。一旦您的WTPart被修改,PartDescripteLink将在新的WTPart版本上自动重新进行。修订PartDescripteLink不是必需的,因为链接无法获得版本!你到底想做什么?:上面的代码给我的查询结果是0,因为修订版没有保存在那里。我们还需要签出该部件进行迭代。我有一个windchill服务,它将捕获WTPart的修订版,我的要求是我需要与该部件关联的partDescribeLink也得到修订。我不应该这样做查看代码部分正如我在之前的评论中所说,partDescribeLink无法修改。一旦您的WTPart被修改,PartDescripteLink将在新的WTPart版本上自动重新进行。修订PartDescripteLink不是必需的,因为链接无法获得版本!你到底想做什么?