вторник, 29 мая 2012 г.

Как посмотреть, где используется тип содержимого SharePoint

Бывает, что при удалении типа содержимого (content type) SharePoint 2007 вылезает ошибка:
Этот тип содержимого сейчас используется.
The content type is in use.


А вот где он используется - непонятно, средств посмотреть нет.
Как ни странно, в контентной БД (WSS_Content) есть процедуры для этого:
[proc_ListContentTypeInUse] 'SiteId', ContentTypeId

ContentTypeId получаем так:
Заходим в параметры узла, Коллекции -> Типы содержимого узла, заходим в нужный тип содержимого и смотрим URL.
http://portal/_layouts/ManageContentType.aspx?ctype=0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39&Source=http%3A%2F%2Fzdrav%2Emonitoring%2Dmsk%2Eru%2F%5Flayouts%2Fmngctype%2Easpx
Нас интересует значение ctype, это и есть ContentTypeId :
0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39

SiteId можно получить так:

SELECT SiteId, sys.fn_varbintohexstr(ContentTypeId) AS ID, WebId, ListId, IsFieldId, Class
FROM ContentTypeUsage
WHERE (sys.fn_varbintohexstr(ContentTypeId) LIKE '[ContentTypeID]%')

Выполняем:

SELECT SiteId, sys.fn_varbintohexstr(ContentTypeId) AS ID, WebId, ListId, IsFieldId, Class
FROM ContentTypeUsage
WHERE (sys.fn_varbintohexstr(ContentTypeId) LIKE '0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39%')

и получаем таблицу, где в первом столбце указаны SiteId где используется тип содержимого, они нам и нужны.

Всё, теперь выполняем proc_ListContentTypeInUse, например, так:
[proc_ListContentTypeInUse] 'C135DCB5-6116-4033-9140-44EEA2A45F31', 0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39


И мы видим, где используется искомый тип содержимого!



Комментариев нет: