Project server 2007 鏈接文檔的定製開發

在Project Web Access中的項目中心,每個項目對應一個項目工作區,即SPWeb。項目網站內提供了項目工作環境中所需的列表,以便與 Microsoft Office Project Server 2007 集成,其中包括項目文檔、項目問題、項目風險和項目可交付結果。項目中的任務可以設置鏈接這些列表中的文檔或者條目。如果關聯了某一個文檔,項目和任務都會有圖標標識有鏈接文檔。

但是第一、project server 只支持鏈接本工作區的項目文檔庫內的文檔。第二、貌似它本身有個bug:如果刪除文檔的話,此任務再需要鏈接文檔時,將會報錯顯示,不存在列表項。但是很多企業的文檔存放都是需要統一的管理,要放在一個網站內方便管理。某些文檔可能是N個任務都需要鏈接的,如果項目很多,分的任務也很多,勢必造成文檔的更新以及佔用不必要的資源等問題。
 
Project server 提供了可以定製開發的web service,可以從官方下載sdk

從sdk中查到它提供了[ObjectLinkProvider Web service]命名空間,可以再進一步看到所有這些鏈接都是用繼承自System.Data.DataSet的ObjectLinkProviderDataSet存儲的項目以及任務、文檔庫、文檔的ID實現的。並且提供了多種獲取objectLinkProviderDataSet的方法。

  1. string psiBaseUrl = "網站路徑+/_vti_bin/psi/";  
  2. SvcObjectLinkProvider.ObjectLinkProvider objectLinkProvider = new ObjectLinkProvider();  
  3. objectLinkProvider.Url = psiBaseUrl + "objectlinkprovider.asmx";  
  4. objectLinkProvider.Credentials = CredentialCache.DefaultCredentials;  
  5.  
  6. ObjectLinkProviderDataSet readdsLinkedObjects = objectLinkProvider.ReadTaskLinkedWebObjects(taskUid,  
  7.     (int)WebObjectType.Document);  
  8.  
  9. foreach (ObjectLinkProviderDataSet.WebObjectsRow objRow in readdsLinkedObjects.WebObjects)  
  10. {  
  11.      if (objRow.WOBJ_TASK_UID != taskUid && objRow.WOBJ_LIST_NAME == listUid)  
  12.      {  
  13.            Response.Write(objRow.WOBJ_TP_ID.ToString());  
  14.      }  
這樣看來,我們似乎可以嘗試強制把本網站外的文檔庫和文檔的ID和當前任務的ID存儲在一個ObjectLinkProviderDataSet中。
Sdk中提供了一些samples,仿照它們我嘗試在\LAYOUTS\PWS中添加自定義的頁面替代原先的LinkItemsPage.aspx去實現新建、查看和刪除鏈接。然後在文檔的查看錶單頁面添加webpart實現可查看鏈接此文檔的所有任務,以及在文檔庫附加刪除時的事件處理程序,同時刪除鏈接的objectLinkProviderDataSet。
最終倒是實現了客戶的需求,但是也有一些問題:
1、 原先的LinkItemsPage.aspx頁面將不可用,會報錯顯示找不到文檔庫。
2、 如果鏈接風險或者問題,也同樣需要開發,我嘗試將點擊鏈接風險或者問題時的URL參數中的參數“WSSListType”替換了也同樣加載不了。我的項目中是客戶不需要這功能,就乾脆把“鏈接風險”和“鏈接問題”用JS隱藏了。
3、 文檔的反向鏈接項目中的任務也需要單獨開發。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章