web-services - online - para que sirve el calendario de office 365
¿Expandir eventos recurrentes desde un calendario Sharepoint sobre WebServices? (4)
¿Es posible obtener una lista de eventos (con eventos recurrentes expandidos) fuera del Calendario de Sharepoint usando el servicio web expuesto a través de Lists.aspx?
Esto es evidentemente posible si está usando C # o VB, como se describe aquí usando un fragmento como este:
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>";
Estoy tratando de hacer lo mismo usando XML simple a través de cURL con esta consulta:
<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>
Esto funciona: obtiene todos los elementos de la lista, pero los elementos recurrentes no se expanden. La clave parece ser la propiedad Expandircurrencia. Sorprendentemente, Google no parece tener mucho que decir al respecto más allá de un par de publicaciones en el blog. Recorriendo la Web, he leído algunos comentarios que indican que la propiedad ExpandRecurrence no funciona, pero otros dicen que funciona bien y nada de lo que he leído me ha parecido definitivo.
¿Alguien ha intentado esto y lo ha hecho funcionar sin usar C # o VB, solo XML?
La forma en que rastrearía este problema sería usar algo como TcpTrace ( http://www.pocketsoap.com ) para ver los paquetes XML que se envían. Luego, se trata de asegurarse de que el paquete XML hecho a mano tenga el mismo aspecto. Espero que cuando vea el paquete XML, la diferencia sea obvia. Entonces puedes actualizar esta pregunta con la respuesta.
No, no es posible. Debería usar el modelo de objeto SP a través, por ejemplo, del objeto SPQuery. Pero eso significaría que tendría que ejecutar ese código directamente en el servidor de SharePoint, en lugar de llamar desde un cliente.
Por favor mira esta publicación mía; http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/3c399768-c492-4d7e-8f6e-fa304ed03131
Finalmente, esto funcionó correctamente y devuelve todos los eventos recurrentes en un calendario de SharePoint. Aquí está el XML para la consulta del servicio web:
<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>
La clave no solo fue establecer la opción ExpandirRecurrence en verdadero; también debe incluir el valor en DateRangeOverlap en Year.
Creo que he tenido un problema similar en el que solo estaba devolviendo los elementos en una lista y no expandiendo realmente los elementos recurrentes (es decir, un elemento marcado como que ocurre todos los lunes solo se muestra como un solo registro en lugar de múltiples).
Aparentemente, la versión 12.0.0.6421 (2007 SP1) no expande los elementos, incluso cuando se lo indica a través de las API del servicio web. Cuando aplicamos las últimas actualizaciones acumulativas (agosto de 2011), funcionó como esperábamos (es decir, devolvería las múltiples entradas programadas cada lunes).
Aquí estaba el código que tuve que funcionó una vez que aplicamos CUs:
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");