CRM 2011 合同 ActiveOn 日期问题

CRM 2011 Contract ActiveOn Date Issues

我在从自定义工作流程创建合同时遇到问题 activity。合同从相关实体的字段中获取它的激活日期。日期的时间部分在被设置为合同的活动日期之前被删除。这似乎按预期工作,但代码为合同创建了不稳定的日期。有人有这方面的经验吗?

DateTime startDate;
DateTime endDate;
Anh_home home = <<Get record from service>>;

startDate = home.Anh_ActualPossessionDate.GetValueOrDefault().Date;
endDate = startDate.AddYears(contractDuration).Date.AddSeconds(-1);

newContract = new Contract()
    {
        Title = contractName,
        anhwp_Home = home.ToEntityReference(),
        CustomerId = home.Anh_CompanyId,
        ActiveOn = startDate,
        ExpiresOn = endDate,
        BillingCustomerId = home.Anh_CompanyId,
        BillingStartOn = startDate,
        BillingEndOn = endDate,
        ContractTemplateId = dataContext.ContractTemplateSet.FirstOrDefault(x => x.Abbreviation == "HWC").ToEntityReference()
    };

newContract.Id = service.Create(newContract);

以下是对筛选视图的查询结果。似乎 activeon 日期正在设置 activeonutc 字段,但我的理解是 CRM 根据用户设置处理到 UTC 的转换。

谢谢。

所以我在这个很棒的博客上偶然发现了我的问题的答案 post https://community.dynamics.com/crm/b/develop1/archive/2011/12/06/dynamics-crm-datetimes-the-last-word

似乎当您通过 SDK 从 CRM 检索数据时,日期总是以 UTC 格式发送,但您可以以本地时间或 UTC 格式发送数据。我遇到的问题是,我将从其他实体检索到的日期视为当地时间,而实际上它是 UTC。因此,当我保存我的新合同时,CRM 正确地采用了我提供的 UTC 时间并将其转换为当地时间。

为了解决这个问题,我只是调用了检索记录的 DateTime 对象的 .ToLocalTime() 方法。