Нужна помощь с SharePoint CAML Query - PullRequest
2 голосов
/ 29 августа 2011

Вот что я делаю (это быстрый поиск в Google и только один из первых результатов):

http://msdn.microsoft.com/en-us/library/cc300163(v=office.12).aspx

Мои элементы DropDownList с привязкой к данным выглядят так:

<listitem>All Providers</listitem>
<listitem>Provider 1</listitem>
<listitem>Provider 2</listitem>

Мой текущий CAML-запрос в представлении выглядит так:

<Query>
 <Where>
  <And>
   <Or>
    <Eq>
     <FieldRef Name="Status" />
     <Value Type="Lookup">Submitted</Value>
    </Eq>
    <Eq>
     <FieldRef Name="Status" />
     <Value Type="Lookup">In Progress</Value>
    </Eq>
   </Or>
   <Eq>
    <FieldRef Name="Provider"/>
    <Value Type="Text">{Param1}</Value>
   </Eq>
  </And>
 </Where>
 <OrderBy>
  <FieldRef Name="ID" Ascending="FALSE"></FieldRef>
 </OrderBy>
</Query>

Что мне НУЖНО, так это ...

В псевдокоде:

Если {Param1} равен "Все провайдеры", просто отфильтруйте статус, где Статус равен "Отправлено" или "Выполняется" иначе, если {Param1} не равен фильтру «Все провайдеры» в статусе и провайдере, где статус равен «Отправлено» или «Выполняется», а провайдер равен {Param1}

Как поместить это в схему View XML?

Я знаю, что это можно сделать, поскольку Microsoft уже использует его в SharePoint, и есть сторонние элементы управления, которые делают это.

Например ...

1) В SP нажмите «Списки» в левом меню навигации.

2) Справа, под окном поиска ', вы увидите «View:» с выпадающим списком.

3) В зависимости от того, какое представление вы выберете, строка запроса URL-адреса содержит «BaseType», который изменяется на значение по вашему выбору. Если выбран «Весь контент сайта», «Базовый тип» не включается в строку запроса.

Спасибо, Joshua

1 Ответ

1 голос
/ 30 августа 2011

Прежде всего, я думаю, вам лучше добавить веб-часть фильтра для поля поставщика, поскольку это позволяет вам не фильтровать пустое значение.

Если вы должны иметь параметр, который фильтрует «Все провайдеры», вы можете создать вычисляемое поле в вызове списка, скажем, AllProviders, по формуле:

="All Providers"

Это позволяет вводить предложение запроса следующим образом:

<Query>
  <Where>
    <And>
      <Or>
        <Eq>
          <FieldRef Name="AllProviders"/>
          <Value Type="Text">{Param1}</Value>
        </Eq>
        <Eq>
          <FieldRef Name="Provider"/>
          <Value Type="Text">{Param1}</Value>
        </Eq>
      </Or>
      <Or>
        <Eq>
          <FieldRef Name="Status"/>
          <Value Type="Lookup">In Progress</Value>
        </Eq>
        <Eq>
          <FieldRef Name="Status"/>
          <Value Type="Lookup">Submitted</Value>
        </Eq>
      </Or>
    </And>
  </Where>
</Query>

Поле «Состояние» всегда будет соответствовать «Выполняется» или «Отправлено».

Если ваш параметр = "Все поставщики", то вы будете сопоставлять рассчитанное поле, в противном случае вы будете совпадать с полем поставщика.

Обратите внимание, что это не позволяет вам звонить провайдеру "Все провайдеры".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...