Sharepoint находят, где webpart используется

Navicat имеет мастер синхронизации структуры, который обрабатывает это.

5
задан Active_t 30 September 2009 в 14:18
поделиться

3 ответа

Alex's answer (iterating through sites -> pages > web parts) is good and the 'correct' way to do this but is fairly expensive on a very large site.

An alternative is a database query. All the usual caveats apply about accessing the database directly : do not change anything, could break at any time with service packs etc etc but assuming we are all big boys here :-

First you need to find out the WebPartTypeId of the web part your interested in

Next run this on ALL content databases.

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

You could do this the other way around (get a list of all WebPartTypeId's in use) but you can't get the assembly name from the WebPartTypeId hash so you would have to do some sort of lookup list of web parts > typeid's.

5
ответ дан 18 December 2019 в 10:46
поделиться

Каждая веб-часть, добавляемая на страницу, сохраняется на самой странице. Нет центрального хранилища, в котором записывается, где используется каждая веб-часть.

Это означает, что, к сожалению, вам необходимо пройти через каждую страницу веб-части на сайте, чтобы получить эту информацию. Затем на каждой странице вы должны проверить имена сборок веб-частей. Добавьте все найденные веб-части в список, который выводится после завершения работы приложения.

Объект SPWeb позволяет получить диспетчер веб-частей для каждой страницы с помощью SPWeb.GetLimitedWebPartManager () . Используйте свойство SPLimitedWebPartManager.WebParts , чтобы получить коллекцию веб-частей.

5
ответ дан 18 December 2019 в 10:46
поделиться

Другой способ сделать это - использовать расширения STSADM от Gary Lapointe, в частности enumPageWebParts

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

Он выводит только те веб-части, которые используются на определенной странице, но вы можете вызвать это для каждой страницы вашего сайта или даже добавить команду для перебора всех страниц сайта.

http: // stsadm .codeplex.com /

3
ответ дан 18 December 2019 в 10:46
поделиться