CAML 쿼리를 캘린더에서 다음 이벤트를 얻으려면
-
10-12-2019 - |
문제
캘린더 목록에 대한 CAML 쿼리를 작성하는 데 문제가 있습니다. 다음은 내 CAML 쿼리 입니다
SPQuery query = new SPQuery();
StringBuilder sb = new StringBuilder();
sb.Append("<Where>");
sb.Append("<And>");
sb.Append("<DateRangesOverlap>");
sb.Append("<FieldRef Name='EventDate' /><FieldRef Name='EndDate' /><FieldRef Name='RecurrenceID' />");
sb.Append("<Value Type='DateTime'><Month /></Value>");
sb.Append("</DateRangesOverlap>");
sb.Append("<Geq><FieldRef Name='EventDate'/><Value Type='DateTime'><Today Offset='-1'/></Value></Geq>");
sb.Append("</And>");
sb.Append("</Where>");
sb.Append("<OrderBy><FieldRef Name='EventDate' /></OrderBy>");
query.RowLimit = numberOfUpcomingEvents;
query.Query = sb.ToString();
query.ExpandRecurrence = true;
query.CalendarDate = DateTime.Now;
.
현재 날짜보다 먼저 시작하는 반복적 인 이벤트가 있지만 다음 재발은 현재 날짜에 올바르게 작동하지 않는다는 것입니다. 단일 이벤트로 재발 발생 이벤트를 검색하는 방법
누구나 제안이 있습니까?
해결책 3
방금 해결책이 있습니다.
다른 스레드에서 읽었고 요약은 다음과 같습니다.
-
시작 필터와 끝 필터라는 두 개의 새 열을 만듭니다.이 열을 각각 [시작 시간] 및 [종료 시간]의 수식으로 계산 한 열을 계산하십시오.열은 날짜와 시간 \ 날짜 및 시간 유형이어야하며 기본보기에 표시되어서는 안됩니다.
-
고급 설정을 클릭하고 콘텐츠 유형 섹션의 "콘텐츠 유형 관리 허용"질문에 예를 선택하십시오.확인을 클릭하십시오.
리바이빙 된 이벤트가있는 이벤트를 뿌리려는 쿼리는 다음과 같습니다.
.<Query> <OrderBy> <FieldRef Name='EventDate' /> </OrderBy> <Where> <Or> <And> <Leq> <FieldRef Name='Start_x0020_Filter' /> <Value Type='DateTime'> <Today Offset='-1' /> </Value> </Leq> <Geq> <FieldRef Name='End_x0020_Filter' /> <Value Type='DateTime'> <Today Offset='-1' /> </Value> </Geq> </And> <Geq> <FieldRef Name='Start_x0020_Filter' /> <Value Type='DateTime'> <Today Offset='-1' /> </Value> </Geq> </Or> </Where> </Query>
이제 모든 다가오는 이벤트를 필터링 할 수 있습니다
다른 팁
추가 옵션을 추가하십시오 <QueryOptions><RecurrencePatternXMLVersion>v3</RecurrencePatternXMLVersion><ExpandRecurrence>TRUE</ExpandRecurrence></QueryOptions>
이
using (SPSite spsite = SPContext.Current.Site)
{
using (SPWeb web = spsite.OpenWeb())
{
SPQuery query = new SPQuery();
SPList list = web.Lists["CalendarList"];
query. ExpandRecurrence = true;
// query.RowLimit = 20;
query.Query = @"<Where><DateRangesOverlap><FieldRef Name='EventDate' /><FieldRef Name='EndDate' /><FieldRef Name='RecurrenceID' /><Value Type='DateTime'><Now /></Value></DateRangesOverlap></Where><OrderBy><FieldRef Name='EventDate' Ascending='True' /></OrderBy>";
query.ViewFields = "<FieldRef Name='Title' LinkToItem='TRUE'/><FieldRef Name='EventDate' /><FieldRef Name='EndDate' /><FieldRef Name='fRecurrence' /><FieldRef Name='RecurrenceData' /><FieldRef Name='Location' />";
SPListItemCollection listItems;
listItems = list.GetItems(query);
foreach (SPListItem item in listItems)
{
if (item["fRecurrence"].ToString() == "True")
{
Console.WriteLine(items["Titile"].ToString());
Console.ReadLine();
}
}
}
}
. 제휴하지 않습니다 sharepoint.stackexchange