Фильтрация представления календаря Sharepoint с помощью запроса caml - PullRequest
2 голосов
/ 25 февраля 2011

Забавная проблема с фильтрацией представления календаря sharepoint.Этот код работает нормально:

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 (String str, параметры NumberStyles, NumberBuffer & number, информация NumberFormatInfo, логическое parseDecimal) +10161091 System.Number.Microsoft..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, Dictionary2 entityInfo) +18 микрosoft.SharePoint.ApplicationPages.Calendar.CalendarService.CreateStartupResponse (метод доступа ICalendarAccessor, параметры Dictionary`2, String viewType, String selectedDate) +249 Microsoft.SharePoint.ApplicationPages.WebControls.AjaxCalendarView.CreateStartupDate. String ViewingDate. StringSharePoint.ApplicationPages.WebControls.AjaxCalendarView.CreateBodyOnLoadScript (веб-сайт SPWeb) +306 Microsoft.SharePoint.ApplicationPages.WebControls.AjaxCalendarView.OnPreRender (EventArgs e) +425 System.Web.UI.Control.10Reender (Enterprise) (Reader).Control.PreRenderRecursiveInternal () +224 System.Web.UI.Control.PreRenderRecursiveInternal () +224 System.Web.UI.Control.PreRenderRecursiveInternal () +224 System.Web.UI.Control.PreRenderRecursiveInternal ()).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.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint) + 3394

Кто-нибудь знает, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

Проблема решена. «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>";
0 голосов
/ 25 февраля 2011

Вы уверены, что элемент с заголовком «трололо» не «троллит» вашу страницу и не ломает ее (возможно, из-за неверных данных)?

Посмотрите, можете ли вы вручную создать это представление в пользовательском интерфейсе, а затем напишите консольное приложение, которое будет там, и распечатайте его для запроса. Я только что сделал, и запрос был синтаксически идентичен вашему примеру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...