2009-06-17 4 views
0

Im Ausführen dieser Abfrage auf dem gleichen Server wie die Webanwendung, so SPQuery.ExpandRecurrence sollte funktionieren. Mit dem Folgenden erhalte ich jedoch nur 3 Elemente in der zurückgegebenen Auflistungssammlung im Vergleich zu den 3 Elementen und den erneuten Vorkommen, die alle in den aktuellen Monat fallen.Wie bekomme ich wiederkehrende SharePoint Kalender List Items

Ich habe mit Stramit Caml Viewer überprüft, dass die Abfrage funktioniert, und gibt die gleichen 3 Elemente zurück.

Bitte sagen Sie mir, ich vermisse etwas offensichtlich offensichtlich?

static SPListItemCollection GetSourceColl(SPList list) 
    { 
     SPQuery query = new SPQuery(); 
     query.ExpandRecurrence = true; 
     query.CalendarDate = new DateTime(DateTime.Now.Year,DateTime.Now.Month, 1); 

     System.Text.StringBuilder oSb = new System.Text.StringBuilder(); 

     oSb.Append("  <Query xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\">"); 
     oSb.Append("   <Where>"); 
     oSb.Append("    <And>"); 
     oSb.Append("     <DateRangesOverlap>"); 
     oSb.Append("      <FieldRef Name=\"EventDate\" />"); 
     oSb.Append("      <FieldRef Name=\"EndDate\" />"); 
     oSb.Append("      <FieldRef Name=\"RecurrenceID\" />"); 
     oSb.Append("      <Value Type=\"DateTime\">"); 
     oSb.Append("        <Month />"); 
     oSb.Append("      </Value>"); 
     oSb.Append("     </DateRangesOverlap>"); 
     oSb.Append("     <And>"); 
     oSb.Append("      <And>"); 
     oSb.Append("        <Eq>"); 
     oSb.Append("         <FieldRef Name=\"Status\" />"); 
     oSb.Append("         <Value Type=\"Text\">Finalized</Value>"); 
     oSb.Append("        </Eq>"); 
     oSb.Append("        <Leq>"); 
     oSb.Append("         <FieldRef Name=\"DistributionStartDate\" />"); 
     oSb.Append("         <Value Type=\"DateTime\">"); 
     oSb.Append("          <Today />"); 
     oSb.Append("         </Value>"); 
     oSb.Append("        </Leq>"); 
     oSb.Append("      </And>"); 
     oSb.Append("      <Neq>"); 
     oSb.Append("        <FieldRef Name=\"Distribution\" />"); 
     oSb.Append("        <Value Type=\"Text\">Intranet</Value>"); 
     oSb.Append("      </Neq>"); 
     oSb.Append("     </And>"); 
     oSb.Append("    </And>"); 
     oSb.Append("   </Where>"); 
     oSb.Append(" </Query>"); 
     query.Query = oSb.ToString(); 

     return list.GetItems(query); 
    } 

Antwort

2

Ich bin nicht vertraut mit der Abfrage von Kalenderelementen, jedoch hatte ich Probleme mit den <Query> Tags für die Eigenschaft SPQuery.Query. Ist es richtig, wenn Sie diese beiden Zeilen entfernen:

oSb.Append("<Query xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\">"); 
... 
oSb.Append("</Query>"); 
+0

Erstaunlich gezeigt, das war alles, was man brauchte, es funktioniert jetzt . Vielen Dank! – Marc

0

Hey, welche Listenansicht verwendest du?

Da Sie nicht die Ansicht angeben, von der Sie die Elemente abrufen, werden die Abfrageergebnisse von der Standardansicht übernommen.

Gibt es eine Chance, dass Ihre Standardansicht etwas anderes als eine Kalenderansicht ist? Weil ich denke, dass ExpandRecurrence nur für Kalenderansichten und nicht für andere Ansichten funktioniert.

1

Es ist gute Idee View Bindung an Ihre individuelle Abfrage übergeben, wie unten

private SPListItemCollection GetSourceColl(SPList list, string viewName) 
{ 
    SPQuery query = new SPQuery(); 
    query.ExpandRecurrence = true; 
    query.CalendarDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); 
    System.Text.StringBuilder oSb = new System.Text.StringBuilder(); 
    oSb.Append("<Query xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\">"); 
    oSb.Append("   <Where>"); oSb.Append("    <And>"); 
    oSb.Append("     <DateRangesOverlap>"); 
    oSb.Append("      <FieldRef Name=\"EventDate\" />"); 
    oSb.Append("      <FieldRef Name=\"EndDate\" />"); 
    oSb.Append("      <FieldRef Name=\"RecurrenceID\" />"); 
    oSb.Append("      <Value Type=\"DateTime\">"); 
    oSb.Append("        <Month />"); 
    oSb.Append("      </Value>"); 
    oSb.Append("     </DateRangesOverlap>"); 
    oSb.Append("     <And>"); 
    oSb.Append("      <And>"); 
    oSb.Append("        <Eq>"); 
    oSb.Append("         <FieldRef Name=\"Status\" />"); 
    oSb.Append("         <Value Type=\"Text\">Finalized</Value>"); 
    oSb.Append("        </Eq>"); 
    oSb.Append("        <Leq>"); 
    oSb.Append("         <FieldRef Name=\"DistributionStartDate\" />"); 
    oSb.Append("         <Value Type=\"DateTime\">"); 
    oSb.Append("          <Today />"); 
    oSb.Append("         </Value>"); 
    oSb.Append("        </Leq>"); 
    oSb.Append("      </And>"); 
    oSb.Append("      <Neq>"); 
    oSb.Append("        <FieldRef Name=\"Distribution\" />"); 
    oSb.Append("        <Value Type=\"Text\">Intranet</Value>"); 
    oSb.Append("      </Neq>"); 
    oSb.Append("     </And>"); 
    oSb.Append("    </And>"); 
    oSb.Append("   </Where>"); 
    oSb.Append(" </Query>"); 
    query.Query = oSb.ToString(); 
    SPListItemCollection itemColl = null; 
    if (string.IsNullOrEmpty(viewName)) 
    { 
     itemColl = list.GetItems(query); 
    } 
    else 
    { 
     itemColl = list.GetItems(query, viewName); 
    } 
    return itemColl; 
} 
Verwandte Themen