1. XmlObject增删改查
增:
创建查询条件
XmlSearchCriteria<FTReleasefromAppFormBean> criteria = new BaseXmlSearchCriteria<>(FTReleasefromAppFormBean.class);
添加过滤条件
criteria.addFilter(new ColumnFilter(FTReleasefromAppFormBean.PROGRAM_NAME, SearchCondition.EQUAL, programName));
查询
List<XmlObject> search = XWorksHelper.getXmlObjectStoreManager().search(criteria, StoreOptions.LoadOption.ONLY_ROOT);
删:
改:
查:
2.模型对象的增删改查
增:
删:
改:
查:
# Windchill 查询 API 笔记
## 1. QuerySpec
`QuerySpec` 是 PTC 封装的用于查询 Windchill 数据库的 Java 类。它允许你构建数据库查询并且添加查询条件。
### 基本用法:
```java
QuerySpec docQuery = new QuerySpec(WTDocument.class);
// 等同于 SQL: select * from WTDocument;
添加查询条件:
查询条件通过 SearchCondition 类进行构建,以下是一个简单的例子:
java
SearchCondition condition = new SearchCondition(WTDocument.class, "name", SearchCondition.EQUAL, "测试文档");
// 该条件表示:文档名称为“测试文档”
docQuery.appendWhere(condition, new int[]{0});
获取查询结果:
java
QueryResult queryResult = PersistenceServerHelper.manager.query(docQuery); // 跳过权限获取结果
// 或者
QueryResult queryResult = PersistenceHelper.manager.find(docQuery); // 受当前用户权限影响
打印 QuerySpec 对象会显示具体执行的 SQL 语句,可用于调试。
支持的运算符:
SearchCondition.EQUALSearchCondition.LIKESearchCondition.IS_TRUESearchCondition.IS_NULL
示例:
通过对象主键构建查询条件:
java
SearchCondition condition = new SearchCondition(WTPart.class,
"thePersistInfo.theObjectIdentifier.id", SearchCondition.EQUAL, 1234L);
如果有多个查询条件,使用 appendAnd 拼接:
java
docQuery.appendWhere(condition1, new int[]{0});
docQuery.appendAnd(condition2, new int[]{0});
2. Persistence API
介绍:
PersistenceManager 和 PersistenceManagerSvr 提供了查询 API,可以用于快速查询关联对象。后者还提供了跨权限的 API。
常用方法:
PersistenceHelper.manager.navigate(Persistable p, String association, Class class, boolean flag);PersistenceServerHelper.manager.expand(Persistable p, String association, Class class, boolean flag);
参数说明:
Persistable p: 传入的持久化对象,作为查询的起点。String association: 目标对象在关联关系中的角色(Role A或Role B)。Class class: 关联关系的 Java 类。boolean flag:false表示返回Link对象,true表示返回Role A或Role B对象。
示例查询:
- 通过父件查询子件(返回
WTPartUsageLink结果集):
java
QueryResult links = PersistenceHelper.server.manager.navigate(parent,
WTPartUsageLink.ROLE_BOBJECT_ROLE, WTPartUsageLink.class, false);
- 通过父件查询子件(返回子件
WTPartMaster结果集):
java
QueryResult children = PersistenceHelper.server.manager.navigate(parent,
WTPartUsageLink.ROLE_BOBJECT_ROLE, WTPartUsageLink.class, true);
- 通过子件查询父件(返回父件
WTPart结果集):
java
QueryResult parents = PersistenceHelper.server.manager.navigate(child,
WTPartUsageLink.ROLE_AOBJECT_ROLE, WTPartUsageLink.class, true);
3. PTC 工具类
PTC 的工具帮助类封装了常用的关联查询。
常用工具类:
WTPartHelper.service (WTPartService)– 用于 WTPart 相关的 API。WTDocumentHelper.service (WTDocumentService)– 用于 WTDocument 相关的 API。EPMStructureHelper.service (EPMStructureService)– 用于 EPMDocument 关联查询的 API。MPMProcessPlanHelper.service (MPMProcessPlanService)– 用于 MPMLink 中工艺对象相关 API。
更多工具类和 API 可以参考 Windchill Java Doc 和知识库。
4. Select API
对于复杂的查询,使用封装好的 Select API 进行查询,尤其是当查询条件涉及多个表并且关联复杂时。
示例:
java
public static List<WTPart> queryWTPartByDevicePart(WTPart devicePart, String type) throws WTException {
Select<?> select = Select.from(WTPart.class, true) // 0
.andFrom(WTPartUsageLink.class, false) // 1
.andFrom(WTTypeDefinition.class, false) // 2
.where(1, QueryConstant.QUERY_LINK_ROLE_A_ID, SearchCondition.EQUAL,
devicePart.getPersistInfo().getObjectIdentifier().getId())
.where(0, QueryConstant.QUERY_MASTER_REFERENCE_ID, SearchCondition.EQUAL,
1, QueryConstant.QUERY_LINK_ROLE_B_ID)
.where(2, QueryConstant.QUERY_LOGICAL_ID, SearchCondition.EQUAL, type)
.where(2, QueryConstant.QUERY_LATEST_ITERATION, SearchCondition.IS_TRUE)
.where(2, QueryConstant.QUERY_BRANCH_ID, SearchCondition.EQUAL,
0, QueryConstant.QUERY_TYPE_DEFINITION_BRANCH_ID)
.onlyLatest();
StatementSpec find = select.toSpec();
find.setAdvancedQueryEnabled(true);
QueryResult queryResult = PersistenceHelper.manager.find(find);
return getResultPartList(queryResult);
}
说明:
Select.from(WTPart.class, true)表示从WTPart类开始查询。.andFrom(WTPartUsageLink.class, false)表示加入WTPartUsageLink类,false表示返回的是Link对象。.where(条件)用于指定查询条件。.onlyLatest()表示只查询最新的版本。
5. 为两个模型添加关联关系
String psNoStr = "OR:ext.fhec.pid.finaltest.Profession.model.Profession:2637674";
Profession profession = (Profession) PersistenceUtil.getPersistableByReferenceString(psNoStr);
String ftStepCodeStr = "OR:ext.fhec.pid.finaltest.PersonInfo.model.PersonInfo:2635950";
PersonInfo personInfo = (PersonInfo) PersistenceUtil.getPersistableByReferenceString(ftStepCodeStr);
ProfessionToPersonInfoLink professionToPersonInfoLink = ProfessionToPersonInfoLink.newProfessionToPersonInfoLink(profession, personInfo, FtStepCodeConstant.STEP_CODE_ASSOCIATE);
PersistenceHelper.manager.store(professionToPersonInfoLink);