在我们的 Dynamics 365 中,对于每个项目 - 我们都显示创建日期字段。该字段实质上表示项目的创建日期。
但是,我们应该显示项目的持续时间。
像在许多地方一样,我们在 Stackoverflow 上有这些:
- n 分钟前提问
- 前 n 天问过
- n 周前询问
- n 个月前问过
- 等等...
我们想展示:
- n 分钟前创建
- 创建于 n 天前
- 创建于 n 周前
- 创建于 n 个月前
- 等等...
我们如何计算 Dynamics CRM 365 中的项目工期?
在我们的 Dynamics 365 中,对于每个项目 - 我们都显示创建日期字段。该字段实质上表示项目的创建日期。
但是,我们应该显示项目的持续时间。
像在许多地方一样,我们在 Stackoverflow 上有这些:
我们想展示:
我们如何计算 Dynamics CRM 365 中的项目工期?
如果您只需要为显示目的计算的字段,您可以执行以下操作
我的代码正在做的是拦截要在 CRM 中显示的联系人记录。这意味着在网格、表单、仪表板等中。然后它将当场计算时差并用结果填充字段。然后通过在 OutputParameters 中填充实体对象,前端接收这些值并可以在适当的位置显示它们。
这里唯一的缺点是,因为这些字段是直接在 CRM 中计算的,所以您将无法编写任何 SSRS 报告,因为数据没有保存到数据库中。如果您要实现这一点,然后对这些字段进行 SQL 查询,您会发现它们全部为空。这些字段仅充当占位符。(见截图)
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();
}
证据:
我假设您只需要在表格上使用它。在数据库中,您显然存储了实际创建的日期。
这通常是如何在网站上根据给定的日期时间在 JS 中计算的。使用像这样的库http://timeago.yarp.com/
您在 CRM 中执行此操作的方式完全相同。* 创建一个简单的 web 资源,它从它的父级获取 createdon 并使用上面的脚本显示“timeago”。* 将createdon放在表单上(可以隐藏,没关系)。* 将网络资源放在表单上。如果您希望它看起来像一个表单域,请添加一个标签并将其设为 1 行。