0
votes

I have a CAML query that keeps throwing an error.

A first chance exception of type 'System.Web.Services.Protocols.SoapException' occurred in System.Web.Services.dll The thread 0x1574 has exited with code 0 (0x0).

Yeah so not very descriptive. I am guessing it is something to do with how I am using the "Or" element.

Here is what my query looks like:

<Where>
 <And>
   <IsNotNull>
     <FieldRef Name='myRefID' />
   </IsNotNull>
   <And>
    <Or>
      <In>
        <FieldRef Name='myRefID' />
        <Values>
          <Value Type='Number'>1</Value>
      <Value Type='Number'>2</Value>
      <Value Type='Number'>3</Value>
      <Value Type='Number'>4</Value>
      ...
      <Value Type='Number'>499</Value>
        </Values>
      </In>
      <In>
    <FieldRef Name='myRefID' />
    <Values>
          <Value Type='Number'>500</Value>
      <Value Type='Number'>501</Value>
      <Value Type='Number'>502</Value>
      <Value Type='Number'>503</Value>
      ...
      <Value Type='Number'>999</Value>
    </Values>
      </In>
      <In>
        <FieldRef Name='myRefID' />
        <Values>
                <Value Type='Number'>1000</Value>
          <Value Type='Number'>1001</Value>
          <Value Type='Number'>1002</Value>
          <Value Type='Number'>1003</Value>
          ...
          <Value Type='Number'>1111</Value>
        </Values>
      </In>
    </Or>
  </And>
 </And>
</Where>

Also to note that I need to search for specific IDs hence that is why I am using so many IN clauses. The ids are in order above just for illustration purposes. In my real case example the numbers are not in order. So I can't use a query that searches between a start and ending number.

2

2 Answers

1
votes

You could try this query, you don't need operator "and" and "or", remember operators in CAML works only with 2 elements.

<Where>
    <And>
        <IsNotNull>
            <FieldRef Name='myRefID' />
        </IsNotNull>
        <In>
            <FieldRef Name='myRefID' />
            <Values>
                <Value Type='Number'>1</Value>
                <Value Type='Number'>2</Value>
                <Value Type='Number'>3</Value>
                <Value Type='Number'>4</Value>
                <Value Type='Number'>499</Value>
            </Values>
        </In>
    </And>
</Where>
0
votes

You have a semantic error. Just remove this wrapper element:

<Where>
  <And>
    <IsNotNull>
      <FieldRef Name='myRefID' />
    </IsNotNull>
    <And> <<================================ remove it 
       <Or>
        <In>
          <FieldRef Name='myRefID' />
          <Values>
            <Value Type='Number'>1</Value>
            <Value Type='Number'>2</Value>

To simplify CAML query creation, use the tools:

  1. Caml Designer - the best, in my opinion
  2. MSDN officially recommended tools