Actualización masiva de las propiedades de perfil de usuario personalizadas para SharePoint Online

Como parte de la versión (4622.1208 o posterior) del modelo de objetos del lado cliente (CSOM), SharePoint tiene la capacidad de importar de forma masiva propiedades de perfil de usuario personalizadas. Antes de esta versión, la única opción era aprovechar las operaciones de CSOM de perfil de usuario para actualizar propiedades específicas para perfiles de usuario individuales. Sin embargo, este enfoque es ineficaz y consume demasiado tiempo (especialmente cuando se trabaja con miles de perfiles).

Muchas empresas necesitan replicar atributos personalizados en el servicio de perfiles de usuario de SharePoint, por lo que se ha publicado una API masiva de perfiles de usuario de mayor rendimiento, UserProfile.BatchUpdate.API.

Información general sobre el proceso de actualización masiva de perfiles de usuario

Flujo de actualización de UPA masiva

En la lista siguiente se describe el flujo del proceso de actualización masiva de perfiles de usuario:

  1. Los atributos de usuario se sincronizan desde el Active Directory corporativo a Azure Active Directory (Azure AD). Puede seleccionar qué atributos se replican en el entorno local y en Azure.
  2. Un conjunto estandarizado de atributos se replica desde Azure AD al Almacén de perfiles de usuario de SharePoint Online en Office 365. A diferencia de SharePoint local, estos atributos no se pueden personalizar.
  3. Una herramienta de sincronización personalizada usa las API de actualización masiva. Esta herramienta carga un archivo JSON en el espacio empresarial de Office 365 y pone en cola el proceso de importación. Esta herramienta se puede implementar mediante código administrado (.NET) o como un script de PowerShell mediante las API de CSOM.
  4. Un sistema de línea de negocio (LOB), o cualquier sistema externo, es el origen de la información en el archivo JSON. También podría ser una combinación de datos de Active Directory y cualquier sistema externo. Tenga en cuenta que, desde la perspectiva de la API, el sistema LOB podría incluso ser una granja de SharePoint local.
  5. Un trabajo de temporizador predefinido del lado servidor que se ejecuta en SharePoint Online comprueba las solicitudes de importación en cola y realiza la operación de importación real en función de las llamadas de la API y la información del archivo JSON proporcionado.
  6. La información de perfil de usuario extendida está disponible en los perfiles de usuario y se puede usar para cualquier funcionalidad personalizada o predefinida en SharePoint Online.

Nota:

La importación solo funciona para las propiedades de perfil de usuario que no se han establecido para que los usuarios finales puedan editarlas. Esto es para evitar que el proceso de importación de perfiles de usuario sobrescriba información que un usuario final ya haya actualizado. Además, la importación solo permite propiedades personalizadas que no son propiedades principales de Active Directory. Estas deben sincronizarse con Azure AD. Para obtener la lista de estas propiedades principales del directorio, consulte la tabla que aparece en la sección de Preguntas más frecuentes más adelante en este artículo.

A continuación se muestra un breve vídeo en el que se muestra cómo usar la API de CSOM UserProfile.BatchUpdate.API desde código administrado (.NET) y desde PowerShell.

Proceso de importación de propiedades de perfil de usuario

Este es el proceso completo:

  1. Cree o sincronice usuarios en un espacio empresarial de Office 365 o en el Azure AD asociado a él.
    • Cuando los usuarios se sincronizan con Azure AD, también sincroniza un conjunto estandarizado de atributos con el servicio de perfiles de usuario de SharePoint Online.
  2. Cree las propiedades personalizadas necesarias en el servicio de perfiles de usuario.
    • Dado que no hay ninguna API remota para crear propiedades personalizadas en el servicio de perfiles de usuario, este paso debe realizarse manualmente para cada uno de los espacios empresariales donde se necesitan propiedades de perfil de usuario personalizadas (esto solo debe realizarse una vez por espacio empresarial).
    • Solo se pueden importar las propiedades de perfil de usuario que no "pueden ser editadas" por los usuarios finales. Al intentar importar una propiedad de objeto JSON a una propiedad de perfil de usuario marcada como "editable por los usuarios finales", se produce una excepción cuando se llama a la API de CSOM.
  3. Cree y cargue el archivo JSON en el espacio empresarial de Office 365.
    • Debe cargar el archivo de datos JSON que contiene la información que se va a actualizar al espacio empresarial de Office 365.
    • En el caso de que haya alguna excepción durante el proceso de importación, SharePoint proporciona información de registro adicional guardada en la misma biblioteca de documentos en que existía el archivo dentro de una nueva subcarpeta.
    • La limpieza de los archivos de registro y JSON no se realiza automáticamente y es responsabilidad de la solución personalizada que usa la API. Debería tener en cuenta el ciclo de vida de estos archivos dentro de la implementación. Estos archivos se almacenan en bibliotecas de documentos, por lo que consumen una parte del almacenamiento asignado para la colección de sitios.
  4. Llame a la API de importación de UPA masiva para poner en cola el trabajo de importación.
    • Use la API de CSOM para poner en cola el proceso de importación. Esto se puede lograr mediante la ejecución de código CSOM con código administrado (.NET) o PowerShell.
    • El método para poner en cola el trabajo requiere información de asignación de propiedades y la ubicación del archivo de datos. Este método se ejecuta rápidamente porque pone en cola el proceso de importación real, que posteriormente se ejecuta como parte de un proceso de back-end en SharePoint Online.
  5. Compruebe el estado del trabajo de importación.
    • También puede usar API remotas para comprobar el estado de un trabajo de importación específico o de todos los trabajos de importación recientes. Para poder comprobar el estado de una llamada específica, debería almacenar el identificador de trabajo único recibido como un valor devuelto cuando el trabajo está en cola.

Creación y carga de un archivo JSON

El proceso de importación usa un archivo JSON que contiene las propiedades y sus valores. A continuación se muestra la estructura esperada de ese archivo:

{
   "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>",
     }
   ]
}

Ejemplo

A continuación se muestra un archivo de ejemplo sencillo que usa el formato del ejemplo anterior. En este ejemplo, la resolución de identidades se basa en la propiedad IdName y hay dos propiedades que se actualizan denominadas City y Office. El archivo contiene información para cuatro cuentas diferentes dentro del espacio empresarial. Los nombres de propiedad usados en este archivo de código fuente no son necesariamente los mismos que los nombres usados en el servicio de perfiles de usuario de SharePoint Online, ya que proporcionamos una asignación de propiedad correcta en nuestro código. 

{
  "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"
    }
  ]
}

Restricciones del archivo de datos de origen

A continuación se indican restricciones en los archivos de datos de origen individuales:

  • Tamaño máximo de archivo: 2 GB
  • Número máximo de propiedades: 500 000
  • Las barras diagonales inversas () de los valores de propiedad deben escapar dependiendo de otra barra diagonal inversa
  • El archivo de origen debe cargarse en el mismo espacio empresarial de SharePoint Online donde se inicia el proceso.

Nota:

El archivo de actualización debe tener la marca de orden de bytes (BOM) especificada si algún carácter no forma parte de la codificación de Europa Occidental (iso-8859-1), que es la predeterminada. Es posible que los caracteres internacionales no se interpreten correctamente con la codificación predeterminada, por lo que se recomienda usar la codificación UTF-8. Esta codificación tiene una BOM de "EF BB BF" en hexadecimal. Esto se colocaría al principio de la matriz de bytes del archivo al crear la secuencia de archivos. Si usa un editor de texto, seleccione el tipo de codificación como UTF-8 antes de guardar.

Poner en cola el proceso de importación

Puede poner en cola la API de CSOM para el proceso de importación masiva llamando al método QueueImportProfileProperties ubicado en el objeto Office365Tenant. Se trata de una llamada asincrónica, que no descarga los datos de origen ni realiza la importación, simplemente agrega un elemento de trabajo a la cola para hacerlo más adelante.

A continuación se muestra la firma completa del método:

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

Parámetros

  • idType: ImportProfilePropertiesUserIdType

    Tipo de identificador que se va a usar al buscar el perfil de usuario. Los valores posibles son Email, CloudId y PrincipalName. Tenga en cuenta que, independientemente del tipo, el usuario ya debe existir en el servicio de perfiles de usuario para que la importación funcione. Se recomienda usar el valor de CloudId para garantizar la singularidad.

    Asignación de propiedades entre el tipo de identificador y la propiedad de Azure AD:

    Tipo de identificador de importación masiva de UPA Atributo de Azure AD
    CloudId ObjectID
    PrincipalName userPrincipalName
    Email mail
  • sourceDataIdProperty: System.String

    Nombre de la propiedad id. en los datos de origen. El valor de la propiedad de los datos de origen se usa para buscar el usuario. La propiedad de servicio de perfiles de usuario usada para la búsqueda depende del valor de idType.

  • propertyMap: IDictionary<string, string>

    Asignación del nombre de la propiedad de origen al nombre de propiedad del servicio de perfiles de usuario. Tenga en cuenta que las propiedades del servicio de perfiles de usuario ya deben existir. La clave es el nombre de propiedad usado en el archivo de código fuente; el valor es el nombre de propiedad usado en el servicio de perfiles de usuario.

  • sourceUri: System.String

    URI del archivo de datos de origen que se va a importar. El archivo no debería moverse ni eliminarse inmediatamente, ya que es posible que no se descargue durante algún tiempo.

Valor devuelto

GUID que identifica el trabajo de importación que se ha puesto en cola.

Ejemplo

A continuación se muestra un ejemplo que usa C# para iniciar el proceso mediante el archivo de entrada de ejemplo anterior:

// 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();

Comprobación del estado de un trabajo de importación

Puede comprobar el estado de los trabajos de importación del servicio de perfiles de usuario mediante las API de CSOM. Hay dos métodos para ello en el objeto Tenant:

  • Para comprobar el estado de un trabajo de importación individual, use el método GetImportProfilePropertyJob.
  • Para comprobar el estado de todos los trabajos de importación, use el método GetImportProfilePropertyJobs.

Trabajo de importación individual

Puede comprobar el estado de un trabajo de importación individual mediante el método GetImportProfilePropertyJob ubicado en el objeto Office365Tenant. Debe tener el identificador único de un trabajo de importación específico proporcionado como parámetro para este método.

A continuación se muestra la firma completa del método:

public ImportProfilePropertiesJobInfo GetImportProfilePropertyJob(Guid jobId);

Parámetros

  • jobID: System.Guid

    Identificador del trabajo para el que se va a obtener el estado de alto nivel.

Valor devuelto

Objeto ImportProfilePropertiesJobStatus con información de estado de alto nivel sobre el trabajo especificado.

Ejemplo

A continuación se muestra un ejemplo que usa C# para recuperar el estado de un trabajo de importación específico mediante un identificador almacenado:

// 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();

Todos los trabajos de importación

Puede comprobar el estado de todos los trabajos de importación mediante el método GetImportProfilePropertyJobs ubicado en el objeto Office365Tenant.

A continuación se muestra la firma completa del método:

public ImportProfilePropertiesJobStatusCollection GetImportProfilePropertyJobs(); 

Parámetros

Un objeto ImportProfilePropertiesJobInfo devuelto con la información de estado de importación tiene las propiedades siguientes. 

  • JobId: System.Guid

    Identificador del trabajo de importación.

  • State: ImportProfilePropertiesJobState

    Enumeración con los siguientes valores:

    • Unknown: no se puede determinar el estado del trabajo.
    • Submitted: el trabajo se ha enviado al sistema.
    • Processing: el trabajo se está procesando.
    • Queued: el trabajo ha superado la validación y está en cola para su importación a UPA.
    • Succeeded: el trabajo se ha completado sin errores.
    • Error: el trabajo se ha completado con errores.
  • SourceUri: System.String

    URI del archivo de origen de datos.

  • Error: ImportProfilePropertiesJobError

    Enumeración que representa el posible error:

    • NoError: no se encontró ningún error.
    • InternalError: el error se debe a un fallo en el servicio.
    • DataFileNotExist: no se encontró el archivo de origen de datos.
    • DataFileNotInTenant: el archivo de origen de datos no pertenece al mismo espacio empresarial.
    • DataFileTooBig: el tamaño del archivo de datos era demasiado grande.
    • InvalidDataFile: el archivo de origen de datos no superó la validación (puede haber detalles adicionales en el archivo de registro).
    • ImportCompleteWithError: se han importado los datos, pero se ha detectado un error.
  • ErrorMessage: System.String

    Mensaje de error.

  • LogFileUri: System.String

    URI de la carpeta donde se han escrito los registros.

Valor devuelto

Objeto ImportProfilePropertiesJobStatusCollection, que es una colección de objetos ImportProfilePropertiesJobStatus con información de estado de alto nivel sobre cada uno de los trabajos.

Ejemplo

A continuación se muestra un ejemplo que usa C# para obtener el estado de todos los trabajos de importación guardados actualmente en el espacio empresarial. Podrían ser trabajos que ya están procesados o puestos en cola:

// 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;
}

Llamada a la API de importación desde PowerShell

Puede aprovechar las ventajas de la API de importación masiva del servicio de perfiles de usuario mediante PowerShell. Esto significa que usa el código CSOM directamente en un script de PowerShell mediante los parámetros necesarios. Esto requiere que el paquete redistribuible de CSOM actualizado se haya instalado en el equipo donde se ejecuta el script.

Con PowerShell, no es necesario compilar el código en Visual Studio, que puede ser un modelo más adecuado para algunos clientes.

Como alternativa, puede usar PowerShell de PnP, que le permitirá usar la API de importación masiva del servicio de perfiles de usuario sin necesidad de tener ninguna biblioteca adicional instalada en el sistema.

Script de PowerShell de ejemplo con bibliotecas de CSOM

A continuación se muestra un script de PowerShell de ejemplo que realiza las mismas operaciones que el código anterior:

# 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

Actualización del perfil de usuario de SharePoint Online mediante PnP PowerShell

Para sincronizar las propiedades de perfil de usuario de Azure Active Directory con los perfiles de usuario de SharePoint Online, puede aprovechar el cmdlet PnP PowerShellSync-PnPSharePointUserProfilesFromAzureActiveDirectory.

Como alternativa, si desea sincronizar las propiedades del perfil de usuario desde otro origen, puede usar New-PnPUPABulkImportJob.

Para comprobar el estado de procesamiento de un trabajo de importación masiva, puede usar Get-PnPUPABulkImportStatus.

Nota:

PnP PowerShell es una solución de código abierto con una comunidad activa que ofrece su soporte. No hay ningún contrato de nivel de servicio para el soporte de la herramienta de código abierto de Microsoft.

Controlar excepciones

Hay dos niveles de validación cuando se usa esta API. Al poner en cola el proceso de importación con CSOM, hay un nivel inicial de validación de los valores proporcionados. Esto incluye la confirmación de que las propiedades de asignación proporcionadas existen en el servicio de perfiles de usuario y que el usuario final no puede editar estas propiedades. Cuando se llama a la API de cola, solo se aplica un nivel inicial de validación y se realiza la validación final de la información proporcionada cuando se ejecuta realmente el trabajo de importación.

Si hay alguna excepción durante la ejecución real del trabajo de importación, se genera un archivo de registro con detalles adicionales en la misma biblioteca de documentos donde se encontró el archivo de importación. Los archivos de registro de trabajos de importación específicos se guardan en subcarpetas denominadas mediante el identificador único del trabajo de importación específico.

A continuación se muestra un ejemplo de los resultados de la ejecución de un trabajo de importación. En la imagen siguiente, puede ver dos subcarpetas para dos ejecuciones diferentes creadas en la biblioteca de documentos donde se almacena el archivo de importación.

Subcarpetas de excepción de trabajo

El archivo de registro real se guarda en la subcarpeta y puede descargarlo desde Office 365 para un análisis detallado.

Archivo de registro de excepciones de trabajo

Excepciones comunes

La tabla siguiente contiene excepciones típicas que puede encontrar al empezar a usar la API masiva del servicio de perfiles de usuario.

Excepción de ejemplo Detalles
El usuario puede editar los nombres de propiedad [AboutMe]. Esto lo produciría la API de CSOM al llamar al método ExecuteQuery al enviar el trabajo al espacio empresarial. La API valida que todas las propiedades que se están asignando actualmente NO sean editables por el usuario. La excepción señala la propiedad que no se puede usar.

En este ejemplo, hemos intentado asignar una propiedad JSON a la propiedad AboutMe en las propiedades del servicio de perfiles de usuario, pero esto no se permite porque AboutMe es una propiedad editable por el usuario.
InvalidProperty: vesaj@contoso.com la propiedad "AboutMe" no está asignada a ninguna propiedad de la aplicación de perfil de usuario. El archivo de datos JSON contenía una propiedad que no se ha asignado a la propiedad de servicio de perfiles de usuario en SharePoint Online. Esto significa que el archivo de datos de origen contiene propiedades para las que no se ha proporcionado una asignación en el parámetro propertyMap. Debe tener una definición de asignación para cada una de las propiedades del objeto de datos JSON.
MissingIdentity: falta la identidad para el objeto de usuario No se encontró la propiedad de identidad en el objeto de usuario. La causa más probable es que el atributo sourceDataIdProperty esté establecido de forma incorrecta para el método QueueImportProfileProperties. Asegúrese de que tiene la propiedad correcta en el archivo de código fuente JSON y de que el código o script asigna este atributo en consecuencia.
IdentityNotResolvable unknown@contoso.com Identidad de usuario no se puede resolver El archivo de datos contenía una identidad, que no se pudo resolver o no estaba presente en el servicio de perfiles de usuario. En este caso, el perfil de usuario con correo electrónico de unknown@contoso.com no se pudo encontrar en el servicio de perfil de usuario.
DataFileNotJson: JsonToken EndObject no es válido para cerrar JsonType Array. Ruta de acceso 'value', línea 8, posición 10. El formato de archivo de importación no es un JSON válido y no coincide con el formato esperado. 

Preguntas más frecuentes

¿Puedo ejecutar el código con permisos de solo aplicación o solo complemento?

Sí, la importación real del archivo no se produce de forma sincrónica con la identidad del autor de la llamada, por lo que funciona con un contexto de solo aplicación sin ningún problema.

Para usar un contexto de solo aplicación con el modelo de complementos de SharePoint, debe registrar un secreto y un Id. de cliente para poder ejecutar las API siguiendo estas instrucciones. Además, al registrar el complemento de SharePoint, tendrá que conceder los permisos mediante el siguiente fragmento XML:

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

Importante

Con Azure ACS (Access Control Services) para SharePoint Online se ha retirado a partir del 27 de noviembre de 2023, consulte el anuncio de retirada completa para obtener más información. El uso de Azure ACS fuera del contexto de SharePoint ya se retiró el 7 de noviembre de 2018 y ya ha finalizado su vida útil.

La retirada significa que la característica no obtendrá inversiones nuevas, pero todavía se admite. El final del ciclo de vida significa que la característica se interrumpirá y ya no estará disponible para su uso.

Para usar solo aplicación con una aplicación registrada en Azure Active Directory, debe registrar la aplicación, proporcionar un certificado X.509 para la autenticación, que es un requisito para la autenticación de solo aplicación de SharePoint Online en Azure Active Directory, y conceder los siguientes ámbitos de permisos de SharePoint Online para la aplicación: Sites.FullControl.All and User.ReadWrite.All.

Esta API está actualizando las propiedades en el servicio de perfiles de usuario, pero ¿cómo puedo crear esas propiedades en el espacio empresarial?

No hay ninguna API remota para crear propiedades de perfil de usuario personalizadas mediante programación, por lo que se trata de una operación manual que debe completarse una vez por cada espacio empresarial. Para obtener instrucciones sobre cómo crear estas propiedades personalizadas, vea Agregar y editar propiedades de perfil de usuario en SharePoint Online.

¿Esta funcionalidad está disponible en SharePoint local?

Desafortunadamente, actualmente esta funcionalidad es solo para SharePoint Online. En SharePoint local, esta funcionalidad sería útil, pero no tan crítica, ya que puede modificar la asignación de atributos en la aplicación de servicio de perfiles de usuario local. También puede aprovechar las ventajas de importar atributos de perfil de usuario mediante el servicio de conectividad empresarial (BCS) en SharePoint 2013. Sin embargo, esta opción no está disponible en SharePoint 2016, lo que significa que para SharePoint 2016 la única opción actualmente es implementar personalizaciones que aprovechen los servicios web de perfiles de usuario.

¿Puedo usar esta API para sincronizar los valores de propiedad de perfil de usuario de mis granjas de servidores locales de SharePoint con SharePoint Online?

Sí, SharePoint local se puede usar como cualquier otro sistema de origen. Debe exportar los valores de perfil de usuario de su SharePoint local al formato de archivo JSON y después el proceso sería exactamente el mismo que para importar valores de cualquier otro sistema.

¿Puedo importar propiedades de varios valores basadas en cadenas?

No, actualmente no es compatible con esta API.

¿Qué permisos son necesarios para ejecutar esta API?

Debe tener permisos de administrador global actualmente, a menos que use un contexto de autenticación de solo aplicación. Administrador de SharePoint no es suficiente.

¿Puedo importar propiedades basadas en taxonomía?

No, actualmente no es compatible con esta API.

¿Qué ocurre si defino una asignación en el código que no se usa o que tiene propiedades en el archivo JSON que no están asignadas?

Si el código o script define una asignación que no se usa o el archivo de datos no contiene propiedades para esa asignación, la ejecución continúa sin excepciones y la importación se aplica en función de las propiedades asignadas. Sin embargo, si tiene una propiedad en el archivo JSON que no está asignada, se anula el proceso de importación y se proporcionan detalles de excepción en el archivo de registro para la ejecución del trabajo específico.

¿Qué ocurre si necesito actualizar propiedades personalizadas que superen las limitaciones de tamaño de esta API masiva (es decir, un archivo de más de 2 GB o 500 000 propiedades)?

Debe procesar por lotes los trabajos en consecuencia desencadenando varios trabajos en secuencia (es decir, finalizando un trabajo a la vez con el límite máximo en esta API). Es probable que estas importaciones de ancho de banda elevado tarden mucho tiempo en completarse. Además, debería optimizar los trabajos de importación solo para los cambios diferenciales en las propiedades de perfil personalizadas en lugar de importar un conjunto completo de valores en todos los trabajos.

¿Qué atributos de Azure AD se sincronizan con los perfiles de usuario de SharePoint Online de forma predeterminada?

Vea la tabla siguiente para obtener la lista oficial de atributos sincronizados y su asignación entre Azure AD y el servicio de perfiles de usuario de SharePoint Online.

Atributo de Azure Directory Propiedad de perfil de SharePoint Online
ObjectSid SPS-SavedSID
msonline-UserPrincipalName UserName
msonline-UserPrincipalName AccountName
msonline-UserPrincipalName SPS-ClaimID
msonline-UserPrincipalName SPS-UserPrincipalName
GivenName FirstName
sn LastName
Administrador Administrador
DisplayName PreferredName
telephoneNumber WorkPhone
proxyAddresses WorkEmail
proxyAddresses SPS-SIPAddress
PhysicalDeliveryOfficeName Oficina
Título Título
Título SPS-JobTitle
Departamento Departamento
Departamento 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

Vea también