前段時間用過AX4.0的反向工程工具,沒啥問題,今天卻怎麼也玩不轉,倒是產生了一個Visio檔案,但就是沒有內容。跟蹤了一下代碼發現,AX會把反射得到的資料存到一個臨時檔案裡,然後通過Visio COM對象的一個名為UML Background add-on的add-on將該臨時檔案匯入到Visio檔案中。匯入的動作發生在類
SysVisionAddin的run->loadImportFile方法中,通過
addOn.run( strfmt( #addOnCommand, documentIndex, WinAPI::getShortPathName(importFile.parmImportFileName()) ) );
這行代碼將其匯入到當前剛建立好的Visio檔案中,這跟在Visio中通過宏命令匯入檔案是一樣的,但這個路徑不知道咋整的,不支援中文,只要路徑中包含中文上面的這個命令就沒法執行了。
對這個不熟,不知道怎麼改一下就可以讓它支援中文路徑,暫時的解決辦法是:產生Visio檔案不要存放到含有中文的路徑下,比如含有 案頭 等的路徑。
另外如果是Visio2007也不能匯出成功,原因出在loadImportFile這個方法調用的getUmlAddOn方法上,這個方法會遍曆當前Visio所有的Add-on,找到名稱為"UML Background add-ond"的返回,擷取Add-on的名稱用的是addOn.name()這個方法,這在Visio2003下沒有問題,但在Viso2007下,這個方法返回的是中文,在與"UML Background add-ond"比較時就出問題找不到對應的Add-on了。
AX5.0已經修複了這個bug,通過addOn.nameU()擷取addon的名稱,得到的是英文就沒有比較的問題了。
綜上所述:
1.Visio的匯出路徑不能包含中文;
2.如果使用的是Visio2007,將類SysVisioAddin的方法getUmlAddon的addOn.Name()改為addOn.NameU().