Windchill 开发 根据实例对象查询关联的ECN

Windchill 开发 根据实例对象查询关联的ECN

开发环境:windchill 11.0 M030
在Windchill二次开发时,通过ptc官方提供的api,我们可以很容易的获取ECN对象的 受影响对象和产生对象。例如:

// 获取变更后的对象
QueryResult qr = ChangeHelper2.service.getChangeablesAfter((WTChangeOrder2) obj)

现在有如下开发场景,需要在新的ECN创建时,校验受影响对象是否有其他未关闭的ECN。
这时候,我考虑从数据库查询,ECN的结构稍微复杂点,ECN与变更任务关联,变更任务再与产生对象关联。
根据部件编号查询所有有关联的ECN对象,数据库查询如下:

-- 根据部件编号,查询产生对象中包含该部件任意版本的ECN
select a1.IDA2A2,a1.name,a1.wtChgOrderNumber,a2.IDA2A2,a2.description,a2.statestate 
from WTChangeOrder2Master a1 join WTChangeOrder2 a2 on a1.ida2a2=a2.ida3masterreference
where a2.branchidIterationInfo in
(
  select branchida3a5 from IncludedIn2 where branchida3b5 in
  (
    select branchida3a5 from ChangeRecord2 where ida3b5 in
	(
      select IDA2A2 from wtpart where wtpart.ida3masterreference in
	  (select IDA2A2 from wtpartmaster where wtpartnumber='部件编号')
    )
  )
)

在实际开发中,一般并不需要用高级查询完整执行上面的sql。例如校验,只需要查出 WTChangeOrder2 表中的生命周期状态就可以了;然后将上面sql中最内层和次内层子查询,替换成文档或EPM对象,就可以查询他们相关的ECN了。
使用高级查询,代码实现如下:

import org.apache.log4j.Logger;
import wt.change2.ChangeRecord2;
import wt.change2.IncludedIn2;
import wt.change2.WTChangeOrder2;
import wt.doc.WTDocument;
import wt.epm.EPMDocument;
import wt.fc.Persistable;
import wt.fc.PersistenceServerHelper;
import wt.fc.QueryResult;
import wt.fc.ReferenceFactory;
import wt.fc.WTObject;
import wt.part.WTPart;
import wt.query.ClassAttribute;
import wt.query.QueryException;
import wt.query.QuerySpec;
import wt.query.SearchCondition;
import wt.query.SubSelectExpression;
import wt.
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值