2009-06-17 43 views
0

我在與Web應用程序相同的服務器上運行此查詢,因此SPQuery.ExpandRecurrence應該可以工作。但是,以下我只收到3件物品,而3件物品和再次出現物都在本月內。我如何獲得反覆出現的SharePoint日曆列表項

我用Stramit Caml Viewer驗證過該查詢是否有效,並返回相同的3個項目。

請告訴我我錯過了一些明顯的東西?

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); 
    } 

回答

2

我不熟悉查詢日曆項目,但是我對使用SPQuery.Query屬性的<Query>標籤有問題。如果您刪除這兩條線路是否正常工作:

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

最好的,這是需要所有的,現在的工作。非常感謝! – Marc 2009-06-18 16:08:38

0

嘿你在用什麼列表視圖?

由於您未指定從中檢索項目的視圖,因此它將從默認視圖中選取查詢結果。

任何機會你的默認視圖是日曆視圖以外的任何東西嗎? 因爲我認爲ExpandRecurrence只適用於日曆視圖而不是任何其他視圖。

1

這是好主意,視圖名領帶傳遞給您的自定義查詢如下圖所示

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; 
} 
相關問題