1

当我查询我的 Web 服务以查找用户时,如果该用户不属于该网站的 SharePoint 组,则 ID 为 -1。

但是,用户可以通过组权限访问该站点。因此,我的 Web 服务调用无法将用户添加到列表中的“人员”框中,即使 SharePoint 本身可以添加它。

我的 Web 服务调用如下:

String searchText = "[My User's Login Name, Spelled Exactly as it appears in SharePoint.]";
String maxresults = "100";
String pType = "All";

String body = "<?xml version=\"1.0\"?>"
            + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " 
            + "    xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
            + "    xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
            + "<soap:Body>"
            + "    <SearchPrincipals " 
            + "      xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\">"
            + "      <searchText>" + searchText + "</searchText>"
            + "      <maxResults>" + maxResults + "</maxResults>"
            + "      <principalType>" + pType + "</principalType>"
            + "    </SearchPrincipals>"
            + "  </soap:Body>"
            + "</soap:Envelope>";

我从 Web 服务调用中得到以下响应:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope 
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <soap:Body>
    <SearchPrincipalsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
      <SearchPrincipalsResult>
        <PrincipalInfo>
          <AccountName>[User's Account Name]</AccountName>
          <UserInfoID>-1</UserInfoID> <------------  NOTE THE -1 HERE -----------------
          <DisplayName>[User's full name, exactly as I sent it in]</DisplayName>
          <Email>...</Email>
          <Department>...</Department>
          <Title>...</Title>
          <IsResolved>true</IsResolved>
          <PrincipalType>User</PrincipalType>
        </PrincipalInfo>
      </SearchPrincipalsResult>
    </SearchPrincipalsResponse>
  </soap:Body>
</soap:Envelope>

如果我使用此信息通过 Web 服务将用户添加到“人员”框,则条目变为“-1;#My User Name”,它当然找不到,因此 List.asmx Web 服务返回错误的0x81020054 : The user does not exist or is not unique.

当我直接将用户添加到站点内的组时,他们的 ID 解析得很好,一切正常。我将它们从组中删除,它再次返回到 -1。

关于始终返回有效 ID 的任何想法和/或建议?

4

1 回答 1

1

我可以看到您正在使用 SearchPrincipals 方法。而是尝试使用 ResolvePrincipals 方法。

此处的文档:http: //msdn.microsoft.com/en-us/library/people.people.resolveprincipals (v=office.12).aspx

该方法有一个 bool 参数,您可以在其中指定如果用户不属于该站点,则应该添加它,这样即使用户不属于该站点,您也将始终确保始终获取 ID地点。

PeopleWebService.People pe = new PeopleWebService.People(); //People.asmx web service 
string[] users = new string[] { "youruser" };
PeopleWebService.PrincipalInfo[] pInfo = pe.ResolvePrincipals(users, PeopleWebService.SPPrincipalType.User, true); //third param is true
string userID = pInfo[0].UserInfoID.ToString();
于 2012-11-01T12:06:28.520 回答