Массовое обновление настраиваемых свойств профиля пользователя для SharePoint Online

В рамках версии клиентской объектной модели (CSOM, версия 4622.1208 или более новая) в SharePoint появилась функция массового импорта настраиваемых свойств профиля пользователя. До этого выпуска единственным вариантом было использование операций CSOM профилей пользователей для обновления определенных свойств отдельных профилей пользователей. Однако этот подход неэффективен и требует слишком много времени (особенно при работе с тысячами профилей).

Многим предприятиям необходимо реплицировать настраиваемые атрибуты в службу профилей пользователей SharePoint, поэтому был выпущен более производительный массовый API профилей пользователей — UserProfile.BatchUpdate.API.

Обзор процесса массового обновления профилей пользователей

Процесс массового обновления UPA

В следующем списке описан процесс массового обновления профилей пользователей.

  1. Атрибуты пользователей синхронизируются из корпоративной службы Active Directory в Azure Active Directory (Azure AD). Вы можете выбрать, какие атрибуты реплицируются в локальной среде и в Azure.
  2. Стандартизированный набор атрибутов реплицируется из Azure AD в хранилище профилей пользователей SharePoint Online в Office 365. В отличие от локальной среды SharePoint, эти атрибуты нельзя настраивать.
  3. Настраиваемый инструмент синхронизации может использовать API массового обновления. Этот инструмент загружает JSON-файл в клиент Office 365 и ставит в очередь процесс импорта. Этот инструмент может быть реализован с помощью управляемого кода (.NET) или в виде сценария PowerShell с использованием API CSOM.
  4. Источником данных в JSON-файле является бизнес-система (LOB) или любая внешняя система. Также может использоваться сочетание данных из Active Directory и любой внешней системы. Обратите внимание, что с точки зрения API бизнес-системой может быть даже локальная ферма SharePoint.
  5. Готовое задание таймера на стороне сервера, выполняемое в SharePoint Online, проверяет наличие запросов на импорт в очереди и выполняет фактическую операцию импорта в соответствии с вызовами API и сведениями из предоставленного JSON-файла.
  6. Расширенные сведения о профиле пользователя доступны в профилях пользователей и могут использоваться для любых готовых или настраиваемых функций в SharePoint Online.

Примечание.

Импорт работает только для свойств профиля пользователя, которые не были настроены для редактирования конечными пользователями. Это необходимо для того, чтобы процесс импорта профилей пользователей не переопределял сведения, которые уже были обновлены конечным пользователем. Кроме того, импортировать разрешается только настраиваемые свойства, которые не являются основными свойствами Active Directory. Основные свойства должны быть синхронизированы с Azure AD. Список основных свойств каталога см. в таблице в разделе "Вопросы и вопросы" далее в этой статье.

В кратком видео ниже показано, как использовать API CSOM UserProfile.BatchUpdate.API с помощью управляемого кода (.NET) и из PowerShell.

Процесс импорта свойств профиля пользователя

Ниже приводится полный процесс.

  1. Создайте или синхронизируйте пользователей в клиенте Office 365 или связанном с ним Azure AD.
    • При синхронизации пользователей с Azure AD также происходит синхронизация стандартизированного набора атрибутов со службой профилей пользователей SharePoint Online.
  2. Создайте все необходимые настраиваемые свойства в службе профилей пользователей.
    • Поскольку в службе профилей пользователей нет удаленных API-интерфейсов для создания настраиваемых свойств, этот шаг необходимо выполнить вручную для каждого клиента, в котором требуются настраиваемые свойства профилей пользователей (это необходимо сделать только один раз для каждого клиента).
    • Импортировать можно только свойства профилей пользователей, которые не могут быть изменены конечными пользователями. Попытка импортировать свойство объекта JSON в свойство профиля пользователя, помеченное как "редактируемое конечными пользователями", приводит к исключению при вызове API CSOM.
  3. Создание и загрузка JSON-файла в клиент Office 365.
    • Необходимо отправить файл данных JSON, который содержит сведения, подлежащие обновлению в клиенте Office 365.
    • В случае любого исключения в процессе импорта SharePoint предоставляет дополнительные сведения журнала, сохраненные в новой вложенной папке в той же библиотеке документов, где существовал файл.
    • Очистка файлов журнала и JSON-файлов не происходит автоматически и является обязанностью пользовательского решения, использующего API. В рамках реализации следует учитывать жизненный цикл таких файлов. Эти файлы хранятся в библиотеках документов, поэтому они занимают часть выделенного хранилища для семейства веб-сайтов.
  4. Вызов API массового импорта UPA для постановки задания импорта в очередь.
    • Используйте API CSOM, чтобы поставить в очередь процесс импорта.. Это можно сделать путем выполнения кода CSOM с помощью управляемого кода (.NET) или PowerShell.
    • Для постановки задания в очередь требуются сведения о сопоставлении свойств и расположение файла данных. Этот метод выполняется быстро, поскольку он ставит в очередь фактический процесс импорта, который позже выполняется как часть внутреннего процесса в SharePoint Online.
  5. Проверка состояния задания импорта.
    • Вы также можете использовать удаленные API-интерфейсы для проверки состояния определенного задания импорта или всех последних заданий импорта. Чтобы проверить состояние определенного вызова, необходимо сохранить уникальный идентификатор задания, получаемый в качестве возвращаемого значения, когда задание находится в очереди.

Создание и отправка JSON-файла

В процессе импорта используется JSON-файл, содержащий свойства и их значения. Ниже приведена ожидаемая структура этого файла:

{
   "value": [
     {
       "<IdName>": "<UserIdValue_1>",
       "<AttributeName_1>": "<User1_AttributeValue_1>",
       "<AttributeName_2>": "<User1_AttributeValue_2>",
     },
     {
       "<IdName>": "<UserIdValue_2>",
       "<AttributeName_1>": "<User2_AttributeValue_1>",
       "<AttributeName_2>": "<User2_AttributeValue_2>",
     },
     {
       "<IdName>": "<UserIdValue_n>",
       "<AttributeName_1>": "<Usern_AttributeValue_1>",
       "<AttributeName_2>": "<Usern_AttributeValue_2>",
     }
   ]
}

Пример

Ниже приведен простой пример файла, в котором используется формат из предыдущего примера. В этом примере разрешение удостоверений основано на свойстве IdName, и есть два обновляемых свойства: City и Office. Файл содержит сведения для четырех различных учетных записей в клиенте. Имена свойств, используемые в этом исходном файле, не обязательно совпадают с именами, используемыми в службе профилей пользователей SharePoint Online, так как мы обеспечиваем правильное сопоставление свойств в нашем коде. 

{
  "value": [
    {
      "IdName": "vesaj@contoso.com",
      "City": "Helsinki",
      "Office": "Viper"
    },
    {
      "IdName": "bjansen@contoso.com",
      "City": "Brussels",
      "Office": "Beetle"
    },
    {
      "IdName": "unknowperson@contoso.com",
      "City": "None",
      "Office": ""
    },
    {
      "IdName": "erwin@contoso.com",
      "City": "Stockholm",
      "Office": "Elite"
    }
  ]
}

Ограничения файлов исходных данных

Ниже приведены ограничения для отдельных файлов исходных данных.

  • Максимальный размер файла: 2 ГБ
  • Максимальное число свойств: 500 000
  • Обратная косая черта () в значениях свойств требуется экранирование путем добавления другой обратной косой черты
  • Исходный файл необходимо загрузить в тот же клиент SharePoint Online, где запущен процесс.

Примечание.

Если какие-либо символы не являются частью западноевропейской кодировки (ISO 8859-1), которая используется по умолчанию, в файле обновления должна быть указана метка порядка байтов (BOM). Международные символы могут неправильно интерпретироваться кодировкой по умолчанию, поэтому рекомендуется использовать кодировку UTF-8. Эта кодировка имеет метку порядка байтов "EF BB BF" в шестнадцатеричном формате. Она будет помещена в начало байтового массива файла при создании файлового потока. При использовании текстового редактора перед сохранением выберите тип кодировки UTF-8.

Постановка в очередь процесса импорта

Вы можете поставить API CSOM в очередь для процесса массового импорта путем вызова метода QueueImportProfileProperties, расположенного в объекте Office365Tenant. Это асинхронный вызов, поскольку он не загружает исходные данные и не выполняет импорт. Он просто добавляет рабочий элемент в очередь, чтобы сделать это позже.

Ниже приведена полная подпись метода.

public ClientResult<Guid> QueueImportProfileProperties(
                          ImportProfilePropertiesUserIdType idType,
                          string sourceDataIdProperty,
                          IDictionary<string, string> propertyMap,
                          string sourceUri);

Параметры

  • idType: ImportProfilePropertiesUserIdType

    Тип ИД, который будет использоваться при поиске профиля пользователя. Возможные значения: Email, CloudId и PrincipalName. Обратите внимание, что независимо от типа, пользователь должен уже существовать в службе профилей пользователей, чтобы импорт работал. Мы рекомендуем использовать значение CloudId для обеспечения уникальности.

    Сопоставление свойств между типом ИД и свойством Azure AD:

    Тип ИД массового импорта UPA Атрибут Azure AD
    CloudId ObjectID
    PrincipalName userPrincipalName
    Email mail
  • sourceDataIdProperty: System.String

    Имя свойства ИД в исходных данных. Значение свойства из исходных данных используется для поиска пользователя. Свойство службы профилей пользователей, используемое для поиска, зависит от значения idType.

  • propertyMap: IDictionary<string, string>

    Сопоставление имени исходного свойства с именем свойства службы профилей пользователей. Обратите внимание, что свойства службы профилей пользователей уже должны существовать. Ключ — это имя свойства, используемое в исходном файле; значение — это имя свойства, используемое в службе профилей пользователей.

  • sourceUri: System.String

    URI импортируемого файла исходных данных. Не следует сразу же перемещать или удалять файл, так как он может быть не загружен в течение некоторого времени.

Возвращаемое значение

Идентификатор GUID, определяющий задание импорта, поставленное в очередь.

Пример

Ниже приведен пример запуска процесса с помощью C# с использованием предыдущего образца файла входных данных:

// Create an instance of the Office 365 Tenant object. Loading this object is not technically needed for this operation.
Office365Tenant tenant = new Office365Tenant(ctx);
ctx.Load(tenant);
ctx.ExecuteQuery();

// Type of user identifier ["PrincipalName", "Email", "CloudId"] in the
// user profile service. In this case, we use Email as the identifier at the UPA storage
ImportProfilePropertiesUserIdType userIdType =
      ImportProfilePropertiesUserIdType.Email;

// Name of the user identifier property within the JSON file
var userLookupKey = "IdName";

var propertyMap = new System.Collections.Generic.Dictionary<string, string>();

// The key is the property in the JSON file
// The value is the user profile property Name in the user profile service
// Notice that we have 2 custom properties in UPA called 'City' and 'OfficeCode'
propertyMap.Add("City", "City");
propertyMap.Add("Office", "OfficeCode");

// Returns a GUID that can be used to check the status of the execution and the end results
var workItemId = tenant.QueueImportProfileProperties(
      userIdType, userLookupKey, propertyMap, fileUrl
      );

ctx.ExecuteQuery();

Проверка состояния задания импорта

Состояние заданий импорта службы профилей пользователей можно проверить с помощью API CSOM. В объекте клиента это можно сделать двумя способами:

  • Чтобы проверить состояние отдельного задания импорта, используйте метод GetImportProfilePropertyJob.
  • Чтобы проверить состояние всех заданий импорта, используйте метод GetImportProfilePropertyJobs.

Отдельное задание импорта

Состояние отдельного задания импорта можно проверить с помощью метода GetImportProfilePropertyJob, расположенного в объекте Office365Tenant. В качестве параметра для этого метода должен быть указан уникальный идентификатор конкретного задания импорта.

Ниже приведена полная подпись метода.

public ImportProfilePropertiesJobInfo GetImportProfilePropertyJob(Guid jobId);

Параметры

  • jobID: System.Guid

    ИД задания, для которого нужно получить статус высокого уровня.

Возвращаемое значение

Объект ImportProfilePropertiesJobStatus с информацией высокого уровня о состоянии указанного задания.

Пример

Ниже приведен пример, в котором C# используется для получения состояния конкретного задания импорта с помощью сохраненного идентификатора:

// Check the status of a specific request based on the job id received when we queued the job
Office365Tenant tenant = new Office365Tenant(ctx);
var job = tenant.GetImportProfilePropertyJob(workItemId);
ctx.Load(job);
ctx.ExecuteQuery();

Все задания импорта

Состояние всех заданий импорта можно проверить с помощью метода GetImportProfilePropertyJobs, расположенного в объекте Office365Tenant.

Ниже приведена полная подпись метода.

public ImportProfilePropertiesJobStatusCollection GetImportProfilePropertyJobs(); 

Параметры

Объект ImportProfilePropertiesJobInfo, возвращаемый с информацией о состоянии импорта, имеет следующие свойства. 

  • JobId: System.Guid

    ИД задания импорта.

  • State: ImportProfilePropertiesJobState

    Перечисление со следующими значениями:

    • Неизвестно: не удается определить состояние задания.
    • Отправлено: задание отправлено в систему.
    • Обработка: задание обрабатывается.
    • В очереди: задание прошло проверку и поставлено в очередь для импорта в UPA.
    • Выполнено: задание выполнено без ошибок.
    • Ошибка: задание завершено с ошибками.
  • SourceUri: System.String

    URI файла источника данных.

  • Error: ImportProfilePropertiesJobError

    Перечисление, представляющее возможную ошибку:

    • NoError — ошибки не найдены.
    • InternalError — ошибка вызвана сбоем в службе.
    • DataFileNotExist — не удалось найти файл источника данных.
    • DataFileNotInTenant — файл источника данных не принадлежит тому же клиенту.
    • DataFileTooBig — размер файла данных слишком велик.
    • InvalidDataFile — файл источника данных не прошел проверку (в файле журнала могут быть дополнительные сведения).
    • ImportCompleteWithError — данные были импортированы, но произошла ошибка.
  • ErrorMessage: System.String

    Сообщение об ошибке.

  • LogFileUri: System.String

    URI папки, в которую записаны журналы.

Возвращаемое значение

Объект ImportProfilePropertiesJobStatusCollection, который представляет собой коллекцию объектов ImportProfilePropertiesJobStatus с информацией высокого уровня о состоянии каждого задания.

Пример

Ниже приведен пример, в котором C# используется для получения состояния всех заданий импорта, сохраненных в данный момент в клиенте. Это могут быть уже обработанные задания или задания в очереди:

// Load all import jobs – old and queued ones
Office365Tenant tenant = new Office365Tenant(ctx);
var jobs = tenant.GetImportProfilePropertyJobs();
ctx.Load(jobs);
ctx.ExecuteQuery();
foreach (var item in jobs)
{
   // Check whatever properties needed
   var state = item.State;
}

Вызов API импорта из PowerShell

Вы можете воспользоваться преимуществами API массового импорта службы профилей пользователей с помощью PowerShell. Это означает, что код CSOM используется непосредственно в сценарии PowerShell с помощью необходимых параметров. Для этого необходимо, чтобы обновленный распространяемый пакет CSOM был установлен на компьютере, на котором выполняется сценарий.

При использовании PowerShell вам не нужно компилировать код в Visual Studio, что может быть более подходящей моделью для некоторых клиентов.

В качестве альтернативы вы можете использовать PnP PowerShell, который позволит вам использовать API массового импорта службы профилей пользователей без необходимости установки каких-либо дополнительных библиотек в вашей системе.

Пример сценария PowerShell с использованием библиотек CSOM

Ниже приводится пример сценария PowerShell, который выполняет те же операции, что и предыдущий код:

# Get needed information from the end user
$adminUrl = Read-Host -Prompt 'Enter the admin URL of your tenant'
$userName = Read-Host -Prompt 'Enter your user name'
$pwd = Read-Host -Prompt 'Enter your password' -AsSecureString
$importFileUrl = Read-Host -Prompt 'Enter the URL to the file located in your tenant'

# Get instances to the Office 365 tenant using CSOM
$uri = New-Object System.Uri -ArgumentList $adminUrl
$context = New-Object Microsoft.SharePoint.Client.ClientContext($uri)

$context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($userName, $pwd)
$o365 = New-Object Microsoft.Online.SharePoint.TenantManagement.Office365Tenant($context)
$context.Load($o365)

# Type of user identifier ["Email", "CloudId", "PrincipalName"] in the user profile service
$userIdType=[Microsoft.Online.SharePoint.TenantManagement.ImportProfilePropertiesUserIdType]::Email

# Name of user identifier property in the JSON
$userLookupKey="idName"

# Create property mapping between the source file property name and the Office 365 property name
# Notice that we have here 2 custom properties in UPA called 'City' and 'OfficeCode'
$propertyMap = New-Object -type 'System.Collections.Generic.Dictionary[String,String]'
$propertyMap.Add("City", "City")
$propertyMap.Add("Office", "OfficeCode")

# Call to queue UPA property import
$workItemId = $o365.QueueImportProfileProperties($userIdType, $userLookupKey, $propertyMap, $importFileUrl);

# Execute the CSOM command for queuing the import job
$context.ExecuteQuery();

# Output the unique identifier of the job
Write-Host "Import job created with the following identifier:" $workItemId.Value

Обновление профиля SharePoint с помощью PnP PowerShell

Чтобы синхронизировать свойства профилей пользователей из Azure Active Directory с профилями SharePoin Online, используйте командлет PnP PowerShellSync-PnPSharePointUserProfilesFromAzureActiveDirectory.

Альтернативный вариант - синхронизировать свойства профилей пользователей из другого источника. Для этого используйте New-PnPUPABulkImportJob.

Чтобы проверить состояние обработки задания массового импорта, воспользуйтесь командлетом Get-PnPUPABulkImportStatus.

Примечание.

PnP PowerShell — это решение с открытым исходным кодом, поддержка которого предоставляется активным сообществом. Для инструментов с открытым исходным кодом не существует соглашения об уровне обслуживания в отношении поддержки корпорацией Майкрософт.

Обработка исключений

При использовании этого API существует два уровня проверки. При добавлении в очередь процесса импорта с помощью CSOM существует начальный уровень проверки предоставленных значений. Он включает в себя подтверждение того, что предоставленные свойства сопоставления существуют в службе профилей пользователей и что эти свойства не могут редактироваться конечным пользователем. Когда вызывается API очереди, применяется только начальный уровень проверки, а окончательная проверка предоставленных сведений происходит при фактическом выполнении задания импорта.

Если во время фактического выполнения задания импорта имеются исключения, в той же библиотеке документов, где был расположен файл импорта, создается файл журнала с дополнительными сведениями. Файлы журнала для определенных заданий импорта сохраняются во вложенных папках, названных с использованием уникального идентификатора конкретного задания импорта.

Ниже приведен пример результатов запуска задания импорта. На следующем изображении можно увидеть две вложенные папки для двух разных выполнений, созданные в библиотеке документов, где хранится файл импорта.

Вложенные папки исключений задания

Фактический файл журнала сохраняется во вложенной папке, и его можно скачать из Office 365 для подробного анализа.

Файл журнала исключений задания

Распространенные исключения

В следующей таблице приведены типичные исключения, которые могут возникнуть при запуске массового API службы профилей пользователей.

Пример исключения Сведения
Имена свойства [AboutMe] могут редактироваться пользователем. Это будет выдано API CSOM при вызове метода ExecuteQuery при отправке задания в клиент. API проверяет, что все свойства, сопоставленные в настоящее время, НЕ доступны для редактирования пользователем. Исключение указывает на свойство, которое нельзя использовать.

В этом примере мы попытались сопоставить свойство JSON со свойством AboutMe в свойствах службы профилей пользователей, но это запрещено, так как AboutMe является свойством, которое пользователь может редактировать.
InvalidProperty — vesaj@contoso.com свойство AboutMe не сопоставляется ни с каким свойством в приложении профиля пользователя. Файл данных JSON содержит свойство, которое не сопоставлено со свойством службы профилей пользователей в SharePoint Online. Это означает, что файл исходных данных содержит свойства, для которых не предоставлено сопоставление в параметре propertyMap. Необходимо иметь определение сопоставления для каждого свойства в объекте данных JSON.
MissingIdentity — отсутствует удостоверение для объекта пользователя Не удалось найти свойство удостоверения в объекте пользователя. Наиболее вероятная причина заключается в том, что атрибут sourceDataIdProperty неправильно установлен для метода QueueImportProfileProperties. Убедитесь, что в исходном файле JSON присутствует правильное свойство и что код или сценарий соответствующим образом назначает этот атрибут.
Удостоверение пользователя IdentityNotResolvable unknown@contoso.com не может быть разрешено Файл данных содержал удостоверение, которое не удалось разрешить или оно отсутствовало в службе профилей пользователей. В этом случае профиль пользователя с адресом unknown@contoso.com электронной почты не может находиться в службе профилей пользователей.
DataFileNotJson — JsonToken EndObject недопустим для закрытия массива JsonType. Путь "value", строка 8, позиция 10. Формат файла импорта не является допустимым форматом JSON и не соответствует ожидаемому формату. 

Вопросы и ответы

Можно ли выполнить код с помощью разрешений только для приложений или надстройки?

Да, фактический импорт файла не происходит синхронно с удостоверением вызывающего, поэтому это работает с контекстом только для приложений без каких-либо проблем.

Для использования контекста только для приложений с моделью надстройки SharePoint необходимо зарегистрировать ИД клиента и секрет, чтобы иметь возможность выполнять API согласно этому руководству. Кроме того, при регистрации надстройки SharePoint необходимо предоставить разрешения с помощью следующего фрагмента кода XML:

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
  <AppPermissionRequest Scope="http://sharepoint/social/tenant" Right="FullControl" />
</AppPermissionRequests>

Важно!

Использование Azure ACS (служб контроль доступа) для SharePoint Online прекращено с 27 ноября 2023 г. См. полное объявление о выходе из эксплуатации, чтобы узнать больше. Использование Azure ACS вне контекста SharePoint уже прекращено 7 ноября 2018 г. и сейчас заканчивается.

Прекращение использования означает, что эта функция не получит новых инвестиций, но она по-прежнему поддерживается. Окончание срока службы означает, что эта функция будет прекращена и больше не доступна для использования.

Чтобы использовать контекст только для приложений с приложением, зарегистрированным в Azure Active Directory, необходимо зарегистрировать приложение, предоставить сертификат X.509 для проверки подлинности, который является обязательным требованием для проверки подлинности только для приложений SharePoint Online в Azure Active Directory, а также предоставить приложению следующие области разрешений SharePoint Online: Sites.FullControl.All и User.ReadWrite.All .

Этот API обновляет свойства в службе профилей пользователей, но как создать эти свойства в клиенте?

Не существует удаленного API для создания настраиваемых свойств профиля пользователя программным путем, поэтому это ручная операция, которую необходимо выполнить один раз для каждого клиента. Инструкции по созданию настраиваемых свойств см. в статье Добавление и изменение свойств профиля пользователя в SharePoint Online.

Доступна ли эта возможность в локальной среде SharePoint?

К сожалению, в настоящее время эта возможность существует только в SharePoint Online. В локальной среде SharePoint такая возможность была бы полезной, но не критически важной, так как в локальном приложении службы профилей пользователей можно изменять сопоставление атрибутов. Вы также можете воспользоваться импортом атрибутов профилей пользователей с помощью Business Connectivity Services (BCS) в SharePoint 2013. Однако эта возможность не доступна в SharePoint 2016. Это означает, что для SharePoint 2016 в настоящее время единственным вариантом является реализация настроек, которые будут использовать веб-службы профилей пользователей.

Можно ли использовать этот API для синхронизации значений свойств профилей пользователей из локальной фермы SharePoint с SharePoint Online?

Да, локальную среду SharePoint можно использовать так же, как и любую другую исходную систему. Необходимо экспортировать значения профилей пользователей из локальной среды SharePoint в файл формата JSON, после чего процесс будет точно таким же, как импорт значений из любой другой системы.

Можно ли импортировать свойства, состоящие из строк с несколькими значениями?

Нет, в настоящее время такая возможность не поддерживается данным API.

Какие разрешения требуются для выполнения этого API?

У вас должны быть разрешения глобального администратора, если вы не используете контекст проверки подлинности только для приложений. Роли администратора SharePoint недостаточно.

Можно ли импортировать свойства на основе таксономии?

Нет, в настоящее время такая возможность не поддерживается данным API.

Что произойдет, если в коде определено сопоставление, которое не используется, или если в JSON-файле присутствуют свойства, которые не сопоставлены?

Если в коде или сценарии определено сопоставление, которое не используется, или файл данных не содержит свойств для этого сопоставления, выполнение продолжается без каких-либо исключений, а импорт происходит на основе сопоставленных свойств. Однако если в JSON-файле присутствует свойство, которое не сопоставлено, процесс импорта прерывается, а сведения об исключении записываются в файл журнала для конкретного выполнения задания.

Что делать, если потребуется обновить настраиваемые свойства, которые выходят за рамки ограничений по размеру для этого массового API (то есть размер файла больше 2 ГБ или количество свойств больше 500 000)?

Необходимо соответствующим образом разбить задания на отдельные пакеты, последовательно запуская несколько заданий (то есть за раз завершая одно задание с максимальным ограничением для этого API). Следует ожидать, что импорт с высокой пропускной способностью займет много времени. Кроме того, следует оптимизировать задания и импортировать только изменения в настраиваемых свойствах профиля, вместо того чтобы импортировать полный набор значений во всех заданиях.

Какие атрибуты Azure AD по умолчанию синхронизируются с профилями пользователей SharePoint Online?

Официальный список синхронизируемых атрибутов и их сопоставление между Azure AD и службой профилей пользователей SharePoint Online см. в следующей таблице.

Атрибут Azure Directory Свойство профиля SharePoint Online
ObjectSid SPS-SavedSID
msonline-UserPrincipalName UserName
msonline-UserPrincipalName AccountName
msonline-UserPrincipalName SPS-ClaimID
msonline-UserPrincipalName SPS-UserPrincipalName
GivenName FirstName
sn LastName
Manager Manager
DisplayName PreferredName
telephoneNumber WorkPhone
proxyAddresses WorkEmail
proxyAddresses SPS-SIPAddress
PhysicalDeliveryOfficeName Кабинет
Должность Title
Title SPS-JobTitle
Department Department
Department SPS-Department
ObjectGuid ADGuid
WWWHomePage PublicSiteRedirect
DistinguishedName SPS-DistinguishedName
msOnline-ObjectId msOnline-ObjectId
PreferredLanguage SPS-MUILanguages
msExchHideFromAddressList SPS-HideFromAddressLists
msExchRecipientTypeDetails SPS-RecipientTypeDetails
msonline-groupType IsUnifiedGroup
msOnline-IsPublic IsPublic
msOnline-ObjectId msOnline-ObjectId
msOnline-UserType SPS-UserType
GroupType GroupType
SPO-IsSharePointOnlineObject SPO-IsSPO

См. также