Windchill 中实现获取带有层级记录的BOM功能
来源:互联网 发布:什么是网络平台 编辑:程序博客网 时间:2024/05/22 12:30
在windchill中,BOM管理作为一种核心的业务功能存在,但是在windchill10.0版本的系统OOTB功能中,BOM无法提取零件的分类属性,因此一般情况下,都会进行克制化开发,获取BOM结构以及零件的层级是导出BOM报表的关键代码。获取BOM一般通过递归进行处理,往往都是传入顶层的部件,通过深度优先遍历,即可获取BOM结构,但是零件的层级,在系统的数据库中并没有进行记录,因此需要我们通过代码来计算。其实,零件的层级计算可以转换成递归算法的深度,因此实现BOM报表功能的核心代码就是要实现递归,以及计算递归深度。
1 先定义一个类,记录部件,部件的使用关系,部件层级。定义如下:
public class BOMElement { //index 部件在BOM中的层数 private int index; //part BOM中的部件 private WTPart part; //link 部件的link(link 描述当前部件) private WTPartUsageLink link; //根节点元素的初始化 public BOMElement(WTPart part){ this.index = 0; this.part = part; this.link = null; } //所有子节点元素的初始化 public BOMElement(int index,WTPart part,WTPartUsageLink link){ this.index = index; this.part = part; this.link = link; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } public WTPart getPart() { return part; } public void setPart(WTPart part) { this.part = part; } public WTPartUsageLink getLink() { return link; } public void setLink(WTPartUsageLink link) { this.link = link; }}
2 传入顶层部件,实现递归查询子部件,并定义变量,记录递归深度:
public List<BOMElement> queryBOM(WTPart part) throws WTException{ BOMElement root = new BOMElement(part); List<BOMElement> list = new ArrayList<BOMElement>(); ConfigSpec configSpec = WTPartHelper.service.findWTPartConfigSpec(); int index = 0; list = querySubBOMList(root,configSpec,list,index); return list; } private List<BOMElement> querySubBOMList(BOMElement element,ConfigSpec configSpec,List<BOMElement> list,int index) throws WTException{ list.add(element); QueryResult qr = WTPartHelper.service.getUsesWTParts(element.getPart(),configSpec); Vector<Object> vector = qr.getObjectVectorIfc().getVector(); for(int i=0;i<vector.size();i++){ Persistable[] persist = (Persistable[]) vector.get(i); index++; BOMElement subElement = new BOMElement(index,(WTPart)persist[1],(WTPartUsageLink)persist[0]); querySubBOMList(subElement,configSpec,list,index); index--; } return list; }3 上面定义中,index变量记录递归深度,在递归调用之前,该变量自增1,表示递归调用一次,递归调用后,该变量自减1,表示递归调用减少一次。以此来记录递归调用的次数。并在构造BOMElement中,以此来记录零件的层级。
- Windchill 中实现获取带有层级记录的BOM功能
- maven 打包带有层级关系的项目
- Android中层级导航的实现示例
- C# 在主窗口中打开一个带有计算器功能的子窗口,有三种实现方法
- Windchill中实现like模糊查询字段中包含“_”和“%”的高级查询
- 常见的BOM功能
- 关于windchill中项目的高级查询
- Windchill 二次开发中常用的API方法
- Windchill 中默认EC流程的研究
- Windchill中Ghost Object的处理
- Windchill 中查询EPMDocument的附件信息
- hibernate加ajax异步实现数据库中的新闻类别字段的获取,并且表单还是带有图片上传功能的
- SAP中如何查看BOM的修改记录呢?
- 项目中分享功能的实现-----------一个小的记录
- Windchill 关于EC克制化的API记录
- UGUI 实现层级渲染设定功能
- Javascript实现带有关闭功能的漂浮图片
- 带有CheckBox的ListView,实现删除和选中功能
- 《Unix环境高级编程》:同步信号处理
- 01背包(递归)
- atoi函数介绍与代码实现
- 进程和线程的区别
- 魔兽争霸中的人生哲学----如何使自己变得强大
- Windchill 中实现获取带有层级记录的BOM功能
- VHDL中按键消抖的一种方法--延时性消抖
- 条件变量、pthread_cond_init
- LinkButton in WPF
- 01背包(递推)
- 国际C语言乱码大赛(IOCCC)经典之作
- GreenDroid(2)ActionBar的实现
- HDU 1164 分解成素数乘积的形式
- setsockopt()用法(参数详细说明)