问题:
在升级Teamcenter8.3代码到Teamcenter11.6过程中,一个开发功能测试不通过,一段代码不能按照升级前开发逻辑走下去。需要走的逻辑是判断版本下是否有同名同类型的数据集,如果有则做一些特殊处
理。
而升级后的代码一直无法判断出是否有同名同类型数据集情况。最后分析代码逻辑,问题定位到代码中获取数据集类型的方法,在Teamcenter8.3和Teamcenter11.6中返回的结果是不一样的,导致程序走的
逻辑不同。
分析:
错误代码:
String strDsType = tccomp.getProperty("object_type"); if(strDsType.equals(“MSExcel”)){ //特殊处理逻辑 }
该代码中获取MSExcel数据集的类型是通过object_type属性获取(数据集的object_type实际对应的是
当前语言环境下,数据集类型对应的本地化名称),而该属性在Teamcenter10.1之前值为MSExcel和数据
集实际类型匹配,从Teamcenter10.1开始值为MS Excel和数据集实际类型不匹配,其它几个office数据
集都有这样细微的变化。所以当版本升级到Teamcenter11.6后,该代码块将不能按照预定的逻辑执行
图2:Teamcenter11.6中MSExcel数据集对应的object_type属性值为MS Excel和数据集实际类型不匹配
RCP中获取TCComponent对象的类型常用的有三种方式(图3),其中getProperty("object_type")获
取的是当前语言环境中数据集的显示名称不能和数据集实际类型划等号。
图3:获取对象类型的几种方法
解决:
针对office数据集有两种解决方法:
方法一:代码中获取类型使用getType或者getTCProperty("object_type").getStringValue()方法,获取到数据集实际类型。
正确代码:
String strDsType = tccomp.getType(); if(strDsType.equals(“MSExcel”)){ //特殊处理逻辑 }
方法二:在BMIDE中将高版本TC中office数据集类型的本地化名称修改和低版本一致(比如MS Excel改为MSExcel)
图4:修改Teamcenter11.6中MSExcel数据集中文本地化由MS Excel改为MSExcel
总结:
1.代码中获取对象实际类型时候,尽量避免使用getProperty("object_type")方式去获取对象类型,该方
法获取的是本地化显示名称,会随着语言环境及Teamcenter版本变化可能发送变化。
2.获取对象类型建议直接使用getType()方法。
转自:微信公众号,PLM有个号