Развернуть повторяющиеся события из календаря Sharepoint через веб-сервисы? - PullRequest
4 голосов
/ 18 декабря 2008

Можно ли получить список событий (с расширенными повторяющимися событиями) из календаря Sharepoint с помощью веб-службы, предоставляемой через Lists.aspx?

Это, очевидно, возможно, если вы используете C # или VB, как описано здесь , используя такой фрагмент:

SPQuery query = new SPQuery();
query.ExpandRecurrence = true;
query.Query = "<Where><DateRangesOverlap><FieldRef Name=\"EventDate\" /><FieldRef Name=\"EndDate\" /><FieldRef Name=\"RecurrenceID\" /><Value Type=\"DateTime\"><Month /></Value></DateRangesOverlap></Where>";

Я пытаюсь сделать то же самое, используя обычный XML через cURL с этим запросом:

<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>{my guid goes here}</listName>
<query>
    <Query xmlns="">
    <Where>
    <DateRangesOverlap>
      <FieldRef Name="EventDate" />
      <FieldRef Name="EndDate" />
      <FieldRef Name="RecurrenceID" />
      <Value Type="DateTime"><Month/></Value>
   </DateRangesOverlap>
    </Where>
    </Query>
</query>
<queryOptions>
    <QueryOptions>
    <ExpandRecurrence>TRUE</ExpandRecurrence>
    </QueryOptions>
</queryOptions>

Это вроде работает - он получает все элементы списка, но повторяющиеся элементы не раскрываются. Ключом является свойство ExpandRecurrence. Удивительно, но Google, кажется, не может сказать по этому поводу что-то большее, чем пара постов в блоге. Исследуя Интернет, я прочитал несколько комментариев, указывающих, что свойство ExpandRecurrence не работает, но другие говорят, что оно работает нормально, и ничего из того, что я прочитал, не показалось мне окончательным.

Кто-нибудь пробовал это и заставил работать без использования C # или VB - просто прямой XML?

Ответы [ 4 ]

5 голосов
/ 29 декабря 2010

Наконец-то все заработало и вернул все повторяющиеся события в календаре SharePoint. Вот XML для запроса веб-службы:

<GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>
<listName>{your GUID goes here}</listName>
<query>
 <Query>
  <Where>
   <DateRangesOverlap>
    <FieldRef Name=\"EventDate\" />
    <FieldRef Name=\"EndDate\" />
    <FieldRef Name=\"RecurrenceID\" />
    <Value Type='DateTime'><Year/></Value>
   </DateRangesOverlap>
  </Where>
 </Query>
</query>
<queryOptions>
 <QueryOptions>
  <ExpandRecurrence>TRUE</ExpandRecurrence>
 </QueryOptions>
</queryOptions>
</GetListItems>

Ключ не только устанавливал для параметра ExpandRecurrence значение true - вам также необходимо включить значение в DateRangeOverlap в Year.

2 голосов
/ 19 ноября 2011

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

Очевидно, версия 12.0.0.6421 (SP1 2007) не не расширяет элементы, даже если вы говорите, что это происходит через API веб-службы. Когда мы применили последние накопительные обновления (август 2011 г.), они работали так, как мы ожидали (то есть возвращали несколько запланированных записей каждый понедельник).

Вот код, который у меня работал, когда мы применили CU:

    Query for ndQuery:
--------------------
<Where>
<DateRangesOverlap>
<FieldRef Name=""EventDate"" /><FieldRef Name=""EndDate"" /><FieldRef Name=""RecurrenceID"" />
<Value Type=""DateTime""><Month/></Value>
</DateRangesOverlap>
</Where>>
<OrderBy><FieldRef Name='ID' /></OrderBy>

query options for ndQueryOptions:
-----------------------------------------------
<IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>
<DateInUtc>TRUE</DateInUtc>
<ViewAttributes Scope=\"Recursive\" />
<RecurrencePatternXMLVersion>v3</RecurrencePatternXMLVersion>
<ExpandRecurrence>True</ExpandRecurrence>
<CalendarDate>2011-10-16T00:00:00Z</CalendarDate>
<RecurrenceOrderBy>TRUE</RecurrenceOrderBy>
<ViewAttributes Scope=\"RecursiveAll\"/>

Web service call:
------------------------
XmlNode results = wsList.GetListItems("Events", String.Empty, ndQuery, ndViewFields, String.Empty, ndQueryOptions, "F43559AF-C643-4FF3-AAA3-77471A2D1979");
0 голосов
/ 04 июня 2009

Нет не возможно. Вам нужно будет использовать объектную модель SP через, например, объект SPQuery. Но это будет означать, что вам придется запускать этот код непосредственно на сервере sharepoint, а не звонить с клиента.

Пожалуйста, смотрите этот пост; http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/3c399768-c492-4d7e-8f6e-fa304ed03131

0 голосов
/ 07 февраля 2009

Чтобы отследить эту проблему, я бы использовал что-то вроде TcpTrace (http://www.pocketsoap.com) для просмотра отправляемых пакетов XML. Тогда нужно убедиться, что созданный вручную пакет XML выглядит То же самое. Я надеюсь, что когда вы увидите пакет XML, разница должна быть очевидной. Тогда вы можете обновить этот вопрос ответом.

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