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