Microsoft Dynamics NAV Web 服务中的日期过滤器

nie*_*ano 3 microsoft-dynamics soap wsdl navision dynamics-nav

在 php 中向 webservice 发送过滤器时一切正常,但是当我们需要对日期进行排序时,我们遇到了问题。我们需要在某个日期之后修改所有对象。

在页面中,我们有一个日期元素,如下所示:

<xsd:element minOccurs="0" maxOccurs="1" name="Last_Date_Modified" type="xsd:date"/>
Run Code Online (Sandbox Code Playgroud)

我们已经尝试了在 SO 上解释的解决方案:

Dynamics Nav (Navision) webservice ReadMultiple date filter

但是我们的日期格式有点不同,我们的看起来像: 2013-01-01

在我们的过滤器中,我们尝试了以下方法:

array(
    'Field' => 'Last_Date_Modified',
    'Criteria' => '20130101..'
)
Run Code Online (Sandbox Code Playgroud)

以及其他一些变体,但它不返回任何内容。如果我们将其留空,它将返回所有内容。有没有人知道我们可以做什么?如果我们以某种方式将 last_modified_date 存储为像 unix 时间戳这样的 bigint 会有帮助吗?

Mak*_*Sim 6

我已经用 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>
Run Code Online (Sandbox Code Playgroud)

它导致正确的响应,如果我把(与3条我在我的基地自一月改变)同样的反应是正确的01012013..或者01.01.2013..甚至01/01/2013..但错误会响应的返回20130101..

作为回应,这个字段有这样的值<Date>2013-05-15</Date>,但对于我的位置来说这是不正确的格式。

因此,您的导航服务器正在等待您的请求中的其他日期格式。检查导航服务器的CustomSettings.config文件,看看它是否有<add key="ServicesCultureDefaultUserPersonalization" value="true"/>密钥。如果您将其设置为“false”,则服务器将以 en-us 日期和数字格式工作。

还要检查User Personalization导航中的表格。如果先前的键设置为 true,则 Nav 将尝试使用此表中为用户定义的语言设置。

如果没有任何帮助,请尝试使用 SOAPui 来确定 Nav 响应对直接消息是否正确(请参阅上面的格式或使用您的 wsdl 文件提供 soapui)。