【问题标题】:CRM OData DateTime Timezone IssueCRM OData DateTime 时区问题
【发布时间】:2017-06-05 13:24:13
【问题描述】:

我遇到了一个问题,即 CRM 似乎没有使用 OData 正确处理 DateTime。具体来说,我们正在尝试使用对 CrmRestKit 的 JavaScript 调用创建一个名为 new_vod 的自定义记录,其中包含开始时间和结束时间(以及为简单起见,我已从此处删除的一些其他属性)。当执行此功能的用户与服务器不在同一时区时,无论服务器与用户之间的偏移量如何,时间都是不正确的。

例如,如果我的 CRM 用户在山区时间并且服务器在东部时间,那么在查看 CRM 中新创建的记录时,开始时间将是从现在开始的 2 小时(即使应该是现在)。用户计算机的时区似乎对结果没有任何影响。 (我将“new_starttime”与“Created On”时间进行比较,以确认我不只是查看数据错误,并且在这种情况下,创建的时间是开始时间前 2 小时)。

这里是相关的sn-p:

var startTime = new Date();

//Add 90 minutes to the current date/time
var endTime = new Date();
endTime.setMinutes(startTime.getMinutes() + 90);

//Create a cvt_VOD record
var newVOD = {
    'new_starttime': startTime,
    'new_endtime': endTime
};

var createdVOD = CrmRestKit.Create('new_vod', newVOD)
...

我注意到,当我在 pre-stage 插件中调试 new_vod 记录的创建时,到 UTC 的“转换”已经不正确,所以这让我相信 Rest Call 本身是不正确的。

谁能解释为什么会发生这种情况?

仅供参考,我们正在使用 CRM 2015 内部部署。

【问题讨论】:

    标签: javascript dynamics-crm dynamics-crm-2015


    【解决方案1】:

    【讨论】:

    • 感谢您的回复。当我最初调查这个问题时,我看到了这个页面。在我看来它是不完整的。似乎在做核心工作的函数接受一个名为“currentAccount”的输入参数,并且该参数的 DateTime 值似乎已经被转换。我想看看转换是如何完成的。另一个缺点是此解决方案要求用户选择没有任何时区的 DateTime,而不是立即以编程方式获取时间。
    • 我有点不清楚这里的建议是什么。有 3 个警报,所以我尝试将进入这些警报的值替换为 startDate 和 EndDate。我的结果:第一个是我一直在尝试的,所以结果是一样的,第二个警报以相同的结果结束,第三个导致时间相差几个小时。
    • 基本上,CRM 服务器上下文采用您传递的日期时间并转换为 UTC 以存储在数据库中。如果您使用 datetime.now 从客户端传递日期时间,则将采用机器设置。因此,您必须对其进行逆向工程以匹配服务器时间。我让 jsfiddle 玩弄 .toISOString() 和 .getTimezoneOffset() 来逆向工程你想要的。清除吗?
    猜你喜欢
    • 2011-03-28
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    相关资源
    最近更新 更多