首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态CRM 365中项目工期的计算

动态CRM 365中项目工期的计算
EN

Stack Overflow用户
提问于 2016-11-08 11:37:31
回答 2查看 459关注 0票数 1

在我们的Dynamic365中,对于每个项目,我们将显示在 date字段上创建的。此字段实质上表示创建项目的日期。

然而,我们应该展示项目的持续时间。

与许多地方一样,我们在Stackoverflow上也有这样的内容:

  • 一分钟前被问到
  • 前一天发问
  • 一周前被问到的
  • 月前被问到
  • 等等..。

我们想要展示:

  • N分钟前创建的
  • 一天前创建的
  • N周前创建的
  • 月前创建的
  • 等等..。

如何计算动态CRM 365中的项目工期?

Running jobs is not an option for us

EN

回答 2

Stack Overflow用户

发布于 2016-11-09 11:57:19

如果您只需要为显示目的计算字段,则可以执行以下操作

  1. 创建新字段
  2. 在项目实体的Post检索和RetrieveMultiple上注册一个新插件
  3. 从下面的代码中复制逻辑,在需要时交换实体/字段名。

我的代码是在CRM中显示联系人记录时拦截它们。这意味着在网格、表单、仪表板等中,它将在现场计算时差,并将结果填充到字段中。然后在OutputParameters中填充实体对象,前端接收这些值,并在适当的地方显示它们。

这里唯一的缺点是,由于这些字段是在CRM中直接计算的,因此您将无法编写任何SSRS报告,因为数据不会被持久化到数据库。如果要实现这一点,然后对这些字段执行SQL查询,则会发现它们都为空。这些字段只是作为占位符。(见截图)

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-02-15 11:15:02

我想你只需要在表格上写上这个。在DB中,您显然存储了实际创建的日期。

通常如何在网站上这样做,是根据给定的日期时间在JS中计算的。使用像这个http://timeago.yarp.com/这样的库

您如何在CRM中这样做是完全一样的。*创建一个简单的web资源,它从它的父节点获取所创建的内容,并使用上面的脚本显示"timeago“。*将造物放在表格上(可以隐藏,不重要)。*把网页资源放在表格上。添加一个标签,如果您希望它看起来像一个表单字段,那么将它变成1行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40485948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档