2009-09-30 10 views
5

¿Es posible analizar en qué páginas se está utilizando una webpart?Sharepoint find donde webpart está en uso

Quiero eliminar algunas partes web de mi servidor sharepoint, pero no sé qué está en uso y qué no está en uso.

¿Hay una solución para ello?

corriente Im utilizando parte MOSS2007

Respuesta

5

Cada Web añadió a una página se almacena en la propia página. No hay una tienda central que registre dónde se usa cada parte web.

Esto significa que, lamentablemente, debe recorrer cada página de la parte web del sitio para recuperar esta información. En cada página, debe verificar los nombres de ensamblado de los elementos web. Agregue todos los elementos web que encuentre a una lista que se imprimirá una vez que se complete la aplicación.

El objeto SPWeb le permite recuperar el administrador de elementos web para cada página con SPWeb.GetLimitedWebPartManager(). Use SPLimitedWebPartManager.WebParts property para recuperar una colección de elementos web.

4

Alex's answer (iterar a través de sitios -> páginas> elementos web) es una buena y la forma "correcta" de hacerlo, pero es bastante costosa en un sitio muy grande.

Una alternativa es una consulta de base de datos. Todas las advertencias habituales se refieren al acceso directo a la base de datos: no cambie nada, podría romperse en cualquier momento con service packs, etc., pero suponiendo que todos somos grandes aquí: -

Primero debe averiguar el WebPartTypeId del la parte web está interesado en

A continuación, ejecute esto en TODAS las bases de datos de contenido.

SELECT DISTINCT D.SiteID, D.WebId, W.FullURL as WebURL, D.Id As DocumentId, 
       D.DirName, D.LeafName, tp_ID As WebPartSK 
FROM  dbo.Docs D WITH (nolock) 
INNER JOIN dbo.Webs W WITH (nolock) ON D.WebID = W.Id 
INNER JOIN dbo.WebParts WP WITH (nolock) ON D.Id = WP.tp_PageUrlID 
WHERE WP.tp_ListId Is Null AND WP.tp_Type Is Null AND WP.tp_Flags Is Null 
     AND WP.tp_BaseViewID Is Null AND WP.tp_DisplayName Is Null 
     AND WP.tp_Version Is Null 
AND WP.tp_WebPartTypeId='<your web parts id>' 

Usted puede hacer esto al revés (obtener una lista de todos los de WebPartTypeId en uso), pero no se puede obtener el nombre del ensamblado a partir del hash WebPartTypeId por lo que tendría que hacer algún tipo de lista de búsqueda de web parts> typeid's.

+1

@Ryan: No sabemos @ fondo de Active_t así que tenga cuidado acerca de las suposiciones ;-) Cuando se lee desde la base de datos con NOLOCK es esencial para evitar los puntos muertos y hay que aceptar que los resultados pueden ser inexactos. ¡Disculpas si predicas a los conversos! –

+0

He editado para agregar la sugerencia de no bloqueo pero debemos recordar que no es una bala de oro e introduce problemas potenciales propios (datos en estado incoherente). ¿Tiene alguna buena referencia sobre la posibilidad de causar bloqueos? Sería bueno obtener algunas respuestas definitivas sobre eso, pero no es sorprendente que la línea oficial sea ... no. – Ryan

+0

Dicho esto, los problemas que causaría la lectura de datos inconsistentes en este ejemplo probablemente sean bastante pequeños. – Ryan

3

Otra manera de hacer esto es usar extensiones de Gary Lapointe STSADM, enumPageWebParts específicamente

stsadm -o gl-enumpagewebparts -url "http://intranet/hr/pages/default.aspx" -verbose

Sólo se da salida a las piezas de la tela en uso en una página específica, sino que se podría llamar esto para cada página de su sitio o incluso agregar un comando para iterar sobre todas las páginas de un sitio.

http://stsadm.codeplex.com/

+1

y es de código abierto, creo que podría ser un buen lugar para comenzar a buscar algún código de ejemplo – Colin

1

he tenido ningún éxito generar el tipo de pieza de la tela Identificación por cualquier método, simplemente no da resultados positivos cuando yo haga la consulta. Esto fue porque la identificación nunca fue correcta.

Para solucionar este problema, creé una nueva página e inserté una instancia del elemento web que me interesaba. Luego realicé una búsqueda por LeafName, dándole la página que había creado (¡Lo mejor es hacerlo único!) . Esto arrojó un resultado único y pude usar el tp_WebPartTypeId que devolvió para consultar toda la base de datos de contenido.

Así que si tiene problemas para generar la identificación, intente con este enfoque.

2

Y en caso de que alguien esté buscando la misma consulta para SharePoint 2013. Aquí está. La vista se eliminó en 2013 y el nombre de la tabla que tiene los mismos campos es dbo.AllWebParts.

SELECT DISTINCT D.SiteID, D.WebId, W.FullURL as WebURL, D.Id As DocumentId, 
       D.DirName, D.LeafName, tp_ID As WebPartSK 
FROM  dbo.Docs D WITH (nolock) 
INNER JOIN dbo.Webs W WITH (nolock) ON D.WebID = W.Id 
INNER JOIN dbo.AllWebParts WP WITH (nolock) ON D.Id = WP.tp_PageUrlID 
WHERE WP.tp_ListId Is Null AND WP.tp_Type Is Null AND WP.tp_Flags Is Null 
     AND WP.tp_BaseViewID Is Null AND WP.tp_DisplayName Is Null 
     AND WP.tp_Version Is Null 
AND WP.tp_WebPartTypeId='<your web parts id>' 
Cuestiones relacionadas