我有一个自定义的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将使用不同的帐户来访问/执行sproc。
答案 0 :(得分:1)
除了可能直接的SQL调用对此有点矫枉过正之外,我只是将SP更改为接受开始日期和结束日期,并将要约束结果的日期的UTC版本发送到
答案 1 :(得分:0)
你真的不应该直接击中桌子。 CRM提供了一大堆视图,可以添加其他字段(并且可以满足安全角色等)。
如果你查看视图,你应该找到FilteredActivityPointer。然后,此视图将根据您当前的用户调整日期时间格式和时区。
Filtered *视图应该用于所有报告