Веб-часть запроса контента Sharepoint: отображение элементов из списка событий, которые должны произойти или повториться в течение месяца.

Я читал это сообщение msdn: http://msdn.microsoft.com/en-us/library/aa981241.aspx

пытается отредактировать веб-часть запроса содержимого, чтобы отображались только элементы из списка событий, которые либо происходят в течение 30 дней, либо повторяются в течение 30 дней. Легко справиться с событиями, которые не повторяются, потому что я могу сравнить [Дата начала] с [Сегодня] +30 с изменением этой общей конфигурации веб-части, но для повторяющихся событий кажется, что [Дата начала] и [Дата окончания ] описывают период, в течение которого должно произойти повторяющееся событие, и я не знаю, что делать, чтобы определить ближайшее приближающееся повторение события. Cqwp принимает только три элемента фильтра, поэтому я не могу обрабатывать как повторяющиеся, так и единичные элементы, не переопределяя запрос.

Я думаю, что поле, которое мне нужно использовать для повторного появления, является одним из следующих: msdn-microsoft-com / en-us / library / microsoft.sharepoint.spfieldrecurrence_members.aspx, но ни одно из них не кажется подходящим.

Что делать с повторным появлением "четвертого дня месяца" msdn-microsoft-com / en-us / library / microsoft.sharepoint.weekofmonth.aspx

В принципе, как вы переопределите запрос на фильтрацию повторяющихся и единичных событий, чтобы отображать только те, которые происходят в течение недели?

Я добавил следующий код в файл .webpart CQWP:

<Where>
<Or>
<And>
  <Neq>
    <FieldRef Name="FRecurrence"/>
    <Value Type="Recurrance">1</Value>
  </Neq>
  <And> 
    <Lt>
      <FieldRef Name="EventDate" Type="DateTime"/>
      <Value Type="DateTime"><Today OffsetDays="30"/></Value>
    </Lt>
    <Gt>
     <FieldRef Name="EventDate" Type="DateTime"/>
    <Value Type="DateTime"><Today /></Value>
    </Gt>
  </And>
</And>
<DataRangesOverlap>
  <FieldRef Name="EventDate" />
  <FieldRef Name="EndDate" />
  <FieldRef Name="RecirrenceId" />
  <Value Type="DateTime"><Month /></Value>
</DataRangesOverlap>
</Or>   
</Where>

but my page is returning: "Unable to add selected web part(s). The file format is not valid. Try importing a Web Part file (.WebPart)."


person Jack    schedule 17.06.2010    source источник


Ответы (1)


Повторяющиеся события SharePoint сложны. Этот пост - единственный лучший ресурс для понимания беспорядка повторяющихся событий.

Что такое календарь SharePoint и как его экспортировать в формат iCal

Я не думаю, что вы сможете сделать это в CEWP, но вы можете получить повторения, используя что-то вроде

    SPList list = oSPWeb.GetList(listGuid);
    SPQuery query = new SPQuery();
    query.ExpandRecurrence = true;
    query.CalendarDate = new DateTime(2010, 6, 17);

    query.Query = "<Where><DateRangesOverlap><FieldRef Name=\"EventDate\" /><FieldRef Name=\"EndDate\" /><FieldRef Name=\"RecurrenceID\" /><Value Type=\"DateTime\"><Week /></Value></DateRangesOverlap></Where>";
    SPListItemCollection listItems = list.GetItems(query);
    foreach (SPListItem items in listItems)
    {
        // items["EventDate"].ToString()
    }

Тогда вы получите повторяющиеся и разовые события, которые происходят на этой неделе.

Но имейте в виду, что это предназначено для использования в представлении календаря, поэтому, если вы, например,

query.CalendarDate = new DateTime(2010, 6, 17);
query.Query = "<Where><DateRangesOverlap><FieldRef Name=\"EventDate\" /><FieldRef Name=\"EndDate\" /><FieldRef Name=\"RecurrenceID\" /><Value Type=\"DateTime\"><Month /></Value></DateRangesOverlap></Where>";

(Обратите внимание на параметр «Месяц»), тогда вы получите все события, которые должны появиться в представлении календаря на этот месяц - то есть с 31 мая 2010 г. по 4 июля 2010 г.

person Ryan    schedule 17.06.2010
comment
Спасибо за ответ, Райан. Я использовал ваш идентификатор DateRangesOverLap. Но я думаю, что моя редакция ближе к тому, чего я хочу. Есть ли способ заменить ‹Месяц /› диапазоном вроде ‹Сегодня: Сегодня OffsetDays = 30 /›? - person Jack; 17.06.2010
comment
Я не думаю, что вы сможете это сделать с помощью CQWP - вы не можете установить query.ExpandRecurrances. Я думаю, вам придется кодировать веб-часть. - person Ryan; 18.06.2010
comment
re: ‹Сегодня формат должен быть‹ Today Offset = 10 / ›, но опять же, я не думаю, что это сработает. ExpandRecurrances разработан для поддержки представлений календаря, которые требуют ежедневных / еженедельных и ежемесячных представлений, а не произвольных 10-дневных представлений. Вам нужно будет получить весь код обезьяны на этом;) - person Ryan; 18.06.2010
comment
Я переключил свой сайт на drupal, потому что календари создают представления более естественно в drupal. Кроме того, файловую систему можно настроить с помощью модуля файловой структуры и веб-разработчика достаточно хорошо, чтобы делать то, что может sharepoint. Drupal просто позволяет легко расширяться в отличие от sharepoint. - person Jack; 08.07.2010
comment
Есть ли способ унаследовать от ContentByQueryWebPart и изменить, а не заменить запрос, чтобы для ExpandRecurrence было установлено значение true? Я хотел бы просто создать CQWP для событий с добавлением этого одного изменения, но все примеры, которые я нахожу в Интернете, создают новые запросы к определенным спискам или типам контента, я по-прежнему хочу, чтобы это можно было настраивать с помощью стандартных свойств веб-части. - person Markus; 16.04.2014