2009-09-30 2 views

답변

5

각 웹 부분을 사용

임 전류 페이지는 페이지 자체에 저장된 추가. 각 웹 파트가 사용되는 위치를 기록하는 중앙 저장소가 없습니다.

이 정보를 검색하려면 사이트의 모든 웹 파트 페이지를 반복해야합니다. 그런 다음 각 페이지에서 웹 파트의 어셈블리 이름을 확인해야합니다. 찾은 모든 웹 파트를 응용 프로그램이 완료되면 출력되는 목록에 추가하십시오.

SPWeb 개체를 사용하면 각 페이지의 웹 파트 관리자를 SPWeb.GetLimitedWebPartManager()으로 검색 할 수 있습니다. 웹 파트 컬렉션을 검색하려면 SPLimitedWebPartManager.WebParts property을 사용하십시오.

4

Alex's answer (사이트 -> 페이지> 웹 파트 반복)은 매우 정확하며 '올바른'방법이지만 매우 큰 사이트에서는 상당히 비쌉니다.

다른 대안은 데이터베이스 쿼리입니다. 모든 일반적인 경고는 데이터베이스에 직접 액세스하는 데 적용됩니다. 서비스 팩 등을 사용하여 언제든지 변경할 수 있지만 언제든지 변경 될 수 있지만 여기에 모두 큰 소년이라고 가정하면 -

먼저 WebPartTypeId을 찾아야합니다. 관심있는 웹 파트

다음 모든 컨텐츠 데이터베이스에서 실행하십시오.

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

당신은 주변이에게 다른 방법으로 할 수있는 (사용의 모든 WebPartTypeId 년대의 목록을 얻을) 그러나 당신의 조회 목록의 일종을해야 할 것이다, 그래서 당신은 WebPartTypeId 해시에서 어셈블리 이름을 얻을 수 없다 웹 파트> typeid 's.

+1

@Ryan : Active_t의 배경이 너무 NOLOCK을 사용하여 데이터베이스에서 읽을 때 교착 상태를 방지하기 위해 필수적이며 그 결과가 부정확 할 수 있음을 인정해야 ;-) 가정에주의 @ 우리는 모른다. 개종자에게 설교하는 경우 사과! –

+0

노 락 힌트를 추가하기 위해 편집했지만 실버 탄환이 아니며 자체적 인 잠재적 인 문제 (일관성없는 상태의 데이터)가 있음을 기억해야합니다. 교착 상태를 일으킬 수있는 좋은 참고 자료가 있습니까? 그 중 하나에 대한 확실한 답을 얻는 것이 좋겠지 만, 당연히 공식적인 라인은 ... 아닙니다. – Ryan

+0

이 예제에서 일치하지 않는 데이터를 읽음으로써 야기 될 수있는 문제는 매우 적을 것이라고 말했습니다. – Ryan

3

이 작업을 수행하는 또 다른 방법은 특별히

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

그것은 단지 특정 페이지에 사용되는 웹 파트를 출력하지만 당신은 사이트의 각 페이지에 대해이 부를 수있는 enumPageWebParts, 게리 LAPOINTE STSADM 확장을 사용하다 또는 사이트의 모든 페이지를 반복하는 명령을 추가 할 수도 있습니다.

http://stsadm.codeplex.com/

+1

그리고 오픈 소스이므로 믿을만한 예제 코드를 찾기 시작할 수 있습니다. – Colin

1

내가 어떤 방법으로 웹 파트 유형 ID를 생성하는 어떤 성공을 했어, 내가 쿼리를 실행할 때 단순히 어떤 결과를 얻을 수 없습니다. ID가 정확하지 않았기 때문입니다.

이 문제를 해결하기 위해 새 페이지를 만들고 관심이있는 웹 파트의 인스턴스를 삽입했습니다. 그런 다음 LeafName으로 쿼리하여 작성한 페이지를 제공합니다 (고유하게 만들기 위해 최선을 다했습니다). . 이 단일 결과를 반환하고 전체 콘텐츠 데이터베이스를 쿼리 할 반환 한 tp_WebPartTypeId 사용할 수 있습니다.

ID를 생성하는 데 문제가있는 경우 대신이 방법을 시도해보십시오.

2

누구나 SharePoint 2013에 대해 동일한 쿼리를 찾고있는 경우에 유용합니다. 2013 년에보기가 제거되었으며 동일한 필드가있는 테이블 이름은 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>' 
관련 문제