Windchill_二次开发新手入门常用的API
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); //今后持续更新
9.根据用户名得到用户
/**
* 根据用户名得到用户
* @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();
}
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);
11、根据WTPartMaster对象获得最新的WTPart
/**
* 根据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的更多相关文章
- 《IM开发新手入门一篇就够:从零开发移动端IM》
登录 立即注册 TCP/IP详解 资讯 动态 社区 技术精选 首页 即时通讯网›专项技术区›IM开发新手入门一篇就够:从零开发移动端IM 帖子 打赏 分享 发表评论162 想开 ...
- Skyline 7 版本TerraExplorer Pro二次开发快速入门
年底了,给大家整理了一下Skyline 7版本的二次开发学习初级入门教程,献给那些喜欢学习的年轻朋友. 我这整理的是Web控件版本的开发示例,里面页面代码保存成html,都可以直接运行的. 测试使用的 ...
- 在 WSL Ubuntu 上使用 .NET 进行跨平台开发新手入门
翻译自 haydenb 2020年6月3日的文章<Getting started with cross-platform development using .NET on Ubuntu on ...
- Linux 新手入门常用命令
1,增加用户:useradd mylinux passwd mylinux 添加你的用户密码 2,切换用户: su otheruser (注意这种切换方式只是临时的,本质工作目录还在原来的用户目录 ...
- EcShop二次开发系列教程–总纲
EcShop作为老牌的B2C独立网店系统,功能非常全名,强大的文件.数据库缓存机制,保证前后台系统执行速度更快.系统平稳运行.但是过多的功能也或多或少的会影响到系统的整个效率,所有在使用EcShop搭 ...
- 腾讯云OCR服务二次开发
本文记录了对腾讯云OCR服务二次开发的代码和开发过程中遇到的问题.
- 【原创】新手入门一篇就够:从零开发移动端IM
一.前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和沟通代价,对各种应用形态产生了深远影响. 做为IM开发者或即将成为IM开发者的技术人员 ...
- 课程上线 -“新手入门 : Windows Phone 8.1 开发”
经过近1个月的准备和录制,“新手入门 : Windows Phone 8.1 开发”系列课程已经在Microsoft 虚拟学院上线,链接地址为:http://www.microsoftvirtuala ...
- PHP常用代码大全(新手入门必备)
PHP常用代码大全(新手入门必备),都是一些开发中常用的基础.需要的朋友可以参考下. 1.连接MYSQL数据库代码 <?php $connec=mysql_connect("loc ...
- 新手入门 : Windows Phone 8.1 开发 视频学习地址
本视频资源来自Microsoft Virtual Academy http://www.microsoftvirtualacademy.com/ 下面为视频下载地址! 新手入门 : Windows P ...
随机推荐
- 图文并茂的学习笔记--微信小程序自定义tabbar
我发现自带的那个tabbar不可以修改样式,没得搞啊,这不行,要改 首先,我们看文档,地址在下面 https://developers.weixin.qq.com/miniprogram/dev/fr ...
- 今天遇到的报错Babel noteThe code generator has deoptimised the styling of ...as it exceeds the max of 500KB.
解决办法如下: { test: /.js$/, exclude: /node_modules/, use: 'babel-loader' } 然并卵,我已经设置了这个东西了,突然发现我的文件并不在no ...
- Unity_UIWidgets - 组件Drawer
Unity_UIWidgets - 组件Drawer 组件Drawer Drawer 构造 代码 效果 Drawer使用完毕 结语 图标Icon QQ 今日无推荐 组件Drawer 各位伙伴,周日愉快 ...
- 【随笔记】NDK 编译开源库 SQLite3
NDK 编译环境搭建请参考:[工作笔记]NDK 编译开源库 nghttp2/openssl/curl_lovemengx的博客-CSDN博客 一.下载源代码 wget https://github.c ...
- 12月9日内容总结——静态文件以及配置、form表单属性的作用、request对象、python连接数据库和Django连接数据库、ORM的基础知识介绍
目录 一.静态文件 1.静态文件概念 2.资源访问 3.静态文件资源访问 二.静态文件相关配置 1.接口前缀 2.接口前缀动态匹配 三.form表单 action属性 method属性 四.reque ...
- you-get下载B站视频
you-get下载B站视频 库存 you-get介绍 https://github.com/soimort/you-get you-get是一个命令行工具,可以下载知名网站的视频 支持的网站有 ht ...
- 模型预处理层介绍(1) - Discretization
预处理的作用主要在于将难以表达的string或者数组转换成模型容易训练的向量表示,其中转化过程大多是形成一张查询表用来查询. 常见的预处理方式包括: class Discretization: Buc ...
- 上午小博(java小知识)
使用super来引用父类的成分,使用this来引用当前对象 一个类从另一个类继承,new这个子类的实例的时候,使用super来引用父类对象,this是指当前对象的引用. 当new一个对象出来的时候,这 ...
- Python 元组列表排序:初学者可能忽视的细节
P1085 [NOIP2004 普及组] 不高兴的津津 题目描述 津津上初中了.妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班.另外每周妈妈还会送她去学习朗诵.舞 ...
- 微软出品自动化神器【Playwright+Java】系列(九)多线程、重定向、弹出新窗口、截图、新页面、录制、页面对象模式操作
写在前面 关于Playwright系列的文章,真的很久没有写了,今天一个不小心官方API部分过完了,下面将为大家逐一演示,感兴趣的同学可以自行动手练习. API部分 多线程 直白点说就是多线程下Pla ...