windchill开发之创建对象

来源:原创 作者:云淡天晴 时间:2008-10-21 
         在windchill开发的过程中,整个操作围绕的都是增删改查,今天我们将介绍的是增加,此次以part的创建为例,对于删除,修改都一几乎一样的代码。

        以下是源代码:

        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;
 }

}

发布了24 篇原创文章 · 获赞 4 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/wangxiaomei2008/article/details/4990969
今日推荐