在多地理位置租户中使用用户配置文件
在多地理位置用户中,可以定义用户的首选数据位置、检测用户的配置文件位置和个人网站 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 示例。
更新用户配置文件属性
对于企业客户,批量更新用户配置文件属性是常见方案。 要使用的流程因要更新的用户配置文件属性类型而异。
更新默认用户配置文件属性
一些用户配置文件属性默认可用,例如,Department、AboutMe 和 PreferredDataLocation。 建议使用 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 只会更新相应地理位置中用户的属性。