0

我有一个自定义 aspx 应用程序,它直接查询 CRM 数据库基表(例如 ActivityPointer)以获取诸如截止日期、创建日期等数据。自定义 aspx 页面需要根据特定日期范围过滤数据,例如今天,最后 7天等。它通过执行存储在 CRM 数据库中的自定义存储过程来实现。但是,我面临着用户时区问题获取正确数据的挑战。

DECLARE @StartDate DATETIME;
DECLARE @EndDate DATETIME;
DECLARE @NoOfDay INT= 7 -- passed as param
SET @StartDate = DATEADD(day, DATEDIFF(day, @NoOfDays-1, GETDATE()), 0)
SET @EndDate = DATEADD(day, DATEDIFF(day, - 1, GETDATE()), 0) 

这将始终根据运行 sql 实例的机器时区返回 startdate 和 enddate。设置开始日期/结束日期的正确方法是什么,以便它还考虑用户时区设置?我认为我不能使用 CRM 特定功能,例如 dbo.fn_UTCToLocalTime() 等,因为我的自定义 aspx 将使用不同的帐户来访问/执行存储过程。

4

2 回答 2

1

除了直接 SQL 调用可能有点矫枉过正之外,我只需将 SP 更改为接受开始和结束日期,并发送您希望将结果限制为的日期的 UTC 版本

于 2013-08-16T19:52:42.933 回答
0

你真的不应该直接打桌子。CRM 提供了一大堆添加额外字段的视图(并满足安全角色等)。

如果您查看视图,您应该会找到 FilteredActivityPointer。然后,此视图将根据您当前的用户格式化日期时间并调整时区。

Filtered* 视图应用于所有报告

于 2013-08-16T06:04:09.330 回答