自定义映射行为
类图表
自定义
| 有关参考,请参阅前一部门中的类图表和数据结构表格。 |
预设仅提供两种映射处理器实现。
• wt.ixb.publicforapps.extendedmapping.processor.SingleTagMappingProcessor 将处理单个标记映射,包括支持 regex.
• wt.ixb.publicforapps.extendedmapping.processor.MultiTagMappingProcessor 将处理带有多个标记 (包括条件标记) 的映射。该处理器还将在条件和非条件标记中都支持正则表达式。
以上两个预设映射处理器适用于简单字符串匹配的概念。在大多数情况下,这两个类应该足以提供所需的映射行为。
如果需要从要导入的映射数据和对象数据中将任何业务逻辑添加到正在考虑的这些字符串值中,则客户将需要根据以下指南写入其自定义的映射处理器/映射器。
要自定义上述两个映射处理器的行为,请根据用例扩展 SingleTagMappingProcessor 或 MultiTagMappingProcessor 并替换 postprocessMappedValue 方法。方法参数的详细信息如下所示。
/** Customization point to process Mapped value as per business logic.
* OOTB implementation returns the mapped value as-is
* @param tag The Tag to be evaluated for Mapping
* @param parentTags Parent Tags separated by <code>TAG_SEPARATOR</code>.
* This would be null if tagValue represents the full Tag as defined in
* IXMappingConfiguration.xml
* @param value The source value for the Tag
* @param mappedValue The mapped value of the source value for the Tag
* @param srcElement The IXBElement representation of the object
* data to be imported
* @return The Mapped value
* @throws WTException
*/
protected String postprocessMappedValue(String tag, String parentTags,
String value, String mappedValue,
IxbElement srcElement) throws WTException
对于 IXMappingConfiguration.xml 中带有条件和正则表达式的带有多个标记的映射定义,匹配的映射可以不止一个。在那些情况下,预设实现使用逻辑返回满足最大条件的匹配项 (在多个匹配项中可能存在某些映射,而映射中未提供所有条件)。此外,在映射中定义的多个正则表达式与源对象值匹配的情况下,将使用 java.util.TreeMap 实现的自然排序顺序,并且将第一个匹配项用于映射值。
可自定义以上要选取匹配键的行为。
根据以下详细信息,扩展 wt.ixb.publicforapps.extendedmapping.mapper.MultiTagComplexMapper 类并替换 getBestMatchKey 方法。
/** Get the best matching key to be used to get the mapped values
* OOTB implementation returns the first matching key.
* This api can be overridden to return any other matching key from
* @param matchingKeys
* All matching keys satisfying the Mapping conditions
* @return The first key out of all matching keys
*/
protected List<String> getBestMatchKey(List<List<String>> matchingKeys)
然后根据用例扩展 SingleTagMappingProcessor 或 MultiTagMappingProcessor 并替换受保护的映射器 getMapper() 方法,以根据用例返回上述映射器。
在上述两种自定义情况下,都需要将扩展的映射处理器添加到 <Windchill Home>\codebase\registry\ixb\mapping\IXMappingConfiguration.xml 中的相应映射元素属性 "mappingProcessor"。例如,如果来自 MultiTagMappingProcessor 的扩展类是 mycustomizationpackage.MyMultiTagMappingProcessor,则应为 mappingProcessor 属性分配 mycustomizationpackage.MyMultiTagMappingProcessor。示例中的所有值仅作为示例,需要根据客户定义的映射进行
<Mapping preferenceDefinition="ExtendedLifecycleMapping" separator=";"
mappingProcessor="mycustomizationpackage.MyMultiTagMappingProcessor">
<Tag value="externalTypeId" condition="true" regex="true"/>
<Tag value="lifecycleInfo/lifecycleTemplateName"/>
<Tag value="lifecycleInfo/lifecycleState"/>
</Mapping>