2011-03-18 103 views
2

我有一個頁面需要爲登錄用戶檢索部門。理想情況下,我希望能夠通過JavaScript SOAP CAML查詢來完成。我有用戶的ID(我假設雙GUID),所以它看起來像檢索與ID匹配的行的簡單問題。SharePoint獲取當前用戶屬性

我正在研究使用SOAP中的'GetUserProfileByIndex'或'GetUserProfileByGuid'函數,但我似乎無法找到任何可靠的文檔或體面的使用它們的示例。我希望做在JavaScript這樣的事情 - (沒有工作):

var userId = 194; 
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \ 
    <soapenv:Body> \ 
     <GetUserProfileByIndex xmlns='http://microsoft.com/webservices/SharePointPortalServer/UserProfileService'> \ 
      <index>userId</index> \ 
     </GetUserProfileByIndex > \ 
    </soapenv:Body> \ 
</soapenv:Envelope>"; 

回答

4

我建議您查看名爲SPServices的SharePoint 2007和2010的jQuery庫。 $().SPServices.SPGetCurrentUser可以檢索到有效的4行代碼:

var thisDepartment = $().SPServices.SPGetCurrentUser({ 
fieldName: "Department", 
debug: false 
}); 
+0

我在看這個jQuery庫和這個函數,但它不適用於我的情況,因爲:1)我是不使用允許查看配置文件頁面的帳戶類型(儘管權限更改可以解決此問題)2)我實際上是從我們添加的列中提取「部門代碼」值(可能會將其添加到配置文件頁面) 3)它用於檢索用戶配置文件信息的方法並不像我想的那樣乾淨 - 它通過加載頁面,然後根據內部字段名稱''從頁面中刪除'值來工作。 – 2011-03-19 15:56:29

+0

@Eric這是有道理的。我喜歡你的回答,因爲你展示了很多人傾向於避免的蠻力方法。是的,你的代碼有更多的線條,但它完成了工作! – 2011-03-20 13:09:25

3

我從來沒有回答我自己的問題,但我設法想出了一個簡單的解決方案。這是我如何去了解它

  1. 當用戶登錄時,有一個全局JavaScript變量,包括用戶ID, - __spUserId
  2. 用戶配置文件列表是通過CAML查詢訪問通過SOAP,它的標題是「用戶信息列表」。
  3. 訪問此列表時,您必須將頂級網站設置爲指向_catalogs而不是列表(或無論它是什麼)。您可以通過添加元素_catalogs \
  4. 既然是訪問用戶配置文件列表爲列表,而不是通過一個用戶配置文件的功能做到這一點,設置查詢類型(?),以「GetListItems」

總體而言,在這裏是SOAP調用和CAML查詢

$(document).ready(function() { 
    var soapEnv = 
     "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \ 
      <soapenv:Body> \ 
       <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \ 
        <listName>User Information List</listName> \ 
        <topLevelSite>_catalogs</topLevelSite> \ 
        <query> \ 
         <Query> \ 
          <Where> \ 
           <Contains> \ 
            <FieldRef Name='ID' /> \ 
             <Value Type='Text'>"+_spUserId+"</Value> \ 
           </Contains> \ 
          </Where> \ 
         </Query> \ 
        </query> \ 
        <viewFields> \ 
         <ViewFields> \ 
          <FieldRef Name='Name' /> \ 
          <FieldRef Name='Department' /> \ 
          <FieldRef Name='ID' /> \ 
         </ViewFields> \ 
        </viewFields> \ 
        <query> \ 
         <Query /> \ 
        </query> \ 
       </GetListItems> \ 
      </soapenv:Body> \ 
     </soapenv:Envelope>"; 

    $.ajax({ 
     url: "/_vti_bin/Lists.asmx", 
     type: "POST", 
     dataType: "xml", 
     data: soapEnv, 
     complete: processResult, 
     contentType: "text/xml; charset=\"utf-8\"" 
    }); 
}); 
+0

請將此標記爲答案,因爲它可以讓其他人找到解決常見問題的答案。 http://blog.stackoverflow.com/2009/01/accept-your-own-answers/ – 2012-01-12 11:06:18