2012-11-19 191 views
1

我有一个应用程序使用MS-CRM 2011 Web服务检索crm实体上的最后更改。此应用程序使用Windows Mobile设备同步上次数据更改。 同步操作每20分钟定期进行一次。在每次同步操作中,我想通过检查实体的'modifiedon'字段来检索先前更新中发生的更改。 问题在于,CRM查询不使用DateTime对象的时间片段,并且返回了传递的DateTime参数的所有更改。检索查询时间范围(FetchXML/QueryExpression)

我会检查FetchXML和QueryExpression,没有什么不同。 有什么办法来创建一个查询运行在Crm WebService上,从指定的日期和时间返回修改的记录?

样品(我FetchXml):

<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> 
<entity name='new_brand'> 
<attribute name='new_brandname' /> 
<attribute name='new_pdanumber' /> 
<filter type='and'> 
<condition attribute='modifiedon' operator='on-or-after' value='2012/11/12 23:59'/> 
</filter> 
</entity> 
</fetch> 

看到在代码中,我想从2012年11月12日23:00所有修改过的实体,但CRM从2012年11月12日00返回所有修改的记录:00。

回答

0

我们已经为该实体添加了一个新字段(称为ModifiedOnTick),并在该字段中记录了具有固定日期(2011-01-01)的时间差(以毫秒为单位)。

0

您的代码正在查找23:59或之后更改的记录...您记录的结果听起来正确无误。

在任何情况下,时间部分使用,但我怀疑你看到用户时间与世界时间的结果。如果用户时区偏移量!= 0,则用户在UI中选择的午夜将与存储在与UST等效的数据库中的值不同。

+0

感谢您的回复。 '23:59'是一个示例,显示CRM不使用时间,并且在此时间(在选定日期)之前更改的所有记录都会返回。我需要一个查询(或高级查找),可以让实体在一天内的两次之间修改。 (2012/11/12 00:00至2012/11/12 23:58之间的样本变更实体不应在结果集中) – Behnam

+0

可能需要创建自定义工作流并为我的实体创建一个新字段(像ModifiedOnTicks),当实体'modifiedon'字段发生变化时,工作流程将运行并计算其值Ticks并存储在该字段中,但看起来这将成为一个循环。 – Behnam

+0

您对时间被忽略([见这里](http://social.microsoft.com/Forums/uk/crmdevelopment/thread/c5083689-65fb-474f-a7bc-2eff393016fe))是正确的。关于维护Ticks - 如果你把它放在一个预创建和更新前的插件中,你可以将该值作为事务的一部分注入,从而不会导致后续更新,希望这是有道理的。 –

0

我现在和最老的Dynamics CRM 2011组织有同样的问题。比较之后或之后没有比较时间,只有日期。尝试使用磨碎机或相等(fetchxml中的'ge')。

+0

我们已经添加了一个新字段(称为ModifiedOnTick)实体,并在该字段中以固定日期(2011-01-01)记录以毫秒为单位的时间差。 – Behnam