2013-05-14 228 views
2

当发送一个滤光器在PHP一切web服务工作正常,但是当我们需要排序的日期,我们遇到了一个问题。我们需要在某个日期之后获取所有对象的修改。日期筛选

在一个页面,我们有一个日期元素,像这样:

<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作为bigint存储为unix时间戳,会有帮助吗?

回答

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个记录我在我的基地变迁自一月份以来) 同样的反应是正确的,如果我把01012013..01.01.2013..甚至01/01/2013..但错误将在响应中返回了20130101..

在响应THI s字段有这样的值<Date>2013-05-15</Date>这是我的位置虽然不正确的格式。

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

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

如果没有什么可以帮助尝试SOAPui来了解Nav响应是否正确指示消息(请参阅上面的格式或使用wsdl文件喂养soapui)。

+0

我已经尝试了两个,我得到一个错误代码:“不是有效的日期”。 – nielsiano 2013-05-15 08:50:11

+0

需要更多信息。我不知道PHP如何使用Web服务。如果您发布发送给Nav的肥皂消息和来自Nav的肥皂响应,这将有所帮助。如果您使用某种隐藏您的消息的框架,请使用嗅探器来捕获它们。 – 2013-05-15 11:08:17

+0

我感谢您的帮助。我使用Freddy的方法通过PHP进行连接,如下所述:http://blogs.msdn.com/b/freddyk/archive/2010/01/19/connecting-to-nav-web-services-from-php .aspx – nielsiano 2013-05-15 11:25:30