当我将CalendarRule提交到CRM的工作时间时,StartTime会在提交到数据库之前进行更改。我通过下面的代码提交CalendarRule。提交的StartTime相差-2小时。我怀疑这与我住在+1 GMT时区并且我们的时钟设置为dayligt时间节省这一事实有关。
var calendarFrequenceRule = new CalendarRule
{
Duration = 24 * 60, //24 hours
ExtentCode = 1,
StartTime = start.Date,
Pattern =
new CalendarRulePattern
{
ByDay = new List<DayOfWeek> {start.DayOfWeek},
Interval = 1,
Frequency = CalendarRulePattern.FrequencyEnum.WEEKLY
}.ToString(),
Rank = 0,
TimeZoneCode = userSettings.TimeZoneCode,
InnerCalendarId = new EntityReference(Calendar.EntityLogicalName, innerCalendarId),
};
calendarRules.Clear();
calendarRules.Add(calendarFrequenceRule);
userCalendarEntity.CalendarRules = calendarRules;
OrganizationService.Update(userCalendarEntity);
var calendarTimeRule = new CalendarRule
{
//Name = name,
//Description = name,
Duration = (int)(end - start).TotalMinutes,
Effort = 1.0,
IsSimple = true,
Offset = (int)(start - start.Date).TotalMinutes,
Rank = 0,
TimeCode = (int)TimeCode.Available,
SubCode = (int)SubCode.Schedulable,
TimeZoneCode = -1,
CalendarId = new EntityReference(Calendar.EntityLogicalName, innerCalendarId),
};
calendarRules.Add(calendarTimeRule);
newInnerCalendar.CalendarRules = new List<CalendarRule> {calendarTimeRule};
OrganizationService.Update(newInnerCalendar);
当我通过下面的代码再次检索时间时,时间关闭了4个小时。我已经检查过所有用户的时区设置都设置为相同的时区 - 但无济于事。当我查看数据库时,我可以看到通过代码提交的时区与我通过GUI插入的日历规则相同。
检索CalendarRule的代码:
var user = OrganizationService.Retrieve<SystemUser>(userId);
var expandCalendarRequest = new ExpandCalendarRequest
{
CalendarId = user.CalendarId.Id,
Start = start,
End = end,
};
var response = OrganizationService.Execute<ExpandCalendarResponse>(expandCalendarRequest);
return response.result;
答案 0 :(得分:1)
无论何时使用SDK或Odata端点将DateTime插入CRM,它都会假定它是UTC。如果您通过javascript更新字段,它将假定它是当前用户的时间。我不确定您目前正在使用哪种情况,但除非您正在编辑实际表单中的字段,否则始终使用UTC。
请参阅此答案:https://stackoverflow.com/a/22787954/227436,了解在CRM中使用Time的概述。
这个答案有一个在你的情况下可能有用的功能: https://stackoverflow.com/a/11367508/227436