2009-04-10 68 views
1

當IE用戶單擊駐留在SharePoint中的文件的鏈接(並且用戶選擇「只讀」訪問權限)時,該文件將被複制到Temporary Internet Files中,我的應用程序將打開並將該文件名作爲參數傳遞。我試圖在我的應用中實現「簽出」按鈕,以便用戶可以從只讀模式切換到簽出和編輯模式。我一直無法找到學習該文件的SharePoint URL的方法。在簽出和編輯時,這不成問題:有一個註冊表項將我係統上的文件映射到SharePoint中的URL;我還沒有發現任何類似於只讀文件的情況。臨時Internet文件(通過IE從SharePoint讀取)。我如何找到網址?

編輯: 在Windows資源管理器中有一個URL列可用,但是當我顯示該列(在資源管理器中)時,所有值都是空白。另外,我無法找到任何文件信息API調用,將返回這個值給我。

更新: 我在wininet.lib:FindFirstUrlCacheEntryEx(和「next」)以及FindFirstUrlCacheGroup(和next)中發現了一些有希望的調用。他們似乎沒有返回任何數據,並且從我所讀的內容中,這些僅返回我的應用程序使用wininet API調用緩存 - 而不是I.E.'s。

我也嘗試運行IE瀏覽器在打開文件時進入我的應用程序的COM調用列表,以查看它支持的接口。看起來很有前途的是IMonikerProp接口,當我實現它時,它確實被調用了......但是它只提供了mime類型屬性,我的應用程序的classid和TrustedDownload標誌。

回答

2

也許這個網站找到了答案:How SharePoint communicates with Word via ActiveX

另一選擇可以掛接到的SharePoint ItemCheckingOut事件。 Example 1Example 2。如果您可以獲取URL信息並使用信息創建一些臨時文件或將信息傳遞給您的程序。

Link to ActiveX control info - 也許這個控件是對所有東西都啓動的?你可能會挖掘到這一點。

+0

我有處理SharePoint案件結帳;有註冊表項將本地文件名映射到HKEY_CURRENT_USER下的檢出輸出URL。我試圖處理打開文件的W/O結帳的情況下,然後決定從應用程序內檢查文件。微軟Word這樣做 – Steve 2009-04-14 16:49:50

+0

ItemCheckedOut和ItemCheckingOut是我能找到的唯一事件,當一個項目被視爲只讀時,它們肯定不會被觸發?感覺他們必須這樣做,因爲根據我剛剛添加的鏈接,Word/Excel等啓動了一個ActiveX控件來存儲這些信息。 – 2009-04-14 17:48:27

0

創建的臨時文件是否具有良好的名稱(它是否匹配文件實際調用的內容或它是否是亂碼)。如果這是一個好名字,你可以搜索它。否則,在不知道站點,文件夾,文件名的情況下,除非在某處存在有關該文件的其他數據,否則您可能無法訪問。

+0

這個名字很不錯,但我仍然需要在幾個不同的SharePoint文件夾中涵蓋同名多個文件的情況。另外,我不知道要嘗試使用哪個SharePoint服務器(如果存在多於1個)。 – Steve 2009-04-13 19:49:25

+0

基於用戶,您可能能夠縮小搜索範圍,查看它是哪個服務器/文件。希望他們沒有同時檢出兩個同名的文件。 – 2009-04-14 16:18:39

+0

已經處理了用戶簽出文件的情況。有很好的映射的註冊表項。我嘗試處理的情況是,用戶在沒有退房的情況下打開文件,然後想要在應用程序中進行結賬。微軟Word這樣做(工具欄上的結賬按鈕) – Steve 2009-04-14 16:47:11