SharePoint 內幕整合 Office 應用程式

Pav Cherny

目錄

Office 應用程式整合
擴充 SharePoint UI
使用 Office OpenDocuments 控制項
與 SharePoint 通訊
實作自訂 OpenControl 解決方案
總結

Microsoft Windows SharePoint Services (WSS) 3.0 和 Microsoft Office SharePoint Server (MOSS) 2007 與 2007 Microsoft Office System 中的桌面應用程式之間的完美整合,使得文件、試算表、行事曆、連絡人資訊等方面的共同作業更具效率。事實上,整合程度之密切,

您可以稱 2007 Office System 為統一辦公解決方案平台。

這對於把焦點放在 Microsoft® Office 技術上以提升資訊工作者產能的公司來說,無疑是一大福音。然而,擁有多樣 Office 應用程式組合的公司卻無法享受同等級的現成互通性。2007 Office System 雖提供必要的整合功能,但其介面和元件的記載鮮少,而且無法在所有情況下運作。這使得協力廠商難以將 SharePoint® 技術整合到他們的應用程式,對他們的客戶來說,更難提供資訊工作者統一的體驗。

在本專欄中,我將向您說明 Office 應用程式如何與 SharePoint 整合和通訊,以及如何依照相同的原則將非 Microsoft 應用程式與 SharePoint 相整合。不過首先,我將簡短討論一下達成完美整合所用的伺服器組態設定、用戶端元件,以及通訊協定。

這些細節都釐清之後,我會著手整合不具內建 SharePoint 支援的應用程式。這麼做的時候,我會一改往常把重點放在實作 IFilter 元件來擴充搜尋功能,以及在 SharePoint 伺服器上新增自訂圖示的作法,將層次往上提升。擴充搜尋並以適當的圖示傳回結果並不能達成完整的應用程式整合,使用者可能還想從 SharePoint 使用者介面內部直接開啟這些文件。

此時事情就比較複雜。您需要有一個用戶端元件,只在工作站上有部署 Office 的時候可用。但即使您已部署 Office,可能還是會發現這個元件運作起來並不穩定,視 SharePoint 網站拓樸和設定而定。

為了解決這個問題,我建立了一個自訂解決方案,讓您不需要部署 Office,就能整合任何應用程式,例如記事本、Adobe Reader 或 Autodesk AutoCAD。這套自訂解決方案也闡明了在某些情況下,為什麼根據標準 Office 元件進行應用程式整合會失敗。您可以在本專欄隨附的資料 (可自網站上的「程式碼下載」區段取得) 中,找到這套解決方案,以及部署和設定的逐步指示。

Office 應用程式整合

從使用者的觀點來看,SharePoint 功能表運作的方式似乎跟 Windows® [開始] 功能表很像。在文件庫中建立新文件很簡單:只要依序按一下 [新增]、[新增文件],Microsoft Office Word 2007 便會啟動。編輯現有的文件也很直接了當。將滑鼠停駐在文件上,開啟 [編輯控制項方塊 (ECB)] 下拉式功能表,然後在 Word 中按一下 [編輯]。您可能很難想像,您是從網頁透過 JavaScript 開啟 Word 2007;從本機執行應用程式,但文件其實位於遙遠的 SQL Server® 資料庫中,網頁伺服器是存在資料存取路徑內,如 [圖 1] 所示。

fig01.gif

[圖 1] 在 SharePoint 中使用 Word 文件 (按一下以放大影像)

儘管複雜,使用者在裝有 2007 Office System 的 Windows 工作站上的體驗仍舊相當順暢。在 SharePoint 文件庫中使用文件就跟使用本機檔案或網路共用上的檔案沒什麼兩樣。

不過,如果是不含 Office 2003 或 2007 Office System 的 Windows 工作站,UI 會稍有不同。按一下 [新增文件] 或 Word 中的 [編輯] 只會顯示一個對話方塊,告訴您 Windows SharePoint Services 相容的應用程式無法使用。

這種情形不難預料,要提供讓 Office 使用者滿足的體驗,必須搭配幾項要素。SharePoint 必須知曉文件庫當中所維護的內容類型,以便在 [新增] 和 [ECB] 功能表中呈現所要的命令。為了回應在這些命令上進行的滑鼠點按動作,JavaScript 程式碼必須執行以啟動相關聯的應用程式,將路徑傳送給文件。這個部分跟工作站設定息息相關,因為 JavaScript 程式碼是在本機執行。再者,相關聯的應用程式必須與 SharePoint 通訊,才能讀取,甚至可能寫入檔案。如果您想要將應用程式與 SharePoing 整合,這些都是您必須統合的要素。

另一方面,SharePoint 與資料庫伺服器之間的通訊並不會影響應用程式,也不會左右網頁伺服器上的索引處理程序,以加速搜尋作業。有鑑於此,我將不在本文中進一步討論這些層面,但是建議您查閱 Microsoft 知識庫文章<如何註冊 Microsoft 篩選器套件與 Windows SharePoint Services 3.0> 裡面記載的 Microsoft 篩選器套件,網址是 support.microsoft.com/kb/946338。現在讓我們把注意力放在新增命令、實作必要用戶端元件,以及加速應用程式通訊等作業。

擴充 SharePoint UI

擴充 SharePoint 使用者介面和功能有眾多的選項可用。您可以變更網站的設計,自訂 ASP.NET 網頁,開發網頁組件,或是變更內含在 WSS 和 MOSS 的 JavaScript 程式碼以直接啟動應用程式。

您也可以在文字編輯器內開啟 Ows.js 檔案 (您可以在 SharePoint 前端伺服器上的 COMMONPROGRAMFILES%\Microsoft Shared\Web Server Extensions\12\Template\Layouts\1033 資料夾中找到這個檔案),以及變更 createNewDocumentWithProgIDCore、editDocumentWithProgIDNoUI 和 DispDocItem 函數運作的方式。但是有一個比較妥當的方法,讓您不需要以不受支援的方式變更 WSS 程式碼基底:使用內容類型和文件類型對應。

在敝作<透過自訂內容類型將資料管理標準化>中 (請參閱 2008 年 2 月號《TechNet Magazine》,網址是 technet.microsoft.com/magazine/cc194408.aspx),我說明了如何建立全域和網站特定內容類型,來管理 SharePoint 文件庫與清單中的文件和其他內容。您也可以參閱本文隨附資料中的工作表 Text Content Type.pdf,當中有說明如何針對 .text 檔案建立新內容類型,以及建立此內容類型與文件庫的關聯。結果就跟您可以針對 Word 文件選取 [文件] 命令一樣,您也可以從 [新增] 功能表選取 [文字內容] 命令 (見 [圖 2])。

fig02.gif

[圖 2] SharePoint UI 中的自訂內容類型 (按一下以放大影像)

ECB 功能表也同樣可擴充。您可能預期 ECB 功能表也應該能夠感知內容類型,但目前的 WSS 版本並不是依這種方式來實作此功能表。您反而必須在 Docicon.xml 註冊您的文件類型,您可以在每部 SharePoint 前端伺服器上的 %COMMONPROGRAMFILES%\Microsoft Shared\Web Server Extensions\12\Template\Xml 資料夾中找到這個檔案。

比方說,透過將下列文件類型對應加入 Docicon.xml 的 <ByExtension> 區段,您可以使 SharePoint 顯示 [在記事本中編輯] 命令 (詳細指示,請參閱 Text Content Type.pdf 檔案)。

<Mapping Key="text" Value="ictxt.gif" 
  EditText="Notepad"
  OpenControl="SharePoint.OpenDocuments"/>

Key 參數可識別副檔名,Value 參數定義著要顯示在使用者介面中的文件圖示,EditText 參數定義著 SharePoint 附加到 [在...中編輯] 命令的字串,而 OpenControl 參數可指定用戶端 COM 元件的 ProgID。這是 SharePoint JavaScript 函數傳送到 ActiveXObject 呼叫以產生 COM 物件的 ProgID (詳細資訊,請參閱 Ows.js),這個物件可以是應用程式本身,或是根據相關檔案類型啟動應用程式的協助程式控制項。

SharePoint 產品和技術網站

您應該要注意,稱為 SharePoint.OpenDocuments 的 OpenControl 指的是隨最新 Office 版本 (%PROGRAMFILES%\Microsoft Office\Office12\Owssupp.dll) 一同發行的 ActiveX® 控制項。如果您的工作站上存在這個檔案,而且指定的文件圖示 (Value 參數) 也位於 SharePoint 伺服器上的 %COMMONPROGRAMFILES%\Microsoft Shared\Web Server Extensions\12\Template\Images 資料夾內的話,您可能已經完成大部分必要的整合工作。

Windows SharePoint Services 3.0 SDK 包含一些關於隨 2007 Office System 一同發行的用戶端 API 的資訊,包括 OpenDocuments 控制項。請參閱「用戶端 API 參考資料」一節,網址是 msdn2.microsoft.com/ms440037

使用 Office OpenDocuments 控制項

OpenDocuments 控制項解決了最不可少的應用程式整合需要,但是它要求安裝 Office 2003 或 2007 Office System,而且它的功能有限。[新增] 功能表上的命令不一定都可用,而且它們有時候會顯示可能會誤導使用者通知的內容。

[圖 3] 所示,OpenDocuments 控制會通知使用者必要的應用程式安裝不正確,或是無法開啟範本檔案,但其實不然。「在...中編輯」功能也有問題。您會常看到顯示在 [圖 3] 前景中的第二則錯誤訊息。這是我最津津樂道的,因為連 SharePoint 專家也會被它誤導,不過我稍後會詳細說明這點。

fig03.gif

[圖 3] OpenDocuments 控制項的誤導錯誤訊息 (按一下以放大影像)

儘管如此,OpenDocuments 控制項在所有工作站上都裝有最新版的 Office 的環境內還是相當有用。此外,您還可以在 [新增] 功能表上隱藏內容類型 (顯示 [文件庫設定],按一下 [變更新增按鈕順序與預設內容類型],然後取消勾選上述所有內容類型的 [可見] 核取方塊),如此一來,使用者就不會遇到第一則錯誤訊息。您也可以簡化網站拓樸,以避免產生網頁導向分工編寫及版本管理 (WebDAV) 通訊問題,這可消除第二則錯誤訊息。

與 SharePoint 通訊

到目前為止,我設法擴充了 SharePoint UI,或許也利用了 OpenDocuments 控制項啟動應用程式,但是我的應用程式仍舊需要一種途徑與 SharePoint 通訊以存取資料。不用說,SharePoint 支援多種方法讓您這麼做,例如 Microsoft Office FrontPage® Server Extensions、WSS 遠端程序呼叫 (RPC)、WebDAV 和 Web 服務。事實上,視您要如何存取文件而定,例如透過 Web 資料夾、對應的網路磁碟機,或是 SharePoing UI,Office 應用程式 (例如 Word 2007) 可能會使用當中任一或所有的通訊方法。

SharePoint 用戶端/伺服器通訊方法各自都依靠 HTTP 作為基礎通訊協定。舉例來說,FrontPage 和 WSS RPC 全都使用在 ISAPI 擴充程式導向的 HTTP POST 和 HTTP GET 要求,這個擴充程式是位於 SharePoint 伺服器上的 %COMMONPROGRAMFILES%\Microsoft Shared\Web Server Extensions\12\ISAPI 資料夾及其子資料夾內。

其中一個最重要的 ISAPI 擴充程式是 Owssvr.dll,除了其他項目之外,它還會實作與清單和文件庫搭配運作的功能。[圖 4] 顯示 Word 2007 中的 SharePoint [另存新檔] 對話方塊 (左邊),以及透過 URL 要求 https://sharepoint/HR/Administration/_vti_bin/owssvr.dll?dialogview=FileSave&location=Shared%20Documents&FileDialogFilterValue=*.docx 直接開啟的瀏覽器 (右邊)。兩種案例之間的相似性顯而易見。

fig04.gif

[圖 4] Word 2007 中與 Internet Explorer 中的 SharePoint [另存新檔] 對話方塊 (按一下以放大影像)

其他重要的 ISAPI 擴充程式還有 Author.dll,它會實作 FrontPage 和 WSS RPC 以進行用戶端編輯作業,例如上載、重新命名和刪除文件;Admin.dll 可用於管理網站和執行其他各種系統管理工作;以及 Shtml.dll 可用來支援 HTML 表單提交。

一般來說,若不能存取原始程式碼,要在現有應用程式 (例如記事本或 Adobe Reader) 中加入 FrontPage 和 WSS RPC 支援是不可能的。但是您可以透過 Windows 中內含的網頁用戶端功能,提供必要的通訊設備。

SharePoint 也透過 Httpext.dll 支援 WebDAV,這個檔案位於 %WINDIR%\System32\Inetsrv\ 資料夾內,但我們還是把話題放在用戶端上。執行 Windows Server® 2008 或 Windows Vista® 的電腦預設都會安裝網頁用戶端功能。在控制台中的 [系統管理工具] 內,您可以在 [服務] 小程式裡面找到相對應的 WebClient 服務。在 Windows XP 和 Windows Server 2003 上,您必須明確地安裝網頁用戶端。無論是哪一種情況,都請確定 WebClient 服務已啟動,而且 [啟動類型] 是設為 [自動]。

[圖 5] 描述的是網頁用戶端的架構。WebClient 服務是在服務控制管理員於 Svchost.exe 主機處理序中載入的使用者模式 DLL 中 (Webclnt.dll) 實作。Webclnt.dll 提供網路提供者介面以進行非 I/O 作業 (例如驗證使用者以存取 WebDAV,將 SharePoint 網站掛接成網路磁碟,將 SharePoint 網站、清單和文件庫列舉成網路資源,以及中斷掛接的磁碟)。

fig05.gif

[圖 5] WebDAV 用戶端重新導向器架構 (按一下以放大影像)

為了執行這項工作,Webclnt.dll 會與提供實際重新導向器功能的核心模式檔案系統驅動程式通訊。WebDAV 用戶端重新導向器驅動程式 (Mrxdav.sys) 是以 Redirected Drive Buffering Subsystem (RDBSS) 為基礎,這個子系統會與 I/O 管理員和其他核心元件整合,以便提供遠端檔案系統的服務。Mrxdav.sys 會實作 WebDAV 通訊設備以支援對 SharePoint 網站和文件庫的檔案系統層級存取。

能夠透過網路重新導向器存取 SharePoint 網站和文件庫,使用者應用程式中就不用 FrontPage 和 WSS RPC 支援。您可以將網路磁碟機對應到文件庫 (例如 net use x:http://wss/doclib/Shared%20Documents),而且您可以透過 UNC 路徑存取 SharePoint 資源。

URL http://wss/doclib/Shared%20Documents 會對應到 \\wss\doclib\Shared%20Documents。因此,您可以選擇是否要在應用程式中開啟文件。比方說,您可以使用 HTTP 路徑 http://wss/doclib/Shared%20Documents/New%20Text%20Document.txt 或是 UNC 路徑 \\wss\doclib\Shared%20Documents\New%20Text%20Document.txt,在記事本中開啟文件。

不幸的是,網頁用戶端功能有幾項限制。您無法存取自訂屬性或是使用自訂 TCP 連接埠的 Web 應用程式。若是使用者不能存取階層中的上層網站,隨 Windows Vista 一同發行的網頁用戶端也會失敗,如 WebDAV Access.pdf (請參閱附隨資料) 所示。

路徑 https://sharepoint/HR/Administration/Shared%20Documents/ 包含一個非現有的根網站 (也就是 https://sharepoint),但是若不能存取根目錄,網頁用戶端便無法判斷網頁伺服器的功能。網頁伺服器會拒絕網頁用戶端的 OPTIONS 要求,並產生狀態碼 401,表示存取未經授權,因此網頁用戶端會繼續提示輸入使用者認證,如 [圖 6] 所示,即使使用者對網站集合 sharepoint/HR 及當中所有網站具備系統管理存取權也一樣。

fig06.gif

[圖 6] 不成功的 WebDAV 存取 (按一下以放大影像)

當使用 OpenDocuments 控制項時,如果網頁用戶端無法開啟文件,您會收到 [圖 3] 中所示的錯誤訊息。應用程式可以使用,而文件類型對應也正確。無法透過 WebDAV 重新導向器存取的其實是文件。

實作自訂 OpenControl 解決方案

一般而言,要解決網頁用戶端的缺點,您有兩個選擇。您可以等 Microsoft 提供新版的網頁用戶端,或者您可以實作自訂的 OpenControl 解決方案來解決目前的狀況。實作自訂 OpenControl 並不是一項簡單的工作,但這麼做工作站上就不用安裝 Office,除了 [在...中編輯] 命令之外,它還可讓您有意義地處理 [新增] 命令,而且它也容許您處理網頁用戶端失敗時的情況。

如果這些是您所關注的問題之一,不妨看看隨附資料中所含的 AppStart 原始程式碼。當中說明了如何在 SharePoint JavaScript 程式碼可以呼叫的 Microsoft .NET Framework 組件中公開 OpenControl COM 介面。AppStart 原始程式碼也示範了檢查檔案存取性,以及不能透過 WebDAV 直接存取時,經由 HTTP 將檔案下載到本機電腦的可行方法。最後,AppStart 原始程式碼還回應 [新增] 命令,它將內容類型相關的範本下載至本機電腦,讓使用者可以開始使用文件。工作表 Text Content Type.pdf 和 Adobe Reader Support.pdf 則概述了如何部署此 OpenControl 解決方案。

[圖 7] 中所示的圖表顯示了 AppStart 架構。我的自訂 OpenControl 元件 (叫做 Biblioso.dll) 公開兩個一模一樣的 COM 介面,SharePoint JavaScript 會呼叫這些介面來建立新文件或開啟現有文件以利編輯 (Biblioso.AppStart.2 和 Biblioso.AppStart.3)。

fig07.gif

[圖 7] AppStart 架構 (按一下以放大影像)

若文件處於開啟狀態以供編輯,且檔案是直接透過 WebDAV 存取時,Biblioso.dll 會確認檔案確實存在,並循著文件的路徑啟動相關的應用程式。如果檔案不可存取,Biblioso.dll 便會啟動跨處理序 COM 伺服器,此伺服器接著會載入 OpenDocsUtility.dll 以透過 HTTP 下載檔案,並循著下載文件的路徑啟動應用程式。

跨處理序 COM 伺服器可讓解決方案與 Internet Explorer® 處理序分隔,因為這個處理序會限制以保護模式下載至 Temporary Internet 資料夾。使用者必須能夠在沒有保護模式的限制下下載檔案,而作為應用程式代理人的跨處理序 COM 伺服器提供了這種可能性。

.NET 中並不支援開發跨處理序 COM 伺服器,因此我針對這個可執行檔切換到 C/C++。我只以 C++ 實作了最精簡的 [另存新檔] 對話方塊。為了讓解決方案盡可能直接明瞭,並且降低開發負荷,我將實際的下載程式碼放在 .NET 組件中 (OpenDocsUtility.dll),然後透過其他 COM 介面呼叫這個組件。

為了使部署作業更具效率,我在解決方案中加入了一個安裝程式專案。另外,安裝程式常式還會註冊所有 COM 元件,並將應用程式特定設定寫入 HKEY_LOCAL_MACHINE\SOFTWARE\Biblioso\AppStart。最重要的參數是 AllowedApps 和 AllowedFileTypes。AppStart 解決方案只能與您在這些參數中明確指定的那些應用程式和檔案類型搭配運作。

安裝程式常式也會針對跨處理序 COM 伺服器建立提升權限原則,這樣一來,Internet Explorer 處理序中的 Biblioso.dll 就可以啟動 AppBrokerEngine.exe 而不會觸發安全性警告。如果您有興趣進一步了解 Internet Explorer 保護模式,以及如何在應用程式開發中處理保護模式,我強烈建議您閱讀 Marc Silbey 和 Peter Brundrett 合著的<了解和使用保護模式 Internet Explorer>(英文),網址是 msdn2.microsoft.com/bb250462

當分析 AppStart 元件時,記住這套解決方案是為了示範可能的用途而開發的,它還不適合用於生產環境。除了原始程式碼註解之外,我們並沒有足夠的時間將程式碼最佳化,以及徹底測試解決方案,或是記錄各項功能。

您應自行承擔使用此解決方案的風險。如果您有興趣研究原始程式碼來建立您自己的解決方案,可從 Biblioso 程式碼專案中的 AppStart.cs 開始著手。這個檔案會實作 OpenControl COM 介面和進入點,供 JavaScript 從 Ows.js 呼叫。

總結

WSS 3.0 和 MOSS 2007 提供了廣泛的應用程式整合功能,讓使用者在 SharePoint 文件庫和清單中使用文件和其他項目時擁有順暢的體驗。2007 Office System 中的桌面應用程式鮮明地展示了這種可能性,而且非 Office 應用程式也可以達成相同等級的整合性和使用性。

應用程式整合架構的核心是 COM 元件,SharePoint JavaScript 函數正是使用它循著文件路徑來啟動應用程式。2007 Office System 提供當中幾個 COM 元件,針對特定 Office 應用程式需求來最佳化,不過您也可以重複使用 Office OpenDocuments 控制項來整合非 Microsoft 應用程式。OpenDocuments 控制項能滿足最基本的需要。對於比較進階的應用程式整合需求,您可以實作自訂控制項。

將應用程式與 SharePoint 完全整合不僅需要安裝 IFilter 元件和文件圖示來擴充搜尋和顯示功能而已,還必須在 SharePoint 伺服器上建立自訂內容類型和文件類型對應,以便在 SharePoint 使用者介面中提供適當的 [新增] 和 [在...中編輯] 命令。這些命令會呼叫 JavaScript 函數,這些函數會叫用透過 OpenControl 元件公開的方法。工作站上也必須提供 OpenControl 元件。

另外一個重要的要素是網頁用戶端,在 Windows Vista 上預設會包含並安裝網頁用戶端。網頁用戶端會實作 WebDAV 重新導向器和遠端檔案系統驅動程式,讓任何應用程式都能夠存取類似於網路上的檔案共用的 SharePoint 清單和文件庫內的資源。雖然隨 Windows Vista 一同發行的網頁用戶端有其缺點,但它在應用程式整合中還是扮演著舉足輕重的角色。

WebDAV 支援也消弭了在非 Windows 工作站上執行的應用程式與 SharePoint 之間的落差。這些作業系統上一般都沒有提供 COM 和 ActiveX 控制項技術,因此您無法使用 OpenControl 元件自動啟動應用程式,但大多數作業系統都包含 WebDAV 重新導向器,至少可以讓使用者直接存取文件庫中的文件,而不用將檔案下載到本機工作站。

WSS 3.0 和 MOSS 2007 都是 2007 Office System 成就的基石,而以 Office 為基礎的協力廠商應用程式的使用者也都可透過相同的方式從 SharePoint 中受益。整合功能所達的範圍遠遠超越 Office。藉著充分利用 SharePoint,您能夠建置一套統一辦公解決方案平台,為 Office 和協力廠商軟體提供相同的使用者體驗,藉此促進資訊工作者的產能。

Pav Cherny 是 IT 專家兼作者,專攻 Microsoft 共同作業與整合通訊技術。他的出版品包括白皮書、產品手冊和探討 IT 營運和系統管理的書籍。同時 Pav 也是專營管理文件與本土化服務之 Biblioso Corporation 的總裁。

© 2008 Microsoft Corporation and CMP Media, LLC.著作權所有,並保留一切權利。未經許可,不得部分或全部重製