【第30期】低版本升級到Teamcenter10及以上時候注意office相關資料集一些細微差異的處理
問題:
在升級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有個號