Microsoft Dynamics CRM 内部时钟(BD 或 IIS)?

Microsoft Dynamics CRM internal clock (BD or IIS)?

我们有一个应用程序使用来自 Dynamics CRM 的数据并执行一些查询以在特定日期和时间之后检索数据。

了解什么时钟使用 Dynamics CRM 为其记录设置日期对我们很重要。例如,当它创建一个新的机会时,createdon 日期来自哪里?

日期和时间是否基于 CRM 所在的 Web 服务器的时钟 运行,是否基于存储 CRM 数据库的 SQL 服务器,其他?

Dynamics CRM 在时间方面非常简单:它仅使用 System.DateTime.Now 属性,读取服务器的 built-in 时钟。

查询CRM数据好像只到秒。如果您在 CRM 中创建了一些记录(没有覆盖 createdon),然后查询它们的 createdon 日期,您将得到类似的值(我使用 ISO 8601 standardToString("o") 格式化程序打印):

2017-01-19T21:33:12.0000000Z
2017-01-19T21:27:02.0000000Z
2017-01-19T20:12:54.0000000Z

似乎还有一个开放的 CrmIdea item to start recording milliseconds in these type of timestamps

我从未见过关于这个问题的任何实际文档。通过查看 SQL 跟踪和 CRM 服务器 DLL 的一些反编译,我可以推断出以下内容。

我不确定在 Dynamics CRM 中是否只有一种方法可以生成 date/time 值。

例如,有一个存储过程用于创建 WebResource,它使用 SQL 服务器的函数来获取 utc 时间。在这种情况下,时间将是托管 SQL.

的服务器的时钟时间

这不适用于 creating/updating 实体记录。在这种情况下,时间作为 INSERT 命令的一部分传递。我不相信 CRM 会先调用 SQL 服务器的时间,因此这个时间来自 CRM Web front-end 服务器(如果 Create/Update 操作正在执行,则为异步服务器异步放置。).NET 提供 UTC 时间值,我不相信会发生时间值的显式转换以在 Create 和 Update 上填充这些值。有删除毫秒部分的明确操作。

如果您使用 OverrideCreatedOn,那么该值完全由您决定(只要它在 CRM 可接受的范围内),但它会截断毫秒数。

Dynamics CRM 根据系统设置存储 date/time。但是,当它存储在 CRM 数据库中时,根据 SQL 服务器的 Windows 服务器时间将其存储为 UTC+ 0。