在php中向webservice发送过滤器时,一切正常,但是当我们需要对日期进行排序时,我们遇到了问题。我们需要在特定日期之后修改所有对象。
在页面中我们有一个日期元素,如下所示:
<xsd:element minOccurs="0" maxOccurs="1" name="Last_Date_Modified" type="xsd:date"/>
我们在SO上尝试了解决方案:
Dynamics Nav (Navision) webservice ReadMultiple date filter
但我们的日期格式有点不同,我们的日期格式如下:2013-01-01
在我们的过滤器中,我们尝试了以下内容:
array(
'Field' => 'Last_Date_Modified',
'Criteria' => '20130101..'
)
还有其他一些变化,但它不会返回任何东西。如果我们把它留空,它会返回所有内容。有没有人知道我们能做什么?如果我们以某种方式将last_modified_date存储为像unix时间戳这样的bigint会有帮助吗?
答案 0 :(得分:4)
我用SOAPui测试了类似的设置,这就是我所拥有的:
传出消息:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:obj="urn:microsoft-dynamics-schemas/page/objlist">
<soapenv:Header/>
<soapenv:Body>
<obj:ReadMultiple>
<obj:filter>
<obj:Field>Date</obj:Field>
<obj:Criteria>>=01012013</obj:Criteria>
</obj:filter>
<obj:bookmarkKey></obj:bookmarkKey>
<obj:setSize></obj:setSize>
</obj:ReadMultiple>
</soapenv:Body>
</soapenv:Envelope>
它会产生正确的响应(我的基数中有3条记录自1月以来已更改)
如果我提出01012013..
或01.01.2013..
或甚至01/01/2013..
,答案也是正确的,但会在20130101..
作为回应,此字段的值类似于此<Date>2013-05-15</Date>
,但我的位置格式不正确。
因此,您的导航服务器正在等待您的请求中的其他日期格式。检查Nav Server的CustomSettings.config
文件,看它是否有<add key="ServicesCultureDefaultUserPersonalization" value="true"/>
密钥。如果将其设置为“false”,则服务器将以en-us日期和数字格式工作。
同时在Nav中检查User Personalization
表。如果先前的键设置为true,则Nav将尝试使用此表中为用户定义的语言设置。
如果没有任何帮助,请尝试使用SOAPui查看Nav响应是否正确直接消息(请参阅上面的格式或使用wsdl文件提供soapui)。