以下是源代码:
import java.lang.reflect.InvocationTargetException;
import java.rmi.RemoteException;
import wt.fc.PersistenceHelper;
import wt.fc.QueryResult;
import wt.folder.Folder;
import wt.folder.FolderEntry;
import wt.folder.FolderHelper;
import wt.inf.container.WTContainer;
import wt.inf.container.WTContainerRef;
import wt.inf.library.WTLibrary;
import wt.method.RemoteMethodServer;
import wt.part.WTPart;
import wt.query.QueryException;
import wt.query.QuerySpec;
import wt.query.SearchCondition;
import wt.type.TypeDefinitionReference;
import wt.type.TypedUtility;
import wt.util.WTException;
import wt.util.WTPropertyVetoException;
import wt.vc.views.ViewHelper;
import wt.vc.views.ViewReference;
public class Demo4 implements wt.method.RemoteAccess
{
// 在类型管理器中自定义的part类型
private static String lenovoPart_type = "wt.part.WTPart|cn.jwis.kenny.LenovoPart";
// 产品中文件夹的路径,注意默认在文件夹前夹上Default
private static String PartPath = "Default/NewPart";
/**
* 创建一个新的部件
*
* @param args
* @throws WTException
* @throws WTPropertyVetoException
* @throws InvocationTargetException
* @throws RemoteException
*/
public static void main(String[] args) throws WTPropertyVetoException, WTException, RemoteException, InvocationTargetException
{
// TODO Auto-generated method stub
WTPart part =RemoteMethod("001", lenovoPart_type);
if(part!=null)
{
System.out.println("part 的名称是:"+ part.getName());
}
}
//创建部件要用rmi
public static WTPart RemoteMethod(String partNumber,String partType) throws RemoteException, InvocationTargetException
{
String CLASSNAME = (Demo4.class).getName();
Class argTypes[];
Object svrArgs[];
argTypes = (new Class[]
{ String.class,String.class });
svrArgs = (new Object[]
{ partNumber,partType});
return (WTPart) RemoteMethodServer.getDefault().invoke("newPart", CLASSNAME, null, argTypes, svrArgs);
}
/**
* 创建一个新的部件,类似的代码可以实现修改part的基本属性
*
* @param number
* 部件的编码
* @param PartType
* 部件的类型,部件在windchill中可以自定义很多中类型
* @return
* @throws WTException
* @throws WTPropertyVetoException
*/
public static WTPart newPart(String number, String PartType) throws WTException, WTPropertyVetoException
{
WTPart newPart = null;
// 获取容器
WTContainer container = getContainer("Moto");
System.out.println(1);
// 获取容器的引用
WTContainerRef ref = ref = WTContainerRef.newWTContainerRef(container);
// 获取文件夹
Folder folder = wt.folder.FolderHelper.service.getFolder(PartPath, ref);
System.out.println(2);
String strPartNumber = number;
String strPartName = number;
wt.vc.views.View view = ViewHelper.service.getView("Design");
ViewReference viewRef = ViewReference.newViewReference(view);
System.out.println(3);
TypeDefinitionReference typeDefinitionRef = TypedUtility.getTypeDefinitionReference(PartType);
System.out.println(4);
// 创建一个部件,编码与名称
newPart = WTPart.newWTPart(strPartNumber, "shangxuetang.cn");
// 为部件设置容器
newPart.setContainer(container);
// 为部件设置类型
newPart.setTypeDefinitionReference(typeDefinitionRef);
// 为部件设置view
newPart.setView(viewRef);
// 为此部件设置存贮位置
FolderHelper.assignLocation((FolderEntry) newPart, folder);
// 保存部件,切忌不要保存两次。经常在调用完本方法之后习惯性的再保存一次,这样会出现错误。
newPart = (WTPart) PersistenceHelper.manager.save(newPart);
// 从数据库中提取part
newPart = (WTPart) PersistenceHelper.manager.refresh(newPart);
return newPart;
}
/**
* 产品是一个容器,这里通过一个产品的名称获取容器,产品的名称在windchill中具有唯一性
*
* @param containerName
* 产品的名称
* @return
*/
public static WTContainer getContainer(String containerName)
{
try
{
// 此处的逻辑部分可以参考:"windchill开发简单入门之条件查询"这篇文章
QuerySpec qs = new QuerySpec(WTContainer.class);
SearchCondition sc = new SearchCondition(WTContainer.class, WTContainer.NAME, "=", containerName);
qs.appendWhere(sc);
QueryResult qr = PersistenceHelper.manager.find(qs);
while (qr.hasMoreElements())
{
WTContainer container = (WTContainer) qr.nextElement();
return container;
}
} catch (QueryException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WTException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}