在我们的Dynamics 365中,对于每个项目 - 我们将显示创建日期日期字段。该字段基本上代表创建项目的日期。
但是,我们应该显示项目的持续时间。
与许多地方一样,我们在Stackoverflow上有这些:
我们希望展示:
我们如何计算Dynamics CRM 365中项目的持续时间?
答案 0 :(得分:1)
如果您只是需要为显示目的而计算的字段,您可以执行类似这样的操作
我的代码正在做的是拦截联系人记录,只要他们要在CRM中显示。这意味着在网格,表格,仪表板等中。然后它将计算现场的时差并用结果填充字段。然后在OutputParameters中填充实体对象,前端接收这些值并在适当的位置显示它们。
这里唯一的缺点是,因为这些字段是直接在CRM中计算的,所以您将无法编写任何SSRS报告,因为数据未持久保存到数据库中。如果你要实现这个,然后对这些字段进行SQL查询,你会发现它们都是null。这些领域仅仅作为占位符。 (见截图)
protected void ExecutePreValidateContactRetrieve(LocalPluginContext localContext)
{
if (localContext == null)
{
throw new ArgumentNullException("localContext");
}
IPluginExecutionContext pluginContext = localContext.PluginExecutionContext;
if (pluginContext.OutputParameters.Contains("BusinessEntity"))
{
Entity target = (Entity)pluginContext.OutputParameters["BusinessEntity"];
PopulateKPIs(localContext.OrganizationService, target);
}
else if (pluginContext.OutputParameters.Contains("BusinessEntityCollection"))
{
EntityCollection contacts = (EntityCollection)localContext.PluginExecutionContext.OutputParameters["BusinessEntityCollection"];
foreach (Entity c in contacts.Entities)
PopulateKPIs(localContext.OrganizationService, c);
}
}
public void PopulateKPIs(IOrganizationService orgService, Entity contact)
{
DateTime createdOn;
if (!contact.Contains("createdon"))
createdOn = orgService.Retrieve(contact.LogicalName, contact.Id, new ColumnSet("createdon")).GetAttributeValue<DateTime>("createdon");
else
createdOn = contact.GetAttributeValue<DateTime>("createdon");
TimeSpan diff = DateTime.Now - createdOn;
contact["mst_secondssincecreation"] = Math.Floor(diff.TotalSeconds).ToString();
contact["mst_minutessincecreation"] = Math.Floor(diff.TotalMinutes).ToString();
contact["mst_hourssincecreation"] = Math.Floor(diff.TotalHours).ToString();
}
证据:
答案 1 :(得分:0)
我假设您只需要在表单上使用此功能。在数据库中,您显然可以存储实际创建日期。
如何在网站上正常进行此操作是基于给定的日期时间在JS中计算的。使用像这样的库http://timeago.yarp.com/
你在CRM中如何做到这一点是完全一样的。 *创建一个简单的网络资源,从父母的父母那里获取创建并显示&#34; timeago&#34;使用上面的脚本。 *将创建的内容放在表单上(可以隐藏,不重要)。 *将Web资源放在表单上。如果您希望它看起来像表单字段,请添加标签并将其设为1行。