2011-04-11 97 views
5

我在一個客戶端網站,他們有一個應用程序在SharePoint中開始,正在慢慢遷移到一個非常自定義的ASP.NET應用程序。他們的一些數據元素仍然被託管在SharePoint列表中,其中兩個當前存在問題的是「Notes」和「Tasks」(他們的SharePoint設置中相當簡單的數據元素,沒有什麼特別的)。我需要能夠從ASP.NET內部完成的任務之一是自動爲這些列表創建一些新項目並從代碼中添加它們。獲取ID?像SharePoint這樣的當前用戶可以嗎?

到目前爲止,這很容易。我找到了處理這些項目編輯的現有Web部件,將調試器附加到它,跟蹤它如何獲取其值以及它添加到列表中的內容等。但是,添加到列表項中的一個字段isn'這很明顯。在現有的Web部件的UI,現場看起來是這樣的:

Assigned To field

從本質上講,它是進入從目前的Windows域用戶的字段。書本圖標打開彈出窗口,允許用戶搜索名稱等。在我目前的測試中,我以開發機器上的本地管理員身份運行。所以我只需在彈出窗口中查找「admin」,並按預期填充「[machine name] \ Administrator」字段。然後,在調試時,從字段中獲取並輸入到SharePoint列表項中的值是「1」,而不是名稱或類似的名稱。

我假定「1」是本地管理員帳戶的標識符。畢竟是有意義的。但我的問題是,如何在代碼中獲取當前登錄用戶的標識符?我發現了獲取當前用戶名的代碼,但沒有任何一種數字(即使是字符串)ID。

此外,這不會發生在ASP.NET應用程序上下文中。還有一個用於筆記本電腦的WPF客戶端應用程序,它將生成這些列表項並在連接時將它們同步回服務器。我目前正在假設客戶端用戶將使用服務器已知的適當域帳戶登錄。

我想這很容易,我只是沒有偶然發現我需要的東西。

回答

6

我想你正在尋找這樣的:

int userId = SPContext.Current.Web.CurrentUser.ID; 

順便說一句,這是由SharePoint分配給用戶的內部ID。要從WPF應用程序獲取此Id,可以在SharePoint內部署一個WebService,以返回此Id。或者你甚至可以查詢SharePoint數據庫,但我不知道它是否安全:-)

+0

非常好,絕對是我需要的ASP.NET端。 (我認爲這很容易,我對SP一無所知)。雖然WPF有點複雜,因爲它需要在有時連接的模型中工作。所以不能保證SP連接。我想最糟糕的情況是客戶端機器將本地存儲中的項目(已經不是SP相關的)中的項目排隊,並且在將它們推送到Web服務時,將該ID分配爲Web服務,而實際添加到SP名單。我需要檢查客戶端以確保Web服務具有SP上下文。 – David 2011-04-11 19:47:05

+0

你也可以得到這個Id一次,然後將它存儲在新的數據庫中。會更容易和更快。 – goenning 2011-04-11 19:49:53

+0

雅,我想我必須採取一些解決方法。我正在考慮在客戶端筆記本電腦的表格中存儲一些基本的數據元素,當它觸及同步Web服務器(現有功能,它現在同步大量內容)時,只需添加一個方法將這些元素上傳到服務器讓服務器弄清楚細節。現在的停止點是,我認爲同步Web服務中不存在SP上下文,因此我必須將其作爲體系結構問題來解決。謝謝! – David 2011-04-11 20:01:36