2009-09-30 15 views
5

È possibile analizzare su quali pagine è utilizzata una webpart?Sharepoint trova dove webpart è in uso

Desidero rimuovere alcune web part dal mio server sharepoint, ma non so cosa è in uso e cosa non è in uso?

Esiste una soluzione?

corrente Im utilizzando parte MOSS2007

risposta

5

Ogni web aggiunto a una pagina viene memorizzato nella pagina stessa. Non esiste un archivio centrale che registra dove viene utilizzata ciascuna web part.

Ciò significa che, purtroppo, è necessario scorrere tutte le pagine Web del sito per recuperare queste informazioni. In ogni pagina è quindi necessario controllare i nomi degli assembly delle parti web. Aggiungi tutte le parti web che trovi ad un elenco che viene prodotto una volta completata l'applicazione.

L'oggetto SPWeb consente di recuperare il web part manager per ogni pagina con SPWeb.GetLimitedWebPartManager(). Utilizzare SPLimitedWebPartManager.WebParts property per recuperare una raccolta di web part.

4

Alex's answer (iterando attraverso siti -> pagine> parti web) è buono e il modo "corretto" per farlo è piuttosto costoso su un sito molto grande.

Un'alternativa è una query di database. Tutti i soliti avvertimenti riguardano l'accesso al database direttamente: non modificare nulla, potrebbero interrompersi in qualsiasi momento con i service pack ecc ecc ma assumendo che siamo tutti grandi ragazzi qui: -

Per prima cosa devi scoprire il WebPartTypeId del web part la tua interessata a

Avanti eseguilo su TUTTI i database del contenuto.

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>' 

Si potrebbe fare questo il contrario (ottenere un elenco di tutti gli WebPartTypeId è in uso), ma non è possibile ottenere il nome assembly dalla hash WebPartTypeId così si dovrebbe fare una sorta di elenco di ricerca dei web part> typeid's.

+1

@ Ryan: Non sappiamo @ sfondo di Active_t quindi state attenti a ipotesi ;-) Durante la lettura dal database utilizzando NOLOCK è essenziale per prevenire situazioni di stallo e si deve ammettere che i risultati possono essere imprecisi. Chiedo scusa se predica al convertito! –

+0

Ho modificato per aggiungere il suggerimento per non bloccare, ma dobbiamo ricordare che non è un proiettile d'argento e introduce potenziali problemi propri (dati incoerenti). Hai qualche buon riferimento sulla possibilità di causare deadlock? Sarebbe bello avere delle risposte definitive su quello, ma non sorprendentemente la linea ufficiale è ... no. – Ryan

+0

Detto questo, i problemi che sarebbero causati dalla lettura di dati incoerenti in questo esempio sono probabilmente abbastanza piccoli. – Ryan

3

Un altro modo per farlo è utilizzare le estensioni Gary Lapointe Stsadm, enumPageWebParts specificamente

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

emettere solo le parti web in uso su una pagina specifica, ma si potrebbe chiamare questo per ogni pagina del tuo sito o anche aggiungere un comando per scorrere su tutte le pagine di un sito.

http://stsadm.codeplex.com/

+1

ed è open source, credo che potrebbe essere un buon punto di partenza per cercare un codice di esempio – Colin

1

ho avuto alcun successo la generazione del web tipo di parte id con qualsiasi metodo, ho semplicemente ottengo risultati quando eseguo la query. Questo perché l'ID non è mai stato corretto.

Per aggirare questo problema, ho creato una nuova pagina e inserito un'istanza della web part che mi interessava. Poi ho chiesto a LeafName di dargli la pagina che avevo creato (Meglio renderla unica!) . Questo ha restituito un singolo risultato e ho quindi potuto utilizzare tp_WebPartTypeId per restituire l'interrogazione all'intero database del contenuto.

Quindi, se hai problemi a generare l'id, prova invece questo approccio.

2

E nel caso qualcuno stia cercando la stessa query per SharePoint 2013. Eccolo. La vista è stata rimossa nel 2013 e il nome della tabella con gli stessi campi è 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>'