2011-03-18 105 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