Windchill_二次开发新手入门常用的API

1.根据零件名称/编码 得到该零件

wt.clients.prodmgmt.WTPartHelper.findPartByName(name) ;      wt.clients.prodmgmt.WTPartHelper.findPartByNumber(number);

2.根据WTpart得到WTparMaster

WtPart wtpart;     WTPartMaster wtmaster=(WTPartMster)part.getMaster();

3.获取codebase下配置文件wt.properties属性信息

WTProperties wtproperties = WTProperties.getLocalProperties();

String wthome = wtproperties.getProperty("wt.home", "");   //codebase的文件夹路径

4.获取part被借用的所有父部件

QueryResult qr= wt.part.WTPartHelper.service.getUsedByWTParts(WTPartMster wtMaster);      注:此方法得到的结果为该part被使用情况的全部父部件,包括了Design视图及Manufacturing视图 更包括了父部件使用part的所有修订版           本,打印出来可以看到会有相同的部件编号,不同的修订版本.

5.根据OID 获取Wtpart

wt.fc.WTReference partRef = new wt.fc.ReferenceFactory().getReference( oid );

WTPart wtpart=(WTPart)partRef;

6.得到零件最新版本

WTPart wtpart= (WTPart) VersionControlHelper.getLatestIteration(part);

7.通过过滤得到零件最新版本

QuerySpec querysearch = new QuerySpec(WTPartMaster.class);     //查询所有的WTPartMaster

QueryResult queryresult =  PersistenceHelper.manager.find(querysearch);

LatestConfigSpec latestconfigspec = new LatestConfigSpec();     //根据WTPartMaster查询所有最新版本的零部件

QueryResult allWTPart = ConfigHelper.service.filteredIterationsOf(queryresult,latestconfigspec)

8.查询某用户某段时间范围内创建的零件

QuerySpec qs = new QuerySpec(WTPart.class);

qs.appendSearchCondition(new SearchCondition(WTPart.class,WTPart.CREATE_TIMESTAMP, true, new   AttributeRange(begintime, endtime)));//删选条件 时间范围内

qs.appendAnd();//一定要加上 不然下一个条件不能删选

qs.appendSearchCondition(new SearchCondition(WTPart.class,  "iterationInfo.creator.key", SearchCondition.EQUAL,PersistenceHelper.getObjectIdentifier(name)));//删选条件 用户

QueryResult qr = PersistenceHelper.manager.find(qs);  //今后持续更新

/**

* 根据用户名得到用户

* @param name 用户名

* @throws WTException

* return  WTUser

*/

public static WTUser getUserFromName(String name) throws WTException {

Enumeration enumUser = OrganizationServicesHelper.manager.findUser(WTUser.NAME, name);

WTUser user = null;

if (enumUser.hasMoreElements())

user = (WTUser) enumUser.nextElement();

if (user == null) {

enumUser = OrganizationServicesHelper.manager.findUser(WTUser.FULL_NAME, name);

if (enumUser.hasMoreElements())

user = (WTUser) enumUser.nextElement();

// http://hi.baidu.com/turing632/blog/item/3f183a2ad091f23ad52af1a7.html

}

if (user == null) {

throw new WTException("系统中不存在用户名为'" + name + "'的用户!");

}

return user;

}

}

10.windchill 中查询,高级查询,基本查询

QuerySpec qs = new QuerySpec();//构造

Int index = qs.appendClassList(WTPart.class,true);//添加查询类型,获取类型索引,第2个参数表示“要查询的类型、表”

WhereExpression where = new SearchCondition(WTPart.class, WTPart.xx, “=”, xx);//泛型在WC API中的使用

//获取查询条件数目

If(qs.getConditionCount()>0 && qs.getWhere().endsWith(“"))

{

qs.appendAnd();

}

//添加查询条件

qs.appendWhere(where, new int[]{index});

//** 以下是联合查询的API范例。LINK关系//ROLEA、ROLEB的INDEX被使用到。

int linkIndex = qs.appendClassList(XXLink.class, false);

qs.appendJoin(linkIndex, xxLink.RoleA, index_A);

qs.appendJoin(linkIndex, xxLink.RoleB, index_B);

//添加“生命周期”查询条件

LifeCycleConfigSpec lcsp = new LifeCycleConfigSpec();

lcsp.setLifeCycleState(State.toState(state));

qs = lcsp.appendSearchCriteria(qs);

//执行查询

QueryResult qr = PersistenceHelper.manager.find(qs);

//过滤出最新小版本

LatestConfigSpec lcs = new LatestConfigSpec();

qr = lcs.process(qr);

/**

* 根据WTPartMaster对象获得最新的WTPart

* @param partmaster WTPartMaster对象

* @return 最新的WTPart

* @throws WTException

*/

public static WTPart getLastPart(WTPartMaster partmaster) throws WTException{

WTPart part=null;

if(partmaster==null){

return part;

}

ConfigSpec configSpec=ConfigHelper.service.getDefaultConfigSpecFor(WTPart.class);

QueryResult qr=ConfigHelper.service.filteredIterationsOf(partmaster, configSpec);

if(qr!=null){

while(qr.hasMoreElements()){

part=(WTPart) qr.nextElement();

}

}

return part;

}

在windchill中很多查询都是非常类似的,方法也是非常之多,不过只要会两三中查询方式就可以应付windchill中几乎所有的查询需要,

本次将再次提及一种非常方便的查询,不过对于这种查询方式需要对于数据库表有一定的了解。此实例中需要注意的是对于时间的

比较查询。

import java.sql.Timestamp;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import wt.fc.PersistenceHelper;

import wt.fc.QueryResult;

import wt.projmgmt.admin.Project2;

import wt.projmgmt.execution.ProjectPlan;

import wt.query.CompositeWhereExpression;

import wt.query.ConstantExpression;

import wt.query.DateExpression;

import wt.query.LogicalOperator;

import wt.query.QuerySpec;

import wt.query.SearchCondition;

import wt.query.TableColumn;

import wt.util.WTException;

public class Demo

{

/**

* @param args

* @throws WTException

* @throws ParseException

*/

public static void main(String[] args) throws WTException, ParseException

{

String string="2009-05-01 00:00:00.000000";

Timestamp time=Timestamp.valueOf(string);

// TODO Auto-generated method stub

QuerySpec qs = new QuerySpec();

int a = qs.appendClassList(Project2.class, true);

int b = qs.appendClassList(ProjectPlan.class, true);

qs.setAdvancedQueryEnabled(true);

String[] aliases = new String[2];

aliases[0] = qs.getFromClause().getAliasAt(a);

aliases[1] = qs.getFromClause().getAliasAt(b);

TableColumn tc1 = new TableColumn(aliases[0], "IDA2A2");  //项目id

TableColumn tc2 = new TableColumn(aliases[0], "STATECONTAINERTEAMMANAGEDINF");//项目状态

TableColumn tc3 = new TableColumn(aliases[1], "IDA3B8");  //项目计划中引用项目id

TableColumn tc4 = new TableColumn(aliases[1], "NAME");    //项目名称

TableColumn tc5 = new TableColumn(aliases[1], "PERCENTCOMPLETE"); //项目完成进度

TableColumn tc6 = new TableColumn(aliases[1], "TIMETOSTART");  //项目实际开始时间

CompositeWhereExpression andExpression = new CompositeWhereExpression(LogicalOperator.AND);

andExpression.append(new SearchCondition(tc1, "=", tc3));

andExpression.append(new SearchCondition(tc2, "=", new ConstantExpression("RUNNING")));  //正在运行

andExpression.append(new SearchCondition(tc4, "=", new ConstantExpression("上雪堂")));

andExpression.append(new SearchCondition(tc5, ">=", new ConstantExpression(new Integer("89"))));

andExpression.append(new SearchCondition(tc6, SearchCondition.GREATER_THAN_OR_EQUAL, new ConstantExpression(time)));

qs.appendWhere(andExpression, null);

QueryResult qr=PersistenceHelper.manager.find(qs);

while (qr.hasMoreElements())

{

Object obj[] = (Object[]) qr.nextElement();

Project2 project2 = (Project2)obj[0];

System.out.println(project2.getName());    //项目名称

System.out.println(project2.getCtmState());//项目状态

ProjectPlan projectPlan = (ProjectPlan)obj[1];

System.out.println(projectPlan.getPercentComplete());  //项目完成进度

System.out.println(projectPlan.getStartTime()); //项目开始时间

}

}

}

高级查询一般用于有多种约束条件的数据查询.用高级查询主要用来减少数据查询的次数,提高查询的效率.

下面一个例子就是一个简单的高级查询,用于查询某一软属性为某一值的所有的文档:(CSDN好像贴源代码的功能并不强,不像JAVAEYE,这里将就一下)

QuerySpec qs = new QuerySpec();

qs.setAdvancedQueryEnabled(true);

int ibaHolderIndex = qs.appendClassList(WTDocument.class, true);

int ibaStringValueIndex = qs.appendClassList(StringValue.class, false);

int ibaStringDefinitionIndex = qs.appendClassList(StringDefinition.class, false);

// Latest Iteration

SearchCondition scLatestIteration = new SearchCondition(WTDocument.class,                  WTAttributeNameIfc.LATEST_ITERATION,

SearchCondition.IS_TRUE);

// String Value With IBA Holder

SearchCondition scJoinStringValueIBAHolder = new SearchCondition(StringValue.class,

"theIBAHolderReference.key.id", WTDocument.class, WTAttributeNameIfc.ID_NAME);

// String Value With Definition

SearchCondition scJoinStringValueStringDefinition = new SearchCondition(StringValue.class,

"definitionReference.key.id", StringDefinition.class, WTAttributeNameIfc.ID_NAME);

// String Definition 软属性名称

SearchCondition scStringDefinitionName = new SearchCondition(StringDefinition.class, StringDefinition.NAME,

SearchCondition.EQUAL, ibaname);

// String Value 软属性值

SearchCondition scStringValueValue = new SearchCondition(StringValue.class, StringValue.VALUE,

SearchCondition.EQUAL, ibavalue.toUpperCase());

// documentmaster name = type

qs.appendWhere(scLatestIteration, ibaHolderIndex);

qs.appendAnd();

qs.appendWhere(scJoinStringValueIBAHolder, ibaStringValueIndex, ibaHolderIndex);

qs.appendAnd();

qs.appendWhere(scJoinStringValueStringDefinition,

qs.appendWhere(scJoinStringValueStringDefinition, ibaStringValueIndex, ibaStringDefinitionIndex);

qs.appendAnd();

qs.appendWhere(scStringDefinitionName, ibaStringDefinitionIndex);

qs.appendAnd();

qs.appendWhere(scStringValueValue, ibaStringValueIndex);

QueryResult qr = PersistenceHelper.manager.find(qs);

注意:

1)如果对查询没有把握,可以先试着用sql在数据库里操作一下

2)查询尽可能考虑条件的优化

3)减少查询次数并不是必然的,如果多个表关联查询,要考虑这些表的数据量的问题,必要时将不消耗资源的查询先做了

4)测试过程,可以建立一些临时表,用工具导入尽可能多的测试数据,这高级查询产生的SQL去执行,看一下执行的效率

Windchill 二次开发新手入门常用的API相关推荐

  1. C# Cad二次开发新手入门系列教程(一)开发环境搭建

    目录 前言 开发需要做什么准备? 编写自己的第一个程序 前言 本课程主要针对刚接触Cad二次开发或者准备入门Cad二次开发的朋友,笔者是用的C#进行开发,在该系列教程内,笔者会带着大家从最基础的开发到 ...

  2. C# Cad二次开发新手入门系列教程(二)Line对象

    目录 Line对象说明 创建一个Line对象 Line对象说明 Line对象为CAD中的直线,什么是直线,严格来说CAD中的直线并非数学中定义的直线,实际上CAD的直线只是一个线段而已!那么在数学上我 ...

  3. Android开发新手入门总结(1)

    大二学生,跟着老师一起做Android项目,自学安卓开发,到现在也差不多有一两个月了,期间遇到过许许多多的问题,也有不少收获,所以写一个总结作为CSDN的第一篇博客 环境的搭建 零基础学安卓,碰到的第 ...

  4. Revit二次开发从入门到精通学习之路, (含Revit二次开发教程下载)

    Revit二次开发从入门到精通学习之路 Autodesk Joe Ye叶雄进 2. 18 2014    yexiongjin@hotmail.com Revit在国内的应用越来越广泛, Revit ...

  5. 游戏开发新手入门之DirectX入门

    游戏开发新手入门之DirectX入门 [文章导读]       今天我们要接触到令人敬畏的DirectX.它比Windows GDI要快好几倍,可用于不同的语言和多种平台 [正文] ☆ 简介 今天我们 ...

  6. mysql修行练级之mysql新手入门常用命令

    mysql修行练级之mysql新手入门常用命令 创建时间:2014.08.24 修改时间:2014.09.26 从一个运维工程师和DBA新手的角度出发,学习,实践从而掌握mysql相关操作. 1.登录 ...

  7. Flow-3D的fortran语言简单科普,足够二次开发的入门

    Flow-3D的fortran语言简单科普,足够二次开发的入门 直接看链接吧 直接看链接吧 B站的UP主 lglhit 视频 看这个链接: 如何编写焊接热源子程序(平面热源) 这个讲的是abaqus的 ...

  8. Solidworks二次开发系列入门1

    Solidworks二次开发系列入门1 基本介绍 基本介绍 SolidWorks二次开发其实就是使用API函数对SolidWorks设计中一些重复繁琐的工作让计算机代替完成,起到辅助设计的作用. So ...

  9. 一、unix指令—TIPTOP GP ERP二次开发新手教程

    Unix 入门基础指令学习 对于TIPTOP GP ERP二次开发只需掌握标记为[必要]的命令即可 基本使用 1.登入系统 登入失败的原因: (1).账号不存在 (2).密码不存在.输错.长度不够-- ...

最新文章

  1. 7. Query Expressions(查询表达式)
  2. spring cloud云服务架构 - particle云架构代码结构讲解
  3. NetBeans Java EE技巧7:忽略的Java类和XHTML编辑器快捷方式
  4. 04.卷积神经网络 W1.卷积神经网络(作业:手动/TensorFlow 实现卷积神经网络)
  5. pandas使用dataframe直接绘图时,取消图例(legend)
  6. [瞎搞]JZOJ 3096 Hash函数
  7. 1.VBA实现EXCEL中Sheet1的 甲列 相同数值的行对应的乙列的数的和作为Sheet2中丙列中与Sheet1中甲列 相同的行对应的丁列的值...
  8. 开课吧课堂:什么是HashSet类
  9. java canvas画矩形,HTML5 编程之Canvas
  10. WEEX|简单界面的实现与页面跳转
  11. ekho--TTS语音引擎
  12. mysql 5.7 emoji_MYSQL5.7.25升级兼容微信emoji实操
  13. MATLAB制图代码
  14. mac安装虚拟机 centos7
  15. 计算机管理服务器,用勤哲Excel服务器实现计算机管理系统
  16. 马王堆汉墓帛书‧老子甲本——德经
  17. 为啥干不过苹果?某手机老总一语道破心中所想,赚钱才是第一位的
  18. PS打不开php,ps打不开未响应怎么办
  19. K8S调用GPU资源配置指南
  20. 【MANO管理模式利弊分析】

热门文章

  1. solve error pydoop.LocalModeNotSupported: ERROR: Hadoop is configured to run in local mode
  2. leetcode2053. 数组中第K个独一无二的字符串
  3. 深度解析pos机,养卡人必看!
  4. 第46屆ICPC 東亞洲區域賽(澳門)
  5. C/C++编程语言学习资料尽收眼底 电子书+视频教程
  6. Lanchester方程的离散模型及Python代码实现
  7. PHP7.0至PHP8部分特性总结
  8. python行业发展前景_python行业发展前景
  9. java jce 授权_java jce限制
  10. 电脑重装系统后一直显示请稍等怎么办?