Visual Studio 2008上實(shí)現(xiàn)Visio自動(dòng)化
51CTO向您推薦《體驗(yàn)Visual Studio 2008展望2010》專題。希望這個(gè)專題能讓您更好的使用Visual Studio 2008。
Visio是微軟旗下的一款圖表制作與流程管理工具,用來幫助IT和商務(wù)人員來可視化的分析和交流復(fù)雜信息。而Visual Studio則是一個(gè)應(yīng)用程序的可視化開發(fā)平臺。這兩個(gè)互不搭界的內(nèi)容,他們會有交叉點(diǎn)嗎?
微軟將這變?yōu)榱丝赡?。簡單的說,在Visual Studio中提供了一些項(xiàng)目模板。這些模板可以幫助用戶來創(chuàng)建用于Visio的應(yīng)用程序外接程序。而這些外接程序又可以幫助Visio直線自動(dòng)化、擴(kuò)展Visio的功能等等。通過應(yīng)用程序級外接程序體系結(jié)構(gòu)將兩個(gè)產(chǎn)品緊緊的聯(lián)系在一起。筆者日常在項(xiàng)目管理中,經(jīng)常需要使用Visual Studio工具來開發(fā)一些Visio的個(gè)性化功能。在這里就將筆者的經(jīng)驗(yàn)跟大家分享一下,供各位讀者參考。
一、Visual Studio可以給Visio帶來哪些改善。
簡單的說,通過Visual Studio來讓Visio實(shí)現(xiàn)自動(dòng)化,主要是通過API來完成的。這是一個(gè)原則性的內(nèi)容,筆者先要強(qiáng)調(diào)一下。雖然也可以通過其他方式來實(shí)現(xiàn),但是并不建議。因?yàn)檫@會增加工程的復(fù)雜性。一般來說,大部分任務(wù)都可以通過API來編寫代碼完成。筆者常用的功能有以下幾個(gè)。
一是根據(jù)業(yè)務(wù)邏輯和用戶的輸入管理Visio中的形狀。如筆者使用Visio來管理用戶的流程制作。流程具有一定的步驟。當(dāng)用戶在輸入信息的時(shí)候,如果每有按步驟來。如跳過了一個(gè)步驟,那么當(dāng)用戶輸入信息時(shí)就可以在界面上探出一個(gè)問號的形狀。這可以提醒用戶,必須按流程來輸入數(shù)據(jù)。
二是可以用來控制關(guān)系圖的可視化效果。在跟其他用戶通過Visio來進(jìn)行信息交流分析的時(shí)候,往往需要根據(jù)實(shí)際情況來控制關(guān)系圖的可視化效果。如某個(gè)對象的平移或者縮放。一個(gè)比較簡單的例子,就是將鼠標(biāo)移動(dòng)到某個(gè)對象上,或則單擊,這個(gè)對象會自動(dòng)擴(kuò)大。這可以讓其他用戶更加清晰的看到相關(guān)的內(nèi)容。
三是將外部的數(shù)據(jù)導(dǎo)入到Visio中。如果需要將Word等文檔的內(nèi)容導(dǎo)入到Visio中,則可以使用其自帶的導(dǎo)入工具。但是如果需要將其他的文檔,如ACD文件,則需要開發(fā)其他的接口。如果有這個(gè)需求的話,使用Visual Studio來完成,是一件比較輕松的事情。
以上三點(diǎn)可能是在實(shí)際工作中經(jīng)常會遇到的需求。當(dāng)然這兩個(gè)產(chǎn)品之間的合作不限于這些方面,可能還有更多。由于工作經(jīng)驗(yàn)的限制,筆者只強(qiáng)調(diào)這幾點(diǎn)。如果大家還有比較典型的應(yīng)用,希望各位可以分享出來,大家共同進(jìn)步。
二、Visio與Visual Studio之間交互的渠道。
本來要擴(kuò)展某個(gè)應(yīng)用程序的功能是一件比較復(fù)雜的工作,因?yàn)槠湫枰紤]到方方面面的內(nèi)容。而現(xiàn)在借助Visual Studio來實(shí)現(xiàn)Visio的自動(dòng)化,則是一件相對簡單的工作。這主要是因?yàn)樗麄兲峁┝艘恍┛梢韵嗷ソ换サ膶ο?。這些對象排列在一個(gè)與用戶界面密切相關(guān)的層次結(jié)構(gòu)中。這些對象就好像是一道道門。通道已經(jīng)有了,現(xiàn)在主要的問題就是如何配一個(gè)合適的鑰匙。
根據(jù)筆者的經(jīng)驗(yàn),在通過VisualStudio與Visio打交道的時(shí)候,主要需要用到三個(gè)對象。分別是Application對象、Document對象、Page對象。如果用戶有這個(gè)需求,那么首先需要做的就是了解這個(gè)三個(gè)對象,特別是需要知道,這三個(gè)對象可以分別實(shí)現(xiàn)什么樣的功能。只有如此,當(dāng)用戶提出需求的時(shí)候,Visual Studio管理員才能夠?qū)ΠY下藥,選擇合適的對象。
其中Application對象它表示Visio應(yīng)用程序,它的所有成員通常作為一個(gè)整體應(yīng)用于Viso,是另外兩個(gè)對象的父級。而Document對象與Page對象則是具體的對象。前者是Visio編程的中樞,它主要負(fù)責(zé)一個(gè)繪圖、模具和模板文件。而后者主要表示前景或者背景的繪圖區(qū)域。
筆者比較愿意將Application對象比喻成未來的丈母娘,后其余兩個(gè)對象就是他的女兒。而用戶就好像是白馬王子。當(dāng)白馬王子要跟他的女兒結(jié)婚的話,必須要通過Application對象,或者經(jīng)過其同意。只要他同意之后,以后這小兩口的日子怎么過(具體怎么操作與實(shí)現(xiàn)),就是他們之間的事情了。了解這三個(gè)對象之間的關(guān)系,對于我們后續(xù)的開發(fā)工作會有很大的幫助。
三、通過VS向Visio文檔中添加形狀。
了解上面三個(gè)對象的關(guān)系之后,下面筆者就好總結(jié)一下,通過VS向Visio發(fā)出各種問候所需要注意的內(nèi)容。如通過VS向Visil文檔添加某個(gè)具體形狀,如判斷用的零星是怎么實(shí)現(xiàn)的,以及相關(guān)的注意事項(xiàng)。
如果向VS向Visio中添加形狀,簡單的說可以分為兩個(gè)步驟。
第一步:從Documents對象中查詢主控形狀。
這里需要注意一點(diǎn),如果要通過VS向Visio文檔中添加某個(gè)形狀,有一個(gè)前提就是這個(gè)形狀必須已經(jīng)存在于Documents對象中。也就是說,只能夠?qū)崿F(xiàn)對已經(jīng)存在對象的調(diào)用。如果用戶需求添加一些自定義的形狀,那么就需要一個(gè)額外的步驟。如可以在Visio中先通過添加功能將其加入到Documents對象中。然后再通過VS來調(diào)用。Documents對象在上面的內(nèi)容中筆者已經(jīng)強(qiáng)調(diào)過,它主要負(fù)責(zé)一個(gè)繪圖、模具和模板文件。也即是說,所有的形狀信息都是保存在這個(gè)對象中的。當(dāng)VS向Visio文檔中添加某個(gè)形狀時(shí),首先要做的就是在這個(gè)對象中進(jìn)行查找,看自己需要添加的形狀是否在這個(gè)文件中。這里主要用到Documents.Masters集合。如果形狀比較多的話,為了提高查詢的速度,用戶可以通過索引或者主控形狀的名字來檢索主控形狀。下面這段代碼就是用來查詢形狀是否存在。
Visiostencil.masters.get_itemu(@”形狀的名字”)。
第二步:將需要的形狀添加到文檔中。
找到某個(gè)形狀之后,就需要將其加入到某個(gè)文件中。在加入這個(gè)操作的時(shí)候,我們需要至少指定兩個(gè)內(nèi)容。一是將哪個(gè)形狀加入到這個(gè)文件中,二是將其放到哪個(gè)位置上去。有時(shí)候可能還需要指定一個(gè)內(nèi)容,就是這個(gè)形狀要顯示的文本內(nèi)容。雖然這個(gè)并不是必須的。如果有需要的話,最好一起來完成。具體來說,可以通過以下兩段代碼來完成。
Visiopage.drop(剛才查詢到的形狀,坐標(biāo)X,坐標(biāo)Y)
VisioStarshape.text=@”要顯示的內(nèi)容”
注意以上三個(gè)語句往往需要連著用。第一個(gè)語句主要用來查詢所需要的形狀是否存在。第二個(gè)語句就是將剛查查詢到的形狀放置到文檔中(其使用的參數(shù)就是第一個(gè)語句種查詢出來的結(jié)果)。第三個(gè)語句就是往這個(gè)形狀中添加一些描述性的文本。一般來說,前兩個(gè)語句是必須的,而第三個(gè)語句是可選的。一般為了提高可讀性,往往將這個(gè)三個(gè)語句放到一起,如下面所示:
Visiostencil.masters.get_itemu(@”形狀的名字”);
Visiopage.drop(剛才查詢到的形狀,坐標(biāo)X,坐標(biāo)Y);
VisioStarshape.text=@”要顯示的內(nèi)容”;
第一條語句主要用到了Documents對象,第二條語句用到了Page對象。這兩個(gè)對象份工合作,各自完成相關(guān)的動(dòng)作。簡單的說,Documents對象是靜態(tài)的內(nèi)容,或者只是一個(gè)文件,只要用來保存可用的形狀。而Page對象就是一些動(dòng)作的集合,如添加某個(gè)形狀、刪除某個(gè)形狀、放大或者縮小某個(gè)形狀等等。對于形狀的具體操作,都需要通過Page對象來完成。為此對于Page對象中的各種方法,如Drop,管理人員必須要有十分詳細(xì)且精確的了解。否則的話,下面很多工作就都無法開展了。
通過上面這個(gè)簡單的案例,可以看出在Visual Studio平臺與Visio三個(gè)對象的幫助下,跟Visio打交道并沒有我們想象中的那么復(fù)雜。通過一段時(shí)間的練習(xí)與操作,相信各位讀者都可以輕松的掌握如何讓Visio實(shí)現(xiàn)自動(dòng)化的技巧。這篇文章中提到的一些技巧與注意事項(xiàng),能夠?yàn)榇蠹疫@方面的改進(jìn)帶來一定的幫助。
【編輯推薦】