Sharepoint encuentra donde webpart está en uso
moss web-parts (5)
¿Es posible analizar en qué páginas se está utilizando una webpart?
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 eso?
Estoy al corriente con moss2007
Cada elemento web agregado a una página se almacena en la página misma. No hay una tienda central que registre dónde se usa cada parte web.
Esto significa que lamentablemente necesita iterar a través de cada página de parte web en el 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 la propiedad SPLimitedWebPartManager.WebParts para recuperar una colección de elementos web.
Otra forma de hacerlo es utilizar las extensiones de Gary Lapointe STSADM, específicamente enumPageWebParts
stsadm -o gl-enumpagewebparts -url "http: //intranet/hr/pages/default.aspx" -verbose
Solo muestra los elementos web en uso en una página específica, pero puede llamarlo para cada página de su sitio o incluso agregar un comando para recorrer todas las páginas de un sitio.
No he tenido éxito al generar el ID del tipo de parte web por ningún método, simplemente no obtengo ningún resultado cuando ejecuto la consulta. Esto fue porque la identificación nunca fue correcta.
Para evitar este problema, creé una nueva página e inserté una instancia del elemento web que me interesaba. A continuación, realicé una búsqueda por LeafName, dándole la página que había creado (¡Mejor hacerlo único!). Esto arrojó un resultado único y pude usar el tp_WebPartTypeId que devolvió para consultar toda la base de datos de contenido.
Entonces, si tiene problemas para generar la identificación, pruebe este enfoque.
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>''
La respuesta de Alex (iterando a través de sitios -> páginas> elementos web) es 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 paquetes de servicio, etc., pero suponiendo que todos somos grandes aquí:
Primero, debe averiguar el WebPartTypeId del elemento web en el que está interesado
Luego 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>''
Podría hacer esto al revés (obtenga una lista de todos los WebPartTypeId en uso) pero no puede obtener el nombre del ensamblado del hash WebPartTypeId, por lo que tendría que hacer una especie de lista de búsqueda de elementos web> typeid.