2011-02-25 6 views
2

셰어 포인트 캘린더보기 필터링에 재미있는 문제가 있습니다. 그 코드가 잘 작동 :caml 쿼리로 셰어 포인트 캘린더보기 필터링

SPSecurity.RunWithElevatedPrivileges(delegate() 
      { 
       using (SPSite siteCollection = new SPSite(SPContext.Current.Web.Site.ID)) 
       { 
        using (SPWeb site = siteCollection.OpenWeb()) 
        { 
         site.AllowUnsafeUpdates = true; 
         SPView view = site.Lists["My Calendar"].Views["Calendar"]; 
         view.Query = @"<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>ololo</Value></Eq></Where>"; 
         view.Update(); 
         site.AllowUnsafeUpdates = false; 
        } 
       } 
      }); 

을하지만

SPSecurity.RunWithElevatedPrivileges(delegate() 
      { 
       using (SPSite siteCollection = new SPSite(SPContext.Current.Web.Site.ID)) 
       { 
        using (SPWeb site = siteCollection.OpenWeb()) 
        { 
         site.AllowUnsafeUpdates = true; 
         SPView view = site.Lists["My Calendar"].Views["Calendar"]; 
         view.Query = @"<Where><Or><Eq><FieldRef Name='Title'/><Value Type='Text'>ololo</Value></Eq><Eq><FieldRef Name='Title'/><Value Type='Text'>trololo</Value></Eq></Or></Where>"; 
         view.Update(); 
         site.AllowUnsafeUpdates = false; 
        } 
       } 
      }); 

에 쿼리를 변경할 때 나는 예외를 얻을 :

입력 문자열이 올바른 형식이 아니 었합니다. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오.

예외 정보 : System.FormatException : 입력 문자열의 형식이 올바르지 않습니다.

소스 오류 :

처리되지 않은 예외가 현재 웹 요청을 실행하는 동안 생성되었습니다. 예외의 출처와 위치에 관한 정보는 아래의 예외 스택 추적을 사용하여 식별 할 수 있습니다.

스택 추적 :

[FormatException을 :. 입력 문자열이 올바른 형식이 아니었다] System.Number.StringToNumber (문자열 str을, NumberStyles 옵션 NumberBuffer & 번호,하는 NumberFormatInfo 정보, 부울 parseDecimal) 10161091 System.Number.ParseInt32 (String를, NumberStyles 스타일,하는 NumberFormatInfo 정보) 207 System.Convert.ToInt32 (문자열 값, IFormatProvider를 공급자) +55 Microsoft.SharePoint.Utilities.SPUtility.CreateSystemDateTimeFromXmlDataDateTimeFormat (문자열 strDT, 부울 fPreserveMilliseconds) + 174 Microsoft.SharePoint.ApplicationPages.Calendar.SafeFieldAccesso r.GetDateTimeFieldValue (SPItem 항목, 문자열의 fieldName) 227 Microsoft.SharePoint.ApplicationPages.Calendar.CalendarItemRetriever.b_ 0 (SPItem 항목) +24 System.Linq.WhereListIterator 1.MoveNext() +288 System.Linq.<ExceptIterator>d__92 1.MoveNext() 322 을 System.Linq .Buffer 1..ctor(IEnumerable 1 소스) 548 System.Linq.d _0.MoveNext() 164 Microsoft.SharePoint.ApplicationPages.Calendar.CalendarItemRetriever.ConvertItemType (IEnumerable을 1 items) +578 Microsoft.SharePoint.ApplicationPages.Calendar.DefaultCalendarListAccessor.Retrieve(String selectedDate, String scope, Dictionary entityInfo 2) +18 Microsoft.SharePoint.ApplicationPages.Calendar .CalendarService.CreateStartupResponse (ICalendarAccessor 접근 자, Dictionary2 매개 변수, String viewType, String selectedDate) +249 Microsoft.SharePoint.ApplicationPages.WebControls.AjaxCalendarView.Cre ateStartupData (문자열 viewType, 문자열되어 selectedDate) 462 Microsoft.SharePoint.ApplicationPages.WebControls.AjaxCalendarView.CreateBodyOnLoadScript (SPWeb 웹) 306 Microsoft.SharePoint.ApplicationPages.WebControls.AjaxCalendarView.OnPreRender (EventArgs입니다 전자) 425 System.Web .UI.Control.PreRenderRecursiveInternal() 108 System.Web.UI.Control.PreRenderRecursiveInternal() 224 System.Web.UI.Control.PreRenderRecursiveInternal() 224 System.Web.UI.Control.PreRenderRecursiveInternal() 224 System.Web.UI.Control.PreRenderRecursiveInternal() 224 System.Web.UI.Control.PreRenderRecursiveInternal() 224 System.Web.UI.Control.PreRenderRecursiveInternal() 224 System.Web.UI .Control.PreRe nderRecursiveInternal() +224 System.Web.UI.Control.PreRenderRecursiveInternal() +224 System.Web.UI.Page.ProcessRequestMain (부울 includeStagesBeforeAsyncPoint, 부울 includeStagesAfterAsyncPoint) +3394

아무도 그 문제를 해결하는 방법을 알고 있습니까?

+0

비트 OT이지만 RunWithElevatedPermissions를 왜 사용하고 있습니까? 보안 트리밍을 의도적으로 우회하지 않는 한, 그리고이 질문에 실제로 관련이 없더라도 코드 스 니펫을 혼란스럽게하는 것은 아닙니다. – Ryan

답변

1

문제가 해결되었습니다. "DateRangesOverlap"이 일정 관리 쿼리에 추가되어야합니다.

view.Query = @"<Where><And><DateRangesOverlap> 
    <FieldRef Name='EventDate' /> 
    <FieldRef Name='EndDate' /> 
    <FieldRef Name='RecurrenceID' /> 
    <Value Type='DateTime'><Month /></Value> 
</DateRangesOverlap> 
<Or><Eq><FieldRef Name='Title' /> 
<Value Type='Text'>orlolo</Value></Eq> 
<Eq><FieldRef Name='Title' /> 
<Value Type='Text'>trololo</Value></Eq> 
</Or></And></Where>"; 
+1

나도 devv VM에서 이것을 재현 할 때 이것을 알아 차렸다. 그러나 DateRangesOverlap 노드가 없으면 나를 위해 일했다. 그것이 당신을 위해 일하는 경우에, 그것은 차갑다. –

0

제목 "trololo"가있는 항목이 귀하의 페이지를 "트롤링"하지 않고 잘못된 데이터로 인해 페이지를 깨뜨린 것이 확실합니까?

UI에서 해당보기를 수동으로 만들 수 있는지 확인한 다음 콘솔 앱을 작성하여 거기에 들어가서 쿼리에 대해 생성되는 내용을 인쇄하십시오. 방금 했었고 쿼리는 당신의 예제와 문법적으로 동일합니다.

+0

쿼리에 두 번째 조건을 추가 할 때만 문제가 발생합니다. 하나의 조건 쿼리만으로 어떤 제목으로도 잘 작동합니다. – avgorohov