【发布时间】:2012-07-07 01:50:16
【问题描述】:
我们的一个程序允许用户通过选择一个视图然后点击功能区按钮来批量插入相关记录。保存表单,设置标志,然后插件完成其工作。
我们使用带有视图选择器的子网格来让用户动态选择或创建自己的视图。选择视图后,将显示结果数(提供 lte 5k)。
当插件运行相同的 fetchxml 服务器端(检索用户查询或保存查询,然后检索 + FetchExpression)时,结果会发生变化。我们不仅得到不同数量的记录,而且有些记录也不同。
我们得出结论,该问题与时区有关。一些过滤器包括“on-or-after”运算符以及日期值。 示例:
<filter type="and">
<condition attribute="modifiedon" operator="on-or-after" value="2011-01-01" />
<condition attribute="modifiedon" operator="on-or-before" value="2011-12-31" />
</filter>
插件以管理员身份运行。更改插件用户无效 - 就好像使用 FetchExpression 从 CRM 提取记录时不考虑当前用户时区一样。
如何确保 fetchxml 表达式在客户端和服务器端返回相同的结果?
可能相关:MSDN thread。
感谢您的宝贵时间。
编辑:按照 Daryl 的建议,我运行了 SQL 跟踪。结果令人费解。客户端查询的日期正确偏移(从 CRM 运行,即高级查找) - 这意味着使用用户的时区设置正确翻译了 fetchxml。对于服务器端的相同查询,这不会发生;输出 SQL 包含“原样”的日期过滤器,没有时区偏移。我假设无论查询执行上下文的来源如何,都会发生相同的翻译。
编辑 2:隐藏代码区域中的一个标志(我最后的调试手段)阻止插件在运行用户的上下文中实例化服务。现在一切运行良好。感谢大家的时间和帮助,非常感谢。
【问题讨论】:
-
可能不是,但值得确认它不是安全权限问题。当您以管理员和用户身份查询时,您会看到更多记录吗?您是否为您在此处使用的用户分配了管理员安全角色?
-
你是说这两个 fetch 语句不完全相同,因为一个包含“on-or-after”和“on-or-before”而另一个使用了其他内容?
-
@BenPatterson1,首先注意到此问题的用户和我自己的用户都具有管理员级别的权限。感谢您的评论。
-
@PaulWay:澄清一下,fetchxml 碰巧包括上面的日期运算符。我从高级视图编辑器下载了 fetchxml,然后在服务器端提取它,最后我通过 IE 调试器从表单中的网格控件中提取它——它们都匹配。结果不会,具体取决于执行 fetchxml 的位置。谢谢。
-
@Raine 好的,并进一步澄清...您从两个位置(或特别是同一用户)运行它,得到不同的结果?
标签: plugins dynamics-crm-2011 fetchxml