getlistitemchanges方法中的动态日期

时间:2014-01-23 01:07:48

标签: soap wsdl xquery

我正在尝试使用此GetListItemChanges方法:

<GetListItemChanges xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>States At A Glance</listName>
<viewFields></viewFields>    
<since>2013-08-29T 19:52:52Z</since>
<contains></contains>
</GetListItemChanges>

有没有办法在“since”标签中使用动态日期。

例如,我希望字段值在当天的30天内发生变化。


更新

我读到当前的日期时间必须是UTC格式,所以尝试了以下代码:

(: SOAP payload, actual query goes here:)
let $soap-payload := ('<GetListItemChanges           xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>States At A Glance</listName>
<viewName>
<FieldRef Name="ows_Title" />
</viewName>
<since>fn:concat(fn:substring(fn:current-dateTime(),1,19), 'Z')</since>
</GetListItemChanges>')

但代码不起作用,请转到以下错误消息:

XQuery Engine error. syntax error, unexpected "'QName'", expecting "')'". Connection String: XQUERY;UID=ms\orbitad;. Connection String: XQUERY;UID=ms\orbitad;.

任何想法,为什么代码不起作用?

我其实想做现在的日期--30。

首先,我将完成这项工作,然后我将在当前日期 - 30。

@Jens Erat, UTC日期时间采用以下格式 - “2014-01-23T 00:00:00Z”。 “T”和小时“00”之间有一个空格。

所以,我稍微修改了你的代码并使用了以下代码     {fn:concat(fn:substring((fn:current-dateTime() - xs:dayTimeDuration('P30D'))强制转换为xs:string,1,11),'',fn:substring((fn:current- dateTime() - xs:dayTimeDuration('P30D'))强制转换为xs:string,12,8),'Z')}。

但是,它抛出了错误:axiom_node_create_from_buffer失败了。

Unable to create payload for SOAP Request. Check payload in xquery. 
Error type: XQuery Engine error. Module description accessed has invalid state

1 个答案:

答案 0 :(得分:0)

您的更新代码存在多个问题。

  • 我猜你不是XML作为字符串,而是XML内容?然后你必须删除引号。
  • 错误消息是因为您要在$soap-payload周围终止分配给'Z'的大字符串,然后有Z,然后开始下一个字符串。这不是有效的XQuery代码。你必须转义引号(如\'Z\'),但这仍然不会执行代码。
  • 代码未执行:在代码周围放置大括号{...}(如果您确实需要XML,而不是大字符串)或结束字符串,计算新日期,添加其余字符串和连接一切。

如果您想要返回一个字符串,请使用此代码:

let $soap-payload := concat('<GetListItemChanges           xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>States At A Glance</listName>
<viewName>
<FieldRef Name="ows_Title" />
</viewName>
<since>', fn:concat(fn:substring((fn:current-dateTime() - xs:dayTimeDuration('P30D')) cast as xs:string, 1, 19), 'Z'), '</since>
</GetListItemChanges>')

如果你想要XML:

let $soap-payload := <GetListItemChanges           xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>States At A Glance</listName>
<viewName>
<FieldRef Name="ows_Title" />
</viewName>
<since>{ fn:concat(fn:substring((fn:current-dateTime() - xs:dayTimeDuration('P30D')) cast as xs:string, 1, 19), 'Z') }</since>
</GetListItemChanges>