我遇到了从自定义工作流活动创建合同的问题。合约从相关实体的字段中获取它的活动日期。在设置为合同的活动日期之前,将删除日期的时间部分。这似乎按预期工作,但代码正在为合同创建难以理解的日期。有没有人有这方面的经验?
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 date设置了activeonutc字段,但我的理解是CRM根据用户设置处理转换为UTC。
感谢。
答案 0 :(得分:1)
所以我在这篇精彩的博文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()方法。