windchill筛选分成两部分,第一部分是通过SQL进行筛选;第二部分是通过process筛选;拿第一部分得到的数据去process里面进行筛选;
通过SQL拼接筛选的条件
- 视图拼接条件
- 如果筛选条件不包含父视图,那么直接拼接"view = getView() OR view = null"这个条件;
- 如果包含父视图筛选,那么拼接条件"view = getView() OR view = parentView[...] OR view = null";
- BOM类型及备用BOM的拼接条件
- BOM类型为null,拼接条件就是variation1 is null;
- 备用BOM为null,拼接条件就是variation2 is null;
process的处理条件
- 先过滤视图
- 如果视图为空就不进行筛选;
- 如果视图不为空,找到符合当前视图的数据,如果当前视图不符合,向上查找满足条件的最近的父视图;
- 再过滤BOM类型
- 如果备用BOM为空,不过滤;
- 如果不为空,找到相等的数据;
- 如果上一步找不到一样的数据,那么拿到所有的BOM类型的集合,按照顺序找符合条件的数据,但凡有一个集合中的元素符合条件,就停止查找;
- 如果上一步找到的数据还为空,把备用BOM类型为空的数据添加到结果中,也就是默认为BOM类型为空;
- 再过滤备用BOM
- 同备用BOM;