2010-09-29 5 views
1

В SharePoint 2007 выполняется SPSiteDataQuery с фильтром для типов контента, работающим как ожидалось.SPSiteDataQuery: Фильтрация типов содержимого в SharePoint 2010

<Where> 
    <Eq> 
    <FieldRef Name='ContentType'/> 
    <Value Type='Text'>SomeContentType</Value> 
    </Eq> 
</Where> 

В SharePoint 2010 тот же запрос возвращает только элементы из одного списка. Возможным обходным решением является фильтрация идентификатора типа содержимого. Оператор «BeginsWith» должен быть использован, так как «список контент тип» наследует от «сайта типа контента»:

<Where> 
    <BeginsWith> 
    <FieldRef Name='ContentTypeID'/> 
    <Value Type='Text'>SomeContentTypeId</Value> 
    </BeginsWith> 
</Where> 

Но это будет соответствовать всем элементам с этим типом контента или с каким-либо унаследовал тип содержимого. Это не то, что я хочу.

Кто-нибудь знает, как создать SPSiteDataQuery с фильтром типа содержимого?

+0

Мне нравится красота быть в состоянии выбрать все наследуемые типы контента. Почему вы выбираете ID с помощью 'BeginsWith', вместо этого вы можете выбрать конкретный тип контента или даже' EndsWith' ?! –

+0

В CAML нет элемента 'EndsWith', не так ли? – Stefan

+0

Вы правы, извините. Но 'Contains' действительно существует. –

ответ

1

Попробуйте это (см типа значения вычисляются):

<Where> 
    <Eq> 
    <FieldRef Name='ContentType'/> 
    <Value Type='Computed'>SomeContentType</Value> 
    </Eq> 
</Where> 
Смежные вопросы