문제

캘린더 목록에 대한 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

방금 해결책이 있습니다.

다른 스레드에서 읽었고 요약은 다음과 같습니다.

  1. 시작 필터와 끝 필터라는 두 개의 새 열을 만듭니다.이 열을 각각 [시작 시간] 및 [종료 시간]의 수식으로 계산 한 열을 계산하십시오.열은 날짜와 시간 \ 날짜 및 시간 유형이어야하며 기본보기에 표시되어서는 안됩니다.

  2. 고급 설정을 클릭하고 콘텐츠 유형 섹션의 "콘텐츠 유형 관리 허용"질문에 예를 선택하십시오.확인을 클릭하십시오.

    리바이빙 된 이벤트가있는 이벤트를 뿌리려는 쿼리는 다음과 같습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top