解决方案
使用预设配置和自定义挂接来实现您的逻辑。
必备知识
要执行此任务,需要了解以下内容:
基本 MPMLink 和 BOM 结构
涉及 Java 的基本开发
资源束文件自定义的管理
Windchill xconfmanager 概念
可以使用特性或 JSON 格式的规则文件来配置变换规则。有关规则文件的详细信息,请参阅规则文件
解决方案元素
用于处理模板流的主类的预设配置位于 <WT_HOME>\codebase\com\ptc\windchill\mpml\xconfs\mpmlink.service.properties.xconf 文件中。
配置如下:
<Service context="default"
name="com.ptc.windchill.associativity.reconciliation.resolver.AbstractAddUsageResolver">
<Option cardinality="singleton" requestor="wt.part.WTPart"
serviceClass="com.ptc.windchill.mpml.reconciliation.resolver.MPMLinkAddedUsageDiscrepancyResolver"/>
</Service>
您可以更新配置以包括自定义委派。
<WT_HOME>\codebase\com\ptc\core\foundation\associativity\xconfs\associativity.properties.xconf 文件中提供了预设特性配置。
下面给出的预设特性配置提供了与在最接近的公用对等上下文中相同的方式执行变换的默认行为:
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" multivalued="," default=""/>
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPartUsageLink" multivalued="," default=""/>
这些预设特性允许将 WTPart 的任何实例粘贴到下游结构上的任何位置,这意味着不存在约束。
部件使用关系和部件支持这些特性。始终将部件使用关系指定为优先级。仅当部件使用关系有效时,才会考虑部件的配置。如果您不想控制部件使用关系的变换,请保留部件使用关系的预设特性配置,这将使所有使用关系有效。
特性的格式为:<base_prefix>。<upstream_view>。<downstream_view>。<type_internal_name>。在给定表中对特性的键进行了说明:
元素
类型
说明
base_prefix
特性键组件
前缀 com.ptc.windchill.associativity.reconciliation.addusage
为必需项且保持恒定。添加模板配置仅考虑具有此前缀的特性。
upstream_view
特性键组件
视图的内部名称,用于形成对等链接的上游视图上下文。例如:design
此键还需要相应的 downstream_view 配置。键为可选项。
downstream_view
特性键组件
视图的内部名称,用于形成对等链接的下游视图上下文。例如:manufacturing
此键还需要相应的 upstream_view 配置。键为可选项。
type_internal_name
特性键组件
对变换有效的类型的内部名称。键不应包含层次结构名称。例如:com.ptc.ElectricalPart
此键支持继承。因此,如果为超级类型定义该项,除非明确定义,否则关联的配置适用于子类型。
键为必需项。
下面给出了使用上述键配置特性的示例:
指定类型:com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart
指定具有上游和下游视图的类型:com.ptc.windchill.associativity.reconciliation.addusage.design.manfacturing.wt.part.WTPart
系统支持以相同的优先级顺序读取使用关系及子项的特性。尽管有些特性在某些情况下可能不适用,使用关系及子项仍然支持所有特性。
对于每个特性键,您可以定义 key=value 对的列表。这些对可自定义,并且可以添加其他选项,这些选项将在委派中可用并可使用自定义逻辑进行处理。下表提供了预设的键值对:
元素
说明
transformOption
介绍应如何在下游结构中变换给定类型。支持的默认有效值为 addSamenewBranchnewPart。这些值等同于界面操作“粘贴”“粘贴为新分支”“粘贴为新部件”
如果存在下游结构,则该服务会在内部对 addExisting 选项进行优先处理。如果未指定,则默认值为 addSame
值要区分大小写。
下面给出的示例使用了规则文件:
{
"sourceType": "wt.part.WTPart",
"transformOption": "newBranch"
},
下面给出的示例使用了特性文件:
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" value="transformOption=newBranch"/>
在本示例中,将类型为 WTPart 的部件作为新分支添加到下游结构之下。
structureOption
描述要针对正在变换的节点的子项执行的操作。您可以传送子项、以递归方式变换子项,或不传送子项。
有效值为 012。例如,structureOption=0。默认值为 0。这些值如下所述:
0:不复制子项。
1:复制子项但不对其进行变换。
2:复制子项并以递归方式对其进行变换。
在某些情况下,值可能不适用。例如,如果 transformOptionaddSame,则 structureOption 不适用。
下面给出的示例使用了规则文件:
"sourceType": "wt.part.WTPart"
"transformOption": "newBranch",
"structureOption": "1",
下面给出的示例使用了特性文件:
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" multivalued="," default=""/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" value="transformOption=newBranch"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" value="structureOption=1"/>
在本示例中,将指定的部件变换为新分支并对其进行复制而不进行传播。
attribute.<internal_name> (特性文件)
sourceAttributes (规则文件)
针对用于控制变换有效性的类型指定属性的内部名称。支持的属性类型为全局、本地、别名和计算属性。
这是一个多值特性,允许指定多个属性。这是可选项,如果未提供,则仅对类型进行变换验证。预设的系统会执行字符串比较。
下面给出的示例使用了规则文件:
"sourceType": "wt.part.WTPart",
"sourceAttributes": ["AUA=yes"],
下面给出的示例使用了特性文件:
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" value="attribute.AUA=yes"/>
在本示例中,将属性 AUAYes 的部件添加到下游结构之下。
targetType
标识可在其下使用有效上游部件的下游类型。在层次结构中包含给定类型的路径会标记为有效项。您需要将类型的内部名称指定为值,而不是类型的分层名称。
这是可选项。如果未指定,则将最接近的公用对等上下文用作默认目标。
下面给出的示例使用了规则文件:
{
"targetType": "wt.part.WTPart",
"transformOption": "newBranch"
},
下面给出的示例使用了特性文件:
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule2" value="targetType=wt.part.WTPart"/>
在本示例中,将部件作为新分支添加到类型为 WTPart 的下游部件之下。
targetAttribute.<internal_name>
指定应在其中粘贴或变换上游节点的目标节点。该节点包含前缀 targetAttribute
这是可选项。如果未提供,系统将使用 targetType。该项会在路径层次结构中的第一个匹配实例处停止,并从叶位置导航至根。
下面给出的示例使用了规则文件:
[
"source.part.attribute1:String1",
"target.part.attribute2:String2"
],
下面给出的示例使用了特性文件:
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" value="attributeMapping.rule1=Attribute1:String1:Attribute2:String2"/>
在本示例中,应将 attribute1 值为 String1 的上游部件添加到 attribute2 值为 String2 的下游部件之下。
doAndValidationForAttr
指定在定义多个属性以与源或目标匹配时,是执行 AND 还是 OR 操作来查找匹配。
默认值为 true。
下面给出的示例使用了规则文件:
"newAttributeMappings":[
[
"source.usage.Attribute1:true",
"target.part.CustomAttribute1:String1",
"doAndValidationForAttr": "true"]
],
"targetType": "wt.part.WTPart",
"transformOption": "newPart",
"skipAttributes":
[
"source:buy",
"Attribute2":"true"
]
下面给出的示例使用了特性文件:
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" value="skipAttribute.Source=buy"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" value="skipAttribute.Attribute2=true"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" value="doAndValidationForAttr=true"/>
在本示例中,如果上游结构中存在满足以下条件的部件:Attribute2 设置为 true,以及属性 Source 设置为 buy,则会跳过该部件,且不会将其添加到下游中。
forceNewDownstreamCreation
指定当下游分支或部件已存在时,是否应创建新的下游部件。默认值为 false。
下面给出的示例使用了规则文件:
{
"sourceType": "wt.part.SoftType1",
"transformOption": "newPart",
"structureOption":"2",
"forceNewDownstreamCreation":"true",
"targetType": "wt.part.SoftType1"
}
下面给出的示例使用了特性文件:
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" multivalued="," default=""/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" value="transformOption=newPart"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" value="structureOption=2"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" value="forceNewDownstreamCreation=true"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" value="targetType=wt.part.SoftType1"/>
在本示例中,将类型为 wt.part.SoftType1 的上游部件变换为类型为 wt.part.SoftType1 的下游部件之下的新下游部件。
doNotTransform
指定是否应变换给定类型。如需从变换中跳过某些类型的部件,但要处理子项部件,此功能会有所帮助。默认值为 false,这表示在配置后将始终变换类型或其子类型。
下面给出的示例使用了规则文件:
{
"sourceType": "org.rnd.PartSubType3",
"doNotTransform": "true"
},
下面给出的示例使用了特性文件:
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.PartSubType3.rule1" value="doNotTransform=true"/>
在本示例中,对类型为 PartSubType3 的部件不作变换。
continueNavigationForReusedChildren
指定如果作为变换的一部分重用子项并将其转到下游分支,是否要继续导航结构。该项在使用 addSame 操作变换父项时非常有用,但是在结构中,需要将 newBranchnewPart 操作用于节点。这可能会影响性能。
默认值为 false。
下面给出的示例使用了规则文件:
{
"sourceType": "wt.part.WTPart",
"transformOption": "addSame",
"continueNavigationForReusedChildren":"true",
"targetType": "wt.part.WTPart"
}
下面给出的示例使用了特性文件:
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" multivalued="," default=""/>
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" multivalued="," default="transformOption=addSame"/>
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" multivalued="," default="continueNavigationForReusedChildren=true"/>
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" multivalued="," default="targetType=wt.part.WTPart"/>
在本示例中,即使将子部件按原样沿用到下游,也应对部件结构进行导航。
useProcessPlanLogicEnabled
指定如果下游结构不存在,则搜索为部件创建的流程计划,并使用与该流程计划中给定的上游节点关联的下游结构。
下面给出的示例使用了规则文件:
{
"sourceType": "wt.part.SoftType1",
"useProcessPlanLogicEnabled":"true",
"targetType": "wt.part.SoftType1"
}
下面给出的示例使用了特性文件:
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" multivalued="," default=""/>
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" multivalued="," default="useProcessPlanLogicEnabled=true"/>
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.SoftType1.rule1" multivalued="," default="targetType=wt.part.SoftType1"/>
在本示例中,将与上游部件关联的工艺计划操作所耗用的子部件添加到下游结构中。为这些子项部件定义的自定义属性值用于创建父项部件。
doNotTraverse
指定是否应进一步遍历给定类型的节点,以便处理其子项以用于变换。如需停止遍历给定节点并跳过其子项,此功能会有所帮助。默认值为 false,这表示将始终遍历类型或其子类型。
下面给出的示例使用了规则文件:
{
"sourceType": "org.rnd.PartSubType4",
"doNotTraverse": "true"
},
下面给出的示例使用了特性文件:
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.PartSubType4.rule1" value="doNotTraverse=true"/>
在本示例中,对类型为 PartSubType4 的节点不作变换。
attributeMapping.rule
用于生成下游结构。您可以指定多个规则并使用属性的内部名称和值将上游子项属性与下游父项属性映射。
attributeMapping.rule<integer>=up_attribute_internal_name:value:down_attribute_internal_name:value
对于此特性,targetType 为必填项。此外,如需根据匹配的属性值生成结构,请提供以冒号分隔的属性名称:
attributeMapping.rule<integer>=up_attribute_internal_name:down_attribute_internal_name
例如:
attributeMapping.rule1=lineNumber_value:10:lineNumber_value:40
attributeMapping.rule2=source:make:source:buy
attributeMapping.rule3=matchingAttr:matchingAttr
还可以提供一个范围来匹配属性值。只有源类型才会遵循此范围。
例如:
attributeMapping.rule1=lineNumber_value:10>90:lineNumber_value:40, skipAttribute.lineNumber_value=20
attributeMapping.rule3=matchingAttr:A10>A90:matchingAttr:B10
newAttributeMapping (特性文件)
newAttributeMappings (规则文件)
* 
建议使用 newAttributeMapping 代替 attributeMapping.rule
用于映射上游子项属性与下游父项属性。您可以使用属性的内部名称和值定义多个规则,以根据所需条件进行筛选。对于此元素,targetType 为强制属性。
源属性的语法如下:
source.attributeLocation.attributeInternalName:attributeValue
源属性的有效位置值为部件、使用关系和具体值。您可以执行单个或多个属性映射。
目标属性的语法如下:
target.attributeLocation.attributeInternalName:attributeValue
目标属性的有效位置值为部件位置。
下面给出的示例使用了规则文件:
"newAttributeMappings": [
[
"source.occurrence.OccIBA:occv1",
"target.part.PartAttribute:Value1"
],
]
下面给出的示例使用了特性文件:
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart.rule1" value="newAttributeMapping.rule1.entry1=source.occurrence.OccIBA:occv1,newAttributeMapping.rule1.entry2=target.part.PartAttribute:Value1"/>
在本示例中,将 OccIBA 值为 occv1 的部件的具体值添加到 PartAttribute 值为 Value1 的部件之下。
* 
建议使用 newAttributeMapping 代替 attributeMapping.rule
skipAttribute.<internal_name> (特性文件)
skipAttributes (规则文件)
指定为类型定义的属性名称,以从变换中跳过此类型。此元素支持多个 skip 属性。
下面给出的示例使用了规则文件:
"skipAttributes":
[
"Attribute1:String1",
"Attribute2":"String2"
]
下面给出的示例使用了特性文件:
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" value="skipAttribute.Attribute1=String1"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.wt.part.WTPart" value="skipAttribute.Attribute2=String2"/>
在本示例中,如果上游部件的 Attribute1 设置为 String1,以及 Attribute2 设置为 String2,则应跳过该部件,而不将其添加到下游结构中。
您也可以提供一个范围。例如:
skipAttribute.lineNumber_value=20>90, skipAttribute.lineNumber_value=20
此外,可以将 doAndValidationForAttr 元素与 skipAttribute 一起使用。
下面给出了使用上述键配置特性的示例:
<Property name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.CustomPart" multivalued="," default=""/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.CustomPart" value="transformOption=newBranch"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.CustomPart" value="structureOption=0"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.CustomPart" value="targetType=wt.part.WTPart"/>
<AddToProperty name="com.ptc.windchill.associativity.reconciliation.addusage.org.rnd.CustomPart" value="targetAttribute.phantom=true"/>
这对您有帮助吗?