Проблема с ИЛИ в Sharepoint CAML - PullRequest
3 голосов
/ 16 марта 2012

Я пытаюсь запросить список и получить статьи новостных рассылок, которые соответствуют списку активных новостных рассылок.

Проблема возникает при попытке вытащить предметы через CAML. Если я делаю цикл ИЛИ с двумя КОНТЕЙНАМИ, он прекрасно работает. Например:

<Where>
  <Or>
    <Contains>
      <FieldRef Name=\"Newsletter_x0020_Name\"/>
      <Value Type=\"Lookup\">April 2012</Value>
    </Contains>
    <Contains>
      <FieldRef Name=\"Newsletter_x0020_Name\"/>
      <Value Type=\"Lookup\">May 2012</Value>
    </Contains>
  </Or>
</Where>

Отлично работает!

Добавьте в третью строку, и у нас возникнут проблемы:

<Where>
  <Or>
    <Contains>
      <FieldRef Name=\"Newsletter_x0020_Name\"/>
      <Value Type=\"Lookup\">April 2012</Value>
    </Contains>
    <Contains>
      <FieldRef Name=\"Newsletter_x0020_Name\"/>
      <Value Type=\"Lookup\">May 2012</Value>
    </Contains>
    <Contains>
      <FieldRef Name=\"Newsletter_x0020_Name\"/>
      <Value Type=\"Lookup\">June 2012</Value>
    </Contains>
  </Or>
</Where>

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

Помощь

1 Ответ

4 голосов
/ 16 марта 2012

Я также усвоил этот трудный путь - CAML-группировки <And> и <Or> работают только в парах для выражения логической логики.

УмныйНемного (или раздражает, в зависимости от того, как вы на это смотрите) является то, что группировки также работают как сами условия.Так что в этом случае это будет выглядеть так:

<Or>
    <Or>
        <Condition1/>
        <Condition2/>
    </Or>
    <Condition3/>
</Or>

В приведенном выше случае мы говорим: «Либо это выражение истинно, либо Condition3 истинно»;у первого выражения также есть подвыражение, которое оценивается и всплывает, чтобы представить единственное логическое значение.

Если вы в конечном итоге напишите много сложных запросов в своих приложениях, как я, я настоятельно рекомендуюскрывая его за API или хорошей объектной моделью, такой как LINQ, потому что XML очень громоздко писать вручную и легко испортить.

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