lunes, 3 de febrero de 2014

Leer y almacenar propiedades de perfiles de usuario en SharePoint 2007 vía programación

En este breve articulo explicaremos cómo resolver un requerimiento en donde nos piden mover las propiedades de los perfiles de usuario de SharePoint 2007, de un servidor a otro. El enfoque que seguiremos es el siguiente:

  • Creamos una página ASPX que lea el contenido
  • Copiamos el contenido y lo pegamos dentro de un Excel
  • Copiamos el contenido y lo pegamos en una Lista
  • Creamos una página ASPX que lea el contenido de la lista y lo almacene en el servidor destino
Utilizamos una línea intermedia, porque por un tema de seguridad, los servidores no se ven entre sí.


Creamos una página ASPX que lea el contenido

<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@ Assembly Name="Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@ Page Language="C#" 
         Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase" EnableViewStateMac="false" EnableViewState="true" MaintainScrollPositionOnPostback="true"%>

<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.Office.Server" %>
<%@ Import Namespace="Microsoft.Office.Server.UserProfiles" %>

<script runat="server">

protected override void OnLoad(EventArgs e) {


// Acceso al Sitio
ServerContext CTX = ServerContext.GetContext(this.Site);

// Loop Usuarios
UserProfileManager UPM = new UserProfileManager(CTX);

string resultado = "<table><tr><td>Cuenta</td><td>Foto</td><td>Web</td></tr>";

foreach (UserProfile UP in UPM) {

resultado += "<tr><td>" + UP["Accountname"].Value + "</td><td>" + UP["PictureUrl"].Value + "</td><td>" +  UP["PersonalSpace"].Value + "</td></tr>";

        }

resultado += "</table>";

// Impresión de Resultado
        
Response.ContentType = "text/plain";
Response.Write(resultado);

}

</script>


Copiamos el contenido y lo pegamos dentro de un Excel
Esta acción es un simple copiar y pegar. Pero es un buen momento para arreglar contenido o direcciones absolutas en caso que lo necesitemos.


Copiamos el contenido y lo pegamos en una Lista
Creamos una lista llamada UP con los campos que necesitemos, en nuestro caso: Título (para el nombre de cuenta), Foto y Web. Todos campos de texto simple.

Creamos una página ASPX que lea el contenido de la lista y lo almacene en el servidor destino

<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@ Assembly Name="Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@ Page Language="C#" 
         Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase" EnableViewStateMac="false" EnableViewState="true" MaintainScrollPositionOnPostback="true"%>

<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.Office.Server" %>
<%@ Import Namespace="Microsoft.Office.Server.UserProfiles" %>

<script runat="server">

protected override void OnLoad(EventArgs e) {

string resultado = "<table><tr><td>Cuenta</td><td>Foto</td><td>Web</td></tr>";
string foto;
string web;
string cuenta;
int ok = 0;
int nook = 0;

// Acceso al Sitio
ServerContext CTX = ServerContext.GetContext(this.Site);

// Leer y almacenar los datos de perfiles de usuario

SPWeb WE = SPContext.Current.Web;
SPList LI = WE.Lists["UP"];

WE.AllowUnsafeUpdates = true;

UserProfileManager UPM = new UserProfileManager(CTX);

foreach (SPListItem IT in LI.Items){

if (IT["Foto"] != null) { foto = IT["Foto"].ToString(); } else { foto = "" ; }
if (IT["Web"] != null) { web = IT["Web"].ToString(); } else { web = "" ; }

cuenta = IT["Title"].ToString();
if ( UPM.UserExists (cuenta) ) {

UserProfile UP = UPM.GetUserProfile(cuenta);

                if (UP["PictureUrl"] != null)
                {
UP["PictureUrl"].Value = foto;
               }

                UP["PersonalSpace"].Value = web;

UP.Commit();

ok += 1;
}
else {
nook += 1;
}

resultado += "<tr><td>" + IT["Title"].ToString() + "</td><td>" + foto + "</td><td>" +  web + "</td></tr>";

        } 

WE.AllowUnsafeUpdates = false;

resultado += "</table>";
resultado += "<strong>Perfiles encontrados: " + ok.ToString() + "</strong>";
resultado += "<br/><strong>Perfiles NO encontrados: " + nook.ToString() + "</strong>";

        
Response.ContentType = "text/plain";
Response.Write(resultado);

}


</script>

Finalmente, podemos revisar los resultados dentro del SSP:



Espero les haya resultado útil. Hasta la próxima!

0 comentarios:

Publicar un comentario