高级自定义 > 业务逻辑自定义 > 自定义业务逻辑 > 自定义结构比较逻辑
  
自定义结构比较逻辑
* 
有关比较结构的一般概述,请参阅比较结构
此信息适用于以下应用程序:
与部件结构比较
与部件配置结构比较
与部件实例结构比较
在这些应用程序中,匹配的进程用于确定两个对象是否列于同一行。此匹配通常是基于父项与子项之间链接对象的特性来完成的。也可以利用父项或子项的特性来完成。
对于匹配的两个父项 (左侧一个,右侧一个),左侧父项下的每个链接都将与右侧父项下的每个链接相匹配,以查找比较优先级。优先级越低,匹配越强。优先级为 "0" 表示链接完全匹配,优先级为负表示链接不匹配。
匹配器配置为匹配一种链接对象类型。因此,可以自定义不同链接对象类型的匹配逻辑。
请注意,在匹配过程中多次调用了 matchEdges() 方法,因此该方法必须具有高性能,否则会出现严重的性能退化。
匹配逻辑的自定义过程分为两步。
1. 实现自定义匹配器。例如:
public class DSBCustomMatcherWTPartUsageLink extends DSBAbstractMatcher {
@Override
public int matchEdges(DSBEdge sourceEdge, DSBEdge targetEdge) {
// Custom matching logic
...
// Example of gathering required attributes
Object sourceFindNumber = sourceEdge.getEdgeInfo()
.getAttribute(PLMEntity.FIND_NUMBER.getAttribute());
Object targetQuantityAmount = targetEdge.getEdgeInfo()
.getAttribute(PLMEntity.QUANTITY_AMOUNT.getAttribute());
Object sourceVersion = sourceEdge.getChild()
.getNodeInfo().getAttribute(PLMEntity.VERSION.getAttribute());
...
}
@Override
public List<Attribute> initRequiredEdgeAttributes() {
// Edge attributes required for matching
// If no attributes are required for matching, return null
return Arrays.asList(new Attribute[]{
PLMEntity.FIND_NUMBER,
PLMEntity.QUANTITY_AMOUNT
});
}
@Override
public List<Attribute> initRequiredNodeAttributes() {
// Node attributes required for matching
// If no attributes are required for matching, return null
return Arrays.asList(new Attribute[]{
PLMEntity.VERSION
});
}
}
2. 在将自定义匹配器链接到链接类型的相应 xconf 文件中添加一个条目。例如:
<Service context="default" name="com.ptc.windchill.enterprise.dsb.server
.graph.matcher.DSBAbstractMatcher">
<Option cardinality="singleton" selector="wt.part.WTPartUsageLink"
requestor="null" serviceClass="com.ptc.windchill.enterprise.dsb.server
.graph.matcher.DSBCustomMatcherWTPartUsageLink"/>
</Service>
示例
下面的示例显示了如何转换自定义匹配器。
public class CustomDSBGraphProcessorDelegate extends DSBAbstractMatcher {
@Override
public int matchEdges(DSBEdge sourceEdge, DSBEdge targetEdge) {
// Custom matching logic
}
@Override
public List<Attribute> initRequiredEdgeAttributes() {
// Edge attributes required for matching
}
@Override
public List<Attribute> initRequiredNodeAttributes() {
// Node attributes required for matching
}
}
要使用您自己的委派,可以在 service.properties 中指定以下内容:
<Service context="default" name="com.ptc.windchill.enterprise.dsb.server
.graph.matcher.DSBAbstractMatcher">
<Option cardinality="singleton" selector="wt.part.WTPartUsageLink"
requestor="null" serviceClass="com.ptc.windchill.enterprise.dsb.server
.graph.matcher.CustomDSBGraphProcessorDelegate"/>
</Service>
先前版本中的逻辑更改
为比较应用程序创建自定义匹配逻辑的过程在 Windchill 10.1 M010 中发生了变化。
有四项重大更改,如下所示:
1. 自定义匹配器不再实现 DSBGraphProcessorDelegateApplicationContextChild。自定义匹配器只需扩展 DSBAbstractMatcher
2. 移除了方法 getRootSummaryStatusFlags()
3. 添加了 initRequiredEdgeAttributes()initRequiredNodeAttributes()
4. 匹配器现已配置为匹配一种链接对象类型。