Список фильтров Sharepoint Caml

Я хочу применить фильтр к списку Sharepoint:

(((пользователь == текущий пользователь) && (отдел == "редактор")) && ((статус == опубликовано) || (статус == отредактировано)|| (статус == напечатано)))

это мой код

     <Where>
  <And>
     <And>
        <And>
           <And>
              <And>
                 <Eq>
                    <FieldRef Name='Author' />
                    <Value Type='Integer'>
                       <UserID Type='Integer' />
                    </Value>
                 </Eq>
                 <Eq>
                    <FieldRef Name='Dept' />
                    <Value Type='Text'>Editor</Value>
                 </Eq>
              </And>
              <Eq>
                 <FieldRef Name='Status' />
                 <Value Type='Text'>Published</Value>
              </Eq>
           </And>
           <Eq>
              <FieldRef Name='Status' />
              <Value Type='Text'>Draft</Value>
           </Eq>
        </And>
        <Eq>
           <FieldRef Name='Status' />
           <Value Type='Text'>Approved</Value>
        </Eq>
     </And>
     <Eq>
        <FieldRef Name='Status' />
        <Value Type='Text'>Printed</Value>
     </Eq>
  </And>

Thank you in advance for your help


person Maklei    schedule 29.11.2013    source источник


Ответы (1)


Это помогает использовать оператор Or в вашем CAML и значения фильтра, соответствующие вашему запросу. Глядя на запрос, который у вас есть, похоже, что вы хотите получить все от текущего пользователя, когда документ находится в отделе редактирования и он опубликован, отредактирован или напечатан.

Таким образом, по сути, у вас есть набор условий для или, а затем применяются условия И поверх них. Теперь может быть более эффективный способ сформулировать это, но приведенное ниже соответствует вашим логическим условиям.

<Where>
  <And>
    <And>
      <Or>
        <Or>
          <Or>
            <Eq>
              <FieldRef Name='Status' />
              <Value Type='Text'>Published</Value>
            </Eq>
          </Or>
          <Eq>
            <FieldRef Name='Status' />
            <Value Type='Text'>Edited</Value>
          </Eq>
        </Or>
        <Eq>
          <FieldRef Name='Status' />
          <Value Type='Text'>Printed</Value>
        </Eq>
      </Or>
      <Eq>
        <FieldRef Name='Dept' />
        <Value Type='Text'>Editor</Value>
      </Eq>
    </And>
    <Eq>
      <FieldRef Name='Author' />
      <Value Type='Integer'>
        <UserID Type='Integer' />
      </Value>
    </Eq>
  </And>
</Where>
person GavinB    schedule 29.11.2013