금일 작업 중에, 일정 되풀이된 일정들을 SPQuery를 이용하여 SPListItemCollection을 가져오는 방법에 대해서

분석했습니다.

 

문제원인

만일 오늘 날짜에 해당하는 일정(되풀이 포함) 사항을 가져오려면 아래와 같이 작성하게 됩니다.

 

SPQuery query = new SPQuery();

// 쿼리문생성

query.Query = "<Where>"

               + "<DateRangesOverlap>"

               + "<FieldRef Name=\"EventDate\" />"

               + "<FieldRef Name=\"EndDate\" />"

               + "<FieldRef Name=\"RecurrenceID\" />"

               + "<Value Type=\"DateTime\">"

               + "<Today />"

               + "</Value>"

               + "</DateRangesOverlap>"

               + "</Where>";

SPListItemCollection listItems = list.GetItems(query);

 

위의 코드대로 작성하게 되면, listItems( SPListItemCollection )의 목록은

오늘 날짜에 해당하는 일정을 가져오는 동시에, 오늘 날짜의 이전 되풀이 일정(한주 기준)들도 함께 나오게 됩니다.

만일 오늘이 목요일이라고 하는 경우, 그 주의 월, , , 에 있는 되풀이들도 모두 나오게 됩니다.

(되풀이가 아닌 경우에는 정상적으로 나옵니다.)

 

즉 되풀이에 대한 별도 필터링 작업이 필요해지게 됩니다.

 

해결 방법

GetItems를 실행하기 전에, 아래와 같이 설정하면 됩니다.

(CalendarDate 부분은 읽어오려는 기준 날짜를 넣어주시면 됩니다.)

 

query.CalendarDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day);

query.RecurrenceOrderBy = true;

query.ExpandRecurrence = true;

 

위와 같이 넣고, GetItems를 하시면 정확히 원하는 되풀이만 가져올 수 있습니다.

728x90

+ Recent posts

728x90