在我們的OA項目中,一般都有一個需求就是線上編輯文檔的功能。在一般的OA產品中,一般會整合一些第三方的Office組件,如NTKO等等,第三方的組件功能很強大,我也不是很清楚這些功能的實現細節,但只是單純的線上編輯來說,現在有一種比較簡單的方案,就是使用基於HTTP 1.1擴充而來的WebDAV(Web Distributed Authoring and Versioning)。
WebDAV可以直接使用瀏覽器、網路位置來管理遠程Web伺服器上的WebDAV檔案夾中的檔案,在Windows系統中,要完成這個功能需要伺服器和用戶端雙方面的協調。
伺服器端的設定開始WebDAV擴充(使用SharePoint.OpenDocuments時非必需)
我們在IIS中選擇“Web 服務擴充”,找到WebDAV,然後允許。
由於線上編輯需要在用戶端直接修改伺服器的檔案,所以我們必需開始網站或者虛擬目錄中開啟“寫入”許可權:
在目錄安全性中,這裡中我現在的設定是要開啟匿名訪問,以方便公網使用者訪問網站,然後不開啟“整合Windows驗證”,這樣可以避免在訪問網站時需要輸入使用者名稱和密碼的過程。但由於開啟了“寫入”的許可權,這會給伺服器造成安全上的隱患,所以在設定的時候需要根據自己的情況來採取相應的安全性原則。我現在的程式是跑在內網的OA,所以安全層級是很低的,所以我進行了這樣的設定。
在開啟了網站或者虛擬目錄的“寫入”許可權,並開啟了預設的匿名賬戶且關閉了“整合Windows身分識別驗證”後,現在需要為儲存允許修改的檔案的目錄進行許可權的設定。
我隱藏檔的目錄為attachment,它裡面儲存了我要向分眾開放的或協作編輯的檔案,在使用VS2008預設發布後它的許可權預設是繼承上級目錄的,所以首先要取消繼承,然後來設定自己的許可權:
去掉“允許父項的繼承許可權傳播到該對象和所有子物件,包括那些此明確定義的項目”,然後點擊應用,會彈出如上對話方塊,這裡要點擊“複製”按鈕,以便將父級的許可權複製到當前的目錄,這樣attachment就有一父目錄的許可權,省去了定義一些基本許可權的工作。當然如果你點擊了刪除以後,這個attachment目錄就會變成空許可權的,然後就得自己一步步的加一些基本許可權了,比如Administrator的帳號許可權等等。
在擷取了父物件的許可權後,預設Internet 來賓帳號是被拒絕的,這裡需要對這個帳號進行編輯,點擊“Internet 來賓帳號”,然後點擊“編輯”按鈕,後彈出如下對話方塊:
這雷根據一般讀取和更改、寫入的許可權是要設定的,否則就有可能不能讀取,或者讀取了不能修改。當然,這個要根據你的需求,假如你只是想讓使用者開啟瀏覽而不需要更改,當然就可以適當的去掉“更改”和“寫入”的許可權。我現在的需求是能讀能寫,但不能刪除,所以我去掉了與“刪除”有關的兩個選項。確定好要設定的許可權後,就可以點擊“確定”按鈕了。
為了使我們對attachment目錄設定的許可權使得子目錄和檔案也能夠相應的繼承,還需要勾選“用在此顯示的可以應用到子物件的項目替代所有子物件的許可權項目”複選框,這樣就可以在父目錄設定的許可權覆蓋了所有子目錄和檔案的許可權,方便我們統一進行管理。
經過以上設定,伺服器端的設定工作就完成了。
用戶端
如果是需要使用瀏覽器來開啟和編輯服務器上的文檔,那麼這裡需要用戶端開啟WebClient這個服務。但是我現在的需求只是能在用戶端開啟伺服器端的Word文檔,這個可以使用其它的方式。
在Office XP以後,Office安裝後就帶了一個OCX控制項,這個控制項允許我們調用它來編輯服務器上的檔案,我們可以使用JavaScript指令碼來調用它:
function getSPOpenDocumentObject() {
if (window.sharePoingOpentDocuments) {
return window.sharePoingOpentDocuments;
}
else {
var progids = ["SharePoint.OpenDocuments.3", "SharePoint.OpenDocuments.2", "SharePoint.OpenDocuments.1"];
for (var i = 0; i < progids.length; ++i) {
try {
return (window.sharePoingOpentDocuments = new ActiveXObject(progids[i]));
}
catch (e)
{ }
}
return null;
}
}
在得到了這個對象以後,我們就可以使用getSPOpenDocumentObject().EditDocument('http://xxx.com/xx.doc') 來編輯文檔了。
註:實現這個需求其實沒有涉及WebDAV這個功能,但是寫在裡面算作是一個記錄吧。要實現線上編輯,其實只要將伺服器的許可權設對,然後在用戶端調用OCX控制項就可以達到目的了
由於我是在Word裡編輯的,而且沒有保留抓圖檔案,而轉到隨筆裡就沒法帶片了,所以我將Word檔案上傳,有需要看圖片的可以直接看Word文檔:
Word檔案下載