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