Agregar las paginas al mapa de la Intranet

25/07/2007 - 12:36 por Iñigo | Informe spam
Hola, he creado un mapa de la intranet en sharepoint 2007 y quisiera saber si
alguien sabe como agregar las paginas a ese mapa y como añadir una propiedad
que puedas desabiitar o habilitar ver las paginas en el mapa de sitio.
Muchas gracias de antemano
Un saludo

Preguntas similare

Leer las respuestas

#1 Elecktrus
26/07/2007 - 08:50 | Informe spam
Hola, Iñigo.
Te contesto algunas ideas, para que luego tu las ampies.
Desde mi punto de vista hay 3 clases de paginas
- las default (default.aspx). De este tipo existe 1 (y solo 1) en cada sitio
'estandar' (por estandar me refiero a los tipos de sitio que existian ya en
la version 2003: sitios de colaboracion, sitios de reuniones, etc).
Estas paginas estan 'hard code' y no se puede hacer nada sobre ellas

- paginas del usuario, las que se crean cuando creas una página basica o
pagina de webpart. Estas se almacenan en una biblioteca que elija el usuario.
Estas paginas no forman parte de la navegacion estandar, y solo se puede
acceder a ellas si un usuario crea 'a mano' enlaces o menus para acceder a
ellas

- paginas de publicacion, las que aparecen con una url del tipo
/sitio/pages/mipagina.aspx o /sitio/paginas/mipagina.aspx (en sps español).
Son por ejemplo las que se usan en el sitio de busqueda.Estas paginas tienen
una particularidad, solo pueden existir si esta activada la feature 'Office
SharePoint Server Publishing' (asi se llama en un sps ingles)

Bueno, despues de este rollo, la parte practica. Para saber las paginas, yo
haria este truco ( no es exacto en el 100% de los casos pero es muy
aproximado):
- para cada sitio web que vayas recorriendo, miraria si tiene activada la
feature de publicacion. Ej:
SPSite rfcSite = new SPSite("http://miservidor/misitio"); //abrimos el site
SPWeb sitio = rfcSite.OpenWeb(); //abrimos el sitio web
Guid publishguid= new
Guid("94c94ca6-b32f-4da9-a9e3-1f3d343d7ecb");
if (sitio.Features[publishguid] != null) //hay publicacion
{
SPList lista=sitio.Lists["Pages"]; //abrimos la biblioteca
de paginas
foreach (SPItem itempagina in lista) //recorremos cada
pagina
{
//hacemos lo que sea con la pagina
Console.WriteLine(itempagina.Fields["Title"]);
}
}
OJO: El guid y el nombre de la biblioteca son los de un SPS ingles, en
español el guid puede ser el mismo (miralo en el feature.xml), pero la
biblioteca cambia a "Páginas"

- si el sitio no tiene activa esa feature, entonces, seguro que tiene la
pagina default.aspx. En este caso, ademas, podrias mirar en las diferentes
bibliotecas que existen en el sitio si hay archivos con extension .aspx como
parte de su nombre. Pero no tienes forma se saber si son paginas de
navegacion o estan alli por otro motivo (imagina una biblioteca de desarrollo
de paginas aspx)

Resumiendo:
- para cada sitio, mirar si tiene activa la feature
- si la tiene, mostrar el contenido de la biblioteca "Pages" o "Páginas" (en
inlges o español). Si no sabes cual, pregunta por las 2, al menos una de
ellas existira
- si no la tiene, mostrar la pagina default.aspx (y opcionalmente, mirar en
las bibliotecas por si existen ficheros con extension .aspx)

Espero que esto te pueda ayuda. Por favor, si consigues que te funciona,
publica el codigo entero del webpart o enviaselo a alguien que lo pueda
publicar, que nos ayudara a todos.
Respuesta Responder a este mensaje
#2 Elecktrus
26/07/2007 - 09:14 | Informe spam
Un poquito mas.
Como el post anterior era muy largo, no te conteste sobre lo de indicar si
la pagina se debe ver o no. Entiendo que es independiente de si el usuario
tiene permiso para ver el sitio o no.

En las paginas de publicacion (las de la biblioteca pages) es muy facil.
Como es una biblioteca, añades una columna nueva, que se llame Visible, y le
pones true o false en cada pagina. Puedes definir la columna en el tipo de
contenido (el tipo publicacion es un tipo de contenido pages), y asi estara
disponible para todas las paginas. En tu codigo, preguntas por ese atributo,
y si es true, la muestras.

En las default.aspx, no puedes, ya que van hardcoded. Ademas no tiene mucho
sentido, ya que existen siempre. Ahi es mas facil: si el usuario tiene acceso
al sitio, ve la pagina, si no tiene acceso, no.

Si a lo que te referias era a que un usuario solo pudiera ver los sitios (y
las paginas) a las que pueda acceder, hay 2 formas:

la facil: - el webpart ejecuta con el contexto del usuario (no se
impersona). De esta forma a los sitios donde no tenga acceso, no se muestra
el sitio (ni las paginas, claro). CUIDADO: Supongo que programas como
administrador. Cuando ejecutes como usuario normal, es posible que no te
funcione.

la dificil: te impersonas, ejecutas con privilegios avanzados y para cada
sitio, compruebas si el usuario actual esta en la lista de permisos del
sitio, si esta, muestras el contenido, si no, no.



"Iñigo" wrote:

Hola, he creado un mapa de la intranet en sharepoint 2007 y quisiera saber si
alguien sabe como agregar las paginas a ese mapa y como añadir una propiedad
que puedas desabiitar o habilitar ver las paginas en el mapa de sitio.
Muchas gracias de antemano
Un saludo
Respuesta Responder a este mensaje
#3 Iñigo
26/07/2007 - 11:08 | Informe spam
Muchas gracias Elecktrus, acao de leer ts 2 post(algo largos XD) y voy a
proar cosas que me as puesto pero aun asi, voy a ponerte el codigo que e
conseguido crear con ayuda de Gustavo en el tema de abajo "Site Map", este
codigo es provisional, ya que, voy a agregar propiedades al Site Map. Cuando
este listo del todo se lo mandare a Gustavo y lo pondra en su Web, la cual
conocemos todos :)
.Aqui dejo el codigo:

using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;

namespace SMSP
{
[DefaultProperty("Text"),
ToolboxData("<{0}:Site Map runat=server></{0}:Site Map>"),
XmlRoot(Namespace = "Site Map")]
public class PruebaSM : Microsoft.SharePoint.WebPartPages.WebPart
{
protected override void RenderWebPart(HtmlTextWriter output)
{
//Iniciamos el Sitio Donde nos encontramos actualmente
SPWeb myWeb = SPControl.GetContextWeb(Context);
SPWeb myPadre;
//Funcion recursiva que nos lleva hasta el sitio Padre
myPadre = funcion(myWeb);
try
{
//Sacamos por pantalla el sitio padre con su icono y su link
output.Write("<img src='/_layouts/images/SMT_ICON.GIF'
border='0'><img src='/_layouts/images/BLANK.GIF' width='4' border='0'>");
output.Write(GetMyHtml(myPadre));
//Buscamos los Subsites del sitio padre y hacemos una
funcion recuriva para buscar los subsites de esos subsites
SPWebCollection mySubWebs = myPadre.Webs;
//Pasaremos a la funcion unos espacios libres para el
sangrado de los niveles
string a = " ";
funcion2(output, mySubWebs, a);
}
catch (Exception ex)
{
output.Write("Error: " + ex.ToString());
}

}
//Funcion que Saca el Link de los Sitios
private string GetMyHtml(SPWeb myWeb)
{
string strTerug = string.Empty;

strTerug = "<a href='" + myWeb.Url + "'>";
strTerug += SPEncode.HtmlEncode(myWeb.Title);
strTerug += "</a><br>";

return strTerug;
}

//Funcion recursiva que busca el Sitio Padre
private SPWeb funcion(SPWeb myWeb)
{
SPWeb myParent;
SPWeb myPadre;
myParent = myWeb.ParentWeb;
if (myParent != null)
{
myPadre = funcion(myParent);
}
else
{
return myWeb;
}
return myPadre;
}
//Funcion recursiva Que recorre los subsites y los subsites de los
subsites y los saca por pantalla con su icono y link correspondiente
private void funcion2(HtmlTextWriter output, SPWebCollection
myWebColection, string a)
{
foreach (SPWeb myWeb in myWebColection)
{
output.Write(a + "<img src='/_layouts/images/SMT_ICON.GIF'
border='0'><img src='/_layouts/images/BLANK.GIF' width='4' border='0'>");
output.Write(GetMyHtml(myWeb));
SPWebCollection colec = myWeb.Webs;
if (colec != null)
{
funcion2(output, colec, a + " ");
}
//Por cada sitio buscamos sus paginas y le ponemos otro
icono diferente
SPList list = myWeb.Lists["Páginas"];
if (list != null)
{
SPListItemCollection items = list.Items;
foreach (SPListItem item in items)
{
if (item.Name != "default.aspx")
{
output.Write(a + " " + "<img
src='/_layouts/images/printerfriendly.gif' border='0'><img
src='/_layouts/images/BLANK.GIF' width='4' border='0'>");
output.Write("<a href='" + myWeb.Url +
"/Paginas/" + item.Name + "'>" + SPEncode.HtmlEncode(item.Name) + "</a><br>");
}
}
}
}
}
}
}


"Elecktrus" wrote:

Un poquito mas.
Como el post anterior era muy largo, no te conteste sobre lo de indicar si
la pagina se debe ver o no. Entiendo que es independiente de si el usuario
tiene permiso para ver el sitio o no.

En las paginas de publicacion (las de la biblioteca pages) es muy facil.
Como es una biblioteca, añades una columna nueva, que se llame Visible, y le
pones true o false en cada pagina. Puedes definir la columna en el tipo de
contenido (el tipo publicacion es un tipo de contenido pages), y asi estara
disponible para todas las paginas. En tu codigo, preguntas por ese atributo,
y si es true, la muestras.

En las default.aspx, no puedes, ya que van hardcoded. Ademas no tiene mucho
sentido, ya que existen siempre. Ahi es mas facil: si el usuario tiene acceso
al sitio, ve la pagina, si no tiene acceso, no.

Si a lo que te referias era a que un usuario solo pudiera ver los sitios (y
las paginas) a las que pueda acceder, hay 2 formas:

la facil: - el webpart ejecuta con el contexto del usuario (no se
impersona). De esta forma a los sitios donde no tenga acceso, no se muestra
el sitio (ni las paginas, claro). CUIDADO: Supongo que programas como
administrador. Cuando ejecutes como usuario normal, es posible que no te
funcione.

la dificil: te impersonas, ejecutas con privilegios avanzados y para cada
sitio, compruebas si el usuario actual esta en la lista de permisos del
sitio, si esta, muestras el contenido, si no, no.



"Iñigo" wrote:

> Hola, he creado un mapa de la intranet en sharepoint 2007 y quisiera saber si
> alguien sabe como agregar las paginas a ese mapa y como añadir una propiedad
> que puedas desabiitar o habilitar ver las paginas en el mapa de sitio.
> Muchas gracias de antemano
> Un saludo
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida