Kalenderliste SPQuery OrderBy funktioniert nicht
-
2012年5月24日 7:05
Guten Morgen,
ich habe eine selbsterstelle Kalenderliste erstellt. Diese speichert für mehrere Mitarbeiter die Termine.
Jetzt möchte ich die Liste per SPQuery abfragen, nur leider funktioniert die Klausel <OrderBy> nicht. Egal was ich versuche.
Hier ein Auszug aus meinem Code:
SPList dataList = SPContext.Current.Site.RootWeb.Lists["Datenliste"]; SPQuery query = new SPQuery(); query.ExpandRecurrence = true; query.Query = "<Where> " + "<DateRangesOverlap> " + "<FieldRef Name='EventDate' ></FieldRef> " + "<FieldRef Name='EndDate' ></FieldRef> " + "<FieldRef Name='RecurrenceID' ></FieldRef> " + "<Value Type='DateTime'> " + "<Month /> " + "</Value> " + "</DateRangesOverlap> " + "</Where>" + "<OrderBy> " + "<FieldRef Name='ParticipantsPicker'/> " + "<FieldRef Name='EventDate' /> " + "</OrderBy>"; query.CalendarDate = new DateTime(viewdate.Year, viewdate.Month, 1, 0, 0, 0); SPListItemCollection items = dataList.GetItems(query);Kann mir jemand dieses Verhalten erklären?
Grüße
Oliver
- 編集済み Oliver Rzeniecki 2012年5月24日 7:06 Verschrieben
すべての返信
-
2012年5月25日 18:38Hi Oliver,ich habe Deine Abfrage mal nachgestellt und kann Dein Problem nicht erkennen. Was erwartest Du und was erhältst Du?--
Viele Gruesse
Peter -
2012年5月29日 6:33
Hi,
ich erwarte eigentlich sämtliche Ereignisse, die im aktuellen Monat sind. Sortiert nach Teilnehmer und dann nach Anfangsdatum. Leider bekomme ich eine unsortierte Liste.
Als weitere Info, ich nutze einen SharePoint Server 2010 SP 1 (Deutsch).
Grüße
Oliver
-
2012年5月29日 7:24Das kann ich nicht nachvollziehen. Ich habe Dein CAML kopiert und bekomme die Daten sortiert. Wie erkennst Du, dass die Daten nicht sortiert sind? D.h., wie zeigst Du sie an?--
Viele Gruesse
Peter -
2012年5月29日 7:54
Hi,
ich gehe die Elemente nach dem Query durch eine foreach Schleife durch. Wenn ich dann z.B. die ID des Mitarbeiters nutze kommen diese nicht sortiert an. Als Beispiel erst die 5, dann die 6, dann die 19 und anschließend wieder die 5. Das die Zahlen nicht in Reihenfolge sind, ist ja in Ordnung, da er ja nach den Mitarbeiternamen sortiert. Aber trotzdem sollten die IDs ja in Blöcken kommen. Zum Beispiel erst alle mit der 5 und dann alle mit der 3 etc.
Gibt es irgendwo im SharePoint eine Einstellung womit man dieses Verhalten steuern kann?
Grüße
Oliver
-
2012年5月29日 9:53
Hi Oliver,
ParticipantsPicker ist ein Looup-Feld. Wie man danach per CAML sortiert, weiß ich nicht. Ich mache es deshalb so:
Imports System Imports Microsoft.SharePoint Imports Microsoft.SharePoint.WebControls Namespace Layouts.test Partial Public Class demo2 Inherits LayoutsPageBase Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load End Sub Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Try Dim dataList = SPContext.Current.Site.RootWeb.Lists("Datenliste") Dim query = New SPQuery() query.ExpandRecurrence = True query.ViewFields = "<FieldRef Name='EventDate'/><FieldRef Name='EndDate'/><FieldRef Name='Title'/><FieldRef Name='ParticipantsPicker' Nullable='TRUE' />" query.Query = _ "<Where> " & _ "<DateRangesOverlap> " & _ "<FieldRef Name='EventDate' ></FieldRef> " & _ "<FieldRef Name='EndDate' ></FieldRef> " & _ "<FieldRef Name='RecurrenceID' ></FieldRef> " & _ "<Value Type='DateTime'> " & _ "<Month /> " & _ "</Value> " & _ "</DateRangesOverlap> " & _ "</Where>" & _ "<OrderBy> " & _ "<FieldRef Name='EventDate' /> " & _ "</OrderBy>" query.CalendarDate = New DateTime(Now.Year, 1, 1, 0, 0, 0) Dim items = From itm In dataList.GetItems(query) Let itm2 = CType(itm, SPListItem) Order By itm2("ParticipantsPicker").ToString _ Select New With {.ID = itm2("ID").ToString, .Title = itm2("Title").ToString, _ .EventDate = itm2("EventDate").ToString, _ .EndDate = itm2("EndDate").ToString, _ .ParticipantsPicker = If(itm2("ParticipantsPicker") Is Nothing, "", itm2("ParticipantsPicker").ToString)} Me.grid.DataSource = items Me.grid.DataBind() Catch ex As Exception Me.lblStatus.Text = ex.Message End Try End Sub End Class End Namespace
--
Viele Gruesse
Peter- 回答としてマーク Oliver Rzeniecki 2012年5月31日 9:00
-
2012年5月29日 12:39
Hi,
werde dein Beispiel einmal ausprobieren.
Grüße
Oliver
-
2012年5月31日 9:00
Hi,
habe das zwar jetzt über ein DataTable gelöst, allerdings finde ich es nach wie vor seltsam, das die Sortierung bei mir nicht funktioniert.
Vielleicht bekomme ich es ja irgendwann noch mal raus :-)
Grüße
Oliver
-
2012年5月31日 9:46Hi Oliver,Deine Antwort verstehe ich nicht: “habe das zwar jetzt ... gelöst, ... bei mir nicht funktioniert.”Hast Du es jetzt gelöst und es funktioniert, oder funktioniert es nicht, weil Du es noch nicht gelöst hast.--
Viele Gruesse
Peter -
2012年5月31日 9:51
Hi,
ich geben mir jetzt das Query in eine DataTable und sortiere dann. Die Sortierung über das Query funktioniert nach wie vor nicht.
Somit habe ich für mich einen Workaround geschaffen.
Grüße
Oliver
-
2012年5月31日 10:07Eine DataTable zu sortieren ist aber vergeudeter Aufwand. Besser ist es eine Sicht (DataView) zu nutzen, diese zu sortieren und diese dann zu nutzen.--
Viele Gruesse
Peter

