2013-05-22 4 views
2

Следующий запрос CAML не работает для меня .. Я мало знаю о платформе sharepoint. Я использую SP 2007 и пытаюсь использовать оператор IN для поля поиска.Оператор CAML IN и оператор AND с несколькими состояниями

"<Where>" 
           + "<And>" 
           + "<And>" 
           + "<In>" 
           + "<FieldRef Name='Role'/>" 
           + "<Values>" 
           + "<Value Type = 'Text'>A</Value>" 
           + "<Value Type = 'Text'>B</Value>" 
           + "</Values>" 
           + "</In>" 
           + "<Leq>" 
           + "<FieldRef Name='Enddate'/><Value Type = 'DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(Dt) + " </Value>" 
           + "</Leq>" 
           + "</And>" 
           + "<Includes>" 
           + "<FieldRef Name='Menu'/><Value Type='Text'>Benefits</Value>" 
           + "</Includes>" 
           + "</And>" 
           + "</Where>"; 

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

Если я немного изменю запрос, например, после использования IN, то он работает нормально.

"<Where>" 
           + "<And>" 
           + "<And>" 
           + "<Eq>" 
           + "<FieldRef Name='Role'/>" 
           //+ "<Values>" 
           + "<Value Type = 'Text'>A</Value>" 
           //+ "<Value Type = 'Text'>B</Value>" 
           //+ "</Values>" 
           + "</Eq>" 
           + "<Leq>" 
           + "<FieldRef Name='Enddate'/><Value Type = 'DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(Dt) + " </Value>" 
           + "</Leq>" 
           + "</And>" 
           + "<Includes>" 
           + "<FieldRef Name='Menu'/><Value Type='Text'>Benefits</Value>" 
           + "</Includes>" 
           + "</And>" 
           + "</Where>"; 

(Пожалуйста, не Предложите мне использовать CAML Query Builder Потому что я ничего не могу установить на моем DEV коробке. И Кроме того, я не установить SP WSS в мой местный :))

ответ

6

ИН оператор для CAML был введен в Sharepoint 2010. Вы не можете использовать его в Sharepoint 2007. Для достижения такого же результата вам придется писать его как OR.

<Or> 
<Eq> 
    <FieldRef Name='Role' /> 
    <Value Type='Text'>A</Value> 
</Eq> 
<Eq> 
    <FieldRef Name='Role' /> 
    <Value Type='Text'>B</Value> 
</Eq> 
</Or> 
+0

Спасибо Onots ... Я наткнулся на следующую ссылку, и он также сказал то же, что и вы:) http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/64e329f1-9f11-4c80-a2c3 -3062435c442a – Magesh

2

Если кто-то по-прежнему использовать Sharepoint 2007 и хотят использовать IN оператор с несколькими условиями, Вы можете достичь этого, как следующее, здесь я использовал «ИЛИ» оператор вместо «IN»

string lCAMLQuery =    "<Where>" 
             + "<And>" 
             + "<And>" 
              + "<Leq>" 
               + "<FieldRef Name='Enddate'/><Value Type = 'DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(Dt) + " </Value>" 
              + "</Leq>" 
             + "<Or>" 
              + "<Eq>" 
               + "<FieldRef Name='Role' />" 
               + "<Value Type='Text'>A</Value>" 
              + "</Eq>" 
              + "<Eq>" 
               + "<FieldRef Name='Role' />" 
               + "<Value Type='Text'>D</Value>" 
              + "</Eq>" 
             + "</Or>" 
             + "</And>" 
              + "<Includes>" 
               + "<FieldRef Name='Menu'/><Value Type='Text'>Benefits</Value>" 
              + "</Includes>" 
             + "</And>" 
            + "</Where>"; 
1
string lCAMLQuery = @"<Where> 
        <And> 
        <And> 
         <Leq> 
          <FieldRef Name='Enddate'/><Value Type = 'DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(Dt) + " </Value> 
         </Leq> 
        <Or> 
         <Eq> 
          <FieldRef Name='Role' /> 
          <Value Type='Text'>A</Value> 
         </Eq> 
         <Eq> 
          <FieldRef Name='Role' /> 
          <Value Type='Text'>D</Value> 
         </Eq> 
        </Or> 
        </And> 
         <Includes> 
          <FieldRef Name='Menu'/><Value Type='Text'>Benefits</Value> 
         </Includes> 
        </And>"; 
Смежные вопросы