Microsoft Dynamics NAV Web服务中的日期筛选器

时间:2013-05-14 11:47:37

标签: soap wsdl microsoft-dynamics dynamics-nav navision

在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会有帮助吗?

1 个答案:

答案 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>&gt;=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)。