前言 每當(dāng)我在文章中提到.NET Framework的某個類、屬性或者方法時,我會為它添加一個超鏈接,引用.NET Framework Class Library的在線文檔。首先,我用瀏覽器打開MSDN Library的頁面,接著,在左邊的導(dǎo)航目錄樹中定位到對應(yīng)的節(jié)點(diǎn),然后,把該節(jié)點(diǎn)的超鏈接復(fù)制下來,最后回到 word2007 中插入這個超鏈接。然而,我已經(jīng)對這個繁瑣的過程感到厭倦了,是否有辦法把.NET Framework Class Library的在線文檔集成到 Word 2007 中,從而讓這個過程變得更加簡單呢?
需求 X 需求
下圖是用Paint.NET弄出來的示意圖:
圖 1
我希望把MSDN Library上.NET Framework Class Library那部分導(dǎo)航目錄樹以側(cè)邊欄的方式集成到Word 2007里,這樣,當(dāng)我右擊某個節(jié)點(diǎn),點(diǎn)擊Insert菜單項時,將在當(dāng)前文檔的光標(biāo)處插入該節(jié)點(diǎn)對應(yīng)的連接。
作為用戶,我提出了上面這些需求,那么,作為開發(fā)人員,為了實現(xiàn)這項功能,我又該提出哪些"需求"呢?
首先,我需要MSDN提供訪問這些數(shù)據(jù)的服務(wù),沒有這個服務(wù),實現(xiàn)這項功能就非常困難,甚至變得不可能。幸虧,MSDN的確提供了這樣一個服務(wù),它叫MTPS(MSDN/TechNet Publishing System)Content Service(以下簡稱"MPTS")。這樣,實現(xiàn)這項功能的首要任務(wù)就是學(xué)習(xí)使用這個服務(wù)了。這里將會用到Craig Andera在其文章上所提到的知識和技巧(見下表)。
其次,我需要知道如何為Word 2007創(chuàng)建側(cè)邊欄以及為這個插件在Ribbon上添加一個啟動按鈕。這里將會用到《探索 Word 2007 開發(fā)(一):我的博客》、《探索 Word 2007 開發(fā)(三):管理側(cè)欄》和《探索 Word 2007 開發(fā)(二):擴(kuò)展 Ribbon》三篇文章的研究成果。
再次,我需要知道TreeView這個控件的使用方法和技巧。這里將會用到《TreeView 四技》這篇文章的研究成果。
最后,我需要知道如何在Word 2007中插入超鏈接。
多重影分身術(shù)
多重影分身術(shù)是一種實體復(fù)制忍術(shù),如果你看過《火影忍者》,應(yīng)該能夠理解它的意思。現(xiàn)在我要做的和這個差不多,為MSDN Library的.NET Framework Class Library導(dǎo)航目錄樹產(chǎn)生出多個實體分身,并把它們嵌入 Word 2007 里,不同的是,多重影分身術(shù)是由本體實施,而這里的實體復(fù)制是由身為第三方的我來實施。
本節(jié)的焦點(diǎn)是用MTPS返回的數(shù)據(jù)填充側(cè)邊欄里的TreeView控件。下面是這個插件的需求列表:
一開始,TreeView里面只有一個頂節(jié)點(diǎn)——.NET Framework Class Library,且該節(jié)點(diǎn)是折疊的。
使用延遲填充技術(shù),每個可展開節(jié)點(diǎn)會且只會在第一次展開時訪問MTPS獲取數(shù)據(jù),并填充子節(jié)點(diǎn)。
這兩個需求看起來很簡單,然而,一旦和MTPS 結(jié)合使用就比較復(fù)雜了,你需要區(qū)分MPTS所使用的兩套標(biāo)識系統(tǒng),一套是用于標(biāo)識節(jié)點(diǎn)的導(dǎo)航的,另一套是用于標(biāo)識節(jié)點(diǎn)所指向的內(nèi)容的。如果你還沒接觸過MTPS,那么我強(qiáng)烈建議你先閱讀Craig Andera的兩篇文章,否則你有可能無法理解后面的內(nèi)容。這里我做一個簡單的介紹,MTPS有兩種節(jié)點(diǎn):導(dǎo)航節(jié)點(diǎn)和內(nèi)容節(jié)點(diǎn),導(dǎo)航節(jié)點(diǎn)與MSDN Library/TechNet Library左側(cè)的導(dǎo)航目錄樹中的節(jié)點(diǎn)一一對應(yīng);內(nèi)容節(jié)點(diǎn)則是與該導(dǎo)航節(jié)點(diǎn)對應(yīng)的用于顯示在右側(cè)的內(nèi)容。這兩種節(jié)點(diǎn)使用了同一種標(biāo)識模型,每一個標(biāo)識包含了三個部分:標(biāo)識符、區(qū)域信息和版本信息。其中標(biāo)識符又分五種類型:short ID、content alias、content GUID、content URL和asset ID。并非所有節(jié)點(diǎn)都同時具備這五種標(biāo)識符,也并非所有情況下MTPS都返回/接受這五種標(biāo)識符,于是,如果你需要在不同的標(biāo)識符之間切換,你可能需要再次訪問MTPS。有鑒于此,上述兩個需求的復(fù)雜性主要體現(xiàn)在處理不同種類的節(jié)點(diǎn)以及用于標(biāo)識這些節(jié)點(diǎn)的不同種類的標(biāo)識符上。