Visio是微軟旗下的一款圖表制作與流程管理工具,用來幫助IT和商務人員來可視化的分析和交流復雜 信息。而Visua lStudio則是一個應用程序的可視化開發平台。這兩個互不搭界的內容,他們會有交叉點 嗎?
微軟將這變為了可能。簡單的說,在Visual Studio中提供了一些項目模板。這些模板可以幫助用戶來 創建用於Visio的應用程序外接程序。而這些外接程序又可以幫助Visio直線自動化、擴展 Visio的功能等 等。通過應用程序級外接程序體系結構將兩個產品緊緊的聯系在一起。筆者日常在項目管理中,經常需要 使用VisualStudio工具來開發一些Visio的個性化功能。在這裡就將筆者的經驗跟大家分享一下,供各位 讀者參考。
一、VisualStudio可以給Visio帶來哪些改善。
簡單的說,通過VisualStudio來讓Visio實現自動化,主要是通過API來完成的。這是一個原則性的內 容,筆者先要強調一下。雖然也可以通過其他方式來實現,但是並不建議。因為這會增加工程的復雜性。 一般來說,大部分任務都可以通過API來編寫代碼完成。筆者常用的功能有以下幾個。
一是根據業務邏輯和用戶的輸入管理Visio中的形狀。如筆者使用Visio來管理用戶的流程制作。流程 具有一定的步驟。當用戶在輸入信息的時候,如果每有按步驟來。如跳過了一個步驟,那麼當用戶輸入信 息時就可以在界面上探出一個問號的形狀。這可以提醒用戶,必須按流程來輸入數據。
二是可以用來控制關系圖的可視化效果。在跟其他用戶通過Visio來進行信息交流分析的時候,往往需 要根據實際情況來控制關系圖的可視化效果。如某個對象的平移或者縮放。一個比較簡單的例子,就是將 鼠標移動到某個對象上,或則單擊,這個對象會自動擴大。這可以讓其他用戶更加清晰的看到相關的內容 。
三是將外部的數據導入到Visio中。如果需要將Word等文檔的內容導入到Visio中,則可以使用其自帶 的導入工具。但是如果需要將其他的文檔,如ACD文件,則需要開發其他的接口。如果有這個需求的話, 使用VisualStudio來完成,是一件比較輕松的事情。
以上三點可能是在實際工作中經常會遇到的需求。當然這兩個產品之間的合作不限於這些方面,可能 還有更多。由於工作經驗的限制,筆者只強調這幾點。如果大家還有比較典型的應用,希望各位可以分享 出來,大家共同進步。
二、Visio與VisualStudio之間交互的渠道。
本來要擴展某個應用程序的功能是一件比較復雜的工作,因為其需要考慮到方方面面的內容。而現在 借助VisualStudio來實現Visio的自動化,則是一件相對簡單的工作。這主要是因為他們提供了一些可以 相互交互的對象。這些對象排列在一個與用戶界面密切相關的層次結構中。這些對象就好像是一道道門。 通道已經有了,現在主要的問題就是如何配一個合適的鑰匙。
根據筆者的經驗,在通過VisualStudio與Visio打交道的時候,主要需要用到三個對象。分別是 Application對象、 Document對象、Page對象。如果用戶有這個需求,那麼首先需要做的就是了解這個三 個對象,特別是需要知道,這三個對象可以分別實現什麼樣的功能。只有如此,當用戶提出需求的時候, VisualStudio管理員才能夠對症下藥,選擇合適的對象。
其中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,管理人員必須要 有十分詳細且精確的了解。否則的話,下面很多工作就都無法開展了。
通過上面這個簡單的案例,可以看出在VisualStudio平台與Visio三個對象的幫助下,跟Visio打交道 並沒有我們想象中的那麼復雜。通過一段時間的練習與操作,相信各位讀者都可以輕松的掌握如何讓 Visio實現自動化的技巧。這篇文章中提到的一些技巧與注意事項,能夠為大家這方面的改進帶來一定的 幫助。