2009-02-27 13 views
2

Kann mir jemand mit dieser CAML-Abfrage helfen? Wenn ich das Ascending Attribut von TRUE zu FALSE (habe auch versucht True und False) umdrehen, sortiert es die Ergebnismenge nicht neu.CAML Abfrage nicht richtig bestellen

Der Rest der CAML ist korrekt, wird von einem Tool generiert und die entsprechenden Ergebnisse werden zurückgegeben.

<Where> 
    <And> 
    <And> 
     <Eq> 
     <FieldRef Name="Branch"/> 
     <Value Type="Text">Camp 1</Value> 
     </Eq>  
     <Eq> 
     <FieldRef Name="Type"/> 
     <Value Type="Choice">Day</Value> 
     </Eq> 
    </And> 
    <Geq> 
     <FieldRef Name="StartDateTime"/> 
     <Value Type="DateTime">2009-01-05T00:00:00Z</Value> 
    </Geq> 
    </And> 
    <OrderBy> 
    <FieldRef Ascending="TRUE" Name="Title" /> 
    </OrderBy> 
</Where> 

Antwort

9

Muss sich die OrderBy nicht außerhalb der Where-Klausel befinden?

<Where> 
    <And> 
    <And> 
     <Eq> 
     <FieldRef Name="Branch"/> 
     <Value Type="Text">Camp 1</Value> 
     </Eq>  
     <Eq> 
     <FieldRef Name="Type"/> 
     <Value Type="Choice">Day</Value> 
     </Eq> 
    </And> 
    <Geq> 
     <FieldRef Name="StartDateTime"/> 
     <Value Type="DateTime">2009-01-05T00:00:00Z</Value> 
    </Geq> 
    </And> 
    </Where> 
<OrderBy> 
    <FieldRef Ascending="TRUE" Name="Title" /> 
    </OrderBy> 

Siehe http://msdn.microsoft.com/en-us/library/ms442728.aspx

+0

doh! Ich starrte die Frage so lange an, dass ich die offensichtliche Antwort nicht sah. Ja, ich habe das Tool erstellt, das die Abfrage generiert. – Jason

4

ich mit der Antwort einverstanden sind, die <Abfrage> außerhalb des < sein muss Wo >. Bitte beachten Sie auch, dass, wenn sie mit Datetime-Feldern zu vergleichen, es ist generell eine gute Idee, das IncludeTimeValue Attribut enthalten:

<Geq> 
     <FieldRef Name="StartDateTime"/> 
     <Value Type="DateTime" IncludeTimeValue="FALSE">2009-01-05T00:00:00Z</Value> 
</Geq> 

und es zu falsch oder wahr gesetzt, je nachdem, ob Sie Zeitwert enthalten sein sollten oder nicht in Ihrem Abfrage.

+0

+1 für IncludeTimeValue – Jason

0

Ich verbrachte fast eine ganze Woche mit dem Versuch, Datumsaufträge mit dem Client OM CamlQuery-Objekt arbeiten zu lassen. Schließlich erkannte ich, dass ich

camlQuery.DatesInUtc = true; 

Es scheint mir gesetzt hatte, dass wenn Sie ein neueres Objektmodell verwenden und die SPQuery Objekt, dass Sharepoint, dieses Datum als UTC standardmäßig interpretiert (in unserer Umgebung), sobald Sie bewegen Zum CamlQuery-Objekt mit dem ClientOM müssen Sie diesen Parameter festlegen.