在多地理位置租户中使用用户配置文件

在多地理位置用户中,可以定义用户的首选数据位置、检测用户的配置文件位置和个人网站 URL,以及读取和更新默认及自定义用户配置文件属性。

定义首选数据位置

在多地理位置租户中,SharePoint 用户位于不同的地理位置;例如,有些用户在北美,有些用户在欧洲等。 此模型也适用于用户帐户和个人 (OneDrive for Business) 网站。

理想情况下,用户及其用户帐户和网站位于同一地理位置。 为了确保这一点,请在创建个人网站前,先将用户的首选数据位置设置为用户所在的地理位置。

在下图所示的示例中,用户 vesa@contoso.onmicrosoft.com 居住在欧洲,并且首选数据位置设置为 EUR。 因此:

  • 用户配置文件的默认副本位于欧洲地理位置。
  • 用户的个人网站是在欧洲地理位置中进行创建。

用户 bert@contoso.onmicrosoft.com 的首选数据位置设置为 NAM。 由于他在设置首选数据位置前已将个人网站托管在欧洲,因此他的配置文件仍保留在欧洲地理位置。

显示北美默认地理位置以及欧洲和亚洲附属地理位置的世界地图,还显示了用户、地理位置和设置的首选数据位置

用户的配置文件和个人网站位于同一地理位置。 对于没有个人网站的用户:

  • 如果已设置首选数据位置,配置文件位于此地理位置。
  • 如果尚未设置首选数据位置,配置文件位于默认地理位置。

检测用户的配置文件位置和个人网站 URL

若要以编程方式发现用户的配置文件位置,可以执行下列操作之一:

  • 使用 SharePoint 用户配置文件 API。 建议使用此方法,因为它适用于所有方案。
  • 使用 Microsoft Graph。 此方法适用于还拥有个人网站的用户,但不适用于没有个人网站的用户。

使用 SharePoint 用户配置文件 API 检测配置文件位置

可以通过 REST 或 CSOM 调用 SharePoint 用户配置文件 API,检索给定帐户的个人网站主机 URL。 此 URL 包含用户个人网站的个人网站主机,不论个人网站是否已创建。 下面的示例展示了 REST 调用。

GET https://contoso.sharepoint.com/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)/personalsitehosturl?%40v=%27i%3A0%23.f%7Cmembership%7Cbert%40contoso.onmicrosoft.com%27

如果使用的是 C#,则 CSOM 更易于使用,如下面的示例所示。

public string GetUserPersonalSiteHostUrlCSOM(string userPrincipalName)
{
    string result = null;

    PeopleManager peopleManager = new PeopleManager(this.clientContext);
    var userProperties = peopleManager.GetPropertiesFor($"i:0#.f|membership|{userPrincipalName}");
    this.clientContext.Load(userProperties);
    this.clientContext.ExecuteQuery();
    result = userProperties.PersonalSiteHostUrl;

    return result;
}

拥有个人网站主机 URL 后,可以将它与多地理位置发现信息结合使用,从而获取托管用户配置文件的地理位置的租户管理网站 URL。

若要了解详细信息,请参阅 MultiGeo.UserProfileUpdates 示例。

使用 Microsoft Graph 检测用户的个人网站 URL

若要在多地理位置租户中发现用户的个人网站 URL,可以执行下列 Microsoft Graph 调用:

GET https://graph.microsoft.com/v1.0/users/bert@contoso.onmicrosoft.com?$select=mySite

拥有个人网站主机 URL 后,可以将它与多地理位置发现信息结合使用,从而获取托管用户配置文件的地理位置的租户管理网站 URL。

注意

如果用户没有个人网站,无法使用此方法。 应改用 SharePoint 用户配置文件 API。

若要了解详细信息,请参阅 MultiGeo.UserProfileUpdates 示例。

更新用户配置文件属性

对于企业客户,批量更新用户配置文件属性是常见方案。 要使用的流程因要更新的用户配置文件属性类型而异。

更新默认用户配置文件属性

一些用户配置文件属性默认可用,例如,DepartmentAboutMePreferredDataLocation。 建议使用 Microsoft Graph API 更新这些属性,因为 Microsoft Graph 可以感知地理位置。

以下示例演示如何更新用户 bert@contoso.onmicrosoft.com的 AboutMe 属性。

GET https://graph.microsoft.com/v1.0/users/bert@contoso.onmicrosoft.com?$select=aboutme

有关详细信息,请参阅 MultiGeo.UserProfileUpdates 示例。

更新首选数据位置属性

用户的首选数据位置(preferredDataLocation 属性)指明用户的首选地理位置。 这会影响以下位置:

  • 在其中预配用户的个人网站的地理位置
  • 在其中创建用户的组网站的地理位置

由于首选数据位置是默认属性,因此建议使用 Microsoft Graph API 进行配置,如下面的示例所示。

GET https://graph.microsoft.com/v1.0/users/bert@contoso.onmicrosoft.com?$select=preferredDataLocation

PATCH https://graph.microsoft.com/beta/users/bert@contoso.onmicrosoft.com

JSON payload:
{
    "preferredDataLocation" : "eur"
}

有关详细信息,请参阅 MultiGeo.UserPreferredDataLocation 示例。

添加自定义 SharePoint 用户配置文件属性

可以将公司专属用户配置文件属性添加到 SharePoint 用户配置文件。 对于 SharePoint 多地理位置租户,请注意以下几点:

  • 自定义用户配置文件属性是在地理位置一级创建。 如果在欧洲地理位置创建属性,此属性在其他地理位置中不可用。 根据最佳做法,可以在所有地理位置中创建自定义用户配置文件属性。 这样,可以降低用户跨地理位置移动时丢失数据的风险。
  • 必须在地理位置级别读取和更新自定义用户配置文件属性。 如果在所有地理位置创建了自定义属性,则需要循环访问地理位置并更新所有用户的属性。

注意

若要在人员搜索结果中为用户显示自定义配置文件属性,必须至少在用户的配置文件位置创建并设置该属性。 例如,对于配置文件位于 NAM 中的用户,必须至少在 NAM 地理位置中设置自定义属性,才能显示在人员搜索结果中;对于配置文件位于 EUR 的用户,必须至少以 EUR 为单位设置自定义属性。

// For SharePoint Online custom properties, use the following approach.
string userPrincipalName = "bert@contoso.onmicrosoft.com";
string userAccountName = $"i:0#.f|membership|{userPrincipalName}";
PeopleManager peopleManager = new PeopleManager(tenantAdminContext);
var propsToRetrieve = new string[] { "CostCenter", "CustomProperty" };
var props = peopleManager.GetUserProfilePropertiesFor(new UserProfilePropertiesForUser(tenantAdminContext, userAccountName, propsToRetrieve));
tenantAdminContext.ExecuteQuery();

int i = 0;
foreach (var prop in props)
{
    Console.WriteLine($"Prop: {propsToRetrieve[i]} Value: {prop}");
    i++;
}

// Update user profile properties
peopleManager.SetSingleValueProfileProperty(userAccountName, "CostCenter", "89786879");
tenantAdminContext.ExecuteQuery();

有关详细信息,请参阅 MultiGeo.UserProfileUpdates 示例。

使用批量用户配置文件更新 API

可以使用批量用户配置文件更新 API,批量更新多地理位置租户中的自定义用户配置文件属性。 请注意以下几点:

  • 此 API 适用于地理位置级别,无法感知多地理位置。 例如,如果在欧洲地理位置中使用此 API,只会更新欧洲地理位置中的帐户。
  • 如果使用不同地理位置中的帐户指定导入文件,此 API 只会更新相应地理位置中用户的属性。

另请参阅