Compartir a través de


Procedimiento para obtener los cambios recientes al perfil de usuario con el registro de cambios

Última modificación: miércoles, 27 de enero de 2010

Hace referencia a: SharePoint Server 2010

Microsoft SharePoint Server 2010 ofrece un modelo de objetos de seguimiento de los cambios del almacén de perfiles de usuario para admitir alertas basadas en personas. Estas alertas notifican aniversarios y muchos otros cambios en un perfil de usuario. SharePoint Server 2010 trata todos los campos de fecha del perfil de usuario como aniversarios. Cuando una fecha del perfil del usuario coincide con la fecha actual (según el calendario del servidor), SharePoint Server 2010 crea un nuevo evento de aniversario. Tenga en cuenta que los cambios realizados en un campo de fecha no crean ningún evento.

La implementación del modelo de objetos de seguimiento es similar, pero menos robusta, que el objeto SPChange de Microsoft SharePoint Foundation 2010. La clase UserProfile define dos métodos sobrecargados para admitir el seguimiento de cambios. Son los siguientes:

  • public Microsoft.Office.Server.UserProfiles.UserProfileChangeCollection GetChanges(Microsoft.Office.Server.UserProfiles.UserProfileChangeQuery)

  • public Microsoft.Office.Server.UserProfiles.UserProfileChangeCollection GetColleagueChanges (Microsoft.Office.Server.UserProfiles.UserProfileChangeQuery)

Use el método GetChanges del objeto UserProfile para devolver la colección de cambios que se han producido en el perfil de usuario en un determinado intervalo de tiempo. Un objeto SPChange contiene información sobre el tipo de cambio, tal como representa la enumeración ChangeType. El valor ChangeType indica el tipo de cambio, incluidos cambios de adición, actualización, eliminación o de nombre.

UserProfileChangeQuery es una enumeración que describe el evento de cambio en el que está interesado. Por ejemplo, puede ser:

  • DistributionListMembership

  • Colleague

  • QuickLink

  • Anniversary

  • ProfileProperty

  • UserProfile

  • PrivacyItem

  • SingleValueProperty

  • MultivalueProperty

  • SiteMembership

El siguiente ejemplo de código muestra cómo usar el método GetChanges() para encontrar lo que cambió en un perfil de usuario en los últimos cinco días. Recuerde que el método GetColleagueChanges() funciona de la misma manera y devuelve los cambios en el perfil de compañero del usuario.

Antes de ejecutar el ejemplo de código, reemplace domainname, username y otros marcadores de posición con valores reales. También debe agregar las referencias a lo siguiente en el proyecto de Microsoft Visual Studio:

  • Microsoft.Office.Server

  • Microsoft.Office.Server.UseProfiles

  • Microsoft.SharePoint

  • System.Web

Ejemplo

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Server;
using Microsoft.Office.Server.Administration;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;
using System.Web;

namespace UserProfilesOMApp
{
    class Program
    {
        static void Main(string[] args)
        {

            using (SPSite site = new SPSite("https://servername"))
            {
                SPServiceContext context = SPServiceContext.GetContext(site);
                UserProfileManager profileManager = 
                    new UserProfileManager(context);

                // this gets some subset of changes to a user profile

                DateTime startDate = 
                    DateTime.UtcNow.Subtract(TimeSpan.FromDays(5));
                UserProfileChangeQuery changeQuery = 
                    new UserProfileChangeQuery(false, true);
                UserProfileChangeToken changeToken = 
                    new UserProfileChangeToken(startDate);
                changeQuery.ChangeTokenStart = changeToken;
                changeQuery.Anniversary = true;
                changeQuery.SingleValueProperty = true;
                changeQuery.MultiValueProperty = true;
                changeQuery.DistributionListMembership = true;
                changeQuery.SiteMembership = true;

                UserProfileChangeCollection changes = 
                    profileManager.GetUserProfile
                    ("domainname\\username").
                    GetChanges(changeQuery);
                foreach (UserProfileChange change in changes)
                {
                    Console.WriteLine(change.EventTime.ToString());
                    if (change is UserProfilePropertyValueChange)
                    {
                        UserProfilePropertyValueChange propertyChange = 
                            (UserProfilePropertyValueChange)change;
                            Console.WriteLine(propertyChange.
                            ChangeType.ToString());
                    }
                    else if (change is UserProfileMembershipChange)
                    {
                        UserProfileMembershipChange membershipChange = 
                            (UserProfileMembershipChange)change;
                            Console.WriteLine(membershipChange.
                            ChangeType.ToString());
                    }

                }
                Console.Read();
               }
            }
        }
    }

Vea también

Tareas

Procedimiento para recuperar un perfil de usuario

Procedimiento para recuperar las propiedades de los perfiles de usuario

Procedimiento para recuperar los elementos comunes entre dos perfiles de usuario