2016-06-22 8 views
0

Ich brauche eine bestimmte Liste von Elementen aus einer Sharepoint-Liste.Warum Or Element funktioniert nicht beim Abrufen von Elementen in Sharepoint

Das ist mein Arbeitscode (gut für 2 Bedingungen, unter OR-Elemente):

 XmlDocument xmlDoc = new System.Xml.XmlDocument(); 
     XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", ""); 
     XmlNode ndQueryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", ""); 
     XmlNode ndQuery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", ""); 

     ndQueryOptions.InnerXml = "<IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>" + "<DateInUtc>TRUE</DateInUtc>"; 
     ndViewFields.InnerXml = @"<FieldRef Name=""Title"" />"; 

     ndQuery.InnerXml = "<Where><Or><Eq><FieldRef Name='Title'/><Value Type='Text'>Title1</Value></Eq><Eq><FieldRef Name='Title'/><Value Type='Text'>Title2</Value></Eq></Or></Where>"; 

     try 
     { 
      XmlNode ndListItems = ListsService.GetListItems(sharepointList, null, ndQuery, ndViewFields, null, ndQueryOptions, null); 
      MessageBox.Show(ndListItems.OuterXml); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 

Wenn jedoch die abgefragten Elemente unter dem OR-Elemente 2 überschreiten, sie uns 3 haben sagen, es wird und kehrt scheitern 500 Interner Serverfehler.

Ich weiß nicht, wo ich falsch gelaufen bin, wenn ich es kaputt mache, sehe ich kein Problem.

Irgendeine Idee?

Antwort

1

ODER kann nur genau zwei untergeordnete Knoten haben. Wenn Sie ODER drei Bedingungen zusammen wollen, müssen Sie ODER zwei von ihnen, und dann Oder der Knoten mit Ihrer anderen Bedingung.

<Where> 
    <Or> 
     <Eq> 
     <FieldRef Name="Title" /> 
     <Value Type="Text">Title1</Value> 
     </Eq> 
     <Or> 
     <Eq> 
      <FieldRef Name="Title" /> 
      <Value Type="Text">Title2</Value> 
     </Eq> 
     <Eq> 
      <FieldRef Name="Title" /> 
      <Value Type="Text">Title3</Value> 
     </Eq> 
     </Or> 
    </Or> 
</Where> 
+0

können Sie ein Beispiel geben, wie es geht? (Es wäre nett, mein Beispiel zu verwenden.) ndQuery.InnerXml = " ... als Basis) – quinekxi

+0

obwohl ich an meinem Ende experimentieren werde. Danke. :) – quinekxi

+0

Ich habe es, aber das ist, wie ich es implementiert. quinekxi

1

CAML-Abfrage kann höchstens zwei Vergleichsanweisungen innerhalb oder Blöcke enthalten.

Also in Ihrem Fall sollte CAML Abfrage so sein.

<Where> 
     <Or> 
     <Or> 
      <Eq><condition></Eq> 
      <Eq><condition></Eq> 
     </Or> 
     <Eq><condition></Eq> 
     </Or> 
</Where>