Answered 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


すべての返信

  • 2012年5月25日 18:38
     
     
    Hi 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:24
     
     
    Das 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

  • 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:46
     
     
    Hi 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:07
     
     
    Eine 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